Sfoglia il codice sorgente

pms 设备BOM添加物料

zhangcl 1 mese fa
parent
commit
ce9268e7a8

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

@@ -31,6 +31,11 @@ export const IotDeviceMaterialApi = {
     return await request.post({ url: `/pms/iot-device-material/create`, data })
   },
 
+  // 设备BOM节点可能关联多个物料
+  addMaterials: async (data: any) => {
+    return await request.post({ url: '/pms/iot-device-material/addMaterials', data })
+  },
+
   // 修改PMS 设备BOM物料关联
   updateIotDeviceMaterial: async (data: IotDeviceMaterialVO) => {
     return await request.put({ url: `/pms/iot-device-material/update`, data })

+ 1 - 1
src/views/pms/bom/index.vue

@@ -278,7 +278,7 @@ const chooseSingleMaterial = async(row) => {
 const chooseMaterial = async(selectedMaterials) => {
   // 将物料关联到bom节点
   try {
-    // 转换数据结构(根据你的接口定义调整)
+    // 转换数据结构(根据接口定义调整)
     const materialsData = selectedMaterials.map(material => ({
       deviceCategoryId: CommonBomMaterialData.value.deviceCategoryId,
       bomNodeId: currentBomNodeId.value,

+ 1 - 1
src/views/pms/device/DeviceInfo.vue

@@ -148,7 +148,7 @@
         <DeviceUpload ref="fileRef" v-if="loadedTabs.includes('1')" />
       </el-tab-pane>
       <el-tab-pane :label="t('deviceInfo.deviceBOM')" name="bom">
-        <BomList ref="bomRef" v-model:activeName="activeName" :deviceId="id" v-if="loadedTabs.includes('2')" />
+        <BomList ref="bomRef" v-model:activeName="activeName" :deviceId="id" :deviceCategoryName="formData.assetClassName" v-if="loadedTabs.includes('2')" />
       </el-tab-pane>
       <el-tab-pane :label="t('deviceInfo.operationRecords')" name="record">
         <RecordList ref="recordRef" v-model:activeName="activeName" :deviceId="id" v-if="loadedTabs.includes('3')" />

+ 24 - 20
src/views/pms/device/bom/BomList.vue

@@ -126,7 +126,7 @@
           <el-button
             link
             type="primary"
-            @click="openSelectMaterialForm(scope.row.id, scope.row.deviceCategoryId)"
+            @click="openSelectMaterialForm(scope.row)"
             v-hasPermi="['rq:iot-bom:update']"
           >
             {{ t('workOrderMaterial.added') }}
@@ -189,7 +189,7 @@ const loading = ref(true) // 列表的加载中
 const currentBomNodeId = ref() // 当前选中的bom节点
 const refreshTable = ref(true) // 重新渲染表格状态
 const list = ref() // 列表的数据
-const props = defineProps<{ deviceId?: number }>()
+const props = defineProps<{ deviceId?: number , deviceCategoryName?:string }>()
 const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
@@ -229,11 +229,12 @@ const getList = async () => {
 
 /** 选择物料操作 */
 const materialListRef = ref()
-const openSelectMaterialForm = (id?: number, deviceCategoryId?: number) => {
-  materialListRef.value.open(id)
-  currentBomNodeId.value = id
+const openSelectMaterialForm = (row: any) => {
+  row.deviceCategoryName = props.deviceCategoryName
+  materialListRef.value.open(row)
+  currentBomNodeId.value = row.id
   // 保存当前BOM节点的deviceCategoryId
-  CommonBomMaterialData.value.deviceCategoryId = deviceCategoryId
+  CommonBomMaterialData.value.deviceCategoryId = row.deviceCategoryId
 }
 
 /** 查看物料详情 */
@@ -245,24 +246,27 @@ const handleView = async (nodeId) => {
   await showDrawer.value.loadMaterials(nodeId)
 }
 
-const chooseMaterial = async (row) => {
-  // 将物料关联到bom节点
+const chooseMaterial = async (selectedMaterials) => {
+  // 将物料关联到设备bom节点
   try {
-    // CommonBomMaterialData.value.deviceCategoryId = row.deviceCategoryId
-    CommonBomMaterialData.value.bomNodeId = currentBomNodeId.value
-    CommonBomMaterialData.value.materialId = row.id
-    CommonBomMaterialData.value.name = row.name
-    CommonBomMaterialData.value.code = row.code
-    CommonBomMaterialData.value.deviceId = props.deviceId
-    const data = CommonBomMaterialData.value as unknown as CommonBomMaterialVO
-    debugger
-    await MaterialApi.IotDeviceMaterialApi.createIotDeviceMaterial(data)
-    message.success(t('common.createSuccess'))
+    const materialsData = selectedMaterials.map(material => ({
+      deviceCategoryId: CommonBomMaterialData.value.deviceCategoryId,
+      deviceId: props.deviceId,
+      bomNodeId: currentBomNodeId.value,
+      materialId: material.id,
+      name: material.name,
+      code: material.code,
+    }))
+
+    // 调用批量添加接口
+    const resultCount = await MaterialApi.IotDeviceMaterialApi.addMaterials(materialsData)
+    message.success(`成功添加物料数量:` + resultCount)
+
     // 保存成功后立即刷新抽屉数据
     showDrawer.value.loadMaterials(currentBomNodeId.value)
     await getList()
-  } finally {
-    // formLoading.value = false
+  } catch (error) {
+    message.error('添加物料失败!')
   }
 }
 

+ 23 - 9
src/views/pms/iotmainworkorder/IotMainWorkOrder.vue

@@ -146,15 +146,15 @@
             />
           </template>
         </el-table-column>
-        <el-table-column :label="t('iotMaintain.numberOfMaterials')" align="center" width="180">
+        <el-table-column :label="t('common.status')" align="center" width="100">
           <template #default="scope">
-            {{ getMaterialCount(scope.row.bomNodeId) }}
+            {{ getStatusText(scope.row) }}
           </template>
-          <!--
+        </el-table-column>
+        <el-table-column :label="t('iotMaintain.numberOfMaterials')" align="center" width="180">
           <template #default="scope">
-            {{ hasMaterial(scope.row.bomNodeId) ? '是' : '否' }}
+            {{ getMaterialCount(scope.row.bomNodeId) }}
           </template>
-          -->
         </el-table-column>
         <el-table-column :label="t('iotMaintain.operation')" align="center" min-width="120px">
           <template #default="scope">
@@ -722,10 +722,6 @@ watch(
   { deep: true }
 )
 
-const hasMaterial = (bomNodeId: number) => {
-  return materialList.value.some(item => item.bomNodeId === bomNodeId)
-}
-
 const handleInput = (value, obj) => {
   // 1. 过滤非法字符(只允许数字和小数点)
   let filtered = value.replace(/[^\d.]/g, '')
@@ -973,6 +969,24 @@ const configFormRules = reactive({
   ]
 })
 
+const getStatusText = (row: any) => {
+  // 状态为1直接返回"完成"
+  if (row.status === 1) return t('mainPlan.completed');
+
+  // 状态为0时判断延迟字段
+  const delayDuration = Number(row.delayDuration) || 0;
+  const delayKilometers = Number(row.delayKilometers) || 0;
+  const delayNaturalDate = Number(row.delayNaturalDate) || 0;
+
+  // 任意延迟字段大于0 -> 延时
+  if (delayDuration > 0 || delayKilometers > 0 || delayNaturalDate > 0) {
+    return t('mainPlan.delayed');
+  }
+
+  // 否则显示保养中
+  return t('mainPlan.maintaining');
+};
+
 /** 校验表格数据 */
 const validateTableData = (): boolean => {
   let isValid = true;