From 3f22412f4d06779dcec144eaea7789656e8f1e29 Mon Sep 17 00:00:00 2001 From: qiankanghui Date: Fri, 24 Jul 2026 10:19:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(eam):=20=E6=B7=BB=E5=8A=A0=E7=BC=BA?= =?UTF-8?q?=E9=99=B7=E5=B7=A5=E5=8D=95=E5=AE=A1=E6=A0=B8=E5=92=8C=E5=8D=8F?= =?UTF-8?q?=E5=8A=A9=E4=BA=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增撤销审核删除协助人API接口 - 在缺陷工单页面添加是否同意和协助人字段 - 实现不同意时需填写理由的功能 - 添加协助人选择对话框和确认功能 - 针对03-RFID业务单元固定计划执行人员逻辑 - 完善工单审核流程和权限校验 - 优化到达人员选择和验证逻辑 --- src/api/eam/eam.js | 3 + .../modules/eam/eamWorkOrderForDefect2.vue | 127 +++++++++---- .../reportWorkOrder/reportDefectOrder2.vue | 168 ++++++++++++++++-- 3 files changed, 255 insertions(+), 43 deletions(-) diff --git a/src/api/eam/eam.js b/src/api/eam/eam.js index e2b1bf4..62072dc 100644 --- a/src/api/eam/eam.js +++ b/src/api/eam/eam.js @@ -268,3 +268,6 @@ export const eamMaintainOrderExportExcel= data => createAPI(`/pms/eam/eamMaintai // 废弃工单 export const abandonedEamWorkOrder = data => createAPI(`/pms/eam/abandonedEamWorkOrder`,'post',data) + +// 撤销审核删除协助人 +export const cancelDefect = data => createAPI(`/pms/eam/cancelDefect`,'post',data) diff --git a/src/views/modules/eam/eamWorkOrderForDefect2.vue b/src/views/modules/eam/eamWorkOrderForDefect2.vue index baecf0a..f1c84c4 100644 --- a/src/views/modules/eam/eamWorkOrderForDefect2.vue +++ b/src/views/modules/eam/eamWorkOrderForDefect2.vue @@ -286,7 +286,23 @@ - + + + + + + + + + + + + + + + + + 通过 退回 取消 @@ -849,6 +865,7 @@ import { queryHistoryRecord, // 查看维修历史 getSparPartImages, // 获取备件图片 getConfirmButtonOperator, // 获取确认按钮操作人 + cancelDefect, // 撤销审核删除协助人 } from "@/api/eam/eam.js" import { downLoadObjectFile, @@ -1564,6 +1581,11 @@ export default { feedbackBy: '', actualOperatorName: '', knowledgeFlag: '', + isAgreed: '', + disagreeReason: '', + assistUser: '', + assistUserName: '', + functionType: '', }, abandonedData: { site: '', @@ -1588,6 +1610,8 @@ export default { defectID: '', defectDesc: '', actualOperatorName: '', + assistUser: '', + assistUserName: '', planDate: '', reachDate: '', actualDate: '', @@ -2542,6 +2566,13 @@ export default { this.submitData.actualOperatorName = this.detailData.actualOperatorName this.submitData.knowledgeFlag = this.detailData.knowledgeFlag this.submitData.updateBy = this.$store.state.user.name + this.submitData.isAgreed = '' + this.submitData.disagreeReason = '' + this.submitData.reachOperator = this.detailData.reachOperator || this.detailData.actualOperator || '' + this.submitData.reachOperatorName = this.detailData.reachOperatorName || this.detailData.actualOperatorName || '' + this.submitData.assistUser = this.detailData.assistUser + this.submitData.assistUserName = this.detailData.assistUserName + this.submitData.functionType = this.detailData.functionType // if (this.detailData.status === '已完工') { // this.$confirm(`是否取消审核?`, '提示', { // confirmButtonText: '确定', @@ -2622,11 +2653,20 @@ export default { this.$message.warning('请选择难度等级!') return } + if (this.submitData.isAgreed === '' || this.submitData.isAgreed == null) { + this.$message.warning('请选择是否同意!') + return + } + if (this.submitData.isAgreed === 'N' && (this.submitData.disagreeReason === '' || this.submitData.disagreeReason == null)) { + this.$message.warning('请填写不同意的理由!') + return + } submitDefect(this.submitData).then(({data}) => { if (data && data.code === 0) { this.getDataList() this.detailData.status = '已完工' this.submitModelFlag = false + this.detailModelFlag = false this.$message({ message: '操作成功', type: 'success', @@ -2663,7 +2703,7 @@ export default { } }, revokeModel(){ - this.$confirm(`是否撤销审核,回退到‘待审核’状态?`, '提示', { + this.$confirm(`是否撤销审核,回退到'待审核'状态?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' @@ -2672,35 +2712,62 @@ export default { this.$message.warning('无审核权限!') return } - this.submitData.site = this.detailData.site - this.submitData.buNo = this.detailData.buNo - this.submitData.orderNo = this.detailData.orderNo - this.submitData.planID = this.detailData.planID - this.submitData.objectID = this.detailData.objectID - this.submitData.planDesc = this.detailData.feedBackDesc - this.submitData.disposalMeasures = this.detailData.disposalMeasures - this.submitData.defectID = this.detailData.defectID - this.submitData.defectDesc = this.detailData.defectDesc - this.submitData.remark = this.detailData.remark - this.submitData.difficultyLevel = '' - this.submitData.difficultyRemark = '' - this.submitData.faultReason = this.detailData.faultReason - this.submitData.handlingMethod = this.detailData.handlingMethod - this.submitData.preventiveMeasure = this.detailData.preventiveMeasure - this.submitData.feedbackBy = this.detailData.createBy - this.submitData.actualOperatorName = this.detailData.actualOperatorName - this.submitData.knowledgeFlag = this.detailData.knowledgeFlag - this.submitData.updateBy = this.$store.state.user.name - this.submitData.status = '待审核' - submitDefect(this.submitData).then(({data}) => { + + const deleteData = { + site: this.detailData.site, + buNo: this.detailData.buNo, + orderNo: this.detailData.orderNo, + functionType: this.detailData.functionType, + assistUser: this.detailData.assistUser + } + + cancelDefect(deleteData).then(({data}) => { if (data && data.code === 0) { - this.getDataList() - this.detailData.status = '待审核' - this.$message({ - message: '操作成功', - type: 'success', - duration: 1500, - onClose: () => { + // 删除成功后,再更新工单状态 + this.submitData.site = this.detailData.site + this.submitData.buNo = this.detailData.buNo + this.submitData.orderNo = this.detailData.orderNo + this.submitData.planID = this.detailData.planID + this.submitData.objectID = this.detailData.objectID + this.submitData.planDesc = this.detailData.feedBackDesc + this.submitData.disposalMeasures = this.detailData.disposalMeasures + this.submitData.defectID = this.detailData.defectID + this.submitData.defectDesc = this.detailData.defectDesc + this.submitData.remark = this.detailData.remark + this.submitData.difficultyLevel = '' + this.submitData.difficultyRemark = '' + this.submitData.faultReason = this.detailData.faultReason + this.submitData.handlingMethod = this.detailData.handlingMethod + this.submitData.preventiveMeasure = this.detailData.preventiveMeasure + this.submitData.feedbackBy = this.detailData.createBy + this.submitData.actualOperatorName = this.detailData.actualOperatorName + this.submitData.knowledgeFlag = this.detailData.knowledgeFlag + this.submitData.updateBy = this.$store.state.user.name + this.submitData.isAgreed = '' + this.submitData.disagreeReason = '' + this.submitData.reachOperator = this.detailData.reachOperator || this.detailData.actualOperator || '' + this.submitData.reachOperatorName = this.detailData.reachOperatorName || this.detailData.actualOperatorName || '' + this.submitData.assistUser = this.detailData.assistUser + this.submitData.assistUserName = this.detailData.assistUserName + this.submitData.functionType = this.detailData.functionType + this.submitData.status = '待审核' + + submitDefect(this.submitData).then(({data}) => { + if (data && data.code === 0) { + this.getDataList() + this.detailData.status = '待审核' + this.detailModelFlag = false + this.$message({ + message: '操作成功', + type: 'success', + duration: 1500, + onClose: () => { + } + }) + } else { + this.$alert(data.msg, '错误', { + confirmButtonText: '确定' + }) } }) } else { diff --git a/src/views/modules/reportWorkOrder/reportDefectOrder2.vue b/src/views/modules/reportWorkOrder/reportDefectOrder2.vue index 44754bb..8221e97 100644 --- a/src/views/modules/reportWorkOrder/reportDefectOrder2.vue +++ b/src/views/modules/reportWorkOrder/reportDefectOrder2.vue @@ -246,11 +246,15 @@ - + - 实际维修人员 - + 实际维修人员 + + + + 协助人 + 故障图片 @@ -614,7 +618,10 @@ - + + + + 选择到达人员 @@ -625,6 +632,67 @@ + + +
+ + + + + + + + + + + + + + + 查询 + + + + + + + + + +
+ + 确认 + 关闭 + +
+ @@ -1163,6 +1231,8 @@ export default { defectDesc: '', operator: '', operatorName: '', + assistUser: '', + assistUserName: '', disposalMeasures: '', objectID: '', objectDesc: '', @@ -1195,6 +1265,7 @@ export default { operatorModelFlag: false, operatorList: [], roleList: [], + assistantModelFlag: false, dataListSelections2: [], operatorDetailList: [ { @@ -2176,7 +2247,9 @@ export default { // 查询人员 getOperatorList(this.operatorData).then(({data}) => { if (data && data.code === 0) { - this.operatorList = data.rows + // 过滤掉实际操作人员 + const actualOperators = (this.saveData.operator || '').split(';').filter(item => item.trim() !== '') + this.operatorList = data.rows.filter(item => !actualOperators.includes(item.adminID)) } else { this.operatorList = [] } @@ -2223,6 +2296,66 @@ export default { this.operatorModelFlag = false }, + // 增加协助人弹窗 + addAssistantModal () { + this.operatorData.bu = this.saveData.site + '_' + this.saveData.buNo + if (this.roleList.length > 0) { + let filterList = this.roleList.filter(item => item.roleName === '机修') + if (filterList.length > 0) { + this.operatorData.roleId = filterList[0].roleId + } else { + this.operatorData.roleId = this.roleList[0].roleId + } + } else { + this.operatorData.roleId = '' + } + // 先清空缓存选中 + this.$nextTick(() => this.$refs.operatorTable.clearSelection()) + // 拿到选中的协助人编号 + let tempDataList = (this.saveData.assistUser == null ? '' : this.saveData.assistUser).split(';') + // 查询人员 + getOperatorList(this.operatorData).then(({data}) => { + if (data && data.code === 0) { + // 过滤掉实际操作人员 + const actualOperators = (this.saveData.operator || '').split(';').filter(item => item.trim() !== '') + this.operatorList = data.rows.filter(item => !actualOperators.includes(item.adminID)) + + this.operatorList.forEach(val => { + // 回显选中的协助人 + if (tempDataList.includes(val.adminID)) { + this.$nextTick(() => this.$refs.operatorTable.toggleRowSelection(val, true)) + } + }) + this.assistantModelFlag = true + } else { + this.$alert(data.msg, '错误', { + confirmButtonText: '确定' + }) + } + }) + }, + + // 确认选择协助人 + confirmAssistant () { + if (!this.dataListSelections2 || this.dataListSelections2.length === 0) { + this.$message.warning('请选择协助人!') + return + } + // 直接使用当前选中的数据替换原有数据 + let assistUsers = [] + let assistUserNames = [] + + for (let i = 0; i < this.dataListSelections2.length; i++) { + assistUsers.push(this.dataListSelections2[i].adminID) + assistUserNames.push(this.dataListSelections2[i].adminName) + } + + // 更新保存数据 + this.saveData.assistUser = assistUsers.join(';') + this.saveData.assistUserName = assistUserNames.join(';') + this.assistantModelFlag = false + }, + // 校验用户是否收藏 favoriteIsOk () { let userFavorite = { @@ -2460,8 +2593,14 @@ export default { chooseReachOperator (row) { this.saveData.site = row.site this.saveData.buNo = row.buNo - this.saveData.operator = '' - this.saveData.operatorName = '' + // 只有 03-RFID BU 才固定为计划执行人员 + if (row.buNo === '03-RFID') { + this.saveData.operator = row.planOperator || '' + this.saveData.operatorName = row.planOperatorName || '' + } else { + this.saveData.operator = '' + this.saveData.operatorName = '' + } this.operatorData.bu = row.site + '_' + row.buNo this.reachData = row this.chooseReachModelFlag = true @@ -2471,11 +2610,12 @@ export default { // 到达 reach () { - if (this.saveData.operator === '' || this.saveData.operator == null) { // 2025-02-13 海波要求 - this.$message.warning('请选择到达人员!') + if (this.saveData.operator === '' || this.saveData.operator == null) { + this.$message.warning('到达人员不能为空!') return } - if (this.buNo != '01-Label' && this.planPeople){ + // 只有非 03-RFID BU 才需要验证是否包含计划人员 + if (this.buNo != '01-Label' && this.buNo != '03-RFID' && this.planPeople){ if (!this.saveData.operatorName.includes(this.planPeople)){ this.$message.warning('到达人员中不包含计划人员!') return @@ -2531,8 +2671,10 @@ export default { checkWorkPlanId: row.checkWorkPlanId, checkItemNo: row.checkItemNo, reachDate: row.reachDate, - operator: row.result == null ? row.reachOperator : row.adminID, - operatorName: row.result == null ? row.reachOperatorName : row.operator, + operator: row.buNo === '03-RFID' ? (row.planOperator || row.reachOperator) : (row.result == null ? row.reachOperator : row.adminID), + operatorName: row.buNo === '03-RFID' ? (row.planOperatorName || row.reachOperatorName) : (row.result == null ? row.reachOperatorName : row.operator), + assistUser: row.assistUser || '', + assistUserName: row.assistUserName || '', handlingMethod: row.handlingMethod, feedBackDesc: row.feedBackDesc, faultReason: row.faultReason, @@ -2579,7 +2721,7 @@ export default { this.$message.warning('请填写处理方式,且大于十个字数!') return } - if (this.buNo != '01-Label' && this.saveData.planOperatorName){ + if (this.buNo != '01-Label' && this.buNo != '03-RFID' && this.saveData.planOperatorName){ if (!this.saveData.operatorName.includes(this.saveData.planOperatorName)){ this.$message.warning('实际执行人员中不包含计划人员,请检查!') return