Parcourir la source

fix:修改员工上报附件展示问题,修改安全体系计划管理(部门、管理员端) 部门数据偶发回显问题

sunqijun il y a 2 semaines
Parent
commit
5ad702eeec

+ 1 - 1
src/views/production-safety/hiddenTroubleInvestigationAndGovernance/hiddenTroubleAccountManagement/components/hiddenTroubleAccountManagementDetail.vue

@@ -209,7 +209,7 @@
                 />
                 <div class="file-list" v-if="detailStatusOrder>=3">
                     <div class="file-item" v-for="file in attachmentsFileList" :key="file.fileId">
-                        <span class="file-item--name">{{ file.fileName }}</span>
+                        <span class="file-item--name">{{ file.fileName ||file.file_name }}</span>
                         <div class="file-item--footer">
                             <el-button link type="primary" @click="previewOnline(file.fileUrl, file.fileType)">
                                 预览

+ 17 - 8
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagement/components/safetySystemConstructionWorkPlanManagementDetail.vue

@@ -20,7 +20,11 @@
 
       <el-form-item label="责任部门:" prop="responsibleDeptIds" required>
         <!-- 新需求,增加全选功能 -->
+        <template v-if="isReviewMode || isViewMode">
+            <el-input type="textarea" resize="none"  v-model="deptName.responsibleDeptNames" disabled />
+        </template>
         <el-select
+          v-else
           v-model="form.responsibleDeptIds"
           multiple
           :disabled="isViewMode"
@@ -45,7 +49,11 @@
       </el-form-item>
 
       <el-form-item label="配合部门:" prop="cooperateDeptIds" required>
+        <template v-if="isReviewMode || isViewMode">
+            <el-input type="textarea" resize="none"  v-model="deptName.cooperateDeptNames" disabled />
+        </template>
         <el-cascader
+          v-else
           v-model="form.cooperateDeptIds"
           :options="deptTree"
           :props="cascaderProp"
@@ -139,6 +147,7 @@
 
   const isCreateMode = computed(() => operate.value === 'work-plan-create');
   const isEditMode = computed(() => operate.value === 'work-plan-edit');
+  const isReviewMode = computed(() => operate.value === 'work-plan-review');
   const isViewMode = computed(() => operate.value === 'work-plan-view' || operate.value === 'view-work-content-of-sender');
   const isViewWorkContentOfSender = computed(() => operate.value === 'view-work-content-of-sender');
   const form = reactive<SaveWorkPlanRequest>({
@@ -151,7 +160,10 @@
     plannedComplateTime: '',
     fileUrl: '',
   });
-
+  const deptName = reactive({
+    responsibleDeptNames: '',
+    cooperateDeptNames: '',
+  });
   // 分类名称选项
   const classifyNameOptions = ref<Array<{ label: string; value: string }>>([
     { label: '安全综合工作', value: '安全综合工作' },
@@ -278,6 +290,8 @@
           responsibleDeptIds: responsibleDeptIdsArray,
           fileUrl: JSON.parse(res.fileUrl || '[]'),
         });
+        deptName.cooperateDeptNames = res.cooperateDeptNames as string;
+        deptName.responsibleDeptNames = res.responsibleDeptName as string;
       }
     } catch (e) {
       console.error('获取详情失败:', e);
@@ -298,6 +312,8 @@
           responsibleDeptIds: responsibleDeptIdsArray,
           fileUrl: JSON.parse(res.fileUrl || '[]'),
         });
+        deptName.cooperateDeptNames = res.cooperateDeptNames as string;
+        deptName.responsibleDeptNames = res.responsibleDeptNames as string;
       }
     } catch (e) {
       console.error('获取详情失败:', e);
@@ -341,13 +357,6 @@
       ElMessage.error('保存失败,请重试');
     }
   };
-  // 强制触发组件重新匹配label, 解决视图无法匹配label问题
-watch(deptTree, () => {
-    if (isEditMode.value || isViewMode.value) {
-        form.cooperateDeptIds = [...parseDeptIds(form.cooperateDeptIds)];
-        form.responsibleDeptIds = [...parseDeptIds(form.responsibleDeptIds)];
-    }
-});
   onMounted(async () => {
    await loadDeptTreeData();
 

+ 20 - 20
src/views/production-safety/productionSafetySystem/safetySystemConstructionWorkPlanManagementDept/components/safetySystemConstructionWorkPlanManagementDeptDetail.vue

@@ -26,7 +26,11 @@
       </el-form-item>
 
       <el-form-item label="责任部门:" prop="responsibleDeptIds" required>
+        <template v-if="isEditMode || isViewMode">
+            <el-input type="textarea" resize="none"  v-model="deptName.responsibleDeptNames" disabled />
+        </template>
         <el-cascader
+          v-else
           v-model="form.responsibleDeptIds"
           :options="deptTree"
           :props="cascaderProp"
@@ -36,12 +40,16 @@
           :max-collapse-tags="3"
           placeholder="请选择责任部门"
           style="width: 100%"
-          :disabled="true"
+          :disabled="isEditMode || isViewMode"
         />
       </el-form-item>
 
       <el-form-item label="配合部门:" prop="cooperateDeptIds" required>
+         <template v-if="isEditMode || isViewMode">
+            <el-input type="textarea" resize="none" v-model="deptName.cooperateDeptNames" disabled />
+        </template>
         <el-cascader
+          v-else
           v-model="form.cooperateDeptIds"
           :options="deptTree"
           :props="cascaderProp"
@@ -52,7 +60,7 @@
           popper-class="cascader-popper--custom"
           placeholder="请选择配合部门"
           style="width: 100%"
-          :disabled="true"
+          :disabled="isEditMode || isViewMode"
         />
       </el-form-item>
 
@@ -134,7 +142,6 @@
 
 
   const currentId = computed(() => Number(route.query.id));
-  const currentPlanId = computed(() => Number(route.query.planId));
 
   const operate = computed(() => (route.query.operate as string) || 'work-plan-dept-view');
   const isEditMode = computed(() => operate.value === 'work-plan-dept-issue');
@@ -150,6 +157,10 @@
     plannedComplateTime: '',
     fileUrl: '',
   });
+  const deptName = reactive({
+    responsibleDeptNames: '',
+    cooperateDeptNames: '',
+  });
 
   // 分类名称选项
   const classifyNameOptions = ref<Array<{ label: string; value: string }>>([
@@ -198,7 +209,7 @@
     }
   }
 
-  const attachmentFileList = computed(() => convertAttachmentJsonToFileItems(form.fileUrl || ''));
+  const attachmentFileList = ref([]) //computed(() => convertAttachmentJsonToFileItems(form.fileUrl || ''));
 
   async function handleAttachmentUploadSuccess(files: FileItem[]) {
     if (!files?.length) {
@@ -236,14 +247,6 @@
     }
   };
 
-  //  时间格式化
-  const formatDate = (date) => {
-    if (!date) return '';
-    const year = date.getFullYear();
-    const month = String(date.getMonth() + 1).padStart(2, '0');
-    const day = String(date.getDate()).padStart(2, '0');
-    return `${year}-${month}-${day}`; // 输出:****-**-**
-  };
   //转部门格式 “2,3“ -> [2,3]
   const parseDeptIds = (ids: string | string[] | number[] | undefined | null): number[] => {
     if (!ids) {
@@ -287,8 +290,12 @@
           responsibleDeptIds: responsibleDeptIdsArray,
           fileUrl: JSON.parse(res.fileUrl || '[]'),
         });
+        deptName.cooperateDeptNames = res.cooperateDeptNames as string;
+        deptName.responsibleDeptNames = res.responsibleDeptName as string;
+        if(res.fileUrl) {
+          attachmentFileList.value = JSON.parse(res.fileUrl || '[]');
+        }
       }
-      // cloneRuleFormData();
     } catch (e) {
       console.error('获取物品库存详情失败:', e);
       ElMessage.error('获取详情失败');
@@ -319,13 +326,6 @@
       ElMessage.error('保存失败,请重试');
     }
   };
-  // 强制触发组件重新匹配label, 解决视图无法匹配label问题
-watch(deptTree, () => {
-    if (isEditMode.value || isViewMode.value) {
-        form.cooperateDeptIds = [...parseDeptIds(form.cooperateDeptIds)];
-        form.responsibleDeptIds = [...parseDeptIds(form.responsibleDeptIds)];
-    }
-});
   onMounted(async () => {
     await loadDeptTreeData();
     if (isEditMode.value || isViewMode.value) {

+ 1 - 1
src/views/production-safety/safety-culture/safetyCultureActivityManagement/safetyCultureActivityManagement.vue

@@ -337,7 +337,7 @@
   };
 
   const normalizeCooperateDeptName = (row: any): string => {
-    const rawName = row?.cooperateDeptName || row?.specificDeptName;
+    const rawName = row?.cooperateDeptNames;
     if (rawName) {
       return normalizeListText(rawName);
     }

+ 1 - 1
src/views/production-safety/safety-culture/safetyCultureActivityManagementExecutor/safetyCultureActivityManagementExecutor.vue

@@ -312,7 +312,7 @@ const loadDeptNameMap = async () => {
 };
 
 const normalizeCooperateDeptName = (row: any): string => {
-  const rawName = row?.cooperateDeptName || row?.specificDeptName;
+  const rawName = row?.cooperateDeptNames;
   if (rawName) {
     return normalizeListText(rawName);
   }