From f45939995c207b8552440261d105e94264261a09 Mon Sep 17 00:00:00 2001 From: zangchenhao Date: Sat, 5 Jul 2025 14:46:09 +0800 Subject: [PATCH 1/8] =?UTF-8?q?refactor(dms):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=95=85=E9=9A=9C=E5=B7=A5=E5=8D=95=E5=AE=A1=E6=89=B9=E5=92=8C?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复审批按钮显示逻辑,改为根据工单审批状态控制 - 优化确认按钮显示逻辑,明确主管确认条件 - 移除路由类型对任务加载的影响 - 重构主管确认流程,增加用户交互和错误处理 - 调整验证规则设置,根据工单状态动态调整 --- .../dms/dmsFaultInstanceActivity/index.vue | 75 ++++++++++++------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/src/views/dms/dmsFaultInstanceActivity/index.vue b/src/views/dms/dmsFaultInstanceActivity/index.vue index 959a886..c39df7e 100644 --- a/src/views/dms/dmsFaultInstanceActivity/index.vue +++ b/src/views/dms/dmsFaultInstanceActivity/index.vue @@ -368,23 +368,21 @@ const currentStepTitle = computed(() => { }); const approvalButtonShow = computed(() => { - return routeParams.value.type === 'approval' && currentTask.value; + // 显示审批按钮的条件:工单审批状态为待审批(1) + return workOrder.value?.approveStatus === '1'; }); const confirmButtonShow = computed(() => { - // 显示确认按钮的条件: - // 1. 页面类型是confirm - // 2. 或者工单状态为维修完成(2)且确认状态为待确认(0) - // 3. 且审批状态为审批成功(2) - 只有审批通过的工单才能进行确认 - return routeParams.value.type === 'confirm' || - (workOrder.value?.billsStatus === '2' && - workOrder.value?.repairConfirm === '0' && - workOrder.value?.approveStatus === '2'); + // 显示主管确认按钮的条件: + // 工单状态为维修完成(2) && 审批状态为审批成功(2) && 确认状态为待确认(0) + return workOrder.value?.billsStatus === '2' && + workOrder.value?.approveStatus === '2' && + workOrder.value?.repairConfirm === '0'; }); // 是否为审批阶段 const isApprovalStage = computed(() => { - return routeParams.value.type === 'approval' && workOrder.value?.approveStatus === '1'; + return workOrder.value?.approveStatus === '1'; }); // 提交按钮显示控制逻辑 @@ -410,7 +408,7 @@ onMounted(async () => { await getOutsourceList(); // 获取当前任务信息 - if (routeParams.value.type === 'approval') { + if (routeParams.value.type === 'approval' || routeParams.value.type === 'confirm') { await loadCurrentTask(); } @@ -664,15 +662,42 @@ const submitCallback = async (approvalResult?: any) => { // 主管确认处理 const handleConfirm = async () => { try { - // 设置确认结果 + // 显示确认对话框 + await proxy?.$modal.confirm('是否确认维修结果通过?\n通过:维修通过,工单完成\n退回:维修不通过,返回维修环节重新维修'); + + buttonLoading.value = true; + + // 用户点击确定,设置为确认通过 form.repairConfirm = '1'; // 1表示确认通过 - - // 调用审批处理方法(实际上是工作流处理) - await approvalVerifyOpen(); + + // 调用主管确认接口 + await confirmRepairResult(form.repairInstanceId, form.repairConfirm); + proxy?.$modal.msgSuccess('确认通过完成'); + goBack(); + } catch (error: any) { - if (error !== 'cancel' && error !== 'close') { + if (error === 'cancel' || error === 'close') { + // 用户点击取消,设置为确认不通过 + try { + buttonLoading.value = true; + form.repairConfirm = '2'; // 2表示确认不通过 + await confirmRepairResult(form.repairInstanceId, form.repairConfirm); + proxy?.$modal.msgSuccess('确认不通过完成'); + goBack(); + } catch (confirmError: any) { + console.error('确认不通过失败:', confirmError); + proxy?.$modal.msgError('确认不通过失败:' + (confirmError.message || '未知错误')); + } finally { + buttonLoading.value = false; + } + } else { console.error('确认失败:', error); proxy?.$modal.msgError('确认失败:' + (error.message || '未知错误')); + buttonLoading.value = false; + } + } finally { + if (form.repairConfirm === '1') { + buttonLoading.value = false; } } }; @@ -715,18 +740,18 @@ const setDynamicValidationRules = () => { rules[key] = [{ required: false, message: rules[key][0].message, trigger: rules[key][0].trigger }]; }); - // 根据页面类型和步骤设置验证规则 - if (routeParams.value.type === 'approval') { - // 审批阶段只需要审批状态和处理意见 + // 根据工单状态设置验证规则 + if (workOrder.value?.approveStatus === '1') { + // 审批阶段:需要审批状态和处理意见 rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }]; - if (needProcessResolution.value) { - rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; - } - } else if (routeParams.value.type === 'confirm') { - // 确认阶段只需要确认结果和处理意见 + rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; + } else if (workOrder.value?.billsStatus === '2' && + workOrder.value?.approveStatus === '2' && + workOrder.value?.repairConfirm === '0') { + // 主管确认阶段:需要确认结果和处理意见 rules.repairConfirm = [{ required: true, message: '维修结果不能为空', trigger: 'change' }]; rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; - } else { + } else if (routeParams.value.type === 'add' || routeParams.value.type === 'update') { // 新增或编辑模式,根据当前步骤设置验证规则 if (currentStepOrder.value === 1) { // 第一步:故障报修 From 0090a925dd02f5f3f1bbb5f91a765ec66bb6c4f1 Mon Sep 17 00:00:00 2001 From: zangchenhao Date: Sat, 5 Jul 2025 21:15:36 +0800 Subject: [PATCH 2/8] =?UTF-8?q?refactor(dms):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=95=85=E9=9A=9C=E5=B7=A5=E5=8D=95=E4=B8=BB=E7=AE=A1=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 Element Plus 的 MessageBox 组件替换自带的 confirm 对话框 - 添加"退回"和"通过"两个选项供用户选择 - 优化用户交互逻辑,区分取消和关闭对话框的操作 - 调整相关代码格式和顺序,提高可读性 --- .../dms/dmsFaultInstanceActivity/index.vue | 58 +++++++++++-------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/views/dms/dmsFaultInstanceActivity/index.vue b/src/views/dms/dmsFaultInstanceActivity/index.vue index c39df7e..8bde965 100644 --- a/src/views/dms/dmsFaultInstanceActivity/index.vue +++ b/src/views/dms/dmsFaultInstanceActivity/index.vue @@ -279,6 +279,7 @@ // 导入相关模块 import { ref, reactive, computed, onMounted, getCurrentInstance, toRefs, watch } from 'vue'; import { useRoute, useRouter } from 'vue-router'; +import { ElMessageBox } from 'element-plus'; import { getDmsBillsFaultInstance, approveWorkOrder, confirmRepairResult } from '@/api/dms/dmsBillsFaultInstance'; import { addDmsFaultInstanceActivity } from '@/api/dms/dmsFaultInstanceActivity'; import { pageByTaskWait } from '@/api/workflow/task'; @@ -509,7 +510,7 @@ const initializeFormData = () => { form.repairer = workOrder.value?.repairer || ''; form.repairConfirm = workOrder.value?.repairConfirm || ''; form.componentsPartsId = workOrder.value?.componentsPartsId || ''; - + // 如果是审批阶段,设置默认审批状态 if (routeParams.value.type === 'approval' && !form.approveStatus) { form.approveStatus = undefined; // 保持未选择状态,让用户必须选择 @@ -595,18 +596,18 @@ const approvalVerifyOpen = async () => { const valid = await processFormRef.value.validate(); if (valid) { await proxy?.$modal.confirm('是否确认提交审批?'); - + buttonLoading.value = true; - + // 直接调用后端审批接口,后端会在同一事务中处理业务状态更新和工作流推进 const approveStatus = form.approveStatus; const message = form.processHandleResolution || ''; await approveWorkOrder(form.repairInstanceId, approveStatus, message); - + const statusText = approveStatus === '2' ? '通过' : '拒绝'; proxy?.$modal.msgSuccess(`审批${statusText}成功`); - + // 关闭页面返回 goBack(); } @@ -662,38 +663,49 @@ const submitCallback = async (approvalResult?: any) => { // 主管确认处理 const handleConfirm = async () => { try { - // 显示确认对话框 - await proxy?.$modal.confirm('是否确认维修结果通过?\n通过:维修通过,工单完成\n退回:维修不通过,返回维修环节重新维修'); - + // 使用自定义按钮的确认对话框 + const result = await ElMessageBox.confirm( + '请选择维修结果确认方式:\n• 通过:维修通过,工单完成\n• 退回:维修不通过,返回维修环节重新维修', + '主管确认', + { + confirmButtonText: '通过', + cancelButtonText: '退回', + type: 'warning', + distinguishCancelAndClose: true + } + ); + buttonLoading.value = true; - - // 用户点击确定,设置为确认通过 + + // 用户点击通过,设置为确认通过 form.repairConfirm = '1'; // 1表示确认通过 - + // 调用主管确认接口 await confirmRepairResult(form.repairInstanceId, form.repairConfirm); proxy?.$modal.msgSuccess('确认通过完成'); goBack(); - - } catch (error: any) { - if (error === 'cancel' || error === 'close') { - // 用户点击取消,设置为确认不通过 + + } catch (action: any) { + if (action === 'cancel') { + // 用户点击退回,设置为确认不通过 try { buttonLoading.value = true; form.repairConfirm = '2'; // 2表示确认不通过 await confirmRepairResult(form.repairInstanceId, form.repairConfirm); - proxy?.$modal.msgSuccess('确认不通过完成'); + proxy?.$modal.msgSuccess('退回维修环节完成'); goBack(); } catch (confirmError: any) { - console.error('确认不通过失败:', confirmError); - proxy?.$modal.msgError('确认不通过失败:' + (confirmError.message || '未知错误')); + console.error('退回操作失败:', confirmError); + proxy?.$modal.msgError('退回操作失败:' + (confirmError.message || '未知错误')); } finally { buttonLoading.value = false; } + } else if (action === 'close') { + // 用户点击关闭按钮或按ESC键,不执行任何操作 + console.log('用户取消了确认操作'); } else { - console.error('确认失败:', error); - proxy?.$modal.msgError('确认失败:' + (error.message || '未知错误')); - buttonLoading.value = false; + console.error('确认失败:', action); + proxy?.$modal.msgError('确认失败:' + (action.message || '未知错误')); } } finally { if (form.repairConfirm === '1') { @@ -745,8 +757,8 @@ const setDynamicValidationRules = () => { // 审批阶段:需要审批状态和处理意见 rules.approveStatus = [{ required: true, message: '审批状态不能为空', trigger: 'change' }]; rules.processHandleResolution = [{ required: true, message: '处理意见不能为空', trigger: 'blur' }]; - } else if (workOrder.value?.billsStatus === '2' && - workOrder.value?.approveStatus === '2' && + } else if (workOrder.value?.billsStatus === '2' && + workOrder.value?.approveStatus === '2' && workOrder.value?.repairConfirm === '0') { // 主管确认阶段:需要确认结果和处理意见 rules.repairConfirm = [{ required: true, message: '维修结果不能为空', trigger: 'change' }]; From 364575595af158abc06b2064f9d035e95938396d Mon Sep 17 00:00:00 2001 From: zangchenhao Date: Sun, 6 Jul 2025 15:11:18 +0800 Subject: [PATCH 3/8] =?UTF-8?q?refactor(dms):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=95=85=E9=9A=9C=E5=B7=A5=E5=8D=95=E5=A4=84=E7=90=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除提交按钮,Web端不再创建工单 - 调整页面布局和样式,优化用户体验 - 重构表单验证逻辑,简化规则设置 - 移除不必要的功能和代码,提高页面性能 --- .../dms/dmsFaultInstanceActivity/index.vue | 476 ++++-------------- 1 file changed, 94 insertions(+), 382 deletions(-) diff --git a/src/views/dms/dmsFaultInstanceActivity/index.vue b/src/views/dms/dmsFaultInstanceActivity/index.vue index 8bde965..f859acb 100644 --- a/src/views/dms/dmsFaultInstanceActivity/index.vue +++ b/src/views/dms/dmsFaultInstanceActivity/index.vue @@ -4,20 +4,7 @@
- - 暂存 - - - 提交 - + - + -

{{ currentStepTitle }}

+

PDA端创建的工单详情(只读)

- - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - -