PageSupplyRequest.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <template>
  2. <div class="safety-platform-container">
  3. <div class="safety-platform-container__header">
  4. <div class="breadcrumb-title">物资申领</div>
  5. </div>
  6. <div class="safety-platform-container__main">
  7. <div class="search-table-container">
  8. <header class="disaster-precaution__header">
  9. <el-button type="primary" class="search-table-container--button" :icon="Plus" @click="handleCreateRequest">
  10. 创建申领计划
  11. </el-button>
  12. <BasicSearch
  13. :searchConfig="SUPPLY_REQUEST_SEARCH_CONFIG"
  14. :searchData="searchData"
  15. @update-search-data="handleSearch"
  16. >
  17. <template #planName>
  18. <el-input
  19. v-model="searchData.planName"
  20. placeholder="请输入物资申领计划"
  21. clearable
  22. @keyup.enter="handleSearch"
  23. />
  24. </template>
  25. </BasicSearch>
  26. </header>
  27. <BasicTable
  28. :tableData="tableData"
  29. :tableConfig="tableConfig"
  30. @update-page-size="handleSizeChange"
  31. @update-page-number="handleCurrentChange"
  32. >
  33. <template #status="scope">
  34. <span>{{ getStatusText(scope.row.status) }}</span>
  35. </template>
  36. <template #action="scope">
  37. <div class="action-container--div">
  38. <ActionButton text="详情" @click="handleViewDetail(scope.row.id)" />
  39. <template v-if="scope.row.status === SUPPLY_REQUEST_STATUS.APPLYING">
  40. <ActionButton text="发起采购" @click="handleStartPurchase(scope.row.id, scope.row.purchaseDate)" />
  41. <ActionButton
  42. text="编辑"
  43. @click="handleEdit(scope.row.id, scope.row.planName, scope.row.purchaseDate)"
  44. />
  45. <ActionButton
  46. text="删除"
  47. :popconfirm="{
  48. title: '确定删除?',
  49. }"
  50. @confirm="handleDelete(scope.row.id)"
  51. />
  52. </template>
  53. <template
  54. v-else-if="
  55. scope.row.status === SUPPLY_REQUEST_STATUS.PURCHASING ||
  56. scope.row.status === SUPPLY_REQUEST_STATUS.RECEIVING
  57. "
  58. >
  59. <ActionButton
  60. text="编辑"
  61. @click="handleEdit(scope.row.id, scope.row.planName, scope.row.purchaseDate)"
  62. />
  63. </template>
  64. </div>
  65. </template>
  66. </BasicTable>
  67. </div>
  68. </div>
  69. </div>
  70. <SupplyRequestForm ref="supplyRequestFormRef" @success="handleFormSuccess" />
  71. <StartPurchaseForm ref="startPurchaseFormRef" @success="handleFormSuccess" />
  72. </template>
  73. <script setup lang="ts">
  74. import { ref, reactive, onMounted } from 'vue';
  75. import { Plus } from '@element-plus/icons-vue';
  76. import { ElMessage } from 'element-plus';
  77. import { useRouter } from 'vue-router';
  78. import BasicSearch from '@/components/BasicSearch.vue';
  79. import BasicTable from '@/components/BasicTable.vue';
  80. import ActionButton from '@/components/ActionButton.vue';
  81. import SupplyRequestForm from './src/components/SupplyRequestForm.vue';
  82. import StartPurchaseForm from './src/components/StartPurchaseForm.vue';
  83. import {
  84. SUPPLY_REQUEST_SEARCH_CONFIG,
  85. SUPPLY_REQUEST_TABLE_COLUMNS,
  86. SUPPLY_REQUEST_TABLE_OPTIONS,
  87. SUPPLY_REQUEST_TABLE_MAX_HEIGHT_DEFAULT,
  88. } from './src/config';
  89. import useTableConfig from '@/hooks/useTableConfigHook';
  90. import { SUPPLY_REQUEST_STATUS, SUPPLY_REQUEST_STATUS_MAP } from './src/constant';
  91. import type { QueryPageRequest } from '@/types/basic-query';
  92. import type { SupplyRequestListQuery, SupplyRequestListItem } from '@/types/emergency-supplier';
  93. import { getSupplyRequestList, deleteSupplyRequest } from '@/api/emergency-supplier';
  94. const router = useRouter();
  95. const { tableConfig, pagination } = useTableConfig(SUPPLY_REQUEST_TABLE_COLUMNS, SUPPLY_REQUEST_TABLE_OPTIONS);
  96. let supplyRequestListQuery: QueryPageRequest<SupplyRequestListQuery> = {
  97. pageNumber: pagination.pageNumber,
  98. pageSize: pagination.pageSize,
  99. queryParam: {},
  100. };
  101. const tableData = ref<SupplyRequestListItem[]>([]);
  102. const searchData = reactive({
  103. planName: '',
  104. status: SUPPLY_REQUEST_STATUS.ALL,
  105. });
  106. const supplyRequestFormRef = ref<InstanceType<typeof SupplyRequestForm>>();
  107. const startPurchaseFormRef = ref<InstanceType<typeof StartPurchaseForm>>();
  108. // 获取状态文本
  109. const getStatusText = (status: number) => {
  110. return SUPPLY_REQUEST_STATUS_MAP[status] || '';
  111. };
  112. // 搜索处理
  113. const handleSearch = () => {
  114. supplyRequestListQuery.queryParam = {};
  115. if (searchData.planName) {
  116. supplyRequestListQuery.queryParam.planName = searchData.planName;
  117. }
  118. if (searchData.status !== null && searchData.status !== SUPPLY_REQUEST_STATUS.ALL) {
  119. supplyRequestListQuery.queryParam.status = searchData.status;
  120. }
  121. getTableData();
  122. };
  123. // 获取表格数据
  124. const getTableData = async () => {
  125. tableConfig.loading = true;
  126. const res = await getSupplyRequestList(supplyRequestListQuery);
  127. tableData.value = res.records;
  128. pagination.total = res.totalRow;
  129. tableConfig.loading = false;
  130. };
  131. // 分页处理
  132. const handleSizeChange = (value: number) => {
  133. pagination.pageSize = value;
  134. supplyRequestListQuery.pageSize = value;
  135. getTableData();
  136. };
  137. const handleCurrentChange = (value: number) => {
  138. pagination.pageNumber = value;
  139. supplyRequestListQuery.pageNumber = value;
  140. getTableData();
  141. };
  142. // 创建申领计划
  143. const handleCreateRequest = () => {
  144. supplyRequestFormRef.value?.openDialog();
  145. };
  146. // 查看详情
  147. const handleViewDetail = (id: number) => {
  148. router.push({
  149. name: 'supply-request-detail',
  150. params: {
  151. id,
  152. },
  153. });
  154. };
  155. // 发起采购
  156. const handleStartPurchase = (id: number, purchaseDate: string) => {
  157. startPurchaseFormRef.value?.openDialog(id, purchaseDate);
  158. };
  159. // 编辑
  160. const handleEdit = (id: number, planName: string, purchaseDate: string) => {
  161. supplyRequestFormRef.value?.openEditDialog({
  162. id: id,
  163. planName: planName,
  164. purchaseDate: purchaseDate,
  165. });
  166. };
  167. // 表单提交成功回调
  168. const handleFormSuccess = () => {
  169. getTableData();
  170. };
  171. // 删除
  172. const handleDelete = async (id: number) => {
  173. await deleteSupplyRequest(id);
  174. await getTableData();
  175. ElMessage.success('删除成功');
  176. };
  177. onMounted(() => {
  178. getTableData();
  179. tableConfig.maxHeight = SUPPLY_REQUEST_TABLE_MAX_HEIGHT_DEFAULT;
  180. });
  181. </script>
  182. <style scoped lang="scss">
  183. @use '@/styles/page-details-layout.scss' as *;
  184. @use '@/styles/page-main-layout.scss' as *;
  185. @use '@/styles/basic-table-action.scss' as *;
  186. @use './src/styles/page-common.scss' as *;
  187. </style>