Sfoglia il codice sorgente

fix: 应急演练预案部分补充

wyf 8 mesi fa
parent
commit
398c8be8b1

+ 17 - 2
src/views/emergency/emergency-drill/components/DrillActivity.vue

@@ -55,9 +55,13 @@
           </div>
         </el-col>
         <el-col :span="8">
-          <div class="drill-container__content--item">
+          <div class="drill-container__content--item" v-if="drillPlanItemDetail.emergencyPlanAppendix">
             <span class="label">关联应急预案:</span>
-            <span class="value font-primary">应急预案还没做</span>
+            <span
+              class="value font-primary link"
+              @click="handlePreviewFile(drillPlanItemDetail.emergencyPlanAppendix)"
+              >{{ JSON.parse(drillPlanItemDetail.emergencyPlanAppendix)[0].fileName }}</span
+            >
           </div>
         </el-col>
       </el-row>
@@ -79,8 +83,11 @@
   import { DrillPlanItemDetail } from '../types';
   import { ApprovalInstanceType } from '@/views/system/approval/types';
   import { getAllApproval } from '@/api/approval/approval';
+  import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
+  import { FILE_TYPE_ICON } from '@/views/disaster/constant';
 
   const approvalList = ref<ApprovalInstanceType[]>([]);
+  const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
   const { getDrillScopeDict, getDrillScope } = useEmergencyDrillHook();
   const safatyJsonParse = (str: string) => {
     return str.slice(1, -1).split(',');
@@ -91,6 +98,14 @@
   const getApprovalName = (id: number) => {
     return approvalList.value.find((item) => item.id === id)?.templateName;
   };
+  const handlePreviewFile = (str: string) => {
+    const obj = JSON.parse(str);
+    const file = Array.isArray(obj) ? obj[0] : obj;
+    const url = file.fileUrl;
+    const type = file.fileType as keyof typeof FILE_TYPE_ICON;
+    if (!url) return;
+    previewOnlineRef.value?.open(url, type);
+  };
   defineProps<{
     drillPlanItemDetail: DrillPlanItemDetail;
   }>();

+ 16 - 11
src/views/emergency/emergency-drill/components/DrillPlanExecuteItem.vue

@@ -58,11 +58,11 @@
             </div>
           </el-col>
           <el-col :span="8">
-            <div class="drill-container__content--item">
+            <div class="drill-container__content--item" v-if="drillData.emergencyPlanAppendix">
               <span class="label">关联应急预案:</span>
-              <a v-if="emergencyPlanDetail" class="value font-primary" :href="emergencyPlanDetail.appendix">{{
-                emergencyPlanDetail.planName
-              }}</a>
+              <span class="value font-primary link" @click="handlePreviewFile(drillData.emergencyPlanAppendix)">{{
+                JSON.parse(drillData.emergencyPlanAppendix)[0].fileName
+              }}</span>
             </div>
           </el-col>
         </el-row>
@@ -100,7 +100,6 @@
   import DrillPlanExecuteForm from './DrillPlanExecuteForm.vue';
   import {
     queryEmergencyDrillPlanDetail,
-    queryEmergencyPlanDetail,
     saveEmergencyDrillExecute,
     submitEmergencyDrillExecute,
   } from '@/api/emergency-drill/emergency-drill';
@@ -108,12 +107,14 @@
   import type { FileItem } from '@/views/disaster/types';
   import { uploadFileApi, UPLOAD_BIZ_TYPE } from '@/api/minio';
   import { useEmergencyDrillHook } from '../hook';
+  import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
+  import { FILE_TYPE_ICON } from '@/views/disaster/constant';
 
   const route = useRoute();
   const id = route.query.id;
   const approvalList = ref();
-  const emergencyPlanDetail = ref();
   const drillData = ref<DrillPlanItemDetail>();
+  const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
 
   const { drillScopeDice, getDrillScopeDict, getDrillScope } = useEmergencyDrillHook();
 
@@ -123,11 +124,6 @@
   async function getDrillData() {
     try {
       drillData.value = await queryEmergencyDrillPlanDetail(id);
-
-      // 获取应急预案名
-      if (drillData.value.emergencyPlanId) {
-        emergencyPlanDetail.value = await queryEmergencyPlanDetail(id);
-      }
     } catch (e) {
       console.log(e);
     }
@@ -167,6 +163,15 @@
     };
   };
 
+  const handlePreviewFile = (str: string) => {
+    const obj = JSON.parse(str);
+    const file = Array.isArray(obj) ? obj[0] : obj;
+    const url = file.fileUrl;
+    const type = file.fileType as keyof typeof FILE_TYPE_ICON;
+    if (!url) return;
+    previewOnlineRef.value?.open(url, type);
+  };
+
   async function executeSaveOrSubmit(mode: string) {
     if (!drillPlanExecuteFormRef.value) return;
     // drillPlanExecuteFormRef.value.handleClearValidate();