From a3fb7138648cb3a7095b9aa345620ca975b683bb Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Mon, 1 Jun 2026 09:14:31 +0800 Subject: [PATCH] =?UTF-8?q?QC=E7=94=9F=E4=BA=A7=E8=BD=A6=E9=97=B4=E8=B4=9F?= =?UTF-8?q?=E8=B4=A3=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/erf/erf.js | 2 +- .../modules/erf/components/expApplyForm.vue | 190 +++++++++++++----- src/views/modules/erf/expApplyList.vue | 3 +- 3 files changed, 146 insertions(+), 49 deletions(-) diff --git a/src/api/erf/erf.js b/src/api/erf/erf.js index 92a1469..a1ac7a0 100644 --- a/src/api/erf/erf.js +++ b/src/api/erf/erf.js @@ -21,7 +21,7 @@ export const getExpApplyDetail = data => createAPI(`/erf/expApply/getExpApplyDet export const saveExpApply = data => createAPI(`/erf/expApply/saveExpApply`, 'post', data) /** - * 获取负责人列表(PJM负责人 + 生产车间负责人) + * 获取负责人列表(PJM负责人 + 生产车间负责人 + QC车间负责人) */ export const getPjmLeaderList = data => createAPI(`/erf/expApply/getPjmLeaderList`, 'post', data) diff --git a/src/views/modules/erf/components/expApplyForm.vue b/src/views/modules/erf/components/expApplyForm.vue index 043108c..3061a85 100644 --- a/src/views/modules/erf/components/expApplyForm.vue +++ b/src/views/modules/erf/components/expApplyForm.vue @@ -105,8 +105,8 @@ - - + + + + + + + + + + @@ -214,45 +235,6 @@ --> - @@ -286,6 +268,7 @@ export default { buList: [], pjmLeaderList: [], workshopLeaderList: [], + qcWorkshopLeaderList: [], saveHeaderData: { applyNo: '', originalApplyNo: '', @@ -305,12 +288,15 @@ export default { pjmLeaderName: '', workshopLeaderUserId: '', workshopLeaderName: '', + qcWorkshopLeaderUserId: '', + qcWorkshopLeaderName: '', contactMethod: '', processRequirement: '', creatorUserId: this.$store.state.user.id, creatorName: this.$store.state.user.userDisplay }, workshopLeaderUserIds: [], + qcWorkshopLeaderUserIds: [], formRules: { applyNo: [ @@ -330,6 +316,9 @@ export default { ], expectedFinishDate: [ { required: true, message: '请选择期望完成日期', trigger: 'change' } + ], + workshopLeaderUserId: [ + { required: true, message: '请选择生产车间负责人', trigger: 'change' } ] }, @@ -345,7 +334,10 @@ export default { this.saveHeaderData.pjmLeaderName = '' this.saveHeaderData.workshopLeaderUserId = '' this.saveHeaderData.workshopLeaderName = '' + this.saveHeaderData.qcWorkshopLeaderUserId = '' + this.saveHeaderData.qcWorkshopLeaderName = '' this.workshopLeaderUserIds = [] + this.qcWorkshopLeaderUserIds = [] // BU为空时回退查询全部负责人 this.loadPjmLeaderList('') return @@ -356,7 +348,10 @@ export default { this.saveHeaderData.pjmLeaderName = '' this.saveHeaderData.workshopLeaderUserId = '' this.saveHeaderData.workshopLeaderName = '' + this.saveHeaderData.qcWorkshopLeaderUserId = '' + this.saveHeaderData.qcWorkshopLeaderName = '' this.workshopLeaderUserIds = [] + this.qcWorkshopLeaderUserIds = [] } this.loadPjmLeaderList(newVal) } @@ -396,29 +391,36 @@ export default { }, /** - * 加载负责人列表(PJM负责人 + 生产车间负责人) + * 加载负责人列表(PJM负责人 + 生产车间负责人 + QC车间负责人) */ loadPjmLeaderList(buNo) { getPjmLeaderList({ buNo: buNo || '' }).then(({data}) => { if (data && data.code === 0) { this.pjmLeaderList = data.pjmLeaderList || data.list || [] this.workshopLeaderList = data.workshopLeaderList || [] + this.qcWorkshopLeaderList = data.qcWorkshopLeaderList || [] this.ensurePjmLeaderOption() this.ensureWorkshopLeaderOption() + this.ensureQcWorkshopLeaderOption() if (this.saveHeaderData.pjmLeaderUserId && !this.saveHeaderData.pjmLeaderName) { this.handlePjmLeaderChange(this.saveHeaderData.pjmLeaderUserId) } if (this.workshopLeaderUserIds.length > 0) { this.handleWorkshopLeaderChange(this.workshopLeaderUserIds) } + if (this.qcWorkshopLeaderUserIds.length > 0) { + this.handleQcWorkshopLeaderChange(this.qcWorkshopLeaderUserIds) + } } else { this.pjmLeaderList = [] this.workshopLeaderList = [] + this.qcWorkshopLeaderList = [] this.$message.error(data.msg || '加载负责人失败') } }).catch(() => { this.pjmLeaderList = [] this.workshopLeaderList = [] + this.qcWorkshopLeaderList = [] this.$message.error('加载负责人异常') }) }, @@ -476,6 +478,13 @@ export default { this.saveHeaderData.workshopLeaderName = this.parseWorkshopLeaderNames( this.saveHeaderData.workshopLeaderName ).join(',') + this.qcWorkshopLeaderUserIds = this.parseQcWorkshopLeaderUserIds(this.saveHeaderData.qcWorkshopLeaderUserId) + this.saveHeaderData.qcWorkshopLeaderUserId = this.qcWorkshopLeaderUserIds.length > 0 + ? this.qcWorkshopLeaderUserIds.join(',') + : '' + this.saveHeaderData.qcWorkshopLeaderName = this.parseQcWorkshopLeaderNames( + this.saveHeaderData.qcWorkshopLeaderName + ).join(',') }, /** @@ -498,18 +507,84 @@ export default { if (workshopLeaderIds.length === 0) { this.saveHeaderData.workshopLeaderName = '' + } else { + const workshopLeaderNameList = workshopLeaderIds.map(userId => { + const selected = this.workshopLeaderList.find(item => Number(item.userId) === Number(userId)) + if (selected) { + return selected.userDisplay || selected.username || '' + } + return oldWorkshopLeaderNameMap[userId] || '' + }).filter(name => !!name) + + this.saveHeaderData.workshopLeaderName = workshopLeaderNameList.join(',') + } + this.$nextTick(() => { + if (this.$refs.applyForm) { + this.$refs.applyForm.validateField('workshopLeaderUserId') + } + }) + }, + + /** + * 解析QC车间负责人ID列表 + */ + parseQcWorkshopLeaderUserIds(value) { + if (value === null || value === undefined || value === '') { + return [] + } + const sourceList = Array.isArray(value) ? value : String(value).split(',') + const idList = [] + sourceList.forEach(item => { + const id = Number(String(item).trim()) + if (Number.isFinite(id) && !idList.includes(id)) { + idList.push(id) + } + }) + return idList + }, + + /** + * 解析QC车间负责人姓名列表 + */ + parseQcWorkshopLeaderNames(value) { + if (!value) { + return [] + } + return String(value).split(',').map(item => item.trim()).filter(item => !!item) + }, + + /** + * 处理QC车间负责人变更 + */ + handleQcWorkshopLeaderChange(userIds) { + const oldQcWorkshopLeaderIds = this.parseQcWorkshopLeaderUserIds(this.saveHeaderData.qcWorkshopLeaderUserId) + const oldQcWorkshopLeaderNames = this.parseQcWorkshopLeaderNames(this.saveHeaderData.qcWorkshopLeaderName) + const oldQcWorkshopLeaderNameMap = {} + oldQcWorkshopLeaderIds.forEach((id, index) => { + const oldName = oldQcWorkshopLeaderNames[index] + if (oldName) { + oldQcWorkshopLeaderNameMap[id] = oldName + } + }) + + const qcWorkshopLeaderIds = this.parseQcWorkshopLeaderUserIds(userIds) + this.qcWorkshopLeaderUserIds = qcWorkshopLeaderIds + this.saveHeaderData.qcWorkshopLeaderUserId = qcWorkshopLeaderIds.length > 0 ? qcWorkshopLeaderIds.join(',') : '' + + if (qcWorkshopLeaderIds.length === 0) { + this.saveHeaderData.qcWorkshopLeaderName = '' return } - const workshopLeaderNameList = workshopLeaderIds.map(userId => { - const selected = this.workshopLeaderList.find(item => Number(item.userId) === Number(userId)) + const qcWorkshopLeaderNameList = qcWorkshopLeaderIds.map(userId => { + const selected = this.qcWorkshopLeaderList.find(item => Number(item.userId) === Number(userId)) if (selected) { return selected.userDisplay || selected.username || '' } - return oldWorkshopLeaderNameMap[userId] || '' + return oldQcWorkshopLeaderNameMap[userId] || '' }).filter(name => !!name) - this.saveHeaderData.workshopLeaderName = workshopLeaderNameList.join(',') + this.saveHeaderData.qcWorkshopLeaderName = qcWorkshopLeaderNameList.join(',') }, /** @@ -550,6 +625,27 @@ export default { }) }, + /** + * 编辑场景兜底:已选QC车间负责人不在当前下拉项时补充显示 + */ + ensureQcWorkshopLeaderOption() { + if (!this.qcWorkshopLeaderUserIds || this.qcWorkshopLeaderUserIds.length === 0) { + return + } + const qcWorkshopLeaderNames = this.parseQcWorkshopLeaderNames(this.saveHeaderData.qcWorkshopLeaderName) + this.qcWorkshopLeaderUserIds.forEach((userId, index) => { + const exist = this.qcWorkshopLeaderList.some(item => Number(item.userId) === Number(userId)) + if (!exist) { + const userDisplay = qcWorkshopLeaderNames[index] || String(userId) + this.qcWorkshopLeaderList.push({ + userId: userId, + username: userDisplay, + userDisplay: userDisplay + }) + } + }) + }, + /** * 获取表单数据(用于验证) */ diff --git a/src/views/modules/erf/expApplyList.vue b/src/views/modules/erf/expApplyList.vue index e6afe29..730f81a 100644 --- a/src/views/modules/erf/expApplyList.vue +++ b/src/views/modules/erf/expApplyList.vue @@ -135,10 +135,11 @@