From d5aaf4e84d110834037c1f230afc3d331f0f457c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Fri, 31 Oct 2025 16:20:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E4=B8=8E=E5=8E=9F=E6=9D=90=E6=96=99BOM=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增listProductWithBom和listRawMaterialWithBom接口 - 在ProductSelect和RawMaterialSelect组件中展示BOM属性信息 - 优化物料状态显示条件及仓库过滤逻辑 - 更新统计组件查询参数 --- klp-ui/src/api/wms/product.js | 8 ++++ klp-ui/src/api/wms/productBom.js | 2 +- klp-ui/src/api/wms/rawMaterial.js | 8 ++++ .../components/HomeModules/StatisticGroup.vue | 4 +- .../KLPService/ProductSelect/index.vue | 36 +++++++++++++++++- .../KLPService/RawMaterialSelect/index.vue | 38 +++++++++++++++++-- klp-ui/src/store/modules/category.js | 8 ++-- klp-ui/src/views/wms/coil/panels/base.vue | 9 ++++- 8 files changed, 99 insertions(+), 14 deletions(-) diff --git a/klp-ui/src/api/wms/product.js b/klp-ui/src/api/wms/product.js index b68be1f2..602b98f6 100644 --- a/klp-ui/src/api/wms/product.js +++ b/klp-ui/src/api/wms/product.js @@ -51,3 +51,11 @@ export function delProduct(productId) { method: 'delete' }) } + +export function listProductWithBom(query) { + return request({ + url: '/wms/product/listWithBom', + method: 'get', + params: query + }) +} diff --git a/klp-ui/src/api/wms/productBom.js b/klp-ui/src/api/wms/productBom.js index 27953287..927adf0b 100644 --- a/klp-ui/src/api/wms/productBom.js +++ b/klp-ui/src/api/wms/productBom.js @@ -41,4 +41,4 @@ export function delProductBom(bomId) { url: '/wms/productBom/' + bomId, method: 'delete' }) -} +} \ No newline at end of file diff --git a/klp-ui/src/api/wms/rawMaterial.js b/klp-ui/src/api/wms/rawMaterial.js index da8c80c7..ba1b8148 100644 --- a/klp-ui/src/api/wms/rawMaterial.js +++ b/klp-ui/src/api/wms/rawMaterial.js @@ -59,3 +59,11 @@ export function listRawMaterialWithDemand(query) { params: query }) } + +export function listRawMaterialWithBom(query) { + return request({ + url: '/wms/rawMaterial/listWithBom', + method: 'get', + params: query + }) +} diff --git a/klp-ui/src/components/HomeModules/StatisticGroup.vue b/klp-ui/src/components/HomeModules/StatisticGroup.vue index 68d28249..e6adda1c 100644 --- a/klp-ui/src/components/HomeModules/StatisticGroup.vue +++ b/klp-ui/src/components/HomeModules/StatisticGroup.vue @@ -120,8 +120,8 @@ export default { Promise.all([ listProduct({ pageSise: 1, pageNum: 1 }), listRawMaterial({ pageSise: 1, pageNum: 1 }), - listMaterialCoil({ pageSise: 1, pageNum: 1 }), - listEquipmentManagement({ pageSise: 1, pageNum: 1 }), + listMaterialCoil({ pageSise: 1, pageNum: 1, dateType: '1' }), + listEquipmentManagement({ pageSise: 1, pageNum: 1, status: 'in_service' }), listOrder({ pageSise: 1, pageNum: 1 }), listCustomer({ pageSise: 1, pageNum: 1 }), listSupplier({ pageSise: 1, pageNum: 1 }) diff --git a/klp-ui/src/components/KLPService/ProductSelect/index.vue b/klp-ui/src/components/KLPService/ProductSelect/index.vue index dc2a3473..d9e9fe34 100644 --- a/klp-ui/src/components/KLPService/ProductSelect/index.vue +++ b/klp-ui/src/components/KLPService/ProductSelect/index.vue @@ -8,9 +8,14 @@ -
- {{ item.productName }} +
+
+ {{ item.productName }} {{ item.productCode }} +
+
+ {{ getSku(item) }} +
@@ -124,6 +129,33 @@ export default { this.productOptions = res.rows || []; }); }, + getSku(item) { + const boms = item.bomItems || []; + if (!boms.length) { + return '暂无BOM信息'; + } + // 查找attrKey为'规格'的attrvalue + const specification = boms.find(p => p.attrKey === '规格'); + + // 查找attrKey为'表面处理'的attrvalue + const factory = boms.find(p => p.attrKey === '表面处理'); + + // 查找attrKey为'材质'的attrvalue + const material = boms.find(p => p.attrKey === '材质'); + + // 组合sku: + let sku = ''; + if (specification) { + sku += '规格:' + specification.attrValue + ';'; + } + if (factory) { + sku += '表面处理:' + factory.attrValue + ';'; + } + if (material) { + sku += '材质:' + material.attrValue + ';'; + } + return sku; + }, onChange(val) { // 通过val找到item const product = this.productOptions.find(p => p.productId === val); diff --git a/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue b/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue index b2b86a5f..2be2fde5 100644 --- a/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue +++ b/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue @@ -8,9 +8,11 @@ -
- {{ item.rawMaterialName }} - {{ item.rawMaterialCode }} +
+
+ {{ item.rawMaterialName }} + {{ getSku(item) }} +
@@ -61,6 +63,7 @@ import { mapGetters } from "vuex"; import { addRawMaterial } from '@/api/wms/rawMaterial'; import BomPanel from '../BomPanel/index.vue'; +import { findItemWithBom } from '@/api/wms/bom'; export default { name: "RawMaterialSelect", @@ -130,6 +133,35 @@ export default { const rawMaterial = this.options.find(p => p.rawMaterialId === val); this.$emit('change', rawMaterial); }, + getSku(item) { + const boms = item.bomItems; + if (!boms || boms.length === 0) { + return '暂无BOM信息'; + } + // 查找attrKey为'规格'的attrvalue + const specification = boms.find(p => p.attrKey === '规格'); + + // 查找attrKey为'厂家'的attrvalue + const factory = boms.find(p => p.attrKey === '厂家'); + + // 查找attrKey为'材质'的attrvalue + const material = boms.find(p => p.attrKey === '材质'); + + console.log(boms, item, '查找bomItems'); + // 组合sku: + let sku = ''; + if (specification) { + sku += '规格:' + specification.attrValue + ';'; + } + if (factory) { + sku += '厂家:' + factory.attrValue + ';'; + } + if (material) { + sku += '材质:' + material.attrValue; + } + console.log(sku, '组合sku'); + return sku; + }, add() { this.addDialogVisible = true; this.addForm = { diff --git a/klp-ui/src/store/modules/category.js b/klp-ui/src/store/modules/category.js index 83625204..9cb17a74 100644 --- a/klp-ui/src/store/modules/category.js +++ b/klp-ui/src/store/modules/category.js @@ -1,6 +1,6 @@ import { listCategory } from '@/api/wms/category'; -import { listProduct } from '@/api/wms/product'; -import { listRawMaterial } from '@/api/wms/rawMaterial'; +import { listProductWithBom } from '@/api/wms/product'; +import { listRawMaterialWithBom } from '@/api/wms/rawMaterial'; import { listBomItem } from '@/api/wms/bomItem'; // 目前存在一个问题,当新增或删除,修改分类、产品、物料时,需要刷新整个页面,才能看到最新的数据 @@ -51,7 +51,7 @@ const actions = { if (Object.keys(state.productMap).length > 0) { return Promise.resolve(state.productMap); } - return listProduct({ pageNum: 1, pageSize: 10000 }).then(res => { + return listProductWithBom({ pageNum: 1, pageSize: 10000 }).then(res => { const map = {}; res.rows.forEach(item => { map[item.productId] = item; @@ -65,7 +65,7 @@ const actions = { if (Object.keys(state.rawMaterialMap).length > 0) { return Promise.resolve(state.rawMaterialMap); } - return listRawMaterial({ pageNum: 1, pageSize: 10000 }).then(res => { + return listRawMaterialWithBom({ pageNum: 1, pageSize: 10000 }).then(res => { const map = {}; res.rows.forEach(item => { map[item.rawMaterialId] = item; diff --git a/klp-ui/src/views/wms/coil/panels/base.vue b/klp-ui/src/views/wms/coil/panels/base.vue index c84e528c..1e1071ef 100644 --- a/klp-ui/src/views/wms/coil/panels/base.vue +++ b/klp-ui/src/views/wms/coil/panels/base.vue @@ -86,7 +86,7 @@ - +