|
|
|
|
@ -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 () => {
|
|
|
|
|
// 从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<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>
|
|
|
|
|
|