From 9e24368d4c822ed27a7408f5894bf7f6c0ad044e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Thu, 5 Mar 2026 17:19:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86):?= =?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E9=92=A2=E5=8D=B7=E5=BA=93=E5=8C=BA?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加钢卷库区操作日志记录功能,包括: 1. 在入库操作时自动记录日志 2. 新增日志查询API接口 3. 实现日志查看页面和表格组件 4. 处理拒签和删除操作时的日志清理 --- .../src/api/wms/coilWarehouseOperationLog.js | 63 ++++++ klp-ui/src/views/wms/coil/do/warehousing.vue | 8 +- klp-ui/src/views/wms/coil/js/coilActions.js | 17 +- .../wms/warehouse/components/LogTable.vue | 153 +++++++++++++++ klp-ui/src/views/wms/warehouse/log.vue | 179 ++++++++++++++++++ 5 files changed, 418 insertions(+), 2 deletions(-) create mode 100644 klp-ui/src/api/wms/coilWarehouseOperationLog.js create mode 100644 klp-ui/src/views/wms/warehouse/components/LogTable.vue create mode 100644 klp-ui/src/views/wms/warehouse/log.vue diff --git a/klp-ui/src/api/wms/coilWarehouseOperationLog.js b/klp-ui/src/api/wms/coilWarehouseOperationLog.js new file mode 100644 index 00000000..28f04b94 --- /dev/null +++ b/klp-ui/src/api/wms/coilWarehouseOperationLog.js @@ -0,0 +1,63 @@ +import request from '@/utils/request' + +// 查询钢卷库区操作记录列表 +export function listCoilWarehouseOperationLog(query) { + return request({ + url: '/wms/coilWarehouseOperationLog/list', + method: 'get', + params: query + }) +} + +// 查询钢卷库区操作记录详细 +export function getCoilWarehouseOperationLog(logId) { + return request({ + url: '/wms/coilWarehouseOperationLog/' + logId, + method: 'get' + }) +} + +// 新增钢卷库区操作记录 +export function addCoilWarehouseOperationLog(data) { + return request({ + url: '/wms/coilWarehouseOperationLog', + method: 'post', + data: data + }) +} + +// 修改钢卷库区操作记录 +export function updateCoilWarehouseOperationLog(data) { + return request({ + url: '/wms/coilWarehouseOperationLog', + method: 'put', + data: data + }) +} + +// 删除钢卷库区操作记录 +export function delCoilWarehouseOperationLog(logId) { + return request({ + url: '/wms/coilWarehouseOperationLog/' + logId, + method: 'delete' + }) +} + +// 根据钢卷 ID、操作类型及出入库类型删除钢卷库区操作记录 +export function delCoilWarehouseOperationLogByCoilId(params) { + return request({ + url: '/wms/coilWarehouseOperationLog/byCoilId', + method: 'delete', + params + }) +} + +// 根据二级库区ID和时间范围查询操作记录及钢卷信息 +export function getCoilWarehouseOperationLogByWarehouseId(params) { + return request({ + timeout: 100000, + url: '/wms/coilWarehouseOperationLog/byWarehouseAndTime', + method: 'get', + params + }) +} diff --git a/klp-ui/src/views/wms/coil/do/warehousing.vue b/klp-ui/src/views/wms/coil/do/warehousing.vue index 02ab9174..d5b92fb6 100644 --- a/klp-ui/src/views/wms/coil/do/warehousing.vue +++ b/klp-ui/src/views/wms/coil/do/warehousing.vue @@ -353,6 +353,7 @@ import { listDeliveryPlan } from '@/api/wms/deliveryPlan' import handleCoil, { COIL_ACTIONS } from '../js/coilActions' import LabelRender from '../panels/LabelRender/index.vue' import CoilNo from "@/components/KLPService/Renderer/CoilNo.vue"; +import { delCoilWarehouseOperationLogByCoilId } from '@/api/wms/coilWarehouseOperationLog' // 键值为[400, 500), 不包含在字典中,但后续可以加入的特殊操作,这类操作录入后会立刻完成,例如入库(401)和发货(402) @@ -676,7 +677,7 @@ export default { this.buttonLoading = true; updatePendingAction({ ...row, - actionStatus: 3, // 3表示拒签 + actionStatus: 3, // 3表示取消操作,也就是拒签 }).then(response => { this.$modal.msgSuccess("拒签成功"); this.getList(); @@ -723,6 +724,11 @@ export default { } delPendingAction(row.actionId).then(response => { this.$modal.msgSuccess("删除成功"); + delCoilWarehouseOperationLogByCoilId({ + coilId: row.coilId, + operationType: 1, + inOutType: 1 + }) this.getList(); }).finally(() => { this.buttonLoading = false; diff --git a/klp-ui/src/views/wms/coil/js/coilActions.js b/klp-ui/src/views/wms/coil/js/coilActions.js index 0f09f0ab..f4b19a24 100644 --- a/klp-ui/src/views/wms/coil/js/coilActions.js +++ b/klp-ui/src/views/wms/coil/js/coilActions.js @@ -1,5 +1,6 @@ import { addMaterialCoil, updateMaterialCoil, updateMaterialCoilSimple } from "@/api/wms/coil" import { addPendingAction, updatePendingAction } from '@/api/wms/pendingAction'; +import { addCoilWarehouseOperationLog } from '@/api/wms/coilWarehouseOperationLog'; export const COIL_ACTIONS = { RECEIVE: 'RECEIVE', // 收货与入库的区别在于,收货相当于计划入库,不管是否已到货都执行这个操作,计划收货也是收获 @@ -57,12 +58,26 @@ export const actionStrategies = { updateMaterialCoilSimple({ ...coil, dataType: 1, + }), + addCoilWarehouseOperationLog({ + coilId: coil.coilId, + actualWarehouseId: coil.actualWarehouseId, + operationType: 1, + inOutType: 1, }) ]) + // 如果填写了实际库区,还需要新增一条库区出入记录 + // if (coil.actualWarehouseId) { + // await addCoilWarehouseOperationLog({ + // coilId: coil.coilId, + // actualWarehouseId: coil.actualWarehouseId, + // operationType: 1, + // inOutType: 1, + // }) + // } return true } }, - } const handleCoil = (action, ...args) => { diff --git a/klp-ui/src/views/wms/warehouse/components/LogTable.vue b/klp-ui/src/views/wms/warehouse/components/LogTable.vue new file mode 100644 index 00000000..70bb886f --- /dev/null +++ b/klp-ui/src/views/wms/warehouse/components/LogTable.vue @@ -0,0 +1,153 @@ + + + + + \ No newline at end of file diff --git a/klp-ui/src/views/wms/warehouse/log.vue b/klp-ui/src/views/wms/warehouse/log.vue new file mode 100644 index 00000000..1b44b3b7 --- /dev/null +++ b/klp-ui/src/views/wms/warehouse/log.vue @@ -0,0 +1,179 @@ + + + + + \ No newline at end of file From f6c60226baec2d75de8679fb90d6694c20e17f52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Thu, 5 Mar 2026 17:28:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(wms):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E9=92=A2=E5=8D=B7=E5=8F=B7=E9=87=8D=E5=A4=8D=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=B9=B6=E6=9B=BF=E6=8D=A2=E9=83=A8=E9=97=A8=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除多个组件中关于钢卷号重复的远程校验逻辑,改为本地校验 将部门选择从DictSelect替换为el-select组件,直接从API获取部门数据 --- klp-ui/src/views/wms/coil/do/correct.vue | 26 ++++++------ klp-ui/src/views/wms/coil/do/warehousing.vue | 26 ++++++------ klp-ui/src/views/wms/coil/panels/base.vue | 40 +++++++++---------- .../src/views/wms/coil/panels/stepSplit.vue | 28 ++++++------- klp-ui/src/views/wms/coil/typing.vue | 28 ++++++------- klp-ui/src/views/wms/hrm/records/meal.vue | 30 ++++++++++++-- klp-ui/src/views/wms/receive/detail/index.vue | 25 ------------ 7 files changed, 101 insertions(+), 102 deletions(-) diff --git a/klp-ui/src/views/wms/coil/do/correct.vue b/klp-ui/src/views/wms/coil/do/correct.vue index 6fa848cd..ee95575f 100644 --- a/klp-ui/src/views/wms/coil/do/correct.vue +++ b/klp-ui/src/views/wms/coil/do/correct.vue @@ -477,19 +477,19 @@ export default { currentCoilNo: [ { required: true, message: "当前钢卷号不能为空", trigger: "blur" }, // 远程校验,当前钢卷号不能重复 - { - validator: (rule, value, callback) => { - checkCoilNo({ currentCoilNo: value, coilId: this.form.coilId }).then(res => { - const { duplicateType } = res.data; - if (duplicateType === 'current' || duplicateType === 'both') { - // alert('当前钢卷号重复,请重新输入'); - callback(new Error('当前钢卷号重复,请重新输入')); - } else { - callback(); - } - }) - }, trigger: 'blur' - }, + // { + // validator: (rule, value, callback) => { + // checkCoilNo({ currentCoilNo: value, coilId: this.form.coilId }).then(res => { + // const { duplicateType } = res.data; + // if (duplicateType === 'current' || duplicateType === 'both') { + // // alert('当前钢卷号重复,请重新输入'); + // callback(new Error('当前钢卷号重复,请重新输入')); + // } else { + // callback(); + // } + // }) + // }, trigger: 'blur' + // }, ], materialType: [ { required: true, message: "材料类型不能为空", trigger: "change" } diff --git a/klp-ui/src/views/wms/coil/do/warehousing.vue b/klp-ui/src/views/wms/coil/do/warehousing.vue index d5b92fb6..33e267e7 100644 --- a/klp-ui/src/views/wms/coil/do/warehousing.vue +++ b/klp-ui/src/views/wms/coil/do/warehousing.vue @@ -443,19 +443,19 @@ export default { currentCoilNo: [ { required: true, message: "当前钢卷号不能为空", trigger: "blur" }, // 远程校验,当前钢卷号不能重复 - { - validator: (rule, value, callback) => { - checkCoilNo({ currentCoilNo: value, coilId: this.form.coilId }).then(res => { - const { duplicateType } = res.data; - if (duplicateType === 'current' || duplicateType === 'both') { - // alert('当前钢卷号重复,请重新输入'); - callback(new Error('当前钢卷号重复,请重新输入')); - } else { - callback(); - } - }) - }, trigger: 'blur' - }, + // { + // validator: (rule, value, callback) => { + // checkCoilNo({ currentCoilNo: value, coilId: this.form.coilId }).then(res => { + // const { duplicateType } = res.data; + // if (duplicateType === 'current' || duplicateType === 'both') { + // // alert('当前钢卷号重复,请重新输入'); + // callback(new Error('当前钢卷号重复,请重新输入')); + // } else { + // callback(); + // } + // }) + // }, trigger: 'blur' + // }, ], materialType: [ { required: true, message: "材料类型不能为空", trigger: "change" } diff --git a/klp-ui/src/views/wms/coil/panels/base.vue b/klp-ui/src/views/wms/coil/panels/base.vue index 48f4ba7b..1627f4dd 100644 --- a/klp-ui/src/views/wms/coil/panels/base.vue +++ b/klp-ui/src/views/wms/coil/panels/base.vue @@ -590,26 +590,26 @@ export default { currentCoilNo: [ { required: true, message: "当前钢卷号不能为空", trigger: "blur" }, // 仅在新增的时候校验 - { - validator: (rule, value, callback) => { - // if (this.form.coilId) { - // // 修改时会有coilId,不触发校验 - // console.log('修改时会有coilId,不触发校验'); - // callback(); - // } else { - // 没有coilId则为新增 触发校验 - checkCoilNo({ currentCoilNo: value, coilId: this.form.coilId }).then(res => { - const { duplicateType } = res.data; - if (duplicateType === 'current' || duplicateType === 'both') { - // alert('当前钢卷号重复,请重新输入'); - callback(new Error('当前钢卷号重复,请重新输入')); - } else { - callback(); - } - }) - // } - }, trigger: 'blur' - } + // { + // validator: (rule, value, callback) => { + // // if (this.form.coilId) { + // // // 修改时会有coilId,不触发校验 + // // console.log('修改时会有coilId,不触发校验'); + // // callback(); + // // } else { + // // 没有coilId则为新增 触发校验 + // checkCoilNo({ currentCoilNo: value, coilId: this.form.coilId }).then(res => { + // const { duplicateType } = res.data; + // if (duplicateType === 'current' || duplicateType === 'both') { + // // alert('当前钢卷号重复,请重新输入'); + // callback(new Error('当前钢卷号重复,请重新输入')); + // } else { + // callback(); + // } + // }) + // // } + // }, trigger: 'blur' + // } ], itemId: [ { required: true, message: "物品ID不能为空", trigger: "blur" } diff --git a/klp-ui/src/views/wms/coil/panels/stepSplit.vue b/klp-ui/src/views/wms/coil/panels/stepSplit.vue index 116476d8..f91e9cc5 100644 --- a/klp-ui/src/views/wms/coil/panels/stepSplit.vue +++ b/klp-ui/src/views/wms/coil/panels/stepSplit.vue @@ -278,20 +278,20 @@ export default { }, trigger: 'blur' }, // 仅在新增的时候校验 - { - validator: (rule, value, callback) => { - // 没有coilId则为新增 触发校验 - checkCoilNo({ currentCoilNo: value, coilId: this.splitForm.coilId }).then(res => { - const { duplicateType } = res.data; - if (duplicateType === 'current' || duplicateType === 'both') { - // alert('当前钢卷号重复,请重新输入'); - callback(new Error('当前钢卷号重复,请重新输入')); - } else { - callback(); - } - }) - }, trigger: 'blur' - } + // { + // validator: (rule, value, callback) => { + // // 没有coilId则为新增 触发校验 + // checkCoilNo({ currentCoilNo: value, coilId: this.splitForm.coilId }).then(res => { + // const { duplicateType } = res.data; + // if (duplicateType === 'current' || duplicateType === 'both') { + // // alert('当前钢卷号重复,请重新输入'); + // callback(new Error('当前钢卷号重复,请重新输入')); + // } else { + // callback(); + // } + // }) + // }, trigger: 'blur' + // } ], materialType: [{ required: true, message: '请选择材料类型', trigger: 'change' }], itemId: [{ required: true, message: '请选择成品/原料', trigger: 'change' }], diff --git a/klp-ui/src/views/wms/coil/typing.vue b/klp-ui/src/views/wms/coil/typing.vue index 9e33253e..faabcae8 100644 --- a/klp-ui/src/views/wms/coil/typing.vue +++ b/klp-ui/src/views/wms/coil/typing.vue @@ -298,20 +298,20 @@ export default { }, trigger: 'blur' }, // 仅在新增的时候校验 - { - validator: (rule, value, callback) => { - // 没有coilId则为新增 触发校验 - checkCoilNo({ currentCoilNo: value, coilId: this.updateForm.coilId }).then(res => { - const { duplicateType } = res.data; - if (duplicateType === 'current' || duplicateType === 'both') { - // alert('当前钢卷号重复,请重新输入'); - callback(new Error('当前钢卷号重复,请重新输入')); - } else { - callback(); - } - }) - }, trigger: 'blur' - } + // { + // validator: (rule, value, callback) => { + // // 没有coilId则为新增 触发校验 + // checkCoilNo({ currentCoilNo: value, coilId: this.updateForm.coilId }).then(res => { + // const { duplicateType } = res.data; + // if (duplicateType === 'current' || duplicateType === 'both') { + // // alert('当前钢卷号重复,请重新输入'); + // callback(new Error('当前钢卷号重复,请重新输入')); + // } else { + // callback(); + // } + // }) + // }, trigger: 'blur' + // } ], team: [ { required: true, message: '请输入班组', trigger: 'blur' } diff --git a/klp-ui/src/views/wms/hrm/records/meal.vue b/klp-ui/src/views/wms/hrm/records/meal.vue index 25c91a52..fd82e323 100644 --- a/klp-ui/src/views/wms/hrm/records/meal.vue +++ b/klp-ui/src/views/wms/hrm/records/meal.vue @@ -31,7 +31,15 @@ /> - + + + + @@ -156,7 +164,15 @@ - + + + + @@ -188,6 +204,7 @@ import { listMealReport, getMealReport, delMealReport, addMealReport, updateMealReport } from "@/api/wms/mealReport"; import DictSelect from "@/components/DictSelect"; import EmployeeSelector from "@/components/EmployeeSelector"; +import { listDept } from "@/api/wms/dept" export default { name: "MealReport", @@ -241,11 +258,13 @@ export default { takeoutPeople: [{ required: true, message: '打包人数不能为空', trigger: 'blur' }], totalPeople: [{ required: true, message: '用餐总人数不能为空', trigger: 'blur' }], reportUserName: [{ required: true, message: '报餐人姓名不能为空', trigger: 'change' }] - } + }, + deptOptions: [] }; }, created() { this.getList(); + this.getDeptList(); }, watch: { 'form.dineInPeople': { @@ -262,6 +281,11 @@ export default { } }, methods: { + getDeptList() { + listDept().then(response => { + this.deptOptions = response.data + }) + }, /** 查询部门报餐主列表 */ getList() { this.loading = true; diff --git a/klp-ui/src/views/wms/receive/detail/index.vue b/klp-ui/src/views/wms/receive/detail/index.vue index 81340274..514a0562 100644 --- a/klp-ui/src/views/wms/receive/detail/index.vue +++ b/klp-ui/src/views/wms/receive/detail/index.vue @@ -395,31 +395,6 @@ export default { this.title = "修改收货单"; }); }, - /** 提交按钮 */ - submitForm() { - this.$refs["form"].validate(valid => { - if (valid) { - this.buttonLoading = true; - if (this.form.waybillId != null) { - updateDeliveryWaybill(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }).finally(() => { - this.buttonLoading = false; - }); - } else { - addDeliveryWaybill(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }).finally(() => { - this.buttonLoading = false; - }); - } - } - }); - }, /** 导出按钮操作 */ handleExport() { this.download('wms/deliveryWaybill/export', {