Parcourir la source

feat: 演练加入预案部分

wyf il y a 8 mois
Parent
commit
4a9342b39b

+ 8 - 1
src/api/emergency-drill/emergency-drill.ts

@@ -30,7 +30,7 @@ export const createEmergencyDrillPlan = (params: CreateEmergencyDrillRuleForm) =
       dueCompleteTime: params.dueCompleteTime,
       responsibleDeptIdList: '[' + params.responsibleDeptIdList?.join(',') + ']',
       coordinateDeptIdList: params.coordinateDeptIdList ? '[' + params.coordinateDeptIdList?.join(',') + ']' : '',
-      preplanId: params.preplanId,
+      emergencyPlanId: params.emergencyPlanId,
       approvalTemplateId: params.approvalTemplateId,
     },
   });
@@ -202,3 +202,10 @@ export const getSignListFile = (drillPlanId: number) => {
     },
   );
 };
+
+export const queryAllEmergencyPlan = () => {
+  return http.request<{ id: number; planName: string; status: number }[]>({
+    url: `/emergencyPlan/queryAllEmergencyPlan`,
+    method: 'get',
+  });
+};

+ 1 - 1
src/views/emergency/emergency-drill/PageDrillPlanList.vue

@@ -50,7 +50,7 @@
                 @click="handleToExecute(scope.row.id)"
               ></ActionButton>
               <ActionButton
-                v-else-if="scope.row.status < 6"
+                v-else-if="scope.row.status < 7"
                 text="演练记录"
                 @click="handleToRecord(scope.row)"
               ></ActionButton>

+ 15 - 10
src/views/emergency/emergency-drill/components/DrillPlanCreateItem.vue

@@ -33,30 +33,26 @@
           collapse-tags
           :show-all-levels="false"
           :max-collapse-tags="3"
+          popper-class="cascader-popper--custom"
           placeholder="请选择配合部门"
         >
         </el-cascader>
       </template>
-      <template #preplanId>
+      <template #emergencyPlanId>
         <el-select
-          v-model="ruleFormData.preplanId"
-          multiple
-          collapse-tags
-          collapse-tags-tooltip
-          :max-collapse-tags="1"
+          v-model="ruleFormData.emergencyPlanId"
           placeholder="请选择应急预案"
+          popper-class="el-scrollbar--custom"
           filterable
-          @change=""
-          class="custom-select"
         >
-          <!-- <el-option v-for="item in firstLevelDepts" :key="item.id" :label="item.deptName" :value="item.id" /> -->
+          <el-option v-for="item in allPlans" :key="item.id" :label="item.planName" :value="item.id" />
         </el-select>
       </template>
       <template #approvalTemplateId>
         <el-select
           v-model="ruleFormData.approvalTemplateId"
           placeholder="请选择审批流程"
-          class="custom-select"
+          popper-class="el-scrollbar--custom"
           filterable
         >
           <el-option v-for="item in allApprovals" :key="item.id" :label="item.templateName" :value="item.id" />
@@ -75,6 +71,7 @@
   import { DeptTree } from '@/types/dept/type';
   import { getAllDepartments } from '@/api/auth/dept';
   import { getAllApproval } from '@/api/approval/approval';
+  import { queryAllEmergencyPlan } from '@/api/emergency-drill/emergency-drill';
   import { ApprovalInstanceType } from '@/views/system/approval/types';
   import { useEmergencyDrillHook } from '../hook';
 
@@ -102,6 +99,13 @@
     deptTree.value = result[0].children;
   };
 
+  // 获取所有预案
+  const allPlans = ref<{ id: number; planName: string; status: number }[]>();
+  const loadAllPlans = async () => {
+    const result = await queryAllEmergencyPlan();
+    allPlans.value = result.filter((item) => item.status === 3);
+  };
+
   // 获取所有审批流程
   const allApprovals = ref<ApprovalInstanceType[]>();
   const loadApprovalData = async () => {
@@ -115,6 +119,7 @@
   onMounted(() => {
     getDrillScopeDict();
     loadDeptTreeData();
+    loadAllPlans();
     loadApprovalData();
   });
 

+ 1 - 1
src/views/emergency/emergency-drill/components/DrillPlanRecordItem.vue

@@ -34,7 +34,7 @@
   async function getDrillData() {
     try {
       recordData.value = await queryEmergencyDrillRecordInEdit(Number(id));
-      if (recordData.value.approvalStatus != null) {
+      if (recordData.value.approvalStatus != null && recordData.value.approvalStatus !== 2) {
         emits('recordSubmitted');
         disableForm.value = true;
       }

+ 15 - 11
src/views/emergency/emergency-drill/components/DrillPlanViewActivities.vue

@@ -54,11 +54,14 @@
             </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">{{
+              <span class="value font-primary link" @click="handlePreviewFile(drillData.emergencyPlanAppendix)">{{
+                JSON.parse(drillData.emergencyPlanAppendix)[0].fileName
+              }}</span>
+              <!-- <a v-if="emergencyPlanDetail" class="value font-primary" :href="emergencyPlanDetail.appendix">{{
                 emergencyPlanDetail.planName
-              }}</a>
+              }}</a> -->
             </div>
           </el-col>
         </el-row>
@@ -102,7 +105,7 @@
           <el-col :span="8">
             <div class="drill-container__content--item" v-if="drillData.drillScript">
               <span class="label">演练脚本:</span>
-              <span class="value font-primary link" @click="handlePreviewScript(drillData.drillScript)">{{
+              <span class="value font-primary link" @click="handlePreviewFile(drillData.drillScript)">{{
                 JSON.parse(drillData.drillScript).fileName
               }}</span>
             </div>
@@ -163,7 +166,7 @@
   const route = useRoute();
   const id = route.query.id;
   const approvalList = ref();
-  const emergencyPlanDetail = ref();
+  // const emergencyPlanDetail = ref();
   const drillData = ref<DrillPlanItemDetail>();
   const qrCode = ref();
   const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
@@ -181,10 +184,10 @@
       tableConfig.loading = true;
       drillData.value = await queryEmergencyDrillPlanDetail(id);
 
-      // 获取应急预案名
-      if (drillData.value.emergencyPlanId) {
-        emergencyPlanDetail.value = await queryEmergencyPlanDetail(id);
-      }
+      // 获取应急预案名 (取消 需求文档显示文件名而非预案名,无需获取)
+      // if (drillData.value.emergencyPlanId) {
+      //   emergencyPlanDetail.value = await queryEmergencyPlanDetail(drillData.value.emergencyPlanId);
+      // }
 
       // 获取二维码
       qrCode.value = drillSignUrl + '?id=' + id;
@@ -214,8 +217,9 @@
     return str.slice(1, -1).split(',');
   };
 
-  const handlePreviewScript = (str: string) => {
-    const file = JSON.parse(str);
+  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;

+ 3 - 3
src/views/emergency/emergency-drill/configs/plan/form.ts

@@ -34,9 +34,9 @@ export const DRILL_CREATE_FORM_CONFIG: FormConfig[] = [
     slot: 'coordinateDeptIdList',
   },
   {
-    prop: 'preplanId',
+    prop: 'emergencyPlanId',
     label: '应急预案:',
-    slot: 'preplanId',
+    slot: 'emergencyPlanId',
   },
   {
     prop: 'approvalTemplateId',
@@ -89,7 +89,7 @@ export const DRILL_CREATE_FORM_DATA = {
   dueCompleteTime: '',
   responsibleDeptIdList: undefined,
   coordinateDeptIdList: undefined,
-  preplanId: undefined,
+  emergencyPlanId: undefined,
   approvalTemplateId: undefined,
 };
 

+ 4 - 0
src/views/emergency/emergency-drill/configs/plan/search.ts

@@ -52,6 +52,10 @@ export const DRILL_PLAN_LIST_SEARCH_CONFIG: SearchConfig[] = [
         label: EMERGENCY_DRILL_STATUS_DICT[EMERGENCY_DRILL_STATUS.WAIT_CHECK],
         value: EMERGENCY_DRILL_STATUS.WAIT_CHECK,
       },
+      {
+        label: EMERGENCY_DRILL_STATUS_DICT[EMERGENCY_DRILL_STATUS.RETURN],
+        value: EMERGENCY_DRILL_STATUS.RETURN,
+      },
       { label: EMERGENCY_DRILL_STATUS_DICT[EMERGENCY_DRILL_STATUS.COMPLETE], value: EMERGENCY_DRILL_STATUS.COMPLETE },
     ],
     componentProps: { placeholder: '选择全部' },

+ 3 - 1
src/views/emergency/emergency-drill/types.ts

@@ -59,7 +59,7 @@ export interface CreateEmergencyDrillRuleForm {
   /*配合部门id列表 */
   coordinateDeptIdList?: number[];
   /*应急预案 */
-  preplanId?: number;
+  emergencyPlanId?: number;
   /*审批流程 */
   approvalTemplateId?: number;
 }
@@ -81,6 +81,8 @@ export interface DrillPlanItemDetail {
   coordinateDeptIdList?: string;
   /*配合部门名称列表 */
   coordinateDeptNameList?: string;
+  /*应急预案附件 */
+  emergencyPlanAppendix?: string;
   /*应急预案id */
   emergencyPlanId?: number;
   /*审批模板id */