ソースを参照

pms 功能优化 维修 保养 选择物料

zhangcl 2 ヶ月 前
コミット
4c13c25fe3

+ 3 - 3
src/views/pms/iotmainworkorder/IotMainWorkOrder.vue

@@ -480,7 +480,6 @@
 import * as UserApi from '@/api/system/user'
 import { useUserStore } from '@/store/modules/user'
 import { ref } from 'vue'
-import type { ComponentPublicInstance } from 'vue'
 import { IotMaintenanceBomApi, IotMaintenanceBomVO } from '@/api/pms/iotmaintenancebom'
 import { IotMainWorkOrderBomApi, IotMainWorkOrderBomVO } from '@/api/pms/iotmainworkorderbom'
 import { IotMainWorkOrderBomMaterialApi, IotMainWorkOrderBomMaterialVO } from '@/api/pms/iotmainworkorderbommaterial'
@@ -541,7 +540,7 @@ const formRules = reactive({
 const formRef = ref() // 表单 Ref
 
 interface MaterialFormExpose {
-  open: (deptId: number, bomNodeId: number) => void
+  open: (deptId: number, bomNodeId: number, row: any, type: string) => void
 }
 
 const materialFormRef = ref<MaterialFormExpose>();
@@ -609,7 +608,8 @@ const openConfigDialog = (row: IotMainWorkOrderBomVO) => {
 const openMaterialForm = (row: any) => {
   bomNodeId.value = row.bomNodeId;
   console.log('这是一个对象:', row.bomNodeId)
-  materialFormRef.value.open(formData.value.deptId, bomNodeId.value, row.deviceId)
+  const type = 'maintenance'
+  materialFormRef.value.open(formData.value.deptId, bomNodeId.value, row, type)
 }
 
 const selectChoose = (selectedMaterial) => {

+ 3 - 3
src/views/pms/iotmainworkorder/IotMainWorkOrderAdd.vue

@@ -435,7 +435,6 @@ import { IotDeviceApi, IotDeviceVO } from '@/api/pms/device'
 import * as UserApi from '@/api/system/user'
 import { useUserStore } from '@/store/modules/user'
 import { ref } from 'vue'
-import type { ComponentPublicInstance } from 'vue'
 import { IotMaintenanceBomApi, IotMaintenanceBomVO } from '@/api/pms/iotmaintenancebom'
 import { IotMainWorkOrderBomApi, IotMainWorkOrderBomVO } from '@/api/pms/iotmainworkorderbom'
 import { IotMainWorkOrderBomMaterialApi, IotMainWorkOrderBomMaterialVO } from '@/api/pms/iotmainworkorderbommaterial'
@@ -504,7 +503,7 @@ const formRules = reactive({
 const formRef = ref() // 表单 Ref
 
 interface MaterialFormExpose {
-  open: (deptId: number, bomNodeId: number) => void
+  open: (deptId: number, bomNodeId: number, row: any, type: string) => void
 }
 
 const materialFormRef = ref<MaterialFormExpose>();
@@ -590,7 +589,8 @@ const openConfigDialog = (row: IotMainWorkOrderBomVO) => {
 const openMaterialForm = (row: any) => {
   bomNodeId.value = row.bomNodeId;
   console.log('这是一个对象:', row.bomNodeId)
-  materialFormRef.value.open(formData.value.deptId, bomNodeId.value, row.deviceId)
+  const type = 'maintenance'
+  materialFormRef.value.open(formData.value.deptId, bomNodeId.value, row, type)
 }
 
 // 获取指定bomNodeId的物料数量

+ 54 - 33
src/views/pms/iotmainworkorder/WorkOrderMaterial.vue

@@ -1,5 +1,24 @@
 <template>
   <Dialog v-model="dialogVisible" title="选择物料" style="width: 1200px; min-height: 400px">
+
+    <!-- 新增设备分类和BOM节点信息显示 -->
+    <div style="margin: 0 0px 15px; background: #f5f7fa; padding: 12px 20px; border-radius: 4px;">
+      <el-row>
+        <el-col :span="8">
+          <span style="font-weight: bold; margin-right: 10px;">设备编码:</span>
+          <span>{{ deviceCode }}</span>
+        </el-col>
+        <el-col :span="8">
+          <span style="font-weight: bold; margin-right: 10px;">设备名称:</span>
+          <span>{{ deviceName }}</span>
+        </el-col>
+        <el-col :span="8">
+          <span style="font-weight: bold; margin-right: 10px;">{{bomNodeLabel}}:</span>
+          <span>{{ bomNodeName }}</span>
+        </el-col>
+      </el-row>
+    </div>
+
     <ContentWrap>
       <el-form
         class="-mb-15px"
@@ -176,6 +195,12 @@ const list = ref<WorkOrderBomMaterialApi.IotMainWorkOrderBomMaterialVO[]>([]) //
 const total = ref(0) // 列表的总页数
 const tableRef = ref()
 const selectedRows = ref<WorkOrderBomMaterialApi.IotMainWorkOrderBomMaterialVO[]>([]) // 多选数据(存储所有选中行的数组)
+
+const deviceName = ref('') // 设备名称
+const deviceCode = ref('')    // 设备编码
+const bomNodeName = ref('')   // 保养项 or 维修项 名称
+const bomNodeLabel = ref('')   // 保养项 or 维修项 名称
+
 const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
@@ -187,6 +212,15 @@ const queryParams = reactive({
   materialCode: '',
   materialName: '',
 })
+
+// 保存初始查询参数用于重置
+const defaultQueryParams = {
+  materialName: '',
+  materialCode: '',
+  pageNo: 1,
+  pageSize: 10,
+}
+
 const drawerVisible = ref<boolean>(false)
 const showDrawer = ref()
 const handleView = () => {
@@ -226,13 +260,26 @@ const removeOnesFromKeys = (obj: Record<string, any>) => {
 const handleRowClick = (row) => {
   toggleRow(row)
 }
-const open = async (deptId: number, bomNodeId: number, deviceId: number) => {
-  console.log('传递过来的数据:', deptId)
+const open = async (deptId: number, bomNodeId: number, row: any, type: string) => {
+  console.log('传递过来的数据:', row.deviceId)
+  Object.assign(queryParams, defaultQueryParams)
+
   selectedRows.value = []
   dialogVisible.value = true
   queryParams.deptId = deptId
   queryParams.bomNodeId = bomNodeId
-  queryParams.deviceId = deviceId
+  queryParams.deviceId = row.deviceId
+  if(type === 'repair'){
+    queryParams.deviceId = row.id
+  }
+  deviceName.value = row.deviceName
+  deviceCode.value = row.deviceCode
+  bomNodeName.value = row.name
+  if (type === 'maintenance') {
+    bomNodeLabel.value = '保养项'
+  } else if (type === 'repair') {
+    bomNodeLabel.value = '维修项'
+  }
   await getList()
 }
 
@@ -311,37 +358,8 @@ const rowClassName = ({ row }: { row: any }) => {
   return className
 }
 
-const handleInput = (value, obj) => {
-  // 1. 过滤非法字符(只允许数字和小数点)
-  let filtered = value.replace(/[^\d.]/g, '')
-
-  // 2. 处理多个小数点的情况
-  filtered = filtered.replace(/\.{2,}/g, '.')
-
-  // 3. 限制小数点后最多两位
-  let decimalParts = filtered.split('.')
-  if (decimalParts.length > 1) {
-    decimalParts = decimalParts.slice(0, 2)
-    filtered = decimalParts.join('.')
-  }
-
-  // 4. 处理以小数点开头的情况(自动补0)
-  if (filtered.startsWith('.')) {
-    filtered = '0' + filtered
-  }
-
-  // 5. 更新绑定值(同时处理连续输入多个0的情况)
-  formData.value[obj] = filtered.replace(/^0+(?=\d)/, '')
-}
-
 // 多选 切换行选中状态
 const toggleRow = (row) => {
-  /* const index = selectedRows.value.findIndex((item) => item.materialCode === row.materialCode)
-  if (index > -1) {
-    selectedRows.value.splice(index, 1) // 取消选中
-  } else {
-    selectedRows.value.push(row) // 选中
-  } */
   // 创建复合唯一标识
   const getRowUniqueKey = (row) => {
     return `${row.factoryId}_${row.costCenterId}_${row.storageLocationId}_${row.materialCode}`
@@ -401,7 +419,10 @@ const choose = (row: IotMaintainMaterialVO) => {
 }
 /** 重置按钮操作 */
 const resetQuery = () => {
-  queryFormRef.value.resetFields()
+  if (queryFormRef.value) {
+    queryFormRef.value.resetFields()
+  }
+  Object.assign(queryParams, defaultQueryParams)
   handleQuery()
 }
 </script>

+ 2 - 1
src/views/pms/iotsapstock/index.vue

@@ -75,6 +75,7 @@
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('operationFill.search') }}</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" />  {{ t('operationFill.reset') }}</el-button>
+        <!--
         <el-button
           type="primary"
           plain
@@ -82,7 +83,7 @@
           v-hasPermi="['pms:iot-sap-stock:create']"
         >
           <Icon icon="ep:plus" class="mr-5px" /> {{ t('operationFill.add') }}
-        </el-button>
+        </el-button> -->
         <el-button
           type="success"
           plain

+ 2 - 1
src/views/pms/maintain/IotMaintain.vue

@@ -405,7 +405,8 @@ const currentBomNodeId = ref() // 当前选中的bom节点
 const openMaterialForm = (row: any) => {
   bomNodeId.value = row.bomNodeId
   console.log('这是一个对象:', row.bomNodeId)
-  materialFormRef.value.open(formData.value.deptId, bomNodeId.value, formData.value.deviceId)
+  const type = 'repair'
+  materialFormRef.value.open(formData.value.deptId, bomNodeId.value, row, type)
 }
 
 const maintainFormRef = ref()