From 4510f3440e8abd44be1fc49b1caf990862bfb817 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Wed, 14 Jan 2026 14:14:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(dms):=20=E6=9B=B4=E6=96=B0=E6=95=85?= =?UTF-8?q?=E9=9A=9C=E5=AE=9E=E4=BE=8B=E6=B4=BB=E5=8A=A8=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加审批状态、申请时间、要求完成时间字段(注释状态) - 新增设备位置、实际开始时间、实际完成时间、确认状态字段 - 添加确认人和确认时间字段 - 集成维修零件列表表格显示 - 引入任务权限检查逻辑,判断当前用户是否为任务办理人 - 实现查看模式,根据不同模式控制按钮和输入框显示 - 添加表单验证逻辑,包括审批状态和处理意见必填检查 - 扩展状态映射功能,支持审批状态和确认状态文本转换 - 优化审批按钮显示逻辑,结合用户权限和查看模式控制 - 添加主管确认按钮的权限检查和显示条件 - 实现外协单位列表加载和表单初始化逻辑 --- .../dms/dmsFaultInstanceActivity/index.vue | 175 +++++++++++++++++- 1 file changed, 168 insertions(+), 7 deletions(-) diff --git a/src/views/dms/dmsFaultInstanceActivity/index.vue b/src/views/dms/dmsFaultInstanceActivity/index.vue index 34b665f..9f782b9 100644 --- a/src/views/dms/dmsFaultInstanceActivity/index.vue +++ b/src/views/dms/dmsFaultInstanceActivity/index.vue @@ -47,11 +47,28 @@ + + + + @@ -65,8 +82,37 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -184,6 +230,17 @@ + + +

维修更换零件

+ + + + + + +
+ >({}); const workOrder = ref({}); const workOrderStatusText = ref(''); +const approveStatusText = ref(''); +const confirmStatusText = ref(''); const outsourceList = ref([]); const outsourcingName = ref(''); + // 表单相关 const processFormRef = ref(); const submitVerifyRef = ref>(); @@ -229,6 +290,9 @@ const approvalRecordRef = ref>(); // 任务变量 const taskVariables = ref({}); +// 当前用户是否为任务办理人 +const isCurrentUserTaskAssignee = ref(false); + // 表单数据 const initFormData = { repairInstanceId: undefined, @@ -255,8 +319,15 @@ const rules = reactive({ processHandleResolution: [{ required: false, message: '处理意见不能为空', trigger: 'blur' }] }); +// 是否为查看模式 +const isViewMode = computed(() => { + return routeParams.value.type === 'view'; +}); + // 计算属性 const needProcessResolution = computed(() => { + // 查看模式不显示处理意见输入框 + if (isViewMode.value) return false; return isApprovalStage.value || confirmButtonShow.value; }); @@ -268,8 +339,10 @@ const currentStepName = computed(() => { }); const approvalButtonShow = computed(() => { - // 显示审批按钮的条件:工单审批状态为待审批(1) - return workOrder.value?.approveStatus === '1'; + // 查看模式不显示审批按钮 + if (isViewMode.value) return false; + // 显示审批按钮的条件:工单审批状态为待审批(1) && 当前用户是任务办理人 + return workOrder.value?.approveStatus === '1' && isCurrentUserTaskAssignee.value; }); const confirmButtonShow = computed(() => { @@ -290,20 +363,26 @@ const confirmButtonShow = computed(() => { const approveStatusMatches = String(workOrder.value?.approveStatus) === '2'; const repairConfirmMatches = String(workOrder.value?.repairConfirm) === '0'; - const shouldShow = billsStatusMatches && approveStatusMatches && repairConfirmMatches; + // 查看模式不显示主管确认按钮 + if (isViewMode.value) return false; + + // 同时需要当前用户是任务办理人 + const shouldShow = billsStatusMatches && approveStatusMatches && repairConfirmMatches && isCurrentUserTaskAssignee.value; console.log('主管确认按钮显示结果:', { billsStatusMatches, approveStatusMatches, repairConfirmMatches, + isCurrentUserTaskAssignee: isCurrentUserTaskAssignee.value, shouldShow }); return shouldShow; }); -// 是否为审批阶段 +// 是否为审批阶段(查看模式不显示审批状态选择框) const isApprovalStage = computed(() => { + if (isViewMode.value) return false; return workOrder.value?.approveStatus === '1'; }); @@ -319,6 +398,9 @@ onMounted(async () => { // 获取外协单位列表 await getOutsourceList(); + // 检查当前用户是否为任务办理人 + await checkCurrentUserTaskPermission(); + // 初始化表单数据 initializeFormData(); @@ -333,6 +415,40 @@ onMounted(async () => { } }); +// 检查当前用户是否为任务办理人 +const checkCurrentUserTaskPermission = async () => { + try { + const businessId = routeParams.value.id; + if (!businessId) { + isCurrentUserTaskAssignee.value = false; + return; + } + + // 查询当前用户的待办任务列表,筛选出匹配当前工单的任务 + const taskRes = await pageByTaskWait({ + pageNum: 1, + pageSize: 100, + flowCode: 'Fault01' // 故障维修流程代码 + }); + + // 检查是否有匹配当前业务ID的待办任务 + const matchingTask = taskRes.rows?.find( + (task: any) => String(task.businessId) === String(businessId) + ); + + isCurrentUserTaskAssignee.value = !!matchingTask; + + console.log('用户任务权限检查:', { + businessId, + hasMatchingTask: !!matchingTask, + isCurrentUserTaskAssignee: isCurrentUserTaskAssignee.value + }); + } catch (error) { + console.error('检查用户任务权限失败:', error); + isCurrentUserTaskAssignee.value = false; + } +}; + // 加载工单信息 const loadWorkOrderInfo = async () => { // 从query参数获取businessId @@ -348,6 +464,8 @@ const loadWorkOrderInfo = async () => { // 设置状态显示文本 - 添加安全检查 workOrderStatusText.value = getStatusText(workOrder.value.billsStatus || ''); + approveStatusText.value = getApproveStatusText(workOrder.value.approveStatus || ''); + confirmStatusText.value = getConfirmStatusText(workOrder.value.repairConfirm || ''); }; // 初始化表单数据 @@ -385,7 +503,25 @@ const approvalVerifyOpen = async () => { if (!processFormRef.value) return; try { + // 先进行表单验证 const valid = await processFormRef.value.validate(); + if (!valid) { + (proxy as any)?.$modal.msgWarning('请填写必填项'); + return; + } + + // 检查审批状态是否已选择 + if (!form.approveStatus || form.approveStatus === '1') { + (proxy as any)?.$modal.msgWarning('请选择审批状态(通过或拒绝)'); + return; + } + + // 检查处理意见是否已填写 + if (!form.processHandleResolution || form.processHandleResolution.trim() === '') { + (proxy as any)?.$modal.msgWarning('请填写处理意见'); + return; + } + if (valid) { await (proxy as any)?.$modal.confirm('是否确认提交审批?'); @@ -433,6 +569,12 @@ const submitCallback = async (approvalResult?: any) => { // 主管确认处理 const handleConfirm = async () => { + // 检查处理意见是否已填写 + if (!form.processHandleResolution || form.processHandleResolution.trim() === '') { + (proxy as any)?.$modal.msgWarning('请填写处理意见'); + return; + } + try { // 使用自定义按钮的确认对话框 const result = await ElMessageBox.confirm( @@ -528,7 +670,7 @@ const setDynamicValidationRules = () => { // 工具函数 const getStatusText = (status: string) => { - const statusMap = { + const statusMap: Record = { '0': '待维修', '1': '维修中', '2': '维修完成', @@ -537,6 +679,25 @@ const getStatusText = (status: string) => { }; return statusMap[status] || '未知状态'; }; + +const getApproveStatusText = (status: string) => { + const statusMap: Record = { + '0': '未提交', + '1': '待审批', + '2': '审批通过', + '3': '审批拒绝' + }; + return statusMap[status] || '未知状态'; +}; + +const getConfirmStatusText = (status: string) => { + const statusMap: Record = { + '0': '待确认', + '1': '确认通过', + '2': '确认不通过' + }; + return statusMap[status] || '未知状态'; +};