diff --git a/src/views/modules/customerIssue/customerIssuePDAIssueList.vue b/src/views/modules/customerIssue/customerIssuePDAIssueList.vue index ffc12a7..e49ea1d 100644 --- a/src/views/modules/customerIssue/customerIssuePDAIssueList.vue +++ b/src/views/modules/customerIssue/customerIssuePDAIssueList.vue @@ -591,7 +591,7 @@ export default { ) return } - this.labelList.push({ + const newLabel = { id: Date.now(), labelCode: labelCode, partNo: partNo, @@ -605,9 +605,16 @@ export default { unitId: labelInfo.unitId || labelCode, site: labelInfo.site || this.site, height: labelInfo.height || null, - }) - - this.$message.success('操作成功') + expiredDate: labelInfo.expiredDate, + } + this.confirmIfHasExpired([newLabel]) + .then(() => { + this.labelList.push(newLabel) + this.$message.success('操作成功') + }) + .catch(() => { + this.rollbackInvalidScan(labelInfo, labelCode) + }) } else { this.$message.error(data.msg || '该标签不符合发料要求,请检查') } @@ -796,11 +803,65 @@ export default { }) }, + parseExpiredTime(expiredDate) { + if (expiredDate == null || expiredDate === '') return NaN + if (typeof expiredDate === 'number') return expiredDate + if (expiredDate instanceof Date) { + const time = expiredDate.getTime() + return Number.isNaN(time) ? NaN : time + } + if (Array.isArray(expiredDate) && expiredDate.length >= 3) { + return new Date( + Number(expiredDate[0]), + Number(expiredDate[1]) - 1, + Number(expiredDate[2]), + Number(expiredDate[3] || 0), + Number(expiredDate[4] || 0), + Number(expiredDate[5] || 0) + ).getTime() + } + const raw = String(expiredDate).trim() + const matched = raw.match( + /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{1,2})(?::(\d{1,2}))?)?/ + ) + if (matched) { + return new Date( + Number(matched[1]), + Number(matched[2]) - 1, + Number(matched[3]), + Number(matched[4] || 0), + Number(matched[5] || 0), + Number(matched[6] || 0) + ).getTime() + } + return new Date(raw.replace(/-/g, '/')).getTime() + }, + isExpiredDate(expiredDate) { + const expiredTime = this.parseExpiredTime(expiredDate) + if (Number.isNaN(expiredTime)) return false + return expiredTime < Date.now() + }, + confirmIfHasExpired(list) { + const hasExpired = (list || []).some((item) => this.isExpiredDate(item.expiredDate)) + if (!hasExpired) { + return Promise.resolve() + } + return this.$confirm('扫描清单中有已过期物料,是否继续?', '提示', { + confirmButtonText: '是', + cancelButtonText: '否', + type: 'warning', + }) + }, async confirmIssue() { if (this.labelList.length === 0) { this.$message.warning('请先扫描发料标签') return } + try { + await this.confirmIfHasExpired(this.labelList) + } catch (e) { + return + } if (this.totalScannedQty > this.orderInfo.quantity - this.qtyIssued) { this.$message.warning('扫描数量不能大于总发料数量和已发数量的差!') @@ -2659,3 +2720,5 @@ export default { border-top: 1px solid #f0f0f0; } + + \ No newline at end of file diff --git a/src/views/modules/production-issue/directIssueDetail.vue b/src/views/modules/production-issue/directIssueDetail.vue index b8a7488..24fe6b1 100644 --- a/src/views/modules/production-issue/directIssueDetail.vue +++ b/src/views/modules/production-issue/directIssueDetail.vue @@ -238,19 +238,20 @@ export default { height: data.labelInfo.height || 0, wdrNo: data.labelInfo.wdrNo, engChgLevel: data.labelInfo.engChgLevel, + expiredDate: data.labelInfo.expiredDate, } - this.scannedLabels.push(newLabel) - console.log(this.scannedLabels) - - this.$message.success('扫描成功') - - // 如果勾选了"是否部分",添加后直接弹出修改数量弹框 - if (this.isPartial) { - const newIndex = this.scannedLabels.length - 1 - this.$nextTick(() => { - this.handleLabelClick(newLabel, newIndex) + this.confirmIfHasExpired([newLabel]) + .then(() => { + this.scannedLabels.push(newLabel) + this.$message.success('扫描成功') + if (this.isPartial) { + const newIndex = this.scannedLabels.length - 1 + this.$nextTick(() => { + this.handleLabelClick(newLabel, newIndex) + }) + } }) - } + .catch(() => {}) } else { this.$message.error(data.msg || '标签验证失败') } @@ -291,13 +292,68 @@ export default { this.$router.back() } }, + parseExpiredTime(expiredDate) { + if (expiredDate == null || expiredDate === '') return NaN + if (typeof expiredDate === 'number') return expiredDate + if (expiredDate instanceof Date) { + const time = expiredDate.getTime() + return Number.isNaN(time) ? NaN : time + } + if (Array.isArray(expiredDate) && expiredDate.length >= 3) { + return new Date( + Number(expiredDate[0]), + Number(expiredDate[1]) - 1, + Number(expiredDate[2]), + Number(expiredDate[3] || 0), + Number(expiredDate[4] || 0), + Number(expiredDate[5] || 0) + ).getTime() + } + const raw = String(expiredDate).trim() + const matched = raw.match( + /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{1,2})(?::(\d{1,2}))?)?/ + ) + if (matched) { + return new Date( + Number(matched[1]), + Number(matched[2]) - 1, + Number(matched[3]), + Number(matched[4] || 0), + Number(matched[5] || 0), + Number(matched[6] || 0) + ).getTime() + } + return new Date(raw.replace(/-/g, '/')).getTime() + }, + isExpiredDate(expiredDate) { + const expiredTime = this.parseExpiredTime(expiredDate) + if (Number.isNaN(expiredTime)) return false + return expiredTime < Date.now() + }, + confirmIfHasExpired(list) { + const hasExpired = (list || []).some((item) => this.isExpiredDate(item.expiredDate)) + if (!hasExpired) { + return Promise.resolve() + } + return this.$confirm('扫描清单中有已过期物料,是否继续?', '提示', { + confirmButtonText: '是', + cancelButtonText: '否', + type: 'warning', + }) + }, confirmIssue() { console.log('1231', localStorage.getItem('userName')) if (this.scannedLabels.length === 0) { this.$message.warning('请先扫描材料标签') return } - + this.confirmIfHasExpired(this.scannedLabels) + .then(() => { + this.submitDirectIssue() + }) + .catch(() => {}) + }, + submitDirectIssue() { const params = { site: this.site, workOrderNo: this.workOrderNo, diff --git a/src/views/modules/production-issue/directIssueNoMaterialDetail.vue b/src/views/modules/production-issue/directIssueNoMaterialDetail.vue index 5736f70..be92dc8 100644 --- a/src/views/modules/production-issue/directIssueNoMaterialDetail.vue +++ b/src/views/modules/production-issue/directIssueNoMaterialDetail.vue @@ -324,6 +324,7 @@ export default { height: data.labelInfo.height || 0, wdrNo: data.labelInfo.wdrNo, engChgLevel: data.labelInfo.engChgLevel, + expiredDate: data.labelInfo.expiredDate, lineItemNo: "", itemNo: "", }; @@ -404,13 +405,16 @@ export default { pushLabelAndMaybeEdit(label) { console.log("333"); - - this.scannedLabels.push(label); - this.$message.success("扫描成功"); - if (this.isPartial) { - const newIndex = this.scannedLabels.length - 1; - this.$nextTick(() => this.handleLabelClick(label, newIndex)); - } + this.confirmIfHasExpired([label]) + .then(() => { + this.scannedLabels.push(label); + this.$message.success("扫描成功"); + if (this.isPartial) { + const newIndex = this.scannedLabels.length - 1; + this.$nextTick(() => this.handleLabelClick(label, newIndex)); + } + }) + .catch(() => {}); }, cancelMaterialSelect() { @@ -466,12 +470,67 @@ export default { back(); } }, + parseExpiredTime(expiredDate) { + if (expiredDate == null || expiredDate === "") return NaN; + if (typeof expiredDate === "number") return expiredDate; + if (expiredDate instanceof Date) { + const time = expiredDate.getTime(); + return Number.isNaN(time) ? NaN : time; + } + if (Array.isArray(expiredDate) && expiredDate.length >= 3) { + return new Date( + Number(expiredDate[0]), + Number(expiredDate[1]) - 1, + Number(expiredDate[2]), + Number(expiredDate[3] || 0), + Number(expiredDate[4] || 0), + Number(expiredDate[5] || 0) + ).getTime(); + } + const raw = String(expiredDate).trim(); + const matched = raw.match( + /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{1,2})(?::(\d{1,2}))?)?/ + ); + if (matched) { + return new Date( + Number(matched[1]), + Number(matched[2]) - 1, + Number(matched[3]), + Number(matched[4] || 0), + Number(matched[5] || 0), + Number(matched[6] || 0) + ).getTime(); + } + return new Date(raw.replace(/-/g, "/")).getTime(); + }, + isExpiredDate(expiredDate) { + const expiredTime = this.parseExpiredTime(expiredDate); + if (Number.isNaN(expiredTime)) return false; + return expiredTime < Date.now(); + }, + confirmIfHasExpired(list) { + const hasExpired = (list || []).some((item) => this.isExpiredDate(item.expiredDate)); + if (!hasExpired) { + return Promise.resolve(); + } + return this.$confirm("扫描清单中有已过期物料,是否继续?", "提示", { + confirmButtonText: "是", + cancelButtonText: "否", + type: "warning", + }); + }, confirmIssue() { if (this.scannedLabels.length === 0) { this.$message.warning("请先扫描材料标签"); return; } - + this.confirmIfHasExpired(this.scannedLabels) + .then(() => { + this.submitDirectIssue(); + }) + .catch(() => {}); + }, + submitDirectIssue() { const params = { site: this.site, workOrderNo: this.workOrderNo, diff --git a/src/views/modules/production-issue/productionPickingDetail.vue b/src/views/modules/production-issue/productionPickingDetail.vue index cf33a48..b9269c3 100644 --- a/src/views/modules/production-issue/productionPickingDetail.vue +++ b/src/views/modules/production-issue/productionPickingDetail.vue @@ -245,17 +245,20 @@ export default { wdrNo: data.labelInfo.wdrNo, height: data.labelInfo.height || 0, engChgLevel: data.labelInfo.engChgLevel, + expiredDate: data.labelInfo.expiredDate, } - this.labelList.push(newLabel) - - this.$message.success('操作成功') - - if (this.isPartial) { - const newIndex = this.labelList.length - 1 - this.$nextTick(() => { - this.handleLabelClick(newLabel, newIndex) + this.confirmIfHasExpired([newLabel]) + .then(() => { + this.labelList.push(newLabel) + this.$message.success('操作成功') + if (this.isPartial) { + const newIndex = this.labelList.length - 1 + this.$nextTick(() => { + this.handleLabelClick(newLabel, newIndex) + }) + } }) - } + .catch(() => {}) } else { this.$message.error(data.msg || '该标签与出库单不符,请检查') } @@ -319,6 +322,55 @@ export default { } }, + parseExpiredTime(expiredDate) { + if (expiredDate == null || expiredDate === '') return NaN + if (typeof expiredDate === 'number') return expiredDate + if (expiredDate instanceof Date) { + const time = expiredDate.getTime() + return Number.isNaN(time) ? NaN : time + } + if (Array.isArray(expiredDate) && expiredDate.length >= 3) { + return new Date( + Number(expiredDate[0]), + Number(expiredDate[1]) - 1, + Number(expiredDate[2]), + Number(expiredDate[3] || 0), + Number(expiredDate[4] || 0), + Number(expiredDate[5] || 0) + ).getTime() + } + const raw = String(expiredDate).trim() + const matched = raw.match( + /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{1,2})(?::(\d{1,2}))?)?/ + ) + if (matched) { + return new Date( + Number(matched[1]), + Number(matched[2]) - 1, + Number(matched[3]), + Number(matched[4] || 0), + Number(matched[5] || 0), + Number(matched[6] || 0) + ).getTime() + } + return new Date(raw.replace(/-/g, '/')).getTime() + }, + isExpiredDate(expiredDate) { + const expiredTime = this.parseExpiredTime(expiredDate) + if (Number.isNaN(expiredTime)) return false + return expiredTime < Date.now() + }, + confirmIfHasExpired(list) { + const hasExpired = (list || []).some((item) => this.isExpiredDate(item.expiredDate)) + if (!hasExpired) { + return Promise.resolve() + } + return this.$confirm('扫描清单中有已过期物料,是否继续?', '提示', { + confirmButtonText: '是', + cancelButtonText: '否', + type: 'warning', + }) + }, // 确认出库 confirmOutbound() { if (this.labelList.length === 0) { @@ -333,17 +385,21 @@ export default { } qty += label.quantity } - if (qty > this.outboundInfo.qtyToIssue) { - this.$confirm('扫描标签总数量超过需求数量确定出库吗?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }).then(() => { - this.confirmProductionPicking() + this.confirmIfHasExpired(this.labelList) + .then(() => { + if (qty > this.outboundInfo.qtyToIssue) { + this.$confirm('扫描标签总数量超过需求数量确定出库吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + this.confirmProductionPicking() + }) + } else { + this.confirmProductionPicking() + } }) - } else { - this.confirmProductionPicking() - } + .catch(() => {}) }, confirmProductionPicking() { const params = {