Преглед изворни кода

fix:修复事故案例、文化资料附件显示问题,修复文化活动报名添加、编辑员工选择问题,以及部门显示问题

sunqijun пре 1 недеља
родитељ
комит
738d4f58ba

+ 4 - 0
src/api/safety-culture/index.ts

@@ -28,6 +28,7 @@ export interface safetyCultureFile {
   publishDate?: string; // 发布日期(格式:yyyy-MM-dd)
   attachmentUrl?: string; // 文档上传(多个文件路径)
   imageUrls?: string; // 图片上传(多个图片路径)
+  imageUrl?:string;
 }
 
 /**
@@ -68,6 +69,7 @@ export interface newAccidentCases {
   description: string; // 案例描述
   attachmentUrl: string[] | string; // 文档上传(多个文件路径)
   status?: number; // 启用状态:1-启用,0-禁用
+  imageUrl?:string;
 }
 
 
@@ -98,6 +100,8 @@ export interface ImportRes {
 export interface ActivityRegistrationTargetItem {
   id?: number; // 活动注册目标项ID
   planName: string; // 计划名称
+  categoryName?:string; // 分类名称
+  createdAt?:string; // 创建时间
   createdByName: string; // 创建人姓名
   responsibleDeptName: string; // 负责部门名称
   startTime: string; // 开始时间(格式:yyyy-MM-dd HH:mm:ss)

+ 11 - 5
src/views/production-safety/safety-culture/accidentCaseManagement/components/accidentCaseManagementDetail.vue

@@ -209,14 +209,18 @@ const getDetail = async () => {
       ruleFormData.categoryName = res.categoryName || '';
       ruleFormData.status = res.status ?? 1;
       ruleFormData.description = res.description || '';
-      ruleFormData.attachmentUrl = JSON.parse(res.attachmentUrl || res.fileUrl || '');
-      approvalImageFileList.value = JSON.parse(res.imageUrl || '[]');
-      ruleFormData.imageUrl = res.imageUrl || '';
+      if(res.attachmentUrl || res.fileUrl){
+        ruleFormData.attachmentUrl = JSON.parse(res.attachmentUrl || res.fileUrl || '');
+      }
+      if(res.imageUrl){
+        approvalImageFileList.value = JSON.parse(res.imageUrl || '[]');
+        ruleFormData.imageUrl = res.imageUrl || '';
+      }
     }
     cloneRuleFormData();
   } catch (e) {
     console.error('获取事故案例详情失败:', e);
-    ElMessage.error('获取详情失败');
+    // ElMessage.error('获取详情失败');
   }
 };
 
@@ -289,12 +293,14 @@ const handleApprovalImageChange = (uploadFile: UploadUserFile) => {
     fileName: uploadFile.raw.name,
   })
     .then((res) => {
+       
       ruleFormData.imageUrl = [res.url];
       approvalImageFileList.value = [
         {
           fileName: uploadFile.name || res.url.split('/').pop() || 'image',
           fileUrl: res.url,
-          fileId: res.uid
+          fileId: genFileId(),
+          fileType: res.contentType
         },
       ];
     })

+ 1 - 1
src/views/production-safety/safety-culture/accidentCaseManagement/configs/form.ts

@@ -57,7 +57,7 @@ export const ACADEMY_FILE_FORM_DATA = {
   attachmentUrl: [] as FileItem[],
   description: '',
   status: 1,
-  imageUrl: [] as FileItem[],
+  imageUrl: [] as FileItem[] | string,
 };
 
 export const ACADEMY_FILE_FORM_RULES = {

+ 74 - 19
src/views/production-safety/safety-culture/safetyCultureActivityManagement/components/activityRegistrationManagement.vue

@@ -68,22 +68,22 @@
     </main>
 
     <!-- 添加/编辑先进个人对话框 -->
-    <el-dialog v-model="addDialogVisible" :title="`${isEditMode && normalForm.id ? '编辑' : '添加'}活动报名信息`" width="800px"
+    <el-dialog v-model="addDialogVisible" :title="title" width="800px"
       :close-on-click-modal="false" @close="handleDialogClose">
       <div class="add-dialog-content">
 
         <!-- 普通部门表单 -->
         <el-form ref="normalFormRef" :model="normalForm" :rules="normalFormRules" label-width="140px">
           <el-form-item label="部门名称" prop="employeeDeptName">
-            <el-cascader style="width: 100%" size="large" :ref="(el) => (cascaderRef['employeeDeptName'] = el)"
+            <el-cascader style="width: 100%" size="large" ref="employeeDeptNameRef"
               :options="firstLevelDepts" :props="cascaderProp" :show-all-levels="false" placeholder="请选择安全责任部门"
               filterable v-model="normalForm.deptId" @change="(val) => handleChangeDept(val, 'employeeDeptName')" />
           </el-form-item>
-          <el-form-item label="员工工号:" prop="employeeCode">
-            <el-input v-model="normalForm.employeeCode" placeholder="请输入员工工号" maxlength="50" />
-          </el-form-item>
+         
           <el-form-item label="员工姓名:" prop="employeeName">
-            <el-input v-model="normalForm.employeeName" placeholder="请输入员工姓名" maxlength="50" />
+            <el-select v-model="normalForm.employeeName" @change="handleChangeEmployee" size="large" placeholder="请选择员工姓名" style="width: 100%">
+              <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
           </el-form-item>
           <el-form-item label="员工联系方式:" prop="employeeContact">
             <el-input v-model="normalForm.employeeContact" placeholder="请输入11位手机号码" maxlength="11"
@@ -130,6 +130,9 @@ import {
   type safetyCultureFilePageQuery,
 } from '@/api/safety-culture';
 import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
+  import {
+    queryAvailableUserList,
+  } from '@/api/production-safety/responsibility-implementation';
 
 const route = useRoute();
 
@@ -165,6 +168,7 @@ const activityRegistrationDetail = ref<Partial<ActivityRegistrationTargetItem>>(
 
 // 添加对话框相关
 const addDialogVisible = ref(false);
+const title = ref('')
 const isEditMode = ref(false);
 const currentEditRow = ref<any>(null);
 const editDetailData = ref(null);
@@ -273,13 +277,36 @@ const handleReset = () => {
   tableQuery.queryParam.deptName = '';
   handleSearch();
 };
-
+const userOptions = ref<{ value: string; label: string }[]>([]);
 // 添加注册活动
 const selectDeptType = () => {
   isEditMode.value = true;
   addDialogVisible.value = true;
+  normalFormRef.value?.resetFields();
+  title.value = '新增活动报名信息';
+  getUserData(userOptions, normalForm.employeeDeptName);
 };
-
+  // 获取用户列表封装
+  const getUserData = (optionList, deptName='') => {
+    return queryAvailableUserList({
+      pageNumber: 1,
+      pageSize: 200,
+      queryParam: { deptName },
+    }).then((res: any) => {
+      optionList.value = (res.records || []).map((u: any) => ({
+        value: u.staffNo,
+        label: u.realname,
+      }));
+    });
+  };
+  // 处理员工姓名选择变化
+  const handleChangeEmployee = (val) => {
+    const selectedUser = userOptions.value.find(user => user.value === val);
+    if (selectedUser) {
+      normalForm.employeeName = selectedUser.label;
+      normalForm.employeeCode = selectedUser.value;
+    }
+  };
 // 处理电话号码输入(只允许数字)
 const handlePhoneInput = (value: string) => {
   // 只保留数字
@@ -324,7 +351,6 @@ const handleSave = async () => {
     employeeContact: string;
     remark: string;
   };
-
   const isValid = await validateNormalForm();
   if (!isValid) {
     return;
@@ -333,11 +359,12 @@ const handleSave = async () => {
     ...(normalForm.id && { id: Number(normalForm.id) }),
     activityId: activityRegistrationDetail.value.id,
     deptId: normalForm.deptId ? Number(normalForm.deptId) : undefined,
-    employeeId: normalForm.employeeCode.trim(),
+    employeeId: normalForm.employeeCode.toString(),
     employeeName: normalForm.employeeName.trim(),
     employeeContact: normalForm.employeeContact.trim(),
     remark: normalForm.remark.trim(),
   };
+
   try {
     if (isEditMode.value && normalForm.id) {
       await updateSafetyCultureActivityManagement(addUsers);
@@ -355,6 +382,7 @@ const handleSave = async () => {
 };
 
 const handleEdit = async (row: any) => {
+    console.log(row,'row');
   if (!row.id) {
     ElMessage.error('缺少记录ID,无法编辑');
     return;
@@ -362,13 +390,16 @@ const handleEdit = async (row: any) => {
 
   try {
     isEditMode.value = true;
+    title.value = '编辑活动报名信息';
     addDialogVisible.value = true;
     normalForm.id = row.id;
     normalForm.deptId = row.deptId;
+    normalForm.employeeDeptName = row.deptName;
     normalForm.employeeCode = row.employeeId;
     normalForm.employeeName = row.employeeName;
     normalForm.employeeContact = row.employeeContact;
     normalForm.remark = row.remark;
+    getUserData(userOptions, row.deptName);
   } catch (e) {
     console.error('获取详情失败:', e);
     ElMessage.error('获取详情失败');
@@ -435,21 +466,45 @@ const getActivityRegistrationDetail = async () => {
 
 const getDeptData = () => {
   getAllDepartments().then((res) => {
-    firstLevelDepts.value = formatDeptTree(res);
-    console.log('@res:', res);
+    firstLevelDepts.value = res?.[0]?.children.map(item => ({
+        ...item,
+        children: []
+      })); //formatDeptTree(res);
   });
 };
 
 const handleChangeDept = (val, prop) => {
-  const cascader = cascaderRef.value?.[prop];
-  const deptInfo = cascader?.getCheckedNodes();
-  if (deptInfo && deptInfo.length > 0) {
-    normalForm.employeeDeptName = deptInfo[0].label;
-    normalForm.deptId = val[val.length - 1];
-    // normalForm.deptName = deptInfo[0].label;
-  } else {
+  // 每次选择部门时,重置员工姓名和工号
+  normalForm.employeeName = '';
+  normalForm.employeeCode = '';
+  if(prop === 'responsibleDepartmentId'){
+    tableQuery.queryParam.deptName = '';
+    const selectedDept = firstLevelDepts.value.find(dept => dept.id === val);
+    if (selectedDept) {
+      tableQuery.queryParam.deptName = selectedDept.deptName;
+      getUserData(userOptions, selectedDept.deptName);
+    }
+  }
+  if(prop === 'employeeDeptName'){
     normalForm.employeeDeptName = '';
+    const selectedDept = firstLevelDepts.value.find(dept => dept.id === val);
+    if (selectedDept) {
+      normalForm.employeeDeptName = selectedDept.deptName;
+      normalForm.deptId = val;
+      getUserData(userOptions, selectedDept.deptName);
+    }
   }
+  
+//   const cascader = cascaderRef.value?.[prop];
+//   const deptInfo = cascader?.getCheckedNodes();
+//   console.log('handleChangeDept', val, prop, deptInfo);
+//   if (deptInfo && deptInfo.length > 0) {
+//     normalForm.employeeDeptName = deptInfo[0].label;
+//     normalForm.deptId = val[val.length - 1];
+//     // normalForm.deptName = deptInfo[0].label;
+//   } else {
+//     normalForm.employeeDeptName = '';
+//   }
 };
 
 onMounted(() => {

+ 2 - 2
src/views/production-safety/safety-culture/safetyCultureActivityManagement/safetyCultureActivityManagementActivityRegistration.vue

@@ -4,13 +4,13 @@
       <BreadcrumbBack />
       <span class="breadcrumb-title">活动报名管理</span>
     </header>
-    <AtivityRegistrationManagement />
+    <ActivityRegistrationManagement />
   </div>
 </template>
 
 <script setup lang="ts">
   import BreadcrumbBack from '@/components/BreadcrumbBack.vue';
-  import AtivityRegistrationManagement from './components/activityRegistrationManagement.vue';
+  import ActivityRegistrationManagement from './components/activityRegistrationManagement.vue';
 </script>
 
 <style scoped lang="scss">

+ 7 - 3
src/views/production-safety/safety-culture/safetyCultureMaterialManagement/components/safetyCultureMaterialManagementDetail.vue

@@ -234,6 +234,10 @@
         approvalImageFileList.value = [
           {
             name: uploadFile.name || res.url.split('/').pop() || 'image',
+            fileName: uploadFile.name || res.url.split('/').pop() || 'image',
+            fileUrl: res.url,
+            fileId: genFileId(),
+            fileType: res.contentType,
             url: res.url,
           },
         ];
@@ -316,13 +320,13 @@
           name: `图片${index + 1}`,
           url,
         }));
-        ruleFormData.fileUrl = JSON.parse(res.attachmentUrl || res.fileUrl || '');
-        ruleFormData.attachmentUrl = JSON.parse(res.attachmentUrl || res.fileUrl || '');
+        ruleFormData.fileUrl = JSON.parse(res.attachmentUrl || res.fileUrl || '[]');
+        ruleFormData.attachmentUrl = JSON.parse(res.attachmentUrl || res.fileUrl || '[]');
       }
       cloneRuleFormData();
     } catch (e) {
       console.error('获取院级文件详情失败:', e);
-      ElMessage.error('获取详情失败');
+    //   ElMessage.error('获取详情失败');
     }
   };