Browse Source

pms 保养工单填报 功能优化

zhangcl 1 tháng trước cách đây
mục cha
commit
2fb246120d

+ 5 - 0
src/api/pms/iotmainworkorderbommaterial/index.ts

@@ -67,4 +67,9 @@ export const IotMainWorkOrderBomMaterialApi = {
   workOrderMaterials: async (params) => {
     return await request.get({ url: `/pms/iot-main-work-order-bom-material/workOrderMaterials`, params })
   },
+
+  // 获得PMS 保养工单明细BOM关联的所有物料列表
+  getWorkOrderBomMaterials: async (params: any) => {
+    return await request.get({ url: `/pms/iot-main-work-order-bom-material/list`, params })
+  },
 }

+ 45 - 10
src/views/pms/iotmainworkorder/IotMainWorkOrder.vue

@@ -160,7 +160,7 @@
           <template #default="scope">
             <div style="display: flex; justify-content: center; align-items: center; width: 100%">
               <!-- 新增配置按钮 -->
-              <div style="margin-left: 12px">
+              <div style="margin-left: 12px" v-if="scope.row.status === 0">
                 <el-button
                   link
                   type="primary"
@@ -169,7 +169,7 @@
                   {{ t('stock.DelayMaintenance') }}
                 </el-button>
               </div>
-              <div style="margin-left: 12px">
+              <div style="margin-left: 12px" v-if="scope.row.status === 0">
                 <el-button
                   link
                   type="primary"
@@ -182,7 +182,7 @@
                 <el-button
                   link
                   type="primary"
-                  @click="handleView(scope.row.bomNodeId)"
+                  @click="handleView(scope.row)"
                 >
                   {{ t('bomList.materialDetail') }}
                 </el-button>
@@ -458,6 +458,8 @@
     @update:model-value="val => drawerVisible = val"
     :node-id="currentBomNodeId"
     :materials="materialList.filter(item => item.bomNodeId === currentBomNodeId)"
+    @delete="handleDeleteMaterial"
+    :hide-extra-columns="hideExtraColumnsInDrawer"
   />
 </template>
 <script setup lang="ts">
@@ -501,6 +503,8 @@ const deviceIds = ref<number[]>([]) // 已经选择的设备id数组
 const { params, name } = useRoute() // 查询参数
 const id = params.id
 const devicePersonsMap = ref<Map<number, Set<string>>>(new Map()) // 存储设备-责任人映射
+// 控制抽屉额外列的显示
+const hideExtraColumnsInDrawer = ref(false)
 
 const formData = ref({
   id: undefined,
@@ -688,10 +692,11 @@ const selectChoose = (selectedMaterial) => {
 }
 
 /** 查看已经选择的物料 并编辑 */
-const handleView = (nodeId) => {
-  currentBomNodeId.value = nodeId
+const handleView = (row: IotMainWorkOrderBomVO) => {
+  currentBomNodeId.value = row.bomNodeId
   drawerVisible.value = true
-  // showDrawer.value.openDrawer()
+  // 根据状态值设置是否隐藏额外列
+  hideExtraColumnsInDrawer.value = row.status === 1
   console.log('当前bom节点:', currentBomNodeId.value)
 }
 
@@ -853,6 +858,7 @@ async function getDevicePersons() {
 
 // 获取指定bomNodeId的物料数量
 const getMaterialCount = (bomNodeId: number) => {
+  console.log('当前BOM节点:' + bomNodeId)
   return materialList.value.filter(item => item.bomNodeId === bomNodeId).length
 }
 
@@ -862,6 +868,22 @@ const hasDelay = (row) => {
     row.delayDuration > 0
 }
 
+const handleDeleteMaterial = (material) => {
+  // 根据唯一标识查找要删除的物料索引
+  const index = materialList.value.findIndex(item =>
+    item.bomNodeId === material.bomNodeId &&
+    item.factoryId === material.factoryId &&
+    item.costCenterId === material.costCenterId &&
+    item.storageLocationId === material.storageLocationId &&
+    item.materialCode === material.materialCode
+  );
+
+  if (index !== -1) {
+    materialList.value.splice(index, 1);
+    message.success('物料删除成功');
+  }
+};
+
 const close = () => {
   delView(unref(currentRoute))
   push({ name: 'IotMainWorkOrder', params:{}})
@@ -878,9 +900,15 @@ const submitForm = async () => {
   // 提交请求
   formLoading.value = true
   try {
+    const convertedList = list.value.map(item => ({
+      ...item,
+      lastNaturalDate: typeof item.lastNaturalDate === 'number'
+        ? item.lastNaturalDate
+        : (item.lastNaturalDate ? dayjs(item.lastNaturalDate).valueOf() : null)
+    }));
     const data = {
       mainWorkOrder: formData.value,
-      mainWorkOrderBom: list.value,
+      mainWorkOrderBom: convertedList,
       mainWorkOrderMaterials: materialList.value
     }
     await IotMainWorkOrderApi.fillWorkOrder(data)
@@ -1058,12 +1086,19 @@ onMounted(async () => {
     if (Array.isArray(data)) {
       // 添加过滤逻辑:只保留 status === 0 的记录
       list.value = data
-        .filter(item => item.status === 0) // 关键过滤代码
+        // .filter(item => item.status === 0) // 关键过滤代码
         .map(item => ({
           ...item,
           lastNaturalDate: item.lastNaturalDate
-            ? dayjs(item.lastNaturalDate).format('YYYY-MM-DD')
-            : null
+        }))
+    }
+    // 查询当前保养工单已经关联的所有物料
+    const materials = await IotMainWorkOrderBomMaterialApi.getWorkOrderBomMaterials(queryParams);
+    materialList.value = []
+    if (Array.isArray(materials)) {
+      materialList.value = materials
+        .map(item => ({
+          ...item,
         }))
     }
   } catch (error) {