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

pms 保养工单填报 提取 设备编码 设备名称 放到主表 优化明细列表样式

zhangcl пре 2 недеља
родитељ
комит
90061748b7
4 измењених фајлова са 51 додато и 6 уклоњено
  1. 1 0
      src/locales/en.ts
  2. 1 0
      src/locales/ru.ts
  3. 1 0
      src/locales/zh-CN.ts
  4. 48 6
      src/views/pms/iotmainworkorder/IotMainWorkOrder.vue

+ 1 - 0
src/locales/en.ts

@@ -976,6 +976,7 @@ export default {
     DelayKil:'DelayKil(KM)',
     DelayDuration:'DelayDuration',
     DelayDate:'DelayDate(D)',
+    MaintItemsGroup:'MaintItemsGroup',
     MaintItems:'MaintItems',
     deviceBomMaterials:'DeviceBomMaterials',
     nextMaintTime:'NextMaintTime(H)',

+ 1 - 0
src/locales/ru.ts

@@ -960,6 +960,7 @@ export default {
     DelayKil:'推迟公里数(KM)',
     DelayDuration:'推迟时长',
     DelayDate:'推迟自然日期(D)',
+    MaintItemsGroup:'保养项组',
     MaintItems:'保养项',
     deviceBomMaterials:'保养项物料',
     nextMaintTime:'距离下次保养运行时长(H)',

+ 1 - 0
src/locales/zh-CN.ts

@@ -971,6 +971,7 @@ export default {
     DelayKil:'推迟公里数(KM)',
     DelayDuration:'推迟时长',
     DelayDate:'推迟自然日期(D)',
+    MaintItemsGroup:'保养项组',
     MaintItems:'保养项',
     deviceBomMaterials:'保养项物料',
     nextMaintTime:'距离下次保养运行时长(H)',

+ 48 - 6
src/views/pms/iotmainworkorder/IotMainWorkOrder.vue

@@ -67,7 +67,17 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="24">
+          <el-col :span="8">
+            <el-form-item :label="t('iotDevice.code')" prop="deviceCode">
+              <el-input type="text" v-model="formData.deviceCode" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item :label="t('iotDevice.name')" prop="deviceName">
+              <el-input type="text" v-model="formData.deviceName" disabled/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
             <el-form-item :label="t('faultForm.remark')" prop="remark">
               <el-input v-model="formData.remark" type="textarea" :placeholder="t('faultForm.rHolder')" />
             </el-form-item>
@@ -90,20 +100,35 @@
           fixed="left"
         />
         <el-table-column :label="t('bomList.bomNode')" align="center" prop="bomNodeId" v-if="false"/>
-        <el-table-column :label="t('iotDevice.code')" align="center" prop="deviceCode" :width="columnWidths.deviceCode" fixed="left">
+        <el-table-column :label="t('iotDevice.code')" align="center" prop="deviceCode" :width="columnWidths.deviceCode" fixed="left" v-if="false">
           <template #default="{ row }">
             <div class="full-content-cell"> <!-- 自定义样式 -->
               {{ row.deviceCode }}
             </div>
           </template>
         </el-table-column>
-        <el-table-column :label="t('iotDevice.name')" align="center" prop="deviceName" :width="columnWidths.deviceName" fixed="left">
+        <el-table-column :label="t('iotDevice.name')" align="center" prop="deviceName" :width="columnWidths.deviceName" fixed="left" v-if="false">
           <template #default="{ row }">
             <div class="full-content-cell"> <!-- 自定义样式 -->
               {{ row.deviceName }}
             </div>
           </template>
         </el-table-column>
+        <!-- 保养项组列 -->
+        <el-table-column
+          v-if="hasGroupInCurrentPage"
+          :label="t('mainPlan.MaintItemsGroup')"
+          align="center"
+          prop="group"
+          fixed="left"
+          :width="columnWidths.group"
+        >
+          <template #default="{ row }">
+            <div class="full-content-cell">
+              {{ row.group }}
+            </div>
+          </template>
+        </el-table-column>
         <el-table-column :label="t('mainPlan.MaintItems')" align="center" prop="name"
                          :show-overflow-tooltip="false" :width="columnWidths.name" fixed="left">
           <template #default="{ row }">
@@ -684,6 +709,8 @@ const maintItemsWidth = ref('auto')
 const lastNaturalDateWatchers = ref(new Map())
 
 const columnWidths = ref<Record<string, string>>({});
+// 响应式变量
+const currentPageSpanArr = ref<number[]>([])
 
 const formData = ref({
   id: undefined,
@@ -699,6 +726,8 @@ const formData = ref({
   remark: undefined,
   status: undefined,
   devicePersons: '',
+  deviceCode: '',
+  deviceName: ''
 })
 
 const formRules = reactive({
@@ -1334,8 +1363,9 @@ const calculateAllColumnsWidth = () => {
   // 需要自适应的列配置
   const autoColumns = [
     { prop: 'serial', label: t('iotDevice.serial') },
-    { prop: 'deviceCode', label: t('iotMaintain.deviceCode') },
-    { prop: 'deviceName', label: t('iotMaintain.deviceName') },
+    // { prop: 'deviceCode', label: t('iotMaintain.deviceCode') },
+    // { prop: 'deviceName', label: t('iotMaintain.deviceName') },
+    { prop: 'group', label: t('mainPlan.MaintItemsGroup') },
     {
       prop: 'totalRunTime',
       label: t('operationFillForm.sumTime'),
@@ -1407,7 +1437,7 @@ const calculateAllColumnsWidth = () => {
   });
 
   // 固定列特殊处理 - 增加额外空间
-  ['serial', 'deviceCode', 'deviceName', 'name'].forEach(prop => {
+  ['serial', 'name'].forEach(prop => {
     if (newWidths[prop]) {
       newWidths[prop] += FIXED_COLUMN_PADDING;
     }
@@ -1601,6 +1631,11 @@ onMounted(async () => {
     list.value = []
     if (Array.isArray(data)) {
       list.value = data.map(item => {
+        // 提取分组名称
+        const group = item.name && item.name.includes('->')
+          ? item.name.split('->')[0].trim()
+          : '';
+
         if (item.mileageRule === 0) {
           item.nextMaintenanceKm = calculateNextMaintenanceKm(item);
           item.remainKm = calculateRemainKm(item);
@@ -1616,9 +1651,16 @@ onMounted(async () => {
         setupNaturalDateSync(item);
           return {
             ...item,
+            group,
             lastNaturalDate: item.lastNaturalDate
           }
         })
+      // 设备信息提取逻辑
+      if (list.value.length > 0) {
+        // 从第一个保养项提取设备信息(所有保养项共享相同设备)
+        formData.value.deviceCode = list.value[0].deviceCode;
+        formData.value.deviceName = list.value[0].deviceName;
+      }
     }
     // 查询当前保养工单已经关联的所有物料
     const materials = await IotMainWorkOrderBomMaterialApi.getWorkOrderBomMaterials(queryParams);