Browse Source

pms BOM清单功能优化 批量删除...

zhangcl 2 months ago
parent
commit
d736094f3d

+ 3 - 0
src/api/pms/commonbommaterial/index.ts

@@ -29,5 +29,8 @@ export const CommonBomMaterialApi = {
   },
   deleteCommonBomMaterial: async (id: number) => {
     return await request.delete({ url: '/pms/iot-common-bom-material/delete?id=' + id })
+  },
+  deleteBomMaterial: async (bomNodeId: number, code: string) => {
+    return await request.delete({ url: '/pms/iot-common-bom-material/deleteBomMaterial?bomNodeId=' + bomNodeId + '&code=' + code })
   }
 }

+ 1 - 1
src/router/modules/remaining.ts

@@ -394,7 +394,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
           hidden: true,
           canTo: true,
           icon: 'ep:add',
-          title: 'SAP安全库存',
+          title: '配置安全库存',
           activeMenu: '/sapstock/config'
         }
       },

+ 14 - 5
src/views/pms/bom/BomForm.vue

@@ -125,11 +125,18 @@ const queryParams = reactive({
 })
 
 /** 打开弹窗 */
-const open = async (type: string, id?: number) => {
+const open = async (type: string, id?: number, parentId?: number, deviceCategoryId?: number) => {
   dialogVisible.value = true
+  console.log('open方法内部的设备分类id:' + deviceCategoryId)
+  console.log('open方法内部的上级BOM - id:' + parentId)
   // 获取store中的设备分类id
-  localCategoryId.value = treeStore.selectedId;
-  selfDeviceCategoryId.value = treeStore.selectedId;
+  // 优先使用传入的设备分类ID
+  const targetCategoryId = deviceCategoryId || treeStore.selectedId;
+  // localCategoryId.value = treeStore.selectedId;
+  // selfDeviceCategoryId.value = treeStore.selectedId;
+  localCategoryId.value = targetCategoryId || localCategoryId.value;
+  selfDeviceCategoryId.value = targetCategoryId || selfDeviceCategoryId.value;
+
   dialogTitle.value = t('action.' + type)
   formType.value = type
   resetForm()
@@ -137,7 +144,9 @@ const open = async (type: string, id?: number) => {
   await getDeviceCategoryTree()
   // 获得 bom 树
   await getTree()
-  console.log('open方法执行了!')
+  if (type === 'create' && parentId !== undefined) {
+    formData.value.parentId = parentId
+  }
   // 修改时,设置数据
   if (id) {
     formLoading.value = true
@@ -192,7 +201,7 @@ const submitForm = async () => {
 const resetForm = () => {
   formData.value = {
     id: undefined,
-    deviceCategoryId: localCategoryId.value,
+    deviceCategoryId: selfDeviceCategoryId.value,
     title: '',
     parentId: undefined,
     name: undefined,

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

@@ -61,7 +61,7 @@
         </el-table-column>
         <el-table-column :label="t('workOrderMaterial.materialName')" align="center" prop="name" />
         <el-table-column :label="t('workOrderMaterial.materialCode')" align="center" prop="code" />
-        <el-table-column :label="t('deviceForm.model')" align="center" prop="model" />
+        <!-- <el-table-column :label="t('deviceForm.model')" align="center" prop="model" /> -->
         <el-table-column :label="t('workOrderMaterial.unit')" align="center" prop="unit" />
         <el-table-column :label="t('form.remark')" align="center" prop="remark" show-overflow-tooltip />
         <el-table-column

+ 20 - 3
src/views/pms/bom/MaterialListDrawer.vue

@@ -14,7 +14,7 @@
         <el-table :data="materials" style="width: 100%">
           <el-table-column prop="name" label="物料名称" width="180" />
           <el-table-column prop="code" label="物料编码" width="180" />
-          <el-table-column prop="model" label="规格型号" width="180" />
+          <!-- <el-table-column prop="model" label="规格型号" width="180" /> -->
           <el-table-column prop="unit" label="单位" width="180" />
           <el-table-column
             label="创建时间"
@@ -28,7 +28,7 @@
               <el-button
                 size="small"
                 type="danger"
-                @click="emit('delete', scope.row)"
+                @click="handleDelete(scope.row)"
               >删除</el-button>
             </template>
           </el-table-column>
@@ -50,9 +50,12 @@
 import { ref, watch, defineOptions, defineEmits } from 'vue'
 import { ElMessage } from 'element-plus'
 import * as PmsMaterialApi from '@/api/pms/material'
+import {CommonBomMaterialApi, CommonBomMaterialVO} from '@/api/pms/commonbommaterial'
 import {dateFormatter} from "@/utils/formatTime";
 const drawerVisible = ref<boolean>(false)
-const emit = defineEmits(['update:modelValue', 'add', 'delete'])
+const emit = defineEmits(['update:modelValue', 'add', 'delete', 'refresh'])
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
 
 defineOptions({
   name: 'MaterialListDrawer'
@@ -106,6 +109,19 @@ const loadMaterials = async (nodeId) => {
   }
 }
 
+/** 删除BOM节点已经挂载的物料 */
+const handleDelete = async (row) => {
+  try {
+    // 删除的二次确认
+    await message.delConfirm()
+    // 发起删除
+    await CommonBomMaterialApi.deleteBomMaterial(props.nodeId, row.code)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    loadMaterials(props.nodeId)
+  } catch {}
+}
+
 // 打开抽屉
 const openDrawer = () => {
   drawerVisible.value = true
@@ -119,6 +135,7 @@ const closeDrawer = () => {
 // 关闭抽屉
 const handleClose = () => {
   emit('update:modelValue', false)
+  emit('refresh') // 添加刷新事件
   materials.value = []
 }
 

+ 60 - 4
src/views/pms/bom/index.vue

@@ -72,6 +72,7 @@
           :default-expand-all="isExpandAll"
           v-if="refreshTable"
           style="width: 100%"
+          @row-click="handleClick"
         >
           <el-table-column prop="name" label="BOM节点" >
             <template #default="scope">
@@ -90,12 +91,32 @@
             </template>
           </el-table-column>
           <el-table-column prop="deviceCategoryName" label="设备分类" />
+          <el-table-column label="维修" width="100">
+            <template #default="scope">
+              <el-switch
+                :model-value="scope.row.type?.includes(1)"
+                active-value
+                inactive-value
+                disabled
+              />
+            </template>
+          </el-table-column>
+          <el-table-column label="保养" width="100">
+            <template #default="scope">
+              <el-switch
+                :model-value="scope.row.type?.includes(2)"
+                active-value
+                inactive-value
+                disabled
+              />
+            </template>
+          </el-table-column>
           <el-table-column prop="sort" label="排序" width="80"/>
-          <el-table-column prop="status" label="状态" width="80">
+          <!-- <el-table-column prop="status" label="状态" width="80">
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
             </template>
-          </el-table-column>
+          </el-table-column> -->
           <!--
           <el-table-column
             label="创建时间"
@@ -155,6 +176,7 @@
     @update:model-value="val => drawerVisible = val"
     :node-id="currentBomNodeId"
     ref="showDrawer"
+    @refresh="handleDrawerClosed"
   />
 </template>
 <script lang="ts" setup>
@@ -190,6 +212,8 @@ const queryParams = reactive({
 })
 const queryFormRef = ref() // 搜索的表单
 
+const selectedRow = ref<any>(null)
+
 const CommonBomMaterialData = ref({
   id: undefined,
   deviceCategoryId: undefined,
@@ -273,20 +297,46 @@ const resetQuery = () => {
 
 /** 处理 设备分类 被点击 */
 const handleDeviceCategoryTreeNodeClick = async (row) => {
+  clearRowSelection() //清除表格行选择
   queryParams.deviceCategoryId = row.id
   await getList()
 }
 
+// 添加处理抽屉关闭的方法
+const handleDrawerClosed = () => {
+  getList() // 刷新BOM树数据
+}
+
+const parentId = ref('')
+const handleClick = (row: any) => {
+   parentId.value = row.id
+   selectedRow.value = row // 存储整行数据
+  console.log('当前行被点击了:' + selectedRow.value.deviceCategoryId)
+}
+
 /** 添加/修改操作 */
 const formRef = ref()
 const openForm = (type: string, row) => {
+  // 优先使用设备分类树的选择(当selectedRow不存在时)
+  const useTreeSelection = !selectedRow.value && selectedId.value
+
+  // 新增操作时使用选中行的数据
+  if (type === 'create' && selectedRow.value) {
+    formRef.value.open(
+      type,
+      null,
+      selectedRow.value?.id || (useTreeSelection ? undefined : undefined), // 作为 parentId
+      selectedRow.value?.deviceCategoryId || selectedId.value // // 设备分类ID:表格行 > 设备分类树 > 无
+    )
+    return
+  }
   // 如果是没有点击左侧设备树 直接在初始化的列表页面点击某个 BOM节点的修改 也要保存当前BOM关联的设备分类ID
   if(row != null) {
     treeStore.setSelectedId(row.deviceCategoryId)
-    formRef.value.open(type, row.id)
+    formRef.value.open(type, row.id, parentId.value)
     return
   }
-  formRef.value.open(type, null)
+  formRef.value.open(type, null, parentId.value)
 }
 
 /** 展开/折叠操作 */
@@ -298,6 +348,12 @@ const toggleExpandAll = () => {
   })
 }
 
+// 清除表格行选择
+const clearRowSelection = () => {
+  selectedRow.value = null
+  parentId.value = ''
+}
+
 /** 删除按钮操作 */
 const handleDelete = async (id: number) => {
   try {

+ 2 - 2
src/views/pms/iotmaterialrequisition/IotMaterialReqDetail.vue

@@ -70,10 +70,10 @@
         :inline="true"
         label-width="68px"
       >
-      <el-form-item>
+      <!-- <el-form-item>
         <el-button @click="openForm" type="warning">
           <Icon icon="ep:plus" class="mr-5px" />选择物料</el-button>
-      </el-form-item>
+      </el-form-item> -->
       </el-form>
     </ContentWrap>