feat(dms): 更新故障实例活动页面功能

- 添加审批状态、申请时间、要求完成时间字段(注释状态)
- 新增设备位置、实际开始时间、实际完成时间、确认状态字段
- 添加确认人和确认时间字段
- 集成维修零件列表表格显示
- 引入任务权限检查逻辑,判断当前用户是否为任务办理人
- 实现查看模式,根据不同模式控制按钮和输入框显示
- 添加表单验证逻辑,包括审批状态和处理意见必填检查
- 扩展状态映射功能,支持审批状态和确认状态文本转换
- 优化审批按钮显示逻辑,结合用户权限和查看模式控制
- 添加主管确认按钮的权限检查和显示条件
- 实现外协单位列表加载和表单初始化逻辑
master
zangch@mesnac.com 3 weeks ago
parent bd68f66384
commit 4510f3440e

@ -47,11 +47,28 @@
<el-input v-model="workOrderStatusText" disabled />
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="审批状态">
<el-input v-model="approveStatusText" disabled />
</el-form-item>
</el-col> -->
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="申请人">
<el-input :value="workOrder?.applyUser || ''" disabled />
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="申请时间">
<el-input :value="workOrder?.applyTime || ''" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="要求完成时间">
<el-input :value="workOrder?.requireEndTime || ''" disabled />
</el-form-item>
</el-col> -->
</el-row>
<el-row>
<el-col :span="8">
@ -65,8 +82,37 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请时间">
<el-input :value="workOrder?.applyTime || ''" disabled />
<el-form-item label="设备位置">
<el-input :value="workOrder?.machineLocation || ''" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="实际开始时间">
<el-input :value="workOrder?.realBeginTime || ''" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实际完成时间">
<el-input :value="workOrder?.realEndTime || ''" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="确认状态">
<el-input v-model="confirmStatusText" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="workOrder?.confirmUser">
<el-col :span="8">
<el-form-item label="确认人">
<el-input :value="workOrder?.confirmUser || ''" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="确认时间">
<el-input :value="workOrder?.confirmTime || ''" disabled />
</el-form-item>
</el-col>
</el-row>
@ -184,6 +230,17 @@
</el-form>
</el-card>
<!-- 维修零件列表 -->
<el-card shadow="never" class="mb-[10px]" v-if="workOrder?.parts && workOrder.parts.length > 0">
<h4 class="form-header">维修更换零件</h4>
<el-table :data="workOrder.parts" border stripe>
<el-table-column label="序号" type="index" width="60" align="center" />
<el-table-column label="零部件名称" prop="partName" min-width="150" />
<el-table-column label="零部件规格" prop="partSpecifications" min-width="150" />
<el-table-column label="数量" prop="amount" width="100" align="center" />
</el-table>
</el-card>
<!-- 审批组件 -->
<submitVerify
ref="submitVerifyRef"
@ -204,6 +261,7 @@ import { ElMessageBox, type FormInstance } from 'element-plus';
import type { ComponentInternalInstance } from 'vue';
import { getDmsBillsFaultInstance, approveWorkOrder, confirmRepairResult } from '@/api/dms/dmsBillsFaultInstance';
import { getDmsBaseOutsourcingInfoList } from '@/api/dms/dmsBaseOutsourcingInfo';
import { pageByTaskWait } from '@/api/workflow/task';
import SubmitVerify from '@/views/dms/dmsFaultInstanceActivity/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
@ -218,9 +276,12 @@ const buttonLoading = ref(false);
const routeParams = ref<Record<string, any>>({});
const workOrder = ref<any>({});
const workOrderStatusText = ref('');
const approveStatusText = ref('');
const confirmStatusText = ref('');
const outsourceList = ref<any[]>([]);
const outsourcingName = ref('');
//
const processFormRef = ref<FormInstance>();
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
@ -229,6 +290,9 @@ const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
//
const taskVariables = ref<any>({});
//
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 () => {
// querybusinessId
@ -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<string, string> = {
'0': '待维修',
'1': '维修中',
'2': '维修完成',
@ -537,6 +679,25 @@ const getStatusText = (status: string) => {
};
return statusMap[status] || '未知状态';
};
const getApproveStatusText = (status: string) => {
const statusMap: Record<string, string> = {
'0': '未提交',
'1': '待审批',
'2': '审批通过',
'3': '审批拒绝'
};
return statusMap[status] || '未知状态';
};
const getConfirmStatusText = (status: string) => {
const statusMap: Record<string, string> = {
'0': '待确认',
'1': '确认通过',
'2': '确认不通过'
};
return statusMap[status] || '未知状态';
};
</script>
<style scoped>

Loading…
Cancel
Save