From 9c83c9d9a5799f8fa13cf5fc660a7349592a31e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Wed, 8 Apr 2026 14:29:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=8D=E5=8C=B9=E9=85=8D=E9=92=A2=E5=8D=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E6=9D=90?= =?UTF-8?q?=E6=96=99=E7=B1=BB=E5=9E=8B=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增类型不匹配钢卷查询接口和页面 2. 优化材料类型变更处理逻辑,自动清空物品选择 3. 移除表单复制时冗余的材料类型同步调用 --- klp-ui/src/api/wms/coil.js | 11 + .../src/views/wms/coil/panels/stepSplit.vue | 18 +- klp-ui/src/views/wms/coil/views/typeError.vue | 471 ++++++++++++++++++ 3 files changed, 491 insertions(+), 9 deletions(-) create mode 100644 klp-ui/src/views/wms/coil/views/typeError.vue diff --git a/klp-ui/src/api/wms/coil.js b/klp-ui/src/api/wms/coil.js index 0430d51c..2decfe64 100644 --- a/klp-ui/src/api/wms/coil.js +++ b/klp-ui/src/api/wms/coil.js @@ -378,4 +378,15 @@ export function listWithBindInfoCoil(params) { params, timeout: 600000 }) +} + +/** + * 类型不匹配的卷 + */ +export function listTypeErrorCoil() { + return request({ + url: '/wms/materialCoil/queryMismatchedItemCoils', + method: 'get', + timeout: 600000 + }) } \ No newline at end of file diff --git a/klp-ui/src/views/wms/coil/panels/stepSplit.vue b/klp-ui/src/views/wms/coil/panels/stepSplit.vue index 0b728233..7dd476d1 100644 --- a/klp-ui/src/views/wms/coil/panels/stepSplit.vue +++ b/klp-ui/src/views/wms/coil/panels/stepSplit.vue @@ -610,8 +610,15 @@ export default { // 材料类型变更处理 handleMaterialTypeChange(val) { - // 根据材料类型设置itemType - this.splitForm.itemType = val === '成品' ? 'product' : val === '原料' ? 'raw_material' : '' + // 清空物品选择 + this.splitForm.itemId = null; + + // 根据材料类型设置物品类型 + if (val === '成品') { + this.splitForm.itemType = 'product'; + } else if (val === '原料') { + this.splitForm.itemType = 'raw_material'; + } }, // 选中分条列表项(显示详情) @@ -640,8 +647,6 @@ export default { this.selectedSplitItem = null // 赋值表单数据 this.splitForm = { ...row } - // 同步材料类型和长度显示状态 - this.handleMaterialTypeChange(row.materialType) }, // 新增/编辑分条 @@ -883,11 +888,6 @@ export default { ...copiedFields }; - // 同步材料类型和长度显示状态 - if (this.splitForm.materialType) { - this.handleMaterialTypeChange(this.splitForm.materialType); - } - this.$message.success('已复制源卷信息,请根据需要修改'); } }, diff --git a/klp-ui/src/views/wms/coil/views/typeError.vue b/klp-ui/src/views/wms/coil/views/typeError.vue new file mode 100644 index 00000000..ccd098aa --- /dev/null +++ b/klp-ui/src/views/wms/coil/views/typeError.vue @@ -0,0 +1,471 @@ + + + From 7930991eb86155c10f850060040132a10b4cdeb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Wed, 8 Apr 2026 17:40:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(=E5=91=98=E5=B7=A5=E4=BF=A1=E6=81=AF):?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E6=9F=A5=E7=9C=8B=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E9=99=84=E4=BB=B6=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(异常管理): 重构异常记录表格布局和保存逻辑 feat(库存管理): 新增CRM卷材库存视图和分组筛选功能 --- klp-ui/src/views/crm/coil/index.vue | 686 ++++++++++++++++++ .../wms/coil/components/ExceptionManager.vue | 261 ++++--- klp-ui/src/views/wms/coil/views/typeError.vue | 11 +- .../src/views/wms/hrm/employeeInfo/entry.vue | 48 +- .../src/views/wms/hrm/employeeInfo/formal.vue | 6 +- .../src/views/wms/hrm/employeeInfo/leave.vue | 48 +- .../views/wms/hrm/employeeInfo/transfer.vue | 59 ++ 7 files changed, 1024 insertions(+), 95 deletions(-) create mode 100644 klp-ui/src/views/crm/coil/index.vue diff --git a/klp-ui/src/views/crm/coil/index.vue b/klp-ui/src/views/crm/coil/index.vue new file mode 100644 index 00000000..0f9bd997 --- /dev/null +++ b/klp-ui/src/views/crm/coil/index.vue @@ -0,0 +1,686 @@ + + + + + \ No newline at end of file diff --git a/klp-ui/src/views/wms/coil/components/ExceptionManager.vue b/klp-ui/src/views/wms/coil/components/ExceptionManager.vue index fb935c46..3a611be7 100644 --- a/klp-ui/src/views/wms/coil/components/ExceptionManager.vue +++ b/klp-ui/src/views/wms/coil/components/ExceptionManager.vue @@ -55,28 +55,37 @@

异常记录

- - 刷新 - +
+ 保存 + + 刷新 + +
- - + + + + + + - + - + - + - - + + - + + + - + @@ -251,11 +276,13 @@ import { listEmployeeChange, getEmployeeChange, delEmployeeChange, updateEmployeeChange, addEmployeeChange, employeeEntry } from "@/api/wms/employeeChange"; import { listDept } from "@/api/wms/dept"; import EmployeeSelector from "@/components/EmployeeSelector"; +import FileList from "@/components/FileList"; export default { name: "EmployeeEntry", components: { - EmployeeSelector + EmployeeSelector, + FileList }, data() { return { @@ -317,7 +344,19 @@ export default { }, supplementRules: { }, - supplementAttachment: undefined + supplementAttachment: undefined, + // 查看记录对话框相关 + viewOpen: false, + viewRecord: { + changeId: undefined, + infoId: undefined, + changeType: undefined, + changeTime: undefined, + changeReason: undefined, + changeHandler: undefined, + attachment: undefined, + remark: undefined + } }; }, dicts: ['hrm_employee_education'], @@ -522,6 +561,11 @@ export default { this.download('system/employeeChange/export', { ...this.queryParams }, `employeeChange_${new Date().getTime()}.xlsx`) + }, + /** 查看按钮操作 */ + handleView(row) { + this.viewRecord = row; + this.viewOpen = true; } } }; diff --git a/klp-ui/src/views/wms/hrm/employeeInfo/formal.vue b/klp-ui/src/views/wms/hrm/employeeInfo/formal.vue index 498ba5e1..53847e71 100644 --- a/klp-ui/src/views/wms/hrm/employeeInfo/formal.vue +++ b/klp-ui/src/views/wms/hrm/employeeInfo/formal.vue @@ -296,7 +296,7 @@ {{ regularRecord.changeHandler }} - + {{ regularRecord.remark }} @@ -310,9 +310,13 @@ import { listEmployeeInfo, getEmployeeInfo, delEmployeeInfo, updateEmployeeInfo } from "@/api/wms/employeeInfo"; import { listDept } from "@/api/wms/dept"; import { employeeEntry, employeeRegular, listEmployeeChange } from '@/api/wms/employeeChange' +import FileList from "@/components/FileList"; export default { name: "EmployeeInfo", + components: { + FileList + }, data() { return { // 按钮loading diff --git a/klp-ui/src/views/wms/hrm/employeeInfo/leave.vue b/klp-ui/src/views/wms/hrm/employeeInfo/leave.vue index eecaf729..edcfd5cb 100644 --- a/klp-ui/src/views/wms/hrm/employeeInfo/leave.vue +++ b/klp-ui/src/views/wms/hrm/employeeInfo/leave.vue @@ -64,6 +64,7 @@ @@ -102,6 +103,30 @@ 取 消
+ + + + + + {{ viewRecord.wmsEmployeeInfo && viewRecord.wmsEmployeeInfo.name }} + + + {{ parseTime(viewRecord.changeTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + + + {{ viewRecord.changeReason }} + + + {{ viewRecord.changeHandler }} + + + + + + {{ viewRecord.remark }} + + + @@ -109,11 +134,13 @@ import { listEmployeeChange, getEmployeeChange, delEmployeeChange, updateEmployeeChange, addEmployeeChange, employeeEntry, employeeLeave } from "@/api/wms/employeeChange"; import { listDept } from "@/api/wms/dept"; import EmployeeSelector from "@/components/EmployeeSelector"; +import FileList from "@/components/FileList"; export default { name: "EmployeeLeave", components: { - EmployeeSelector + EmployeeSelector, + FileList }, data() { return { @@ -175,7 +202,19 @@ export default { }, supplementRules: { }, - supplementAttachment: undefined + supplementAttachment: undefined, + // 查看记录对话框相关 + viewOpen: false, + viewRecord: { + changeId: undefined, + infoId: undefined, + changeType: undefined, + changeTime: undefined, + changeReason: undefined, + changeHandler: undefined, + attachment: undefined, + remark: undefined + } }; }, dicts: ['hrm_employee_education'], @@ -359,6 +398,11 @@ export default { this.download('system/employeeChange/export', { ...this.queryParams }, `employeeChange_${new Date().getTime()}.xlsx`) + }, + /** 查看按钮操作 */ + handleView(row) { + this.viewRecord = row; + this.viewOpen = true; } } }; diff --git a/klp-ui/src/views/wms/hrm/employeeInfo/transfer.vue b/klp-ui/src/views/wms/hrm/employeeInfo/transfer.vue index 632f4122..96e1f4e6 100644 --- a/klp-ui/src/views/wms/hrm/employeeInfo/transfer.vue +++ b/klp-ui/src/views/wms/hrm/employeeInfo/transfer.vue @@ -66,6 +66,7 @@ @@ -112,6 +113,42 @@ 取 消 + + + + + + {{ viewRecord.wmsEmployeeInfo && viewRecord.wmsEmployeeInfo.name }} + + + {{ viewRecord.oldDept }} + + + {{ viewRecord.oldJobType }} + + + {{ viewRecord.newDept }} + + + {{ viewRecord.newJobType }} + + + {{ parseTime(viewRecord.transferTime, '{y}-{m}-{d} {h}:{i}:{s}') }} + + + {{ viewRecord.transferReason }} + + + {{ viewRecord.transferHandler }} + + + + + + {{ viewRecord.remark }} + + + @@ -119,11 +156,13 @@ import { listEmployeeTransfer, getEmployeeTransfer, delEmployeeTransfer, updateEmployeeTransfer, transferEmployee } from "@/api/wms/employeeTransfer"; import EmployeeSelector from "@/components/EmployeeSelector"; import { listDept } from "@/api/wms/dept"; +import FileList from "@/components/FileList"; export default { name: "EmployeeTransfer", components: { EmployeeSelector, + FileList }, data() { return { @@ -194,6 +233,21 @@ export default { transferHandler: [ { required: true, message: "转岗经办人不能为空", trigger: "blur" } ], + }, + // 查看记录对话框相关 + viewOpen: false, + viewRecord: { + transferId: undefined, + infoId: undefined, + oldDept: undefined, + oldJobType: undefined, + newDept: undefined, + newJobType: undefined, + transferTime: undefined, + transferReason: undefined, + transferHandler: undefined, + attachment: undefined, + remark: undefined } }; }, @@ -335,6 +389,11 @@ export default { this.download('wms/employeeTransfer/export', { ...this.queryParams }, `employeeTransfer_${new Date().getTime()}.xlsx`) + }, + /** 查看按钮操作 */ + handleView(row) { + this.viewRecord = row; + this.viewOpen = true; } } }; From b232cbf14d14e9f626a3be26a5336e843cddf42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Wed, 8 Apr 2026 17:55:30 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(=E9=92=A2=E5=8D=B7=E7=AE=A1=E7=90=86):?= =?UTF-8?q?=20=E5=9C=A8=E5=A4=9A=E4=B8=AA=E9=A1=B5=E9=9D=A2=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=B8=9A=E5=8A=A1=E7=9B=AE=E7=9A=84=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为钢卷管理中的校正、拆分、合并、录入等操作添加业务目的选择功能,使用字典类型coil_business_purpose提供选项 --- klp-ui/src/views/wms/coil/do/correct.vue | 7 ++ klp-ui/src/views/wms/coil/do/correntAll.vue | 8 +- klp-ui/src/views/wms/coil/merge.vue | 10 ++- klp-ui/src/views/wms/coil/panels/base.vue | 8 +- .../src/views/wms/coil/panels/stepSplit.vue | 8 +- klp-ui/src/views/wms/coil/split.vue | 8 +- klp-ui/src/views/wms/coil/typing.vue | 75 ++----------------- 7 files changed, 52 insertions(+), 72 deletions(-) diff --git a/klp-ui/src/views/wms/coil/do/correct.vue b/klp-ui/src/views/wms/coil/do/correct.vue index 496d135a..a1dd8a1a 100644 --- a/klp-ui/src/views/wms/coil/do/correct.vue +++ b/klp-ui/src/views/wms/coil/do/correct.vue @@ -347,6 +347,12 @@ + + + + + @@ -422,6 +428,7 @@ export default { RawMaterialSelect, CoilTraceResult, }, + dicts: ['coil_business_purpose'], data() { return { traceOpen: false, diff --git a/klp-ui/src/views/wms/coil/do/correntAll.vue b/klp-ui/src/views/wms/coil/do/correntAll.vue index 14fc321c..b10d8b82 100644 --- a/klp-ui/src/views/wms/coil/do/correntAll.vue +++ b/klp-ui/src/views/wms/coil/do/correntAll.vue @@ -421,6 +421,12 @@ + + + + + @@ -474,7 +480,7 @@ import { getCoilTagPrintType } from '@/views/wms/coil/js/coilPrint' export default { name: 'CorrentAllPage', - dicts: ['action_type', 'coil_quality_status'], + dicts: ['action_type', 'coil_quality_status', 'coil_business_purpose'], components: { LabelRender, WarehouseSelect, diff --git a/klp-ui/src/views/wms/coil/merge.vue b/klp-ui/src/views/wms/coil/merge.vue index d48a85de..c42985f7 100644 --- a/klp-ui/src/views/wms/coil/merge.vue +++ b/klp-ui/src/views/wms/coil/merge.vue @@ -222,6 +222,14 @@ + + + + + + @@ -305,7 +313,7 @@ export default { TimeInput, AbnormalForm }, - dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree'], + dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree', 'coil_business_purpose'], data() { const currentCoilNoPrefix = generateCoilNoPrefix() return { diff --git a/klp-ui/src/views/wms/coil/panels/base.vue b/klp-ui/src/views/wms/coil/panels/base.vue index 0390dfcc..963448b6 100644 --- a/klp-ui/src/views/wms/coil/panels/base.vue +++ b/klp-ui/src/views/wms/coil/panels/base.vue @@ -396,6 +396,12 @@ + + + + + @@ -1110,7 +1116,7 @@ export default { handlePreviewLabel(row) { this.labelRender.visible = true; const itemName = row.itemName || ''; - + this.labelRender.type = row.itemType === 'product' ? '3' : '2'; this.labelRender.data = { ...row, diff --git a/klp-ui/src/views/wms/coil/panels/stepSplit.vue b/klp-ui/src/views/wms/coil/panels/stepSplit.vue index 7dd476d1..c3c06ff2 100644 --- a/klp-ui/src/views/wms/coil/panels/stepSplit.vue +++ b/klp-ui/src/views/wms/coil/panels/stepSplit.vue @@ -173,6 +173,12 @@ + + + + + @@ -340,7 +346,7 @@ export default { ProductInfo, RawMaterialInfo, }, - dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree'], + dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree', 'coil_business_purpose'], data() { const currentCoilNoPrefix = generateCoilNoPrefix() return { diff --git a/klp-ui/src/views/wms/coil/split.vue b/klp-ui/src/views/wms/coil/split.vue index 20dd0f89..8afbf7d6 100644 --- a/klp-ui/src/views/wms/coil/split.vue +++ b/klp-ui/src/views/wms/coil/split.vue @@ -215,6 +215,12 @@ + + + + + @@ -321,7 +327,7 @@ export default { TimeInput, AbnormalForm }, - dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree'], + dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree', 'coil_business_purpose'], data() { const currentCoilNoPrefix = generateCoilNoPrefix() return { diff --git a/klp-ui/src/views/wms/coil/typing.vue b/klp-ui/src/views/wms/coil/typing.vue index 459f639a..b0456616 100644 --- a/klp-ui/src/views/wms/coil/typing.vue +++ b/klp-ui/src/views/wms/coil/typing.vue @@ -207,6 +207,13 @@ + + + + + + @@ -341,7 +348,7 @@ export default { TimeInput, AbnormalForm }, - dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree'], + dicts: ['coil_quality_status', 'coil_abnormal_position', 'coil_abnormal_code', 'coil_abnormal_degree', 'coil_business_purpose'], data() { return { loading: false, @@ -685,11 +692,6 @@ export default { this.updateForm.productionDuration = data.productionDuration; this.updateForm.formattedDuration = this.formatDuration(data.productionDuration); } - - // 不再预加载物品列表,改为实时搜索 - - // 加载变更历史 - // this.loadHistory(); } } catch (error) { this.$message.error('加载钢卷信息失败'); @@ -767,67 +769,6 @@ export default { } }, - // 已移除 loadAllItems,改为实时搜索 - - // 已移除 loadItemList,改为实时搜索 - - // 实时搜索物品(后端搜索) - async searchItems(query) { - if (!this.updateForm.itemType) { - this.$message.warning('请先选择材料类型'); - return; - } - - // 如果没有输入,清空列表 - if (!query || query.trim() === '') { - if (this.updateForm.itemType === 'raw_material') { - this.rawMaterialList = []; - } else if (this.updateForm.itemType === 'product') { - this.productList = []; - } - return; - } - - try { - this.itemSearchLoading = true; - const searchQuery = query.trim(); - - if (this.updateForm.itemType === 'raw_material') { - // 后端搜索原材料(支持名称或规格模糊搜索) - const response = await listRawMaterialWithBom({ - pageNum: 1, - pageSize: 20, - rawMaterialName: searchQuery, - specification: searchQuery // 同时传入,后端会使用 OR 条件 - }); - if (response.code === 200) { - this.rawMaterialList = response.rows || []; - } - } else if (this.updateForm.itemType === 'product') { - // 后端搜索产品(支持名称或规格模糊搜索) - const response = await listProductWithBom({ - pageNum: 1, - pageSize: 20, - productName: searchQuery, - specification: searchQuery // 同时传入,后端会使用 OR 条件 - }); - if (response.code === 200) { - this.productList = response.rows || []; - } - } - } catch (error) { - console.error('搜索物品失败', error); - this.$message.error('搜索失败,请重试'); - } finally { - this.itemSearchLoading = false; - } - }, - - // 物品选择变化 - handleItemChange(itemId) { - // 物品选择变化处理 - }, - // 加载变更历史 async loadHistory() { if (!this.currentInfo.enterCoilNo) {