PageApproval.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. <BasicSearch
  10. :searchConfig="EMERGENCY_PLAN_APPROVAL_SEARCH_CONFIG"
  11. :searchData="searchData"
  12. @update:searchData="handleSearch"
  13. />
  14. </header>
  15. <BasicTable
  16. :tableData="tableData"
  17. :tableConfig="tableConfig"
  18. @update:pageSize="handleSizeChange"
  19. @update:pageNumber="handleCurrentChange"
  20. >
  21. <template #planType="scope">
  22. <span>{{ getPlanType(scope.row.planType) }}</span>
  23. </template>
  24. <template #eventType="scope">
  25. <span>{{ getEmergencyEvent(scope.row.eventType) }}</span>
  26. </template>
  27. <template #approvalStatus="scope">
  28. <span>{{ getEmergencyPlanApproStatusLabel(scope.row.status) }}</span>
  29. </template>
  30. <template #appendix="scope">
  31. <span class="appendix" v-if="scope.row.appendix" @click="handlePreviewScript(scope.row.appendix)">
  32. 预览
  33. </span>
  34. <span v-else>--</span>
  35. </template>
  36. <template #action="scope">
  37. <div class="action-container--div">
  38. <ActionButton text="审批" @click="handleApproval(scope.row.id, scope.row.approvalOrder)" />
  39. </div>
  40. </template>
  41. </BasicTable>
  42. </div>
  43. </div>
  44. <PreviewOnline ref="previewOnlineRef" />
  45. </div>
  46. <BasicDialog ref="basicDialogRef" title="审批">
  47. </BasicDialog>
  48. </template>
  49. <script setup lang="ts">
  50. import { ref, reactive, onMounted } from 'vue';
  51. import { ElMessage } from 'element-plus';
  52. import BasicSearch from '@/components/BasicSearch.vue';
  53. import BasicTable from '@/components/BasicTable.vue';
  54. import BasicDialog from '@/components/BasicDialog.vue';
  55. import ActionButton from '@/components/ActionButton.vue';
  56. import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
  57. import useTableConfig from '@/hooks/useTableConfigHook';
  58. import { useEmergencyHook } from '../src/hoos';
  59. import { useEmergencyPlanHook } from './src/hook';
  60. import type { QueryPageRequest } from '@/types/basic-query';
  61. import type { PlanApprovalListQuery, PlanApprovalListResponse } from '@/types/emergency-plan';
  62. import { getEmergencyApprovalList } from '@/api/emergency-plan';
  63. import {
  64. EMERGENCY_PLAN_APPROVAL_SEARCH_CONFIG,
  65. EMERGENCY_PLAN_APPROVAL_TABLE_OPTIONS,
  66. EMERGENCY_PLAN_APPROVAL_TABLE_COLUMNS,
  67. } from './src/config';
  68. import { FILE_TYPE_ICON } from '@/views/disaster/constant';
  69. const { tableConfig, pagination } = useTableConfig(
  70. EMERGENCY_PLAN_APPROVAL_TABLE_COLUMNS,
  71. EMERGENCY_PLAN_APPROVAL_TABLE_OPTIONS,
  72. );
  73. const { getEmergencyEventDict, getEmergencyEvent } = useEmergencyHook();
  74. const { getPlanTypeDict, getPlanType, getEmergencyPlanApproStatusLabel } = useEmergencyPlanHook();
  75. let planApprovalListQuery: QueryPageRequest<PlanApprovalListQuery> = {
  76. pageNumber: pagination.pageNumber,
  77. pageSize: pagination.pageSize,
  78. queryParam: {},
  79. };
  80. const tableData = ref<PlanApprovalListResponse[]>([]);
  81. const searchData = reactive({
  82. approvalStatus: null,
  83. });
  84. const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
  85. const basicDialogRef = ref<InstanceType<typeof BasicDialog>>();
  86. const handleSearch = () => {
  87. planApprovalListQuery.queryParam = {};
  88. if (searchData.approvalStatus) {
  89. planApprovalListQuery.queryParam.approvalStatus = searchData.approvalStatus;
  90. }
  91. getTableData();
  92. };
  93. const getTableData = async () => {
  94. tableConfig.loading = true;
  95. const res = await getEmergencyApprovalList(planApprovalListQuery);
  96. tableData.value = res.records;
  97. pagination.total = res.totalRow;
  98. tableConfig.loading = false;
  99. };
  100. const handleSizeChange = (value: number) => {
  101. pagination.pageSize = value;
  102. planApprovalListQuery.pageSize = value;
  103. getTableData();
  104. };
  105. const handleCurrentChange = (value: number) => {
  106. pagination.pageNumber = value;
  107. planApprovalListQuery.pageNumber = value;
  108. getTableData();
  109. };
  110. const handlePreviewScript = (appendix: string) => {
  111. const file = JSON.parse(appendix)[0];
  112. previewOnlineRef.value?.open(file.fileUrl, file.fileType as keyof typeof FILE_TYPE_ICON);
  113. };
  114. const currentId = ref<number>();
  115. const currentOrder = ref<number>();
  116. const handleApproval = (id: number, approvalOrder: number) => {
  117. currentId.value = id;
  118. currentOrder.value = approvalOrder;
  119. basicDialogRef.value?.openDialog();
  120. };
  121. onMounted(() => {
  122. getPlanTypeDict();
  123. getEmergencyEventDict();
  124. getTableData();
  125. });
  126. </script>
  127. <style scoped lang="scss">
  128. @use '@/styles/page-details-layout.scss' as *;
  129. @use '@/styles/page-main-layout.scss' as *;
  130. @use '@/styles/basic-table-action.scss' as *;
  131. .appendix {
  132. cursor: pointer;
  133. color: $primary-color;
  134. }
  135. </style>