From 3102e93c86cafde5c3dbe30b9b7fa9b546f04d40 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Thu, 16 Jul 2026 17:33:56 +0800 Subject: [PATCH] =?UTF-8?q?2026-07-16=20RoHS=E5=A2=9E=E5=8A=A0=E3=80=90?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A4=B1=E6=95=88=E6=97=A5=E6=9C=9F=E3=80=91?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/rohs/rohs.js | 3 + src/views/modules/rohs/rohsRecord.vue | 219 ++++++++++++++++++++++++-- 2 files changed, 205 insertions(+), 17 deletions(-) diff --git a/src/api/rohs/rohs.js b/src/api/rohs/rohs.js index e21f769..5781d0b 100644 --- a/src/api/rohs/rohs.js +++ b/src/api/rohs/rohs.js @@ -27,6 +27,9 @@ export const updateRohsMaterialDesc = data => createAPI(`/rohs/updateMaterialDes // 仅保存材料明细(编辑时即时保存) export const updateRohsMaterials = data => createAPI(`/rohs/updateMaterials`, 'post', data); +// 已完成且即将失效单据更新失效日期 +export const updateRohsExpiryInfo = data => createAPI(`/rohs/updateExpiryInfo`, 'post', data); + // 下达 export const issueRohs = data => createAPI(`/rohs/issue`, 'post', data); diff --git a/src/views/modules/rohs/rohsRecord.vue b/src/views/modules/rohs/rohsRecord.vue index 66e003e..e37ae37 100644 --- a/src/views/modules/rohs/rohsRecord.vue +++ b/src/views/modules/rohs/rohsRecord.vue @@ -391,9 +391,9 @@
- + - + - + - - - - - + + 更新失效日期 - + @@ -432,15 +429,21 @@ true-label="Y" false-label="N" :disabled="isRohsFieldDisabled('isAhGrade')" - style="width: 190px">材料属性是否是AH/Is AH Grade + style="width: 210px">材料属性是否是AH/Is AH Grade - + 高风险 中风险 低风险 + + + + + + @@ -1283,6 +1286,34 @@ + + + + + + + + + + + + + + + + + + 保存 + 取消 + + + @@ -1481,7 +1512,7 @@
- + @@ -1490,15 +1521,15 @@ - + - + - + @@ -1509,10 +1540,10 @@ true-label="Y" false-label="N" disabled - style="width: 190px">材料属性是否是AH/Is AH Grade + style="width: 210px">材料属性是否是AH/Is AH Grade - + 高风险 中风险 低风险 @@ -1648,6 +1679,7 @@ export default { authFilePreview: false, authDataEntry: false, authMaterialDescRemark: false, + authUpdateExpiryDate: false, authDelete: false, superAdmin: false, createBy2: this.$store.state.user.name, @@ -2118,6 +2150,8 @@ export default { submitModalFlag: false, rohsRemarkFlag: false, rohsMaterialDescFlag: false, + updateExpiryDialogFlag: false, + updateExpiryLoading: false, rejectOpinion: '', submitLoading: false, rohsRemarkForm: { @@ -2126,6 +2160,14 @@ export default { rohsMaterialDescForm: { materialDesc: '' }, + updateExpiryForm: { + site: '', + referenceNo: '', + expiredDate: '', + validUntilValue: null, + validUntil: '', + expiryDate: '' + }, hsfStandardDefaultText: 'With the follow environmental specification: Macallan regulated Substances specification(069-0135) /Macallan sustainable fiber specification(099-00532)', modalData: { site: 'DEFAULT', @@ -2169,6 +2211,7 @@ export default { status: '', sgsReportNumber: '', rohsStatus: 'Active', + isExpiring: 'N', expiredDate: '', expiryDate: '', fiberInformation: '', @@ -2243,6 +2286,15 @@ export default { 'modalData.validUntil' () { this.syncExpiryDateByRule() }, + 'updateExpiryForm.expiredDate' () { + this.syncUpdateExpiryDateByRule() + }, + 'updateExpiryForm.validUntilValue' () { + this.syncUpdateExpiryDateByRule() + }, + 'updateExpiryForm.validUntil' () { + this.syncUpdateExpiryDateByRule() + }, 'modalData.endCustomer' () { this.applyHsfStandardDefaultByCustomer(this.modalData) } @@ -3047,6 +3099,120 @@ export default { hasPersistedRohsRecord () { return !!(this.modalData && this.modalData.site && this.modalData.referenceNo && !String(this.modalData.referenceNo).startsWith('TEMP-')) }, + canShowUpdateExpiryDateButton () { + const status = String((this.modalData && this.modalData.status) || '').trim() + const isExpiring = String((this.modalData && this.modalData.isExpiring) || '').trim().toUpperCase() + return !!(this.showModalFlag && this.authUpdateExpiryDate && status === '已完成' && isExpiring === 'Y') + }, + openUpdateExpiryDateDialog () { + if (!this.canShowUpdateExpiryDateButton()) { + return + } + const validUntilValue = this.normalizeValidUntilValue(this.modalData.validUntilValue) + this.updateExpiryForm = { + site: this.modalData.site || '', + referenceNo: this.modalData.referenceNo || '', + expiredDate: this.normalizeDateOnly(this.modalData.expiredDate), + validUntilValue: validUntilValue, + validUntil: String(this.modalData.validUntil || '').trim(), + expiryDate: '' + } + this.syncUpdateExpiryDateByRule() + this.updateExpiryDialogFlag = true + }, + syncUpdateExpiryDateByRule () { + if (!this.updateExpiryForm) { + return '' + } + const expiryDate = this.calculateExpiryDateByRule(this.updateExpiryForm.expiredDate, this.updateExpiryForm.validUntilValue, this.updateExpiryForm.validUntil) + this.$set(this.updateExpiryForm, 'expiryDate', expiryDate) + return expiryDate + }, + applyUpdatedExpiryInfo (latestData = {}) { + const expiredDate = this.normalizeDateOnly(latestData.expiredDate || this.updateExpiryForm.expiredDate || this.modalData.expiredDate) + const validUntilValue = this.normalizeValidUntilValue( + latestData.validUntilValue !== undefined && latestData.validUntilValue !== null + ? latestData.validUntilValue + : this.updateExpiryForm.validUntilValue + ) + const validUntil = String(latestData.validUntil || this.updateExpiryForm.validUntil || '').trim() + const expiryDate = this.normalizeDateOnly(latestData.expiryDate || this.updateExpiryForm.expiryDate) + const isExpiring = String(latestData.isExpiring || this.modalData.isExpiring || 'N').trim().toUpperCase() === 'Y' ? 'Y' : 'N' + + this.$set(this.modalData, 'expiredDate', expiredDate) + this.$set(this.modalData, 'validUntilValue', validUntilValue) + this.$set(this.modalData, 'validUntil', validUntil) + this.$set(this.modalData, 'expiryDate', expiryDate) + this.$set(this.modalData, 'isExpiring', isExpiring) + + if (this.currentRow && this.currentRow.site === this.modalData.site && this.currentRow.referenceNo === this.modalData.referenceNo) { + this.$set(this.currentRow, 'expiredDate', expiredDate) + this.$set(this.currentRow, 'validUntilValue', validUntilValue) + this.$set(this.currentRow, 'validUntil', validUntil) + this.$set(this.currentRow, 'expiryDate', expiryDate) + this.$set(this.currentRow, 'isExpiring', isExpiring) + } + const target = (this.dataList || []).find(item => item.site === this.modalData.site && item.referenceNo === this.modalData.referenceNo) + if (target) { + this.$set(target, 'expiredDate', expiredDate) + this.$set(target, 'validUntilValue', validUntilValue) + this.$set(target, 'validUntil', validUntil) + this.$set(target, 'expiryDate', expiryDate) + this.$set(target, 'isExpiring', isExpiring) + } + }, + saveUpdateExpiryDate () { + if (!this.hasPersistedRohsRecord()) { + this.$message.warning('当前单据未保存,无法更新失效日期') + return + } + const expiredDate = this.normalizeDateOnly(this.updateExpiryForm.expiredDate) + const validUntilValue = this.normalizeValidUntilValue(this.updateExpiryForm.validUntilValue) + const validUntil = String(this.updateExpiryForm.validUntil || '').trim() + if (!expiredDate) { + this.$message.warning('报告日期不能为空') + return + } + if (!validUntilValue) { + this.$message.warning('有效期数值必须大于0') + return + } + if (!validUntil) { + this.$message.warning('有效期单位不能为空') + return + } + const expiryDate = this.calculateExpiryDateByRule(expiredDate, validUntilValue, validUntil) + if (!expiryDate) { + this.$message.warning('有效期信息不完整,无法计算失效日期') + return + } + this.$set(this.updateExpiryForm, 'expiredDate', expiredDate) + this.$set(this.updateExpiryForm, 'validUntilValue', validUntilValue) + this.$set(this.updateExpiryForm, 'validUntil', validUntil) + this.$set(this.updateExpiryForm, 'expiryDate', expiryDate) + + const params = { + site: this.modalData.site, + referenceNo: this.modalData.referenceNo, + expiredDate: expiredDate, + validUntilValue: validUntilValue, + validUntil: validUntil + } + this.updateExpiryLoading = true + api.updateRohsExpiryInfo(params).then(({data}) => { + if (data && data.code === 0) { + this.applyUpdatedExpiryInfo((data.data || {})) + this.updateExpiryDialogFlag = false + this.$message.success('失效日期更新成功') + } else { + this.$message.error((data && data.msg) || '更新失败') + } + }).catch(() => { + this.$message.error('更新失败') + }).finally(() => { + this.updateExpiryLoading = false + }) + }, openRohsRemarkDialog () { this.$set(this.rohsRemarkForm, 'remark', this.modalData.remark || '') this.rohsRemarkFlag = true @@ -3199,6 +3365,7 @@ export default { this.authFilePreview = this.isAuth(this.menuId+":filePreview") this.authDataEntry = this.isAuth(this.menuId+":dataEntry") this.authMaterialDescRemark = this.isAuth(this.menuId + ":materialDescRemark") + this.authUpdateExpiryDate = this.isAuth(this.menuId + ":updateExpiryDate") this.authDelete = this.isAuth(this.menuId+":delete") }, // 校验是否为超级管理员 @@ -3299,6 +3466,8 @@ export default { this.rohsCreatePartDialogFlag = false this.rohsCharacteristicDialogFlag = false this.rohsMaterialDescFlag = false + this.updateExpiryDialogFlag = false + this.updateExpiryLoading = false this.rohsCreatePartTab = 'General' this.$nextTick(() => { this.refreshAttachmentPanels() @@ -3320,6 +3489,8 @@ export default { ? target.validUntilValue : fallbackData.validUntilValue this.$set(target, 'validUntilValue', this.normalizeValidUntilValue(validUntilValue)) + const isExpiring = String(target.isExpiring || fallbackData.isExpiring || 'N').trim().toUpperCase() === 'Y' ? 'Y' : 'N' + this.$set(target, 'isExpiring', isExpiring) const applicationDate = target.applicationDate || fallbackData.applicationDate || '' const plannedMassProductionDate = target.plannedMassProductionDate || fallbackData.plannedMassProductionDate || '' const expiredDate = target.expiredDate || fallbackData.expiredDate || '' @@ -3430,6 +3601,7 @@ export default { relatedPeopleName: '', mainIfsPartNo: '', mainPartDesc: '', + isExpiring: 'N', ...item } }) @@ -3519,6 +3691,7 @@ export default { relatedPeopleName: '', mainIfsPartNo: '', mainPartDesc: '', + isExpiring: 'N', ...item } }) @@ -3644,6 +3817,7 @@ export default { this.submitModalFlag = false this.rohsRemarkFlag = false this.rohsMaterialDescFlag = false + this.updateExpiryDialogFlag = false this.$nextTick(() => { this.$router.push({name: `part-partInformation`, params: {ifsPartNo: targetPartNo}}) }) @@ -3672,6 +3846,16 @@ export default { this.submitModalFlag = false this.rohsRemarkFlag = false this.rohsMaterialDescFlag = false + this.updateExpiryDialogFlag = false + this.updateExpiryLoading = false + this.updateExpiryForm = { + site: '', + referenceNo: '', + expiredDate: '', + validUntilValue: null, + validUntil: '', + expiryDate: '' + } this.rejectOpinion = '' this.rohsRemarkForm = { remark: '' @@ -3813,6 +3997,7 @@ export default { status: '草稿', sgsReportNumber: '', rohsStatus: 'Active', + isExpiring: 'N', expiredDate: '', expiryDate: '', fiberInformation: '',