Ver Fonte

pms 瑞恒日报 施工工艺数据字典

(cherry picked from commit 5418921ce2f29c381aad02399cd1c9be7155ccb9)
zhangcl há 3 semanas atrás
pai
commit
46f0f1a876

+ 64 - 6
src/views/pms/iotprojectinfo/index.vue

@@ -8,6 +8,7 @@
       :inline="true"
       label-width="68px"
     >
+      <!--
       <el-form-item label="客户名称" prop="manufactureName">
         <el-input
           v-model="queryParams.manufactureName"
@@ -16,7 +17,7 @@
           @keyup.enter="handleQuery"
           class="!w-240px"
         />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="合同名称" prop="contractName">
         <el-input
           v-model="queryParams.contractName"
@@ -88,8 +89,9 @@
           </template>
         </el-table-column>
         <el-table-column label="合同编号" align="center" prop="contractCode" :width="columnWidths.contractCode" />
+        <!--
         <el-table-column label="总工作量" align="center" prop="workloadTotal" :width="columnWidths.workloadTotal" />
-        <el-table-column label="已完成工作量" align="center" prop="workloadFinish" :width="columnWidths.workloadFinish" />
+        <el-table-column label="已完成工作量" align="center" prop="workloadFinish" :width="columnWidths.workloadFinish" /> -->
         <el-table-column
           label="合同开始时间"
           align="center"
@@ -195,7 +197,7 @@
         <el-table-column label="施工地点" align="center" prop="location" />
         <el-table-column :label="t('project.technology')" align="center" prop="technique" min-width="70">
           <template #default="scope">
-            <dict-tag :type="DICT_TYPE.PMS_PROJECT_TECHNOLOGY" :value="scope.row.technique" />
+            {{ getTechniqueLabel(scope.row) }}
           </template>
         </el-table-column>
         <el-table-column label="设计工作量" align="center" prop="workloadDesign" />
@@ -292,9 +294,8 @@ import { dateFormatter,dateFormatter2 } from '@/utils/formatTime'
 import download from '@/utils/download'
 import { IotProjectInfoApi, IotProjectInfoVO } from '@/api/pms/iotprojectinfo'
 import {IotProjectTaskApi} from '@/api/pms/iotprojecttask'
-import IotProjectInfoForm from './IotProjectInfoForm.vue'
 import {useUserStore} from "@/store/modules/user";
-import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
+import {DICT_TYPE, getIntDictOptions, getDictLabel, getStrDictOptions} from "@/utils/dict";
 import { IotDeviceApi } from '@/api/pms/device' // 引入设备API
 import * as UserApi from "@/api/system/user"; // 引入用户API
 import * as DeptApi from "@/api/system/dept"; // 引入部门API
@@ -318,7 +319,6 @@ const deptList = ref([]) // 部门列表
 const deviceMap = ref({}) // 设备映射表
 const responsiblePersonList = ref([]) // 责任人列表
 
-const timelineData = ref<Array<{ timestamp: string; content: string }>>([]) // 时间线数据
 const taskScheduleDictOptions = ref<any[]>([]) // 任务进度字典选项
 const timelineDialogVisible = ref(false) // 控制时间线弹窗显示
 const currentTaskRow = ref<any>(null) // 当前选中的任务行数据
@@ -327,6 +327,11 @@ const stepsData = ref<Array<{title: string, description?: string, status?: strin
 const actualStepsData = ref<Array<{title: string, description?: string, status?: string}>>([]) // 实际步骤数据
 const currentStepIndex = ref(0) // 当前步骤索引
 
+// 施工工艺字典选项映射表
+const technologyDictOptionsMap = ref<Record<number, any[]>>({});
+// 正在加载的deptId集合
+const loadingDeptIds = new Set<number>();
+
 // 表格引用
 const tableRef = ref()
 // 表格容器引用
@@ -512,6 +517,47 @@ const resetQuery = () => {
   handleQuery()
 }
 
+// 加载施工工艺数据字典选项
+const loadTechnologyDictOptions = async (deptId: number) => {
+  // 如果正在加载或已加载,直接返回
+  if (loadingDeptIds.has(deptId)) return;
+
+  loadingDeptIds.add(deptId);
+
+  try {
+    // 获取数据字典标识符
+    const dictLabel = await getDictLabel(DICT_TYPE.PMS_PROJECT_TECHNOLOGY, deptId);
+
+    if (dictLabel) {
+      // 获取真正的数据字典选项
+      const dictOptions = getStrDictOptions(dictLabel);
+      technologyDictOptionsMap.value[deptId] = dictOptions;
+    } else {
+      // 如果没有获取到,设置为空数组
+      technologyDictOptionsMap.value[deptId] = [];
+    }
+  } catch (error) {
+    console.error(`加载部门${deptId}的施工工艺数据字典失败:`, error);
+    technologyDictOptionsMap.value[deptId] = [];
+  } finally {
+    loadingDeptIds.delete(deptId);
+  }
+};
+
+// 获取施工工艺标签
+const getTechniqueLabel = (row: any) => {
+  const deptId = row.deptId;
+  const techniqueValue = row.technique;
+
+  if (!deptId || !technologyDictOptionsMap.value[deptId]) {
+    return techniqueValue; // 如果还没有加载到数据字典选项,显示原始值
+  }
+
+  const options = technologyDictOptionsMap.value[deptId];
+  const option = options.find(opt => opt.value === techniqueValue);
+
+  return option ? option.label : techniqueValue;
+};
 
 // 显示任务列表
 const showTaskList = async (project) => {
@@ -528,6 +574,8 @@ const showTaskList = async (project) => {
     // 收集所有设备ID和责任人ID
     const allDeviceIds = new Set();
     const allResponsiblePersonIds = new Set();
+    // 收集所有部门ID用于加载施工工艺字典
+    const allDeptIds = new Set();
 
     taskList.value.forEach(item => {
       if (item.deviceIds?.length) {
@@ -536,6 +584,9 @@ const showTaskList = async (project) => {
       if (item.responsiblePerson?.length) {
         item.responsiblePerson.forEach(id => allResponsiblePersonIds.add(id));
       }
+      if (item.deptId) {
+        allDeptIds.add(item.deptId);
+      }
     });
 
     // 批量获取设备信息
@@ -559,6 +610,13 @@ const showTaskList = async (project) => {
       });
       responsiblePersonList.value = persons;
     }
+
+    // 加载所有部门对应的施工工艺字典选项
+    allDeptIds.forEach(deptId => {
+      if (deptId && !technologyDictOptionsMap.value[deptId]) {
+        loadTechnologyDictOptions(deptId);
+      }
+    });
   } catch (error) {
     console.error('加载任务列表失败:', error);
     message.error('加载任务列表失败');

+ 3 - 3
src/views/pms/iotprojecttask/IotProjectTaskForm.vue

@@ -55,7 +55,7 @@
           </el-form-item>
         </el-col>
       </el-row>
-
+      <!--
       <el-row>
         <el-col :span="12">
           <el-form-item label="总数" prop="workloadTotal">
@@ -67,7 +67,7 @@
             <el-input v-model="formData.workloadFinish" placeholder="已完成工作量" disabled/>
           </el-form-item>
         </el-col>
-      </el-row>
+      </el-row> -->
 
       <el-row>
         <el-col :span="12">
@@ -659,7 +659,7 @@ const formRules = reactive({
   contractId: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
   manufacturerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
   payment: [{ required: true, message: '结算方式不能为空', trigger: 'blur' }],
-  workloadTotal: [{ required: true, message: '工作量总数不能为空', trigger: 'blur' }],
+  // workloadTotal: [{ required: true, message: '工作量总数不能为空', trigger: 'blur' }],
   startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
   endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
 })