From 5e47f4065e3b5aea4c101f7d63b5d1dc9951644a Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Sat, 1 Nov 2025 11:50:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BD=95=E5=85=A5=E5=90=88?= =?UTF-8?q?=E5=8D=B7=E5=88=86=E5=8D=B7=E6=96=B0=E5=A2=9E=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/panels/code/apart.vue | 278 +++++++++++++----- .../components/panels/code/merge.vue | 128 +++++++- .../components/panels/code/typing.vue | 126 +++++++- 3 files changed, 443 insertions(+), 89 deletions(-) diff --git a/apps/hand-factory/components/panels/code/apart.vue b/apps/hand-factory/components/panels/code/apart.vue index d318bac..e2bea94 100644 --- a/apps/hand-factory/components/panels/code/apart.vue +++ b/apps/hand-factory/components/panels/code/apart.vue @@ -117,8 +117,22 @@ + + + 选择原材料 + + + {{ item.rawMaterialName || '请选择原材料' }} + + + + + - 毛重 (kg) + 毛重 (吨) - 净重 (kg) + 净重 (吨) + + + + + + 选择原材料 + + + + + + + + {{ material.rawMaterialName }} + + + + 未找到匹配的原材料 + + + + @@ -225,6 +271,7 @@ import { getGenerateRecord } from '@/api/wms/code.js' import { updateMaterialCoil, getMaterialCoil, getMaterialCoilTrace } from '@/api/wms/coil.js' import { listWarehouse } from '@/api/wms/warehouse.js' import { listProduct } from '@/api/wms/product.js' +import { listRawMaterial } from '@/api/wms/rawMaterial.js' export default { data() { @@ -233,39 +280,50 @@ export default { coilId: undefined, hasMergeSplit: 1 // 1表示分卷 }, - coilDetail: {}, - splitCoils: [ - { - currentCoilNo: '', - team: '', - hasMergeSplit: 1, - warehouseId: undefined, - warehouseName: '', - warehouseKeyword: '', - filteredWarehouses: [], - showWarehouseList: false, - grossWeight: '', - netWeight: '' - }, - { - currentCoilNo: '', - team: '', - hasMergeSplit: 1, + coilDetail: {}, + splitCoils: [ + { + currentCoilNo: '', + team: '', + hasMergeSplit: 1, + warehouseId: undefined, + warehouseName: '', + warehouseKeyword: '', + filteredWarehouses: [], + showWarehouseList: false, + itemType: '', + itemId: undefined, + productName: '', + rawMaterialName: '', + grossWeight: '', + netWeight: '' + }, + { + currentCoilNo: '', + team: '', + hasMergeSplit: 1, warehouseId: undefined, - warehouseName: '', - warehouseKeyword: '', - filteredWarehouses: [], - showWarehouseList: false, - grossWeight: '', - netWeight: '' - } - ], + warehouseName: '', + warehouseKeyword: '', + filteredWarehouses: [], + showWarehouseList: false, + itemType: '', + itemId: undefined, + productName: '', + rawMaterialName: '', + grossWeight: '', + netWeight: '' + } + ], warehouses: [], warehouseSearchKeyword: '', filteredWarehousesInPicker: [], products: [], // 产品列表 productSearchKeyword: '', filteredProductsInPicker: [], + rawMaterials: [], // 原材料列表 + rawMaterialSearchKeyword: '', + filteredRawMaterialsInPicker: [], currentPickerItemIndex: -1, loading: false } @@ -279,10 +337,14 @@ export default { onLoad() { this.loadWarehouses(); + this.loadProducts(); + this.loadRawMaterials(); }, mounted() { this.loadWarehouses(); + this.loadProducts(); + this.loadRawMaterials(); }, methods: { @@ -326,6 +388,24 @@ export default { } }, + // 加载原材料列表 + async loadRawMaterials() { + console.log('开始加载原材料列表...'); + try { + const res = await listRawMaterial({ pageNum: 1, pageSize: 1000 }); + console.log("原材料返回值", res); + if (res.code === 200) { + this.rawMaterials = res.rows || res.data || []; + this.filteredRawMaterialsInPicker = this.rawMaterials; + console.log('原材料加载成功,数量:', this.rawMaterials.length); + } else { + console.error('原材料加载失败:', res.msg); + } + } catch (err) { + console.error('加载原材料异常:', err); + } + }, + // 过滤库区(在选择器中) filterWarehousesInPicker() { const keyword = this.warehouseSearchKeyword.trim().toLowerCase(); @@ -344,16 +424,23 @@ export default { if (this.currentPickerItemIndex === -1) return; const item = this.splitCoils[this.currentPickerItemIndex]; - item.warehouseId = warehouse.warehouseId; - item.warehouseName = warehouse.warehouseName; + const currentIndex = this.currentPickerItemIndex; + + // 使用 $set 确保响应式更新 + this.$set(item, 'warehouseId', warehouse.warehouseId); + this.$set(item, 'warehouseName', warehouse.warehouseName); + this.closeWarehousePickerForItem(); - // 检查是否选择了成品库区 - if (warehouse.warehouseName && warehouse.warehouseName.includes('成品')) { - // 加载产品列表 - await this.loadProducts(); - // 弹出产品选择框 - this.showProductPickerForItem(this.currentPickerItemIndex); + // 根据库区ID判断类型:999为成品库,其他为原材料库 + if (warehouse.warehouseId === 999) { + // 成品库,显示产品选择器 + this.$set(item, 'itemType', 'product'); + this.showProductPickerForItem(currentIndex); + } else { + // 其他库区,显示原材料选择器 + this.$set(item, 'itemType', 'raw_material'); + this.showRawMaterialPickerForItem(currentIndex); } }, @@ -413,6 +500,48 @@ export default { this.closeProductPickerForItem(); }, + // 显示原材料选择器(为特定分卷) + showRawMaterialPickerForItem(index) { + this.currentPickerItemIndex = index; + this.rawMaterialSearchKeyword = ''; + this.filteredRawMaterialsInPicker = [...this.rawMaterials]; + this.$refs.rawMaterialPopup.open(); + }, + + // 关闭原材料选择器 + closeRawMaterialPickerForItem() { + this.$refs.rawMaterialPopup.close(); + this.currentPickerItemIndex = -1; + }, + + // 过滤原材料(在选择器中) + filterRawMaterialsInPicker() { + const keyword = this.rawMaterialSearchKeyword.trim().toLowerCase(); + if (!keyword) { + this.filteredRawMaterialsInPicker = [...this.rawMaterials]; + } else { + this.filteredRawMaterialsInPicker = this.rawMaterials.filter(material => { + const name = (material.rawMaterialName || '').toLowerCase(); + return name.includes(keyword); + }); + } + }, + + // 从选择器中选择原材料 + selectRawMaterialFromPicker(material) { + if (this.currentPickerItemIndex === -1) return; + + const item = this.splitCoils[this.currentPickerItemIndex]; + item.itemId = material.rawMaterialId; + item.itemType = 'raw_material'; + item.rawMaterialName = material.rawMaterialName; // 保存原材料名称用于显示 + uni.showToast({ + title: `分卷 ${this.currentPickerItemIndex + 1} 已选择原材料:${material.rawMaterialName}`, + icon: 'success' + }); + this.closeRawMaterialPickerForItem(); + }, + // 过滤库区(为特定分卷) filterWarehousesForItem(index) { console.log(`分卷页面过滤库区,分卷${index + 1},关键词:`, this.splitCoils[index].warehouseKeyword); @@ -474,17 +603,6 @@ export default { } }, - // 从选择器中选择库区 - selectWarehouseFromPicker(warehouse) { - if (this.currentPickerItemIndex !== -1) { - const item = this.splitCoils[this.currentPickerItemIndex]; - item.warehouseId = warehouse.warehouseId; - item.warehouseName = warehouse.warehouseName; - item.warehouseKeyword = warehouse.warehouseName; - } - this.closeWarehousePickerForItem(); - }, - // 扫码 handleScan() { uni.scanCode({ @@ -594,6 +712,10 @@ export default { warehouseKeyword: '', filteredWarehouses: this.warehouses, showWarehouseList: false, + itemType: '', + itemId: undefined, + productName: '', + rawMaterialName: '', grossWeight: '', netWeight: '' }); @@ -614,33 +736,41 @@ export default { coilId: undefined, hasMergeSplit: 1 }; - this.coilDetail = {}; - this.splitCoils = [ - { - currentCoilNo: '', - team: '', - hasMergeSplit: 1, - warehouseId: undefined, - warehouseName: '', - warehouseKeyword: '', - filteredWarehouses: this.warehouses, - showWarehouseList: false, - grossWeight: '', - netWeight: '' - }, - { - currentCoilNo: '', - team: '', - hasMergeSplit: 1, - warehouseId: undefined, - warehouseName: '', - warehouseKeyword: '', - filteredWarehouses: this.warehouses, - showWarehouseList: false, - grossWeight: '', - netWeight: '' - } - ]; + this.coilDetail = {}; + this.splitCoils = [ + { + currentCoilNo: '', + team: '', + hasMergeSplit: 1, + warehouseId: undefined, + warehouseName: '', + warehouseKeyword: '', + filteredWarehouses: this.warehouses, + showWarehouseList: false, + itemType: '', + itemId: undefined, + productName: '', + rawMaterialName: '', + grossWeight: '', + netWeight: '' + }, + { + currentCoilNo: '', + team: '', + hasMergeSplit: 1, + warehouseId: undefined, + warehouseName: '', + warehouseKeyword: '', + filteredWarehouses: this.warehouses, + showWarehouseList: false, + itemType: '', + itemId: undefined, + productName: '', + rawMaterialName: '', + grossWeight: '', + netWeight: '' + } + ]; } } }); diff --git a/apps/hand-factory/components/panels/code/merge.vue b/apps/hand-factory/components/panels/code/merge.vue index aa1a8fb..371cd13 100644 --- a/apps/hand-factory/components/panels/code/merge.vue +++ b/apps/hand-factory/components/panels/code/merge.vue @@ -97,9 +97,23 @@ + + + 选择原材料 + + + {{ selectedRawMaterialName || '请选择原材料' }} + + + + + - 毛重 (kg) + 毛重 (吨) - 净重 (kg) + 净重 (吨) + + + + + + 选择原材料 + + + + + + + + {{ material.rawMaterialName }} + + + + 未找到匹配的原材料 + + + + @@ -210,6 +256,7 @@ import { getGenerateRecord } from '@/api/wms/code.js' import { updateMaterialCoil, getMaterialCoil, getMaterialCoilTrace } from '@/api/wms/coil.js' import { listWarehouse } from '@/api/wms/warehouse.js' import { listProduct } from '@/api/wms/product.js' +import { listRawMaterial } from '@/api/wms/rawMaterial.js' export default { data() { @@ -228,9 +275,13 @@ export default { products: [], // 产品列表 productSearchKeyword: '', filteredProductsInPicker: [], + rawMaterials: [], // 原材料列表 + rawMaterialSearchKeyword: '', + filteredRawMaterialsInPicker: [], itemType: '', // 合卷后的物品类型 itemId: undefined, // 合卷后的物品ID selectedProductName: '', // 已选择的产品名称 + selectedRawMaterialName: '', // 已选择的原材料名称 grossWeight: '', netWeight: '', loading: false @@ -240,10 +291,14 @@ export default { onLoad() { this.loadWarehouses(); + this.loadProducts(); + this.loadRawMaterials(); }, mounted() { this.loadWarehouses(); + this.loadProducts(); + this.loadRawMaterials(); }, computed: { @@ -289,6 +344,24 @@ export default { } }, + // 加载原材料列表 + async loadRawMaterials() { + console.log('开始加载原材料列表...'); + try { + const res = await listRawMaterial({ pageNum: 1, pageSize: 1000 }); + console.log("原材料返回值", res); + if (res.code === 200) { + this.rawMaterials = res.rows || res.data || []; + this.filteredRawMaterialsInPicker = this.rawMaterials; + console.log('原材料加载成功,数量:', this.rawMaterials.length); + } else { + console.error('原材料加载失败:', res.msg); + } + } catch (err) { + console.error('加载原材料异常:', err); + } + }, + // 显示产品选择器 showProductPicker() { this.productSearchKeyword = ''; @@ -326,6 +399,43 @@ export default { this.closeProductPicker(); }, + // 显示原材料选择器 + showRawMaterialPicker() { + this.rawMaterialSearchKeyword = ''; + this.filteredRawMaterialsInPicker = [...this.rawMaterials]; + this.$refs.rawMaterialPopup.open(); + }, + + // 关闭原材料选择器 + closeRawMaterialPicker() { + this.$refs.rawMaterialPopup.close(); + }, + + // 过滤原材料(在选择器中) + filterRawMaterialsInPicker() { + const keyword = this.rawMaterialSearchKeyword.trim().toLowerCase(); + if (!keyword) { + this.filteredRawMaterialsInPicker = [...this.rawMaterials]; + } else { + this.filteredRawMaterialsInPicker = this.rawMaterials.filter(material => { + const name = (material.rawMaterialName || '').toLowerCase(); + return name.includes(keyword); + }); + } + }, + + // 从选择器中选择原材料 + selectRawMaterialFromPicker(material) { + this.itemId = material.rawMaterialId; + this.itemType = 'raw_material'; + this.selectedRawMaterialName = material.rawMaterialName; + uni.showToast({ + title: `已选择原材料:${material.rawMaterialName}`, + icon: 'success' + }); + this.closeRawMaterialPicker(); + }, + // 过滤库区 filterWarehouses() { console.log('合卷页面过滤库区,关键词:', this.warehouseKeyword); @@ -388,14 +498,15 @@ export default { this.warehouseKeyword = warehouse.warehouseName; this.closeWarehousePicker(); - // 检查是否选择了成品库区 - if (warehouse.warehouseName && warehouse.warehouseName.includes('成品')) { - // 切换为产品类型 + // 根据库区ID判断类型:999为成品库,其他为原材料库 + if (warehouse.warehouseId === 999) { + // 成品库,显示产品选择器 this.itemType = 'product'; - // 加载产品列表 - await this.loadProducts(); - // 弹出产品选择框 this.showProductPicker(); + } else { + // 其他库区,显示原材料选择器 + this.itemType = 'raw_material'; + this.showRawMaterialPicker(); } }, @@ -528,6 +639,7 @@ export default { this.itemType = ''; this.itemId = undefined; this.selectedProductName = ''; + this.selectedRawMaterialName = ''; this.grossWeight = ''; this.netWeight = ''; this.showWarehouseList = false; diff --git a/apps/hand-factory/components/panels/code/typing.vue b/apps/hand-factory/components/panels/code/typing.vue index d7138ac..6344038 100644 --- a/apps/hand-factory/components/panels/code/typing.vue +++ b/apps/hand-factory/components/panels/code/typing.vue @@ -114,6 +114,21 @@ + + + 选择原材料 + + + {{ selectedRawMaterialName || '请选择原材料' }} + + + + + 毛重 (吨) @@ -224,6 +239,38 @@ + + + + + 选择原材料 + + + + + + + + {{ material.rawMaterialName }} + + + + 未找到匹配的原材料 + + + + + @@ -258,7 +305,7 @@ import { getGenerateRecord } from '@/api/wms/code.js' import { updateMaterialCoil, getMaterialCoil, getMaterialCoilTrace } from '@/api/wms/coil.js' import { listWarehouse } from '@/api/wms/warehouse.js' -import { getRawMaterial } from '@/api/wms/rawMaterial.js' +import { getRawMaterial, listRawMaterial } from '@/api/wms/rawMaterial.js' import { listProduct } from '@/api/wms/product.js' export default { @@ -289,6 +336,10 @@ import { listProduct } from '@/api/wms/product.js' productSearchKeyword: '', filteredProductsInPicker: [], selectedProductName: '', // 已选择的产品名称 + rawMaterials: [], // 原材料列表 + rawMaterialSearchKeyword: '', + filteredRawMaterialsInPicker: [], + selectedRawMaterialName: '', // 已选择的原材料名称 loading: false, qrcodeStatus: 1 // 二维码状态:0=历史码,1=当前有效码 } @@ -303,10 +354,14 @@ import { listProduct } from '@/api/wms/product.js' onLoad() { this.loadWarehouses(); + this.loadProducts(); + this.loadRawMaterials(); }, mounted() { this.loadWarehouses(); + this.loadProducts(); + this.loadRawMaterials(); }, methods: { @@ -346,6 +401,24 @@ import { listProduct } from '@/api/wms/product.js' } }, + // 加载原材料列表 + async loadRawMaterials() { + console.log('开始加载原材料列表...'); + try { + const res = await listRawMaterial({ pageNum: 1, pageSize: 1000 }); + console.log("原材料返回值", res); + if (res.code === 200) { + this.rawMaterials = res.rows || res.data || []; + this.filteredRawMaterialsInPicker = this.rawMaterials; + console.log('原材料加载成功,数量:', this.rawMaterials.length); + } else { + console.error('原材料加载失败:', res.msg); + } + } catch (err) { + console.error('加载原材料异常:', err); + } + }, + // 显示产品选择器 showProductPicker() { this.productSearchKeyword = ''; @@ -384,6 +457,44 @@ import { listProduct } from '@/api/wms/product.js' this.closeProductPicker(); }, + // 显示原材料选择器 + showRawMaterialPicker() { + this.rawMaterialSearchKeyword = ''; + this.filteredRawMaterialsInPicker = [...this.rawMaterials]; + this.$refs.rawMaterialPopup.open(); + }, + + // 关闭原材料选择器 + closeRawMaterialPicker() { + this.$refs.rawMaterialPopup.close(); + }, + + // 过滤原材料(在选择器中) + filterRawMaterialsInPicker() { + console.log('过滤原材料,关键词:', this.rawMaterialSearchKeyword); + const keyword = this.rawMaterialSearchKeyword.trim().toLowerCase(); + if (!keyword) { + this.filteredRawMaterialsInPicker = [...this.rawMaterials]; + } else { + this.filteredRawMaterialsInPicker = this.rawMaterials.filter(material => { + const name = (material.rawMaterialName || '').toLowerCase(); + return name.includes(keyword); + }); + } + }, + + // 从选择器中选择原材料 + selectRawMaterialFromPicker(material) { + this.form.itemId = material.rawMaterialId; + this.form.itemType = 'raw_material'; + this.selectedRawMaterialName = material.rawMaterialName; + uni.showToast({ + title: `已选择原材料:${material.rawMaterialName}`, + icon: 'success' + }); + this.closeRawMaterialPicker(); + }, + // 过滤库区 filterWarehouses() { console.log('过滤库区,关键词:', this.warehouseKeyword); @@ -444,14 +555,15 @@ import { listProduct } from '@/api/wms/product.js' this.currentWarehouseName = warehouse.warehouseName; this.closeWarehousePicker(); - // 检查是否选择了成品库区 - if (warehouse.warehouseName && warehouse.warehouseName.includes('成品')) { - // 切换为产品类型 + // 根据库区ID判断类型:999为成品库,其他为原材料库 + if (warehouse.warehouseId === 999) { + // 成品库,显示产品选择器 this.form.itemType = 'product'; - // 加载产品列表 - await this.loadProducts(); - // 弹出产品选择框 this.showProductPicker(); + } else { + // 其他库区,显示原材料选择器 + this.form.itemType = 'raw_material'; + this.showRawMaterialPicker(); } },