PageEmergencyList.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  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
  10. type="primary"
  11. class="search-table-container--button"
  12. :icon="Plus"
  13. @click="handleAddSupply"
  14. v-if="emergencySupplyPermissions"
  15. >添加物资
  16. </el-button>
  17. <el-button
  18. type="primary"
  19. class="search-table-container--button"
  20. v-if="emergencySupplyPermissions"
  21. @click="handleInventory"
  22. >
  23. <template #icon>
  24. <SvgIcon iconName="inventory-check" />
  25. </template>
  26. 发起盘点
  27. </el-button>
  28. <BasicSearch
  29. :searchConfig="SUPPLY_LIST_SEARCH_CONFIG"
  30. :searchData="searchData"
  31. @update:searchData="handleSearch"
  32. >
  33. <template #emergencyType>
  34. <el-select v-model="searchData.emergencyType" placeholder="请选择应急事件类型" filterable>
  35. <el-option
  36. v-for="item in emergencyEventDice"
  37. :key="item.itemCode"
  38. :label="item.itemValue"
  39. :value="item.itemCode"
  40. />
  41. </el-select>
  42. </template>
  43. <template #supplyType>
  44. <el-select v-model="searchData.supplyType" placeholder="请选择物资类型" filterable>
  45. <el-option
  46. v-for="item in emergencySupplyDice"
  47. :key="item.itemCode"
  48. :label="item.itemValue"
  49. :value="item.itemCode"
  50. />
  51. </el-select>
  52. </template>
  53. <template #park>
  54. <el-select v-model="searchData.park" placeholder="请选择园区">
  55. <el-option
  56. v-for="item in parkDice"
  57. :key="item.itemCode"
  58. :label="item.itemValue"
  59. :value="item.itemCode"
  60. />
  61. </el-select>
  62. </template>
  63. </BasicSearch>
  64. </header>
  65. <BasicTable :tableData="tableData" :tableConfig="tableConfig">
  66. <template #emergencyType="scope">
  67. <span>{{ getEmergencyEvent(scope.row.emergencyType) }}</span>
  68. </template>
  69. <template #supplyType="scope">
  70. <span>{{ getEmergencySupply(scope.row.supplyType) }}</span>
  71. </template>
  72. <template #park="scope">
  73. <span>{{ getPark(scope.row.park) }}</span>
  74. </template>
  75. <template #location="scope">
  76. <span>{{ getLocation(scope.row.location) }}</span>
  77. </template>
  78. <template #status="scope">
  79. <span :style="{ color: scope.row.status === EMERGENCY_SUPPLY_STATUS.DAMAGED ? 'red' : '' }">
  80. {{ getEmergencyStatus(scope.row.status) }}
  81. </span>
  82. </template>
  83. <template #remark="scope">
  84. <div class="remark--div">
  85. <el-tooltip
  86. :content="scope.row.remark"
  87. placement="top"
  88. effect="light"
  89. :popper-class="['custom-tooltip', scope.row.remark.length > 10 ? '' : 'custom-tooltip--opacity0']"
  90. >
  91. <span>{{ scope.row.remark }}</span>
  92. </el-tooltip>
  93. </div>
  94. </template>
  95. <template #action="scope">
  96. <div class="action-container--div">
  97. <ActionButton text="查看" @click="handleViewDetail(scope.row.id)"/>
  98. <ActionButton text="编辑" v-if="emergencySupplyPermissions" @click="handleEditSupply(scope.row.id)" />
  99. <ActionButton
  100. text="删除"
  101. v-if="emergencySupplyPermissions"
  102. :popconfirm="{
  103. title: '确定删除?',
  104. }"
  105. @confirm="handleDeleteSupply(scope.row.id)"
  106. />
  107. </div>
  108. </template>
  109. </BasicTable>
  110. </div>
  111. </div>
  112. </div>
  113. <InventoryTask ref="inventoryTaskRef" />
  114. </template>
  115. <script setup lang="ts">
  116. import { useRouter } from 'vue-router';
  117. import { ref, reactive, onMounted } from 'vue';
  118. import { Plus } from '@element-plus/icons-vue';
  119. import { ElMessage } from 'element-plus';
  120. // @ts-ignore
  121. import SvgIcon from '@/components/SvgIcon/SvgIcon.vue';
  122. import BasicSearch from '@/components/BasicSearch.vue';
  123. import BasicTable from '@/components/BasicTable.vue';
  124. import ActionButton from '@/components/ActionButton.vue';
  125. import InventoryTask from './src/components/InventoryTask.vue';
  126. import {
  127. SUPPLY_LIST_SEARCH_CONFIG,
  128. SUPPLY_LIST_TABLE_COLUMNS,
  129. SUPPLY_LIST_TABLE_OPTIONS,
  130. SUPPLY_LIST_TABLE_MAX_HEIGHT_DEFAULT,
  131. SUPPLY_LIST_TABLE_MAX_HEIGHT_PERMISSION,
  132. } from './src/config';
  133. import useTableConfig from '@/hooks/useTableConfigHook';
  134. import { useUserInfoHook } from '@/hooks/useUserInfoHook';
  135. import { useEmergencySuppliesHook } from './src/hook';
  136. import type { EmergencySupplyListQuery, EmergencySupplyListResponse } from '@/types/emergency-supplier';
  137. import type { QueryPageRequest } from '@/types/basic-query';
  138. import { getEmergencySupplyList, deleteEmergencySupplyList } from '@/api/emergency-supplier';
  139. import { EMERGENCY_PERMISSIONS } from '@/views/emergency/src/constant';
  140. import { EMERGENCY_SUPPLY_STATUS } from './src/constant';
  141. const router = useRouter();
  142. const {
  143. emergencyEventDice,
  144. getEmergencyEventDict,
  145. getEmergencyEvent,
  146. emergencySupplyDice,
  147. getEmergencySupplyDict,
  148. getEmergencySupply,
  149. getEmergencyStatus,
  150. parkDice,
  151. getParkDict,
  152. getPark,
  153. getLocationDict,
  154. getLocation,
  155. } = useEmergencySuppliesHook();
  156. const { permissions } = useUserInfoHook();
  157. const { tableConfig, pagination } = useTableConfig(SUPPLY_LIST_TABLE_COLUMNS, SUPPLY_LIST_TABLE_OPTIONS);
  158. const emergencySupplyPermissions = ref<Boolean>(false);
  159. let emergencySupplyListQuery: QueryPageRequest<EmergencySupplyListQuery> = {
  160. pageNumber: pagination.pageNumber,
  161. pageSize: pagination.pageSize,
  162. queryParam: {},
  163. };
  164. const tableData = ref<EmergencySupplyListResponse[]>([]);
  165. const searchData = reactive({
  166. emergencyType: null,
  167. supplyType: null,
  168. supplyName: null,
  169. park: null,
  170. location: null,
  171. keeperName: null,
  172. status: null,
  173. });
  174. const handleSearch = () => {
  175. emergencySupplyListQuery.queryParam = {};
  176. if (searchData.emergencyType) {
  177. emergencySupplyListQuery.queryParam.emergencyType = searchData.emergencyType;
  178. }
  179. if (searchData.supplyType) {
  180. emergencySupplyListQuery.queryParam.supplyType = searchData.supplyType;
  181. }
  182. if (searchData.supplyName) {
  183. emergencySupplyListQuery.queryParam.supplyName = searchData.supplyName;
  184. }
  185. if (searchData.park) {
  186. emergencySupplyListQuery.queryParam.park = searchData.park;
  187. }
  188. if (searchData.location) {
  189. emergencySupplyListQuery.queryParam.location = searchData.location;
  190. }
  191. if (searchData.keeperName) {
  192. emergencySupplyListQuery.queryParam.keeperName = searchData.keeperName;
  193. }
  194. if (searchData.status !== null) {
  195. emergencySupplyListQuery.queryParam.status = searchData.status;
  196. }
  197. getTableData();
  198. };
  199. const getTableData = async () => {
  200. tableConfig.loading = true;
  201. const res = await getEmergencySupplyList(emergencySupplyListQuery);
  202. tableData.value = res.records;
  203. pagination.total = res.totalRow;
  204. tableConfig.loading = false;
  205. };
  206. const handleDeleteSupply = async (id: number) => {
  207. await deleteEmergencySupplyList(id);
  208. await getTableData();
  209. ElMessage.success('删除成功');
  210. };
  211. const inventoryTaskRef = ref<InstanceType<typeof InventoryTask>>();
  212. const handleInventory = () => {
  213. inventoryTaskRef.value?.openDialog();
  214. };
  215. const defaultRouterName = 'emergency-list-info';
  216. const handleAddSupply = () => {
  217. router.push({
  218. name: defaultRouterName,
  219. query: {
  220. type: 'add',
  221. },
  222. });
  223. };
  224. const handleEditSupply = (id: number) => {
  225. router.push({
  226. name: defaultRouterName,
  227. query: {
  228. id,
  229. },
  230. });
  231. };
  232. const handleViewDetail = (id:number) => {
  233. router.push({
  234. name: 'emergency-list-detail',
  235. params:{
  236. id
  237. }
  238. })
  239. }
  240. onMounted(() => {
  241. getEmergencyEventDict();
  242. getEmergencySupplyDict();
  243. getParkDict();
  244. getLocationDict('all');
  245. getTableData();
  246. emergencySupplyPermissions.value = Boolean(
  247. permissions.find((item: { code: string }) => item.code === EMERGENCY_PERMISSIONS.SUPPLY_LIST),
  248. );
  249. tableConfig.maxHeight = emergencySupplyPermissions.value
  250. ? SUPPLY_LIST_TABLE_MAX_HEIGHT_PERMISSION
  251. : SUPPLY_LIST_TABLE_MAX_HEIGHT_DEFAULT;
  252. });
  253. </script>
  254. <style scoped lang="scss">
  255. @use '@/styles/page-details-layout.scss' as *;
  256. @use '@/styles/page-main-layout.scss' as *;
  257. @use '@/styles/basic-table-action.scss' as *;
  258. @use './src/styles/page-common.scss' as *;
  259. </style>