refactor(dms): index界面的流程改为v2版本开始-工单创建-工单处理-工单完成-结束,删除多余润滑工单实例备份文件

master
zch 9 months ago
parent 422e903ea6
commit d572430460

@ -10,12 +10,12 @@ export interface DmsBillsLubeInstanceActivityVO {
lubeInstanceId: string | number; lubeInstanceId: string | number;
/** /**
* ID,wf_definition_configid * ID,
*/ */
wfDefinitionId: string | number; wfDefinitionId: string | number;
/** /**
* IDwf_task_back_nodeid * ID
*/ */
wfNodeId: string | number; wfNodeId: string | number;
@ -103,12 +103,12 @@ export interface DmsBillsLubeInstanceActivityForm extends BaseEntity {
lubeInstanceId?: string | number; lubeInstanceId?: string | number;
/** /**
* ID,wf_definition_configid * ID,
*/ */
wfDefinitionId?: string | number; wfDefinitionId?: string | number;
/** /**
* IDwf_task_back_nodeid * ID
*/ */
wfNodeId?: string | number; wfNodeId?: string | number;
@ -197,12 +197,12 @@ export interface DmsBillsLubeInstanceActivityQuery extends PageQuery {
lubeInstanceId?: string | number; lubeInstanceId?: string | number;
/** /**
* ID,wf_definition_configid * ID,
*/ */
wfDefinitionId?: string | number; wfDefinitionId?: string | number;
/** /**
* IDwf_task_back_nodeid * ID,
*/ */
wfNodeId?: string | number; wfNodeId?: string | number;

@ -1,522 +0,0 @@
<template>
<div class="p-2">
<!-- 工单信息区域 -->
<h4 class="form-header h4">工单信息</h4>
<el-card shadow="never" class="mb-[10px]">
<el-form label-width="120px">
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="工单编号">
<el-input v-model="billsInfo.billsLubeCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="工单状态">
<el-input v-model="billsStatusCheck" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请人">
<el-input v-model="billsInfo.createBy" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请时间">
<el-input v-model="billsInfo.createTime" disabled />
</el-form-item>
</el-col>
<el-col :span="16" :offset="2">
<el-form-item label="备注">
<el-input v-model="billsInfo.remark" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 流程步骤展示区域 -->
<el-card shadow="never" class="mb-[10px]">
<el-form ref="stepFormRef" :model="form" label-width="100px">
<!-- 第一步 -->
<!-- <h4 class="form-header h4" v-if="wfProcessActivityList.length > 0">
{{wfProcessActivityList[0]?.processActivityName}}
</h4> -->
<h4 class="form-header h4" v-if="dmsBillsLubeInstanceActivityList.length > 0">1</h4>
<el-row v-if="dmsBillsLubeInstanceActivityList.length > 0">
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="form.lubeLevel" placeholder="润滑级别" disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="form.lubeGroup" placeholder="请输入润滑组别" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="form.lubeSupervisor" placeholder="请输入润滑负责人" disabled />
</el-form-item>
</el-col>
</el-row>
<!-- 中间步骤 (已处理的后续节点) -->
<template v-for="(activity) in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId">
<div v-if="activity.processStepOrder && activity.processStepOrder > 1">
<h4 class="form-header h4">{{ `已处理节点:步骤${activity.processStepOrder}` }}</h4>
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别">
<el-select
v-model="activity.lubeLevel"
placeholder="润滑级别"
disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别">
<el-input
v-model="activity.lubeGroup"
disabled
placeholder="润滑组别">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人">
<el-input
v-model="activity.lubeSupervisor"
disabled
placeholder="润滑负责人">
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见">
<el-input
v-model="activity.processHandleResolution"
disabled
placeholder="处理意见">
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</template>
<!-- 当前步骤表单 (用于提交新节点) -->
<div v-if="isUpdate">
<!-- <h4 class="form-header h4" v-if="wfProcessActivityList.length > dmsBillsLubeInstanceActivityList.length">
{{wfProcessActivityList[dmsBillsLubeInstanceActivityList.length]?.processActivityName}}
</h4> -->
<h4 class="form-header h4">当前处理节点步骤{{ nextStepOrder }}</h4>
<el-form ref="nextStepFormRef" :model="nextStepForm" :rules="nextStepFormRules" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="nextStepForm.lubeLevel" placeholder="润滑级别">
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="nextStepForm.lubeGroup" placeholder="润滑组别"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="nextStepForm.lubeSupervisor" placeholder="润滑负责人"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见" prop="processHandleResolution">
<el-input v-model="nextStepForm.processHandleResolution" placeholder="处理意见"></el-input>
</el-form-item>
</el-col>
<el-col :span="24" class="text-center mt-4">
<el-button type="primary" @click="submitForm"> </el-button>
</el-col>
</el-row>
</el-form>
</div>
</el-form>
</el-card>
<!-- 润滑计划详情区域 -->
<el-card shadow="never">
<h4 class="form-header h4 text-center">润滑计划详细信息</h4>
<el-table v-loading="loading" :data="planLubeDetail">
<el-table-column label="计划ID" align="center" prop="planLubeId" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="润滑部位" align="center" prop="lubeStationName" />
<el-table-column label="润滑标准" align="center" prop="lubeStandardCode" />
<el-table-column label="操作描述" align="center" prop="operationDescription" />
</el-table>
</el-card>
</div>
</template>
<script setup name="DmsBillsLubeInstanceActivity" lang="ts">
import { ref, reactive, toRefs, getCurrentInstance, onMounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus'; // FormInstance FormRules
import {
listDmsBillsLubeInstanceActivity,
addDmsBillsLubeInstanceActivity
// getDmsBillsLubeInstanceActivity, //
} from '@/api/dms/dmsBillsLubeInstanceActivity';
import {
DmsBillsLubeInstanceActivityVO,
DmsBillsLubeInstanceActivityForm
} from '@/api/dms/dmsBillsLubeInstanceActivity/types';
import { listDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
// import { getDmsPlanLubeDetail } from '@/api/dms/dmsPlanLubeDetail'; // 使API
import { getDmsPlanLubeDetail } from '@/api/dms/dmsPlanLubeDetail'; // API
// import { getDmsBillsLubeInstanceActivity } from '@/api/dms/dmsBillsLubeInstanceActivity'; //
// import { useUserStore } from '@/store/modules/user'; //
import {DmsPlanLubeDetailVO} from "@/api/dms/dmsPlanLubeDetail/types";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
// useDict 'dms_lube_status' billsStatusCheck
// Vue 3 billsStatusCheck 使 lube_level
// dms_lube_status proxy?.useDict('lube_level', 'process_handle_status', 'dms_lube_status');
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
const route = useRoute();
// const router = useRouter(); //
// const userStore = useUserStore(); //
//
const stepFormRef = ref<FormInstance>(); // ref
const nextStepFormRef = ref<FormInstance>(); // ref
//
const loading = ref(true);
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
// const wfProcessActivityList = ref<any[]>([]); //
const billsInfo = ref<any>({}); // dmsBillsLubeInstanceList[0]
const planLubeDetail = ref<DmsPlanLubeDetailVO[]>([]);
const billsStatusCheck = ref(''); //
const isUpdate = ref(true); //
const planLubeId = ref(''); // ID
// const currentStepOrder = ref(0); // Vue3disabled
const lubeInstanceId = route.params.lubeInstanceId as string; //
//
const nextStepOrder = computed(() => {
return dmsBillsLubeInstanceActivityList.value.length + 1;
});
// (wfProcessActivityList)
// const canSubmitNext = computed(() => {
// return dmsBillsLubeInstanceActivityList.value.length < wfProcessActivityList.value.length;
// });
// ()
const form = reactive<Partial<DmsBillsLubeInstanceActivityForm>>({ // 使 Partial
// instanceActivityId: undefined, //
// lubeInstanceId: undefined, //
// wfDefinitionId: undefined, //
// wfNodeId: undefined, //
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
// processHandleResolution: undefined, //
// processHandleStatus: undefined, //
// processStepOrder: undefined, //
// startTime: undefined, //
// endTime: undefined, //
// handleUserId: undefined, //
// handleBy: undefined, //
// handleTime: undefined, //
// transferUserId: undefined, //
// attr1: undefined, //
remark: undefined, //
});
// ()
const nextStepForm = reactive<DmsBillsLubeInstanceActivityForm>({
instanceActivityId: undefined, //
lubeInstanceId: lubeInstanceId, //
// wfDefinitionId: undefined, //
// wfNodeId: undefined, //
// processActivityId: undefined, //
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined, //
processStepOrder: undefined, // getList
startTime: undefined, //
endTime: undefined, //
handleUserId: undefined, // store
handleBy: undefined, // store
handleTime: undefined, //
transferUserId: undefined,
attr1: undefined,
remark: undefined,
// wfLength: undefined, //
});
//
const nextStepFormRules = reactive<FormRules>({
lubeLevel: [{ required: true, message: "润滑级别不能为空", trigger: "change" }],
lubeGroup: [{ required: true, message: "润滑组别不能为空", trigger: "blur" }],
lubeSupervisor: [{ required: true, message: "润滑负责人不能为空", trigger: "blur" }],
processHandleResolution: [{ required: true, message: "处理意见不能为空", trigger: "blur" }],
});
//
const queryParams = reactive({
pageNum: 1,
pageSize: 50, //
lubeInstanceId: lubeInstanceId,
});
//
onMounted(() => {
//
if(route.name === 'childDmsBillsLubeInstanceActivity') {
isUpdate.value = true;
} else if(route.name === 'selectChildDmsBillsLubeInstanceActivity') {
isUpdate.value = false;
}
//
getDmsBillsLubeInstance();
//
getList();
});
// ( getDmsBillsLubeInstance)
const getDmsBillsLubeInstance = async () => {
try {
// queryParams.lubeInstanceId = lubeInstanceId; // queryParamslubeInstanceId
const res = await listDmsBillsLubeInstance(queryParams); // queryParams reactive .value
if (res.rows && res.rows.length > 0) {
billsInfo.value = res.rows[0];
// planLubeId
const lubeIdFromServer = res.rows[0].planLubeId;
planLubeId.value = typeof lubeIdFromServer === 'number' ? String(lubeIdFromServer) : lubeIdFromServer;
// ()
// 使 dms_lube_status Vue3使 lube_level
// useDict Vue3
if (lube_level.value && billsInfo.value.lubeStatus !== undefined) {
const statusItem = lube_level.value.find((item: any) => String(item.value) === String(billsInfo.value.lubeStatus));
billsStatusCheck.value = statusItem ? statusItem.label : '未知状态';
} else {
billsStatusCheck.value = '未知状态';
}
// ( getWfprocessActivity)
// getWfprocessActivity(res.rows[0].wfProcessId || 106); //
// ( selectDmsBillsLubeDetail)
if (planLubeId.value) {
getPlanLubeDetailData(); // API
}
} else {
proxy?.$modal.msgError("未查询到工单信息");
}
} catch (error) {
console.error('获取工单实例数据失败', error);
proxy?.$modal.msgError("获取工单实例数据失败");
}
};
// ( getWfprocessActivity)
// const getWfprocessActivity = async (wfProcessId: number) => {
// // (wfProcessActivityList)
// // dmsBillsLubeInstanceActivityList 'name'
// //
// // try {
// // const res = await listWfprocessactivity({ wfProcessId }); // API
// // wfProcessActivityList.value = res.rows;
// //
// // //
// // if (dmsBillsLubeInstanceActivityList.value.length > 0 && wfProcessActivityList.value.length > 0) {
// // dmsBillsLubeInstanceActivityList.value.forEach(activity => {
// // const matchedProcess = wfProcessActivityList.value.find(
// // process => process.processActivityOrder === activity.processStepOrder
// // );
// // if (matchedProcess) {
// // activity.name = matchedProcess.processActivityName;
// // }
// // });
// // }
// //
// // // ( checkUserPermission )
// // checkUserPermission();
// // } catch (error) {
// // console.error('', error);
// // }
// };
// ( selectDmsBillsLubeDetail)
const getPlanLubeDetailData = async () => { // API
if (!planLubeId.value) return;
loading.value = true; //
try {
const res = await getDmsPlanLubeDetail(planLubeId.value); // 使 planLubeId.value
// res.rows 使
planLubeDetail.value = res && res.rows ? [res.rows] : [];
} catch (error) {
console.error('获取润滑计划详情失败', error);
proxy?.$modal.msgError("获取润滑计划详情失败");
} finally {
// loading.value = false; // loading getList
}
};
// ( getList)
const getList = async () => {
loading.value = true;
try {
const res = await listDmsBillsLubeInstanceActivity(queryParams); // queryParams reactive
dmsBillsLubeInstanceActivityList.value = res.rows;
// ()
if (res.rows && res.rows.length > 0) {
Object.assign(form, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
lubeLevel: res.rows[0].lubeLevel,
remark: res.rows[0].remark // form
});
// ()
const lastActivity = res.rows[res.rows.length - 1];
Object.assign(nextStepForm, {
lubeGroup: lastActivity.lubeGroup,
lubeSupervisor: lastActivity.lubeSupervisor,
lubeLevel: lastActivity.lubeLevel,
processHandleResolution: null, //
remark: '' //
// processStepOrder 使 nextStepOrder.value
});
// currentStepOrder.value = res.rows.length + 1; // Vue3disabled
} else {
// nextStepForm
Object.assign(nextStepForm, { //
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: null,
remark: ''
});
}
// getWfprocessActivity 便
// listWfprocessactivity(this.queryParamWfProcessActivity).then(response=>{
// this.wfProcessActivityList = response.rows;
// this.getselectUserIdByRepairInstanceId(); //
// });
// ( getselectUserIdByRepairInstanceId)
// checkUserPermission();
} catch (error) {
console.error('获取工单实例节点数据失败', error);
proxy?.$modal.msgError("获取工单实例节点数据失败");
} finally {
loading.value = false;
}
};
// ( checkUserPermission getselectUserIdByRepairInstanceId)
// const checkUserPermission = async () => {
// //
// // wfProcessActivityList API ( selectUserIdByDmsBillsLubeInstanceActivityId)
// // API/
// // if (dmsBillsLubeInstanceActivityList.value.length === wfProcessActivityList.value.length) { // wfProcessActivityList
// // try {
// // const hasPermission = await getDmsBillsLubeInstanceActivity( // API
// // lubeInstanceId,
// // userStore.userId // userStore
// // );
// //
// // if (!hasPermission) {
// // proxy?.$modal.alert("");
// // //
// // // proxy?.$store.dispatch("tagsView/delView", route); // Vuex store dispatch
// // //
// // // router.replace({ path: "/dms/deviceLube/dmsBillsLubeInstance" }); // router
// // }
// // } catch (error) {
// // console.error('', error);
// // }
// // }
// };
// ( submitForm)
const submitForm = async () => {
if (!nextStepFormRef.value) return;
await nextStepFormRef.value.validate(async (valid) => {
if (valid) {
try {
//
nextStepForm.processStepOrder = nextStepOrder.value;
nextStepForm.lubeInstanceId = lubeInstanceId; // lubeInstanceId
// ()
// if (wfProcessActivityList.value.length > 0) {
// const currentProcess = wfProcessActivityList.value.find(
// process => process.processActivityOrder === nextStepOrder.value
// );
// if (currentProcess) {
// nextStepForm.processActivityId = currentProcess.processActivityId;
// }
// }
// nextStepForm.wfLength = wfProcessActivityList.value.length;
//
await addDmsBillsLubeInstanceActivity(nextStepForm);
proxy?.$modal.msgSuccess("提交成功");
//
await getList(); //
// nextStepForm
// nextStepFormRef.value.resetFields(); //
} catch (error) {
console.error('提交失败', error);
proxy?.$modal.msgError("提交失败,请检查数据或联系管理员");
}
} else {
proxy?.$modal.msgError("表单校验失败,请检查输入项");
}
});
};
</script>
<style scoped>
.form-header {
font-size: 15px;
color: #409eff;
border-bottom: 1px solid #ddd;
margin: 8px 0 15px;
padding-bottom: 10px;
}
</style>

@ -1,450 +0,0 @@
<template>
<div class="p-2">
<!-- 工单信息区域 -->
<h4 class="form-header h4">工单信息</h4>
<el-card shadow="never" class="mb-[10px]">
<el-form label-width="120px">
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="工单编号">
<el-input v-model="billsInfo.billsLubeCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="工单状态">
<el-input v-model="billsStatusCheck" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请人">
<el-input v-model="billsInfo.createBy" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请时间">
<el-input v-model="billsInfo.createTime" disabled />
</el-form-item>
</el-col>
<el-col :span="16" :offset="2">
<el-form-item label="备注">
<el-input v-model="billsInfo.remark" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 流程步骤展示区域 -->
<el-card shadow="never" class="mb-[10px]">
<el-form ref="stepFormRef" :model="form" label-width="100px">
<!-- 第一步 -->
<h4 class="form-header h4" v-if="dmsBillsLubeInstanceActivityList.length > 0">1</h4>
<el-row v-if="dmsBillsLubeInstanceActivityList.length > 0">
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="form.lubeLevel" placeholder="润滑级别" disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="form.lubeGroup" placeholder="请输入润滑组别" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="form.lubeSupervisor" placeholder="请输入润滑负责人" disabled />
</el-form-item>
</el-col>
</el-row>
<!-- 中间步骤 (已处理的后续节点) -->
<template v-for="(activity) in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId">
<div v-if="activity.processStepOrder && activity.processStepOrder > 1">
<h4 class="form-header h4">{{ `已处理节点:步骤${activity.processStepOrder}` }}</h4>
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别">
<el-select
v-model="activity.lubeLevel"
placeholder="润滑级别"
disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别">
<el-input
v-model="activity.lubeGroup"
disabled
placeholder="润滑组别">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人">
<el-input
v-model="activity.lubeSupervisor"
disabled
placeholder="润滑负责人">
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见">
<el-input
v-model="activity.processHandleResolution"
disabled
placeholder="处理意见">
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</template>
<!-- 当前步骤表单 (用于提交新节点) -->
<div v-if="isUpdate">
<h4 class="form-header h4">当前处理节点步骤{{ nextStepOrder }}</h4>
<el-form ref="nextStepFormRef" :model="nextStepForm" :rules="nextStepFormRules" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="nextStepForm.lubeLevel" placeholder="润滑级别">
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="nextStepForm.lubeGroup" placeholder="润滑组别"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="nextStepForm.lubeSupervisor" placeholder="润滑负责人"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见" prop="processHandleResolution">
<el-input v-model="nextStepForm.processHandleResolution" placeholder="处理意见"></el-input>
</el-form-item>
</el-col>
<el-col :span="24" class="text-center mt-4">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button v-if="billsInfo && billsInfo.lubeInstanceId !== null && billsInfo.status !== 'draft'" type='primary'
@click='handleApprovalRecord'>
流程进度
</el-button>
</el-col>
</el-row>
</el-form>
</div>
</el-form>
</el-card>
<!-- 润滑计划详情区域 -->
<el-card shadow="never">
<h4 class="form-header h4 text-center">润滑计划详细信息</h4>
<el-table v-loading="loading" :data="planLubeDetail">
<el-table-column label="计划ID" align="center" prop="planLubeId" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="润滑部位" align="center" prop="lubeStationName" />
<el-table-column label="润滑标准" align="center" prop="lubeStandardCode" />
<el-table-column label="操作描述" align="center" prop="operationDescription" />
</el-table>
</el-card>
<!-- 提交组件 -->
<submitVerify ref='submitVerifyRef' :task-variables='taskVariables' @submit-callback='submitCallback' />
<!-- 审批记录 -->
<approvalRecord ref='approvalRecordRef' />
</div>
</template>
<script setup name="DmsBillsLubeInstanceActivity" lang="ts">
import { ref, reactive, toRefs, getCurrentInstance, onMounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus'; // FormInstance FormRules
import {
listDmsBillsLubeInstanceActivity,
addDmsBillsLubeInstanceActivity
} from '@/api/dms/dmsBillsLubeInstanceActivity';
import {
DmsBillsLubeInstanceActivityVO,
DmsBillsLubeInstanceActivityForm
} from '@/api/dms/dmsBillsLubeInstanceActivity/types';
import { listDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
import { getDmsPlanLubeDetail } from '@/api/dms/dmsPlanLubeDetail';
import {DmsPlanLubeDetailVO} from "@/api/dms/dmsPlanLubeDetail/types";
// API
import { startWorkFlow } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
const route = useRoute();
//
const stepFormRef = ref<FormInstance>(); // ref
const nextStepFormRef = ref<FormInstance>(); // ref
//
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const taskVariables = ref<Record<string, any>>({});
const submitFormData = ref<StartProcessBo>({
businessId: '',
flowCode: 'lubeProcess', // lubeProcess
variables: {}
});
//
const loading = ref(true);
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
const billsInfo = ref<any>({}); //
const planLubeDetail = ref<DmsPlanLubeDetailVO[]>([]);
const billsStatusCheck = ref(''); //
const isUpdate = ref(true); //
const planLubeId = ref(''); // ID
const lubeInstanceId = route.params.lubeInstanceId as string; //
const buttonLoading = ref(false);
//
const nextStepOrder = computed(() => {
return dmsBillsLubeInstanceActivityList.value.length + 1;
});
// ()
const form = reactive<Partial<DmsBillsLubeInstanceActivityForm>>({
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
remark: undefined,
});
// ()
const nextStepForm = reactive<DmsBillsLubeInstanceActivityForm>({
instanceActivityId: undefined,
lubeInstanceId: lubeInstanceId,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
remark: undefined,
});
//
const nextStepFormRules = reactive<FormRules>({
lubeLevel: [{ required: true, message: "润滑级别不能为空", trigger: "change" }],
lubeGroup: [{ required: true, message: "润滑组别不能为空", trigger: "blur" }],
lubeSupervisor: [{ required: true, message: "润滑负责人不能为空", trigger: "blur" }],
processHandleResolution: [{ required: true, message: "处理意见不能为空", trigger: "blur" }],
});
//
const queryParams = reactive({
pageNum: 1,
pageSize: 50,
lubeInstanceId: lubeInstanceId,
});
//
onMounted(() => {
//
if(route.name === 'childDmsBillsLubeInstanceActivity') {
isUpdate.value = true;
} else if(route.name === 'selectChildDmsBillsLubeInstanceActivity') {
isUpdate.value = false;
}
//
getDmsBillsLubeInstance();
//
getList();
});
//
const getDmsBillsLubeInstance = async () => {
try {
const res = await listDmsBillsLubeInstance(queryParams);
if (res.rows && res.rows.length > 0) {
billsInfo.value = res.rows[0];
// planLubeId
const lubeIdFromServer = res.rows[0].planLubeId;
planLubeId.value = typeof lubeIdFromServer === 'number' ? String(lubeIdFromServer) : lubeIdFromServer;
//
if (lube_level.value && billsInfo.value.lubeStatus !== undefined) {
const statusItem = lube_level.value.find((item: any) => String(item.value) === String(billsInfo.value.lubeStatus));
billsStatusCheck.value = statusItem ? statusItem.label : '未知状态';
} else {
billsStatusCheck.value = '未知状态';
}
//
if (planLubeId.value) {
getPlanLubeDetailData();
}
} else {
proxy?.$modal.msgError("未查询到工单信息");
}
} catch (error) {
console.error('获取工单实例数据失败', error);
proxy?.$modal.msgError("获取工单实例数据失败");
}
};
//
const getPlanLubeDetailData = async () => {
if (!planLubeId.value) return;
loading.value = true;
try {
const res = await getDmsPlanLubeDetail(planLubeId.value);
planLubeDetail.value = res && res.rows ? [res.rows] : [];
} catch (error) {
console.error('获取润滑计划详情失败', error);
proxy?.$modal.msgError("获取润滑计划详情失败");
}
};
//
const getList = async () => {
loading.value = true;
try {
const res = await listDmsBillsLubeInstanceActivity(queryParams);
dmsBillsLubeInstanceActivityList.value = res.rows;
// ()
if (res.rows && res.rows.length > 0) {
Object.assign(form, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
lubeLevel: res.rows[0].lubeLevel,
remark: res.rows[0].remark
});
// ()
const lastActivity = res.rows[res.rows.length - 1];
Object.assign(nextStepForm, {
lubeGroup: lastActivity.lubeGroup,
lubeSupervisor: lastActivity.lubeSupervisor,
lubeLevel: lastActivity.lubeLevel,
processHandleResolution: null,
remark: ''
});
} else {
// nextStepForm
Object.assign(nextStepForm, {
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: null,
remark: ''
});
}
} catch (error) {
console.error('获取工单实例节点数据失败', error);
proxy?.$modal.msgError("获取工单实例节点数据失败");
} finally {
loading.value = false;
}
};
//
const submitForm = async () => {
if (!nextStepFormRef.value) return;
await nextStepFormRef.value.validate(async (valid) => {
if (valid) {
try {
buttonLoading.value = true;
//
nextStepForm.processStepOrder = nextStepOrder.value;
nextStepForm.lubeInstanceId = lubeInstanceId;
//
const res = await addDmsBillsLubeInstanceActivity(nextStepForm);
//
await handleStartWorkFlow(res.data);
} catch (error) {
console.error('提交失败', error);
proxy?.$modal.msgError("提交失败,请检查数据或联系管理员");
buttonLoading.value = false;
}
} else {
proxy?.$modal.msgError("表单校验失败,请检查输入项");
}
});
};
//
const handleStartWorkFlow = async (data: any) => {
try {
submitFormData.value.businessId = lubeInstanceId;
//
taskVariables.value = {
data: data
};
submitFormData.value.variables = taskVariables.value;
const resp = await startWorkFlow(submitFormData.value);
if (submitVerifyRef.value) {
buttonLoading.value = false;
submitVerifyRef.value.openDialog(resp.data.taskId);
}
} finally {
buttonLoading.value = false;
}
};
//
const handleApprovalRecord = () => {
approvalRecordRef.value.init(lubeInstanceId);
};
//
const submitCallback = async () => {
await getList(); //
proxy?.$modal.msgSuccess("操作成功");
};
</script>
<style scoped>
.form-header {
font-size: 15px;
color: #409eff;
border-bottom: 1px solid #ddd;
margin: 8px 0 15px;
padding-bottom: 10px;
}
</style>

@ -1,476 +0,0 @@
<template>
<div class="p-2">
<!-- 工单信息区域 -->
<h4 class="form-header h4">工单信息</h4>
<el-card shadow="never" class="mb-[10px]">
<el-form label-width="120px">
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="工单编号">
<el-input v-model="billsInfo.billsLubeCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="工单状态">
<el-input v-model="billsStatusCheck" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请人">
<el-input v-model="billsInfo.createBy" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请时间">
<el-input v-model="billsInfo.createTime" disabled />
</el-form-item>
</el-col>
<el-col :span="16" :offset="2">
<el-form-item label="备注">
<el-input v-model="billsInfo.remark" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 流程步骤展示区域 -->
<el-card shadow="never" class="mb-[10px]">
<el-form ref="stepFormRef" :model="form" label-width="100px">
<!-- 第一步 -->
<h4 class="form-header h4" v-if="dmsBillsLubeInstanceActivityList.length > 0">1</h4>
<el-row v-if="dmsBillsLubeInstanceActivityList.length > 0">
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="form.lubeLevel" placeholder="润滑级别" disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="form.lubeGroup" placeholder="请输入润滑组别" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="form.lubeSupervisor" placeholder="请输入润滑负责人" disabled />
</el-form-item>
</el-col>
</el-row>
<!-- 中间步骤 (已处理的后续节点) -->
<template v-for="(activity) in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId">
<div v-if="activity.processStepOrder && activity.processStepOrder > 1">
<h4 class="form-header h4">{{ `已处理节点:步骤${activity.processStepOrder}(实际参数)` }}</h4>
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别">
<el-select
v-model="activity.lubeLevel"
placeholder="润滑级别"
disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别">
<el-input
v-model="activity.lubeGroup"
disabled
placeholder="润滑组别">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人">
<el-input
v-model="activity.lubeSupervisor"
disabled
placeholder="润滑负责人">
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见">
<el-input
v-model="activity.processHandleResolution"
disabled
placeholder="处理意见">
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</template>
<!-- 当前步骤表单 (用于提交新节点) -->
<div v-if="isUpdate">
<h4 class="form-header h4">当前处理节点步骤{{ nextStepOrder }}{{ nextStepOrder === 2 ? '(实际参数)' : '' }}</h4>
<el-form ref="nextStepFormRef" :model="nextStepForm" :rules="nextStepFormRules" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="nextStepForm.lubeLevel" placeholder="润滑级别">
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="nextStepForm.lubeGroup" placeholder="润滑组别"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="nextStepForm.lubeSupervisor" placeholder="润滑负责人"></el-input>
</el-form-item>
</el-col>
<el-col :span="24" v-if="nextStepOrder > 1">
<el-form-item label="处理意见" prop="processHandleResolution">
<el-input v-model="nextStepForm.processHandleResolution" placeholder="处理意见"></el-input>
</el-form-item>
</el-col>
<el-col :span="24" class="text-center mt-4">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button v-if="billsInfo && billsInfo.lubeInstanceId !== null && billsInfo.status !== 'draft'" type='primary'
@click='handleApprovalRecord'>
流程进度
</el-button>
</el-col>
</el-row>
</el-form>
</div>
</el-form>
</el-card>
<!-- 润滑计划详情区域 -->
<el-card shadow="never">
<h4 class="form-header h4 text-center">润滑计划详细信息</h4>
<el-table v-loading="loading" :data="planLubeDetail">
<el-table-column label="计划ID" align="center" prop="planLubeId" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="润滑部位" align="center" prop="lubeStationName" />
<el-table-column label="润滑标准" align="center" prop="lubeStandardCode" />
<el-table-column label="操作描述" align="center" prop="operationDescription" />
</el-table>
</el-card>
<!-- 提交组件 -->
<submitVerify ref='submitVerifyRef' :task-variables="taskVariables as any" @submit-callback='submitCallback' />
<!-- 审批记录 -->
<approvalRecord ref='approvalRecordRef' />
</div>
</template>
<script setup name="DmsBillsLubeInstanceActivity" lang="ts">
import { ref, reactive, toRefs, getCurrentInstance, onMounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus'; // FormInstance FormRules
import {
listDmsBillsLubeInstanceActivity,
addDmsBillsLubeInstanceActivity
} from '@/api/dms/dmsBillsLubeInstanceActivity';
import {
DmsBillsLubeInstanceActivityVO,
DmsBillsLubeInstanceActivityForm
} from '@/api/dms/dmsBillsLubeInstanceActivity/types';
import { listDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
import { getDmsPlanLubeDetail } from '@/api/dms/dmsPlanLubeDetail';
import {DmsPlanLubeDetailVO} from "@/api/dms/dmsPlanLubeDetail/types";
// API
import { startWorkFlow } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
const route = useRoute();
//
const stepFormRef = ref<FormInstance>(); // ref
const nextStepFormRef = ref<FormInstance>(); // ref
//
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const taskVariables = ref<any>({});
const submitFormData = ref<StartProcessBo>({
businessId: '',
flowCode: 'lubeProcess', // lubeProcess
variables: {}
});
//
const loading = ref(true);
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
const billsInfo = ref<any>({}); //
const planLubeDetail = ref<DmsPlanLubeDetailVO[]>([]);
const billsStatusCheck = ref(''); //
const isUpdate = ref(true); //
const planLubeId = ref(''); // ID
const lubeInstanceId = route.params.lubeInstanceId as string; //
const buttonLoading = ref(false);
//
const nextStepOrder = computed(() => {
return dmsBillsLubeInstanceActivityList.value.length + 1;
});
// ()
const form = reactive<Partial<DmsBillsLubeInstanceActivityForm>>({
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
remark: undefined,
});
// ()
const nextStepForm = reactive<DmsBillsLubeInstanceActivityForm>({
instanceActivityId: undefined,
lubeInstanceId: lubeInstanceId,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
remark: undefined,
});
//
const nextStepFormRules = reactive<FormRules>({
lubeLevel: [{ required: true, message: "润滑级别不能为空", trigger: "change" }],
lubeGroup: [{ required: true, message: "润滑组别不能为空", trigger: "blur" }],
lubeSupervisor: [{ required: true, message: "润滑负责人不能为空", trigger: "blur" }],
//
processHandleResolution: [{ required: nextStepOrder.value > 1, message: "处理意见不能为空", trigger: "blur" }],
});
//
const queryParams = reactive({
pageNum: 1,
pageSize: 50,
lubeInstanceId: lubeInstanceId,
});
//
onMounted(() => {
//
if(route.name === 'childDmsBillsLubeInstanceActivity') {
isUpdate.value = true;
} else if(route.name === 'selectChildDmsBillsLubeInstanceActivity') {
isUpdate.value = false;
}
//
getDmsBillsLubeInstance();
//
getList();
});
//
const getDmsBillsLubeInstance = async () => {
try {
const res = await listDmsBillsLubeInstance(queryParams);
if (res.rows && res.rows.length > 0) {
billsInfo.value = res.rows[0];
// planLubeId
const lubeIdFromServer = res.rows[0].planLubeId;
planLubeId.value = typeof lubeIdFromServer === 'number' ? String(lubeIdFromServer) : lubeIdFromServer;
//
if (lube_level.value && billsInfo.value.lubeStatus !== undefined) {
const statusItem = lube_level.value.find((item: any) => String(item.value) === String(billsInfo.value.lubeStatus));
billsStatusCheck.value = statusItem ? statusItem.label : '未知状态';
} else {
billsStatusCheck.value = '未知状态';
}
//
if (planLubeId.value) {
getPlanLubeDetailData();
}
} else {
proxy?.$modal.msgError("未查询到工单信息");
}
} catch (error) {
console.error('获取工单实例数据失败', error);
proxy?.$modal.msgError("获取工单实例数据失败");
}
};
//
const getPlanLubeDetailData = async () => {
if (!planLubeId.value) return;
loading.value = true;
try {
const res = await getDmsPlanLubeDetail(planLubeId.value);
planLubeDetail.value = res && res.rows ? [res.rows] : [];
} catch (error) {
console.error('获取润滑计划详情失败', error);
proxy?.$modal.msgError("获取润滑计划详情失败");
}
};
//
const getList = async () => {
loading.value = true;
try {
const res = await listDmsBillsLubeInstanceActivity(queryParams);
dmsBillsLubeInstanceActivityList.value = res.rows;
// ()
if (res.rows && res.rows.length > 0) {
Object.assign(form, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
lubeLevel: res.rows[0].lubeLevel,
remark: res.rows[0].remark
});
//
if (nextStepOrder.value === 2) {
//
Object.assign(nextStepForm, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
lubeLevel: res.rows[0].lubeLevel,
processHandleResolution: null, //
remark: ''
});
} else if (nextStepOrder.value > 2) {
// 使
const lastActivity = res.rows[res.rows.length - 1];
Object.assign(nextStepForm, {
lubeGroup: lastActivity.lubeGroup,
lubeSupervisor: lastActivity.lubeSupervisor,
lubeLevel: lastActivity.lubeLevel,
processHandleResolution: null, //
remark: ''
});
}
} else {
// nextStepForm
Object.assign(nextStepForm, {
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: null,
remark: ''
});
}
//
nextStepFormRules.processHandleResolution = [{
required: nextStepOrder.value > 1,
message: "处理意见不能为空",
trigger: "blur"
}];
} catch (error) {
console.error('获取工单实例节点数据失败', error);
proxy?.$modal.msgError("获取工单实例节点数据失败");
} finally {
loading.value = false;
}
};
//
const submitForm = async () => {
if (!nextStepFormRef.value) return;
await nextStepFormRef.value.validate(async (valid) => {
if (valid) {
try {
buttonLoading.value = true;
//
nextStepForm.processStepOrder = nextStepOrder.value;
nextStepForm.lubeInstanceId = lubeInstanceId;
//
if (nextStepOrder.value === 1) {
nextStepForm.processHandleResolution = null;
}
//
const res = await addDmsBillsLubeInstanceActivity(nextStepForm);
//
await handleStartWorkFlow(res.data);
} catch (error) {
console.error('提交失败', error);
proxy?.$modal.msgError("提交失败,请检查数据或联系管理员");
buttonLoading.value = false;
}
} else {
proxy?.$modal.msgError("表单校验失败,请检查输入项");
}
});
};
//
const handleStartWorkFlow = async (data: any) => {
try {
submitFormData.value.businessId = lubeInstanceId;
//
taskVariables.value = {
data: data
};
submitFormData.value.variables = taskVariables.value;
const resp = await startWorkFlow(submitFormData.value);
if (submitVerifyRef.value) {
buttonLoading.value = false;
submitVerifyRef.value.openDialog(resp.data.taskId);
}
} finally {
buttonLoading.value = false;
}
};
//
const handleApprovalRecord = () => {
approvalRecordRef.value.init(lubeInstanceId);
};
//
const submitCallback = async () => {
await getList(); //
proxy?.$modal.msgSuccess("操作成功");
};
</script>
<style scoped>
.form-header {
font-size: 15px;
color: #409eff;
border-bottom: 1px solid #ddd;
margin: 8px 0 15px;
padding-bottom: 10px;
}
</style>

@ -1,452 +0,0 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="润滑工单实例节点ID" prop="instanceActivityId">
<el-input v-model="queryParams.instanceActivityId" placeholder="请输入润滑工单实例节点ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="润滑工单实例ID关联dms_bills_lube_instance的lube_instance_id" prop="lubeInstanceId">
<el-input v-model="queryParams.lubeInstanceId" placeholder="请输入润滑工单实例ID关联dms_bills_lube_instance的lube_instance_id" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="流程定义ID,关联wf_definition_config的id" prop="wfDefinitionId">
<el-input v-model="queryParams.wfDefinitionId" placeholder="请输入流程定义ID,关联wf_definition_config的id" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工单流程节点ID" prop="wfNodeId">
<el-input v-model="queryParams.wfNodeId" placeholder="请输入工单流程节点ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="润滑组别;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" prop="lubeGroup">
<el-input v-model="queryParams.lubeGroup" placeholder="请输入润滑组别;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="润滑负责人;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" prop="lubeSupervisor">
<el-input v-model="queryParams.lubeSupervisor" placeholder="请输入润滑负责人;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="queryParams.lubeLevel" placeholder="请选择润滑级别" clearable >
<el-option v-for="dict in lube_level" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="处理意见;第1步不显示从第2步只显示此字段" prop="processHandleResolution">
<el-input v-model="queryParams.processHandleResolution" placeholder="请输入处理意见;第1步不显示从第2步只显示此字段" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="状态(0已结束 1执行中 2待接取 3已转发" prop="processHandleStatus">
<el-select v-model="queryParams.processHandleStatus" placeholder="请选择状态(0已结束 1执行中 2待接取 3已转发" clearable >
<el-option v-for="dict in process_handle_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="工单流程步骤顺序" prop="processStepOrder">
<el-input v-model="queryParams.processStepOrder" placeholder="请输入工单流程步骤顺序" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="执行开始时间" prop="startTime">
<el-date-picker clearable
v-model="queryParams.startTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择执行开始时间"
/>
</el-form-item>
<el-form-item label="执行结束时间" prop="endTime">
<el-date-picker clearable
v-model="queryParams.endTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择执行结束时间"
/>
</el-form-item>
<el-form-item label="处理人ID" prop="handleUserId">
<el-input v-model="queryParams.handleUserId" placeholder="请输入处理人ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="处理人" prop="handleBy">
<el-input v-model="queryParams.handleBy" placeholder="请输入处理人" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="处理时间" prop="handleTime">
<el-date-picker clearable
v-model="queryParams.handleTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择处理时间"
/>
</el-form-item>
<el-form-item label="转单人用户id或转发协助用户id" prop="transferUserId">
<el-input v-model="queryParams.transferUserId" placeholder="请输入转单人用户id或转发协助用户id" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="用户预留1" prop="attr1">
<el-input v-model="queryParams.attr1" placeholder="请输入用户预留1" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['dms:dmsBillsLubeInstanceActivity:add']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['dms:dmsBillsLubeInstanceActivity:edit']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['dms:dmsBillsLubeInstanceActivity:remove']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['dms:dmsBillsLubeInstanceActivity:export']"></el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="dmsBillsLubeInstanceActivityList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="润滑工单实例节点ID" align="center" prop="instanceActivityId" v-if="columns[0].visible"/>
<el-table-column label="润滑工单实例ID关联dms_bills_lube_instance的lube_instance_id" align="center" prop="lubeInstanceId" v-if="columns[2].visible"/>
<el-table-column label="流程定义ID,关联wf_definition_config的id" align="center" prop="wfDefinitionId" v-if="columns[3].visible"/>
<el-table-column label="工单流程节点ID" align="center" prop="wfNodeId" v-if="columns[4].visible"/>
<el-table-column label="润滑组别;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" align="center" prop="lubeGroup" v-if="columns[5].visible"/>
<el-table-column label="润滑负责人;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" align="center" prop="lubeSupervisor" v-if="columns[6].visible"/>
<el-table-column label="润滑级别" align="center" prop="lubeLevel" v-if="columns[7].visible">
<template #default="scope">
<dict-tag :options="lube_level" :value="scope.row.lubeLevel"/>
</template>
</el-table-column>
<el-table-column label="处理意见;第1步不显示从第2步只显示此字段" align="center" prop="processHandleResolution" v-if="columns[8].visible"/>
<el-table-column label="状态(0已结束 1执行中 2待接取 3已转发" align="center" prop="processHandleStatus" v-if="columns[9].visible">
<template #default="scope">
<dict-tag :options="process_handle_status" :value="scope.row.processHandleStatus"/>
</template>
</el-table-column>
<el-table-column label="工单流程步骤顺序" align="center" prop="processStepOrder" v-if="columns[10].visible"/>
<el-table-column label="执行开始时间" align="center" prop="startTime" width="180" v-if="columns[11].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="执行结束时间" align="center" prop="endTime" width="180" v-if="columns[12].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="处理人ID" align="center" prop="handleUserId" v-if="columns[13].visible"/>
<el-table-column label="处理人" align="center" prop="handleBy" v-if="columns[14].visible"/>
<el-table-column label="处理时间" align="center" prop="handleTime" width="180" v-if="columns[15].visible">
<template #default="scope">
<span>{{ parseTime(scope.row.handleTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="转单人用户id或转发协助用户id" align="center" prop="transferUserId" v-if="columns[16].visible"/>
<el-table-column label="用户预留1" align="center" prop="attr1" v-if="columns[17].visible"/>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[18].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['dms:dmsBillsLubeInstanceActivity:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:dmsBillsLubeInstanceActivity:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改润滑工单实例节点对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="dmsBillsLubeInstanceActivityFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="润滑工单实例节点ID" prop="instanceActivityId">
<el-input v-model="form.instanceActivityId" placeholder="请输入润滑工单实例节点ID" />
</el-form-item>
<el-form-item label="润滑工单实例ID关联dms_bills_lube_instance的lube_instance_id" prop="lubeInstanceId">
<el-input v-model="form.lubeInstanceId" placeholder="请输入润滑工单实例ID关联dms_bills_lube_instance的lube_instance_id" />
</el-form-item>
<el-form-item label="流程定义ID,关联wf_definition_config的id" prop="wfDefinitionId">
<el-input v-model="form.wfDefinitionId" placeholder="请输入流程定义ID,关联wf_definition_config的id" />
</el-form-item>
<el-form-item label="工单流程节点ID" prop="wfNodeId">
<el-input v-model="form.wfNodeId" placeholder="请输入工单流程节点ID" />
</el-form-item>
<el-form-item label="润滑组别;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" prop="lubeGroup">
<el-input v-model="form.lubeGroup" placeholder="请输入润滑组别;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" />
</el-form-item>
<el-form-item label="润滑负责人;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" prop="lubeSupervisor">
<el-input v-model="form.lubeSupervisor" placeholder="请输入润滑负责人;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的" />
</el-form-item>
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="form.lubeLevel" placeholder="请选择润滑级别">
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="处理意见;第1步不显示从第2步只显示此字段" prop="processHandleResolution">
<el-input v-model="form.processHandleResolution" placeholder="请输入处理意见;第1步不显示从第2步只显示此字段" />
</el-form-item>
<el-form-item label="状态(0已结束 1执行中 2待接取 3已转发" prop="processHandleStatus">
<el-select v-model="form.processHandleStatus" placeholder="请选择状态(0已结束 1执行中 2待接取 3已转发">
<el-option
v-for="dict in process_handle_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="工单流程步骤顺序" prop="processStepOrder">
<el-input v-model="form.processStepOrder" placeholder="请输入工单流程步骤顺序" />
</el-form-item>
<el-form-item label="执行开始时间" prop="startTime">
<el-date-picker clearable
v-model="form.startTime"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择执行开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="执行结束时间" prop="endTime">
<el-date-picker clearable
v-model="form.endTime"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择执行结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="处理人ID" prop="handleUserId">
<el-input v-model="form.handleUserId" placeholder="请输入处理人ID" />
</el-form-item>
<el-form-item label="处理人" prop="handleBy">
<el-input v-model="form.handleBy" placeholder="请输入处理人" />
</el-form-item>
<el-form-item label="处理时间" prop="handleTime">
<el-date-picker clearable
v-model="form.handleTime"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择处理时间">
</el-date-picker>
</el-form-item>
<el-form-item label="转单人用户id或转发协助用户id" prop="transferUserId">
<el-input v-model="form.transferUserId" placeholder="请输入转单人用户id或转发协助用户id" />
</el-form-item>
<el-form-item label="用户预留1" prop="attr1">
<el-input v-model="form.attr1" placeholder="请输入用户预留1" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="DmsBillsLubeInstanceActivity" lang="ts">
import { listDmsBillsLubeInstanceActivity, getDmsBillsLubeInstanceActivity, delDmsBillsLubeInstanceActivity, addDmsBillsLubeInstanceActivity, updateDmsBillsLubeInstanceActivity } from '@/api/dms/dmsBillsLubeInstanceActivity';
import { DmsBillsLubeInstanceActivityVO, DmsBillsLubeInstanceActivityQuery, DmsBillsLubeInstanceActivityForm } from '@/api/dms/dmsBillsLubeInstanceActivity/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const dmsBillsLubeInstanceActivityFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `润滑工单实例节点ID`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `润滑工单实例ID关联dms_bills_lube_instance的lube_instance_id`, visible: true },
{ key: 3, label: `流程定义ID,关联wf_definition_config的id`, visible: true },
{ key: 4, label: `工单流程节点ID`, visible: true },
{ key: 5, label: `润滑组别;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的`, visible: true },
{ key: 6, label: `润滑负责人;最后一步自动复制第1步的可在第2步修改修改保存后为第2步的记录第1步为要求的第2步为实际的`, visible: true },
{ key: 7, label: `润滑级别`, visible: true },
{ key: 8, label: `处理意见;第1步不显示从第2步只显示此字段`, visible: true },
{ key: 9, label: `状态(0已结束 1执行中 2待接取 3已转发`, visible: true },
{ key: 10, label: `工单流程步骤顺序`, visible: true },
{ key: 11, label: `执行开始时间`, visible: true },
{ key: 12, label: `执行结束时间`, visible: true },
{ key: 13, label: `处理人ID`, visible: true },
{ key: 14, label: `处理人`, visible: true },
{ key: 15, label: `处理时间`, visible: true },
{ key: 16, label: `转单人用户id或转发协助用户id`, visible: true },
{ key: 17, label: `用户预留1`, visible: true },
{ key: 18, label: `备注`, visible: true },
{ key: 19, label: `创建部门`, visible: true },
{ key: 20, label: `创建人`, visible: true },
{ key: 21, label: `创建时间`, visible: true },
{ key: 22, label: `更新人`, visible: true },
{ key: 23, label: `更新时间`, visible: true },
]);
const initFormData: DmsBillsLubeInstanceActivityForm = {
instanceActivityId: undefined,
lubeInstanceId: undefined,
wfDefinitionId: undefined,
wfNodeId: undefined,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
remark: undefined,
}
const data = reactive<PageData<DmsBillsLubeInstanceActivityForm, DmsBillsLubeInstanceActivityQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
instanceActivityId: undefined,
lubeInstanceId: undefined,
wfDefinitionId: undefined,
wfNodeId: undefined,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
params: {
}
},
rules: {
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询润滑工单实例节点列表 */
const getList = async () => {
loading.value = true;
const res = await listDmsBillsLubeInstanceActivity(queryParams.value);
dmsBillsLubeInstanceActivityList.value = res.rows;
total.value = res.total;
loading.value = false;
}
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
}
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
dmsBillsLubeInstanceActivityFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: DmsBillsLubeInstanceActivityVO[]) => {
ids.value = selection.map(item => item.instanceActivityId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加润滑工单实例节点";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: DmsBillsLubeInstanceActivityVO) => {
reset();
const _instanceActivityId = row?.instanceActivityId || ids.value[0]
const res = await getDmsBillsLubeInstanceActivity(_instanceActivityId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改润滑工单实例节点";
}
/** 提交按钮 */
const submitForm = () => {
dmsBillsLubeInstanceActivityFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.instanceActivityId) {
await updateDmsBillsLubeInstanceActivity(form.value).finally(() => buttonLoading.value = false);
} else {
await addDmsBillsLubeInstanceActivity(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
await getList();
}
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: DmsBillsLubeInstanceActivityVO) => {
const _instanceActivityIds = row?.instanceActivityId || ids.value;
await proxy?.$modal.confirm('是否确认删除润滑工单实例节点编号为"' + _instanceActivityIds + '"的数据项?').finally(() => loading.value = false);
await delDmsBillsLubeInstanceActivity(_instanceActivityIds);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('dms/dmsBillsLubeInstanceActivity/export', {
...queryParams.value
}, `dmsBillsLubeInstanceActivity_${new Date().getTime()}.xlsx`)
}
onMounted(() => {
getList();
});
</script>

@ -1,475 +0,0 @@
<template>
<div class="p-2">
<!-- 工单信息区域 -->
<h4 class="form-header h4">工单信息</h4>
<el-card shadow="never" class="mb-[10px]">
<el-form label-width="120px">
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="工单编号">
<el-input v-model="billsInfo.billsLubeCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="工单状态">
<el-input v-model="billsStatusCheck" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请人">
<el-input v-model="billsInfo.createBy" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请时间">
<el-input v-model="billsInfo.createTime" disabled />
</el-form-item>
</el-col>
<el-col :span="16" :offset="2">
<el-form-item label="备注">
<el-input v-model="billsInfo.remark" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 流程步骤展示区域 -->
<el-card shadow="never" class="mb-[10px]">
<el-form ref="stepFormRef" :model="form" label-width="100px">
<!-- 第一步 -->
<h4 class="form-header h4" v-if="dmsBillsLubeInstanceActivityList.length > 0">1</h4>
<el-row v-if="dmsBillsLubeInstanceActivityList.length > 0">
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="form.lubeLevel" placeholder="润滑级别" disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="form.lubeGroup" placeholder="请输入润滑组别" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="form.lubeSupervisor" placeholder="请输入润滑负责人" disabled />
</el-form-item>
</el-col>
</el-row>
<!-- 中间步骤 (已处理的后续节点) -->
<template v-for="(activity) in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId">
<div v-if="activity.processStepOrder && activity.processStepOrder > 1">
<h4 class="form-header h4">{{ `已处理节点:步骤${activity.processStepOrder}(实际参数)` }}</h4>
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别">
<el-select
v-model="activity.lubeLevel"
placeholder="润滑级别"
disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别">
<el-input
v-model="activity.lubeGroup"
disabled
placeholder="润滑组别">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人">
<el-input
v-model="activity.lubeSupervisor"
disabled
placeholder="润滑负责人">
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见">
<el-input
v-model="activity.processHandleResolution"
disabled
placeholder="处理意见">
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</template>
<!-- 当前步骤表单 (用于提交新节点) -->
<div v-if="isUpdate">
<h4 class="form-header h4">当前处理节点步骤{{ nextStepOrder }}{{ nextStepOrder === 2 ? '(实际参数)' : '' }}</h4>
<el-form ref="nextStepFormRef" :model="nextStepForm" :rules="nextStepFormRules" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="nextStepForm.lubeLevel" placeholder="润滑级别">
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="nextStepForm.lubeGroup" placeholder="润滑组别"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="nextStepForm.lubeSupervisor" placeholder="润滑负责人"></el-input>
</el-form-item>
</el-col>
<el-col :span="24" v-if="nextStepOrder > 1">
<el-form-item label="处理意见" prop="processHandleResolution">
<el-input v-model="nextStepForm.processHandleResolution" placeholder="处理意见"></el-input>
</el-form-item>
</el-col>
<el-col :span="24" class="text-center mt-4">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button v-if="billsInfo && billsInfo.lubeInstanceId !== null && billsInfo.status !== 'draft'" type='primary'
@click='handleApprovalRecord'>
流程进度
</el-button>
</el-col>
</el-row>
</el-form>
</div>
</el-form>
</el-card>
<!-- 润滑计划详情区域 -->
<el-card shadow="never">
<h4 class="form-header h4 text-center">润滑计划详细信息</h4>
<el-table v-loading="loading" :data="planLubeDetail">
<el-table-column label="计划ID" align="center" prop="planLubeId" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="润滑部位" align="center" prop="lubeStationName" />
<el-table-column label="润滑标准" align="center" prop="lubeStandardCode" />
<el-table-column label="操作描述" align="center" prop="operationDescription" />
</el-table>
</el-card>
<!-- 提交组件 -->
<submitVerify ref='submitVerifyRef' :task-variables="taskVariables as any" @submit-callback='submitCallback' />
<!-- 审批记录 -->
<approvalRecord ref='approvalRecordRef' />
</div>
</template>
<script setup name="DmsBillsLubeInstanceActivity" lang="ts">
import { ref, reactive, toRefs, getCurrentInstance, onMounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus'; // FormInstance FormRules
import {
listDmsBillsLubeInstanceActivity,
addDmsBillsLubeInstanceActivity
} from '@/api/dms/dmsBillsLubeInstanceActivity';
import {
DmsBillsLubeInstanceActivityVO,
DmsBillsLubeInstanceActivityForm
} from '@/api/dms/dmsBillsLubeInstanceActivity/types';
import { listDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
import { getDmsPlanLubeDetail } from '@/api/dms/dmsPlanLubeDetail';
import {DmsPlanLubeDetailVO} from "@/api/dms/dmsPlanLubeDetail/types";
// API
import { startWorkFlow } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
const route = useRoute();
//
const stepFormRef = ref<FormInstance>(); // ref
const nextStepFormRef = ref<FormInstance>(); // ref
//
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const taskVariables = ref<any>({});
const submitFormData = ref<StartProcessBo>({
businessId: '',
flowCode: 'lubeProcess', // lubeProcess
variables: {}
});
//
const loading = ref(true);
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
const billsInfo = ref<any>({}); //
const planLubeDetail = ref<DmsPlanLubeDetailVO[]>([]);
const billsStatusCheck = ref(''); //
const isUpdate = ref(true); //
const planLubeId = ref(''); // ID
const lubeInstanceId = route.params.lubeInstanceId as string; //
const buttonLoading = ref(false);
//
const nextStepOrder = computed(() => {
return dmsBillsLubeInstanceActivityList.value.length + 1;
});
// ()
const form = reactive<Partial<DmsBillsLubeInstanceActivityForm>>({
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
remark: undefined,
});
// ()
const nextStepForm = reactive<DmsBillsLubeInstanceActivityForm>({
instanceActivityId: undefined,
lubeInstanceId: lubeInstanceId,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
remark: undefined,
});
//
const nextStepFormRules = reactive<FormRules>({
lubeLevel: [{ required: true, message: "润滑级别不能为空", trigger: "change" }],
lubeGroup: [{ required: true, message: "润滑组别不能为空", trigger: "blur" }],
lubeSupervisor: [{ required: true, message: "润滑负责人不能为空", trigger: "blur" }],
//
processHandleResolution: [{ required: nextStepOrder.value > 1, message: "处理意见不能为空", trigger: "blur" }],
});
//
const queryParams = reactive({
pageNum: 1,
pageSize: 50,
lubeInstanceId: lubeInstanceId,
});
//
onMounted(() => {
//
if(route.name === 'childDmsBillsLubeInstanceActivity') {
isUpdate.value = true;
} else if(route.name === 'selectChildDmsBillsLubeInstanceActivity') {
isUpdate.value = false;
}
//
getDmsBillsLubeInstance();
//
getList();
});
//
const getDmsBillsLubeInstance = async () => {
try {
const res = await listDmsBillsLubeInstance(queryParams);
if (res.rows && res.rows.length > 0) {
billsInfo.value = res.rows[0];
// planLubeId
const lubeIdFromServer = res.rows[0].planLubeId;
planLubeId.value = typeof lubeIdFromServer === 'number' ? String(lubeIdFromServer) : lubeIdFromServer;
//
if (lube_level.value && billsInfo.value.lubeStatus !== undefined) {
const statusItem = lube_level.value.find((item: any) => String(item.value) === String(billsInfo.value.lubeStatus));
billsStatusCheck.value = statusItem ? statusItem.label : '未知状态';
} else {
billsStatusCheck.value = '未知状态';
}
//
if (planLubeId.value) {
getPlanLubeDetailData();
}
} else {
proxy?.$modal.msgError("未查询到工单信息");
}
} catch (error) {
console.error('获取工单实例数据失败', error);
proxy?.$modal.msgError("获取工单实例数据失败");
}
};
//
const getPlanLubeDetailData = async () => {
if (!planLubeId.value) return;
loading.value = true;
try {
const res = await getDmsPlanLubeDetail(planLubeId.value);
planLubeDetail.value = res && res.rows ? [res.rows] : [];
} catch (error) {
console.error('获取润滑计划详情失败', error);
proxy?.$modal.msgError("获取润滑计划详情失败");
}
};
//
const getList = async () => {
loading.value = true;
try {
const res = await listDmsBillsLubeInstanceActivity(queryParams);
dmsBillsLubeInstanceActivityList.value = res.rows;
// ()
if (res.rows && res.rows.length > 0) {
Object.assign(form, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
lubeLevel: res.rows[0].lubeLevel,
remark: res.rows[0].remark
});
//
if (nextStepOrder.value === 2) {
//
Object.assign(nextStepForm, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
lubeLevel: res.rows[0].lubeLevel,
processHandleResolution: null, //
remark: ''
});
} else if (nextStepOrder.value > 2) {
// 使
const lastActivity = res.rows[res.rows.length - 1];
Object.assign(nextStepForm, {
lubeGroup: lastActivity.lubeGroup,
lubeSupervisor: lastActivity.lubeSupervisor,
lubeLevel: lastActivity.lubeLevel,
processHandleResolution: null, //
remark: ''
});
}
} else {
// nextStepForm
Object.assign(nextStepForm, {
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: null,
remark: ''
});
}
//
nextStepFormRules.processHandleResolution = [{
required: nextStepOrder.value > 1,
message: "处理意见不能为空",
trigger: "blur"
}];
} catch (error) {
console.error('获取工单实例节点数据失败', error);
proxy?.$modal.msgError("获取工单实例节点数据失败");
} finally {
loading.value = false;
}
};
//
const submitForm = async () => {
if (!nextStepFormRef.value) return;
await nextStepFormRef.value.validate(async (valid) => {
if (valid) {
try {
buttonLoading.value = true;
//
nextStepForm.processStepOrder = nextStepOrder.value;
nextStepForm.lubeInstanceId = lubeInstanceId;
//
if (nextStepOrder.value === 1) {
nextStepForm.processHandleResolution = null;
}
//
const res = await addDmsBillsLubeInstanceActivity(nextStepForm);
//
await handleStartWorkFlow(res.data);
} catch (error) {
console.error('提交失败', error);
proxy?.$modal.msgError("提交失败,请检查数据或联系管理员");
buttonLoading.value = false;
}
} else {
proxy?.$modal.msgError("表单校验失败,请检查输入项");
}
});
};
//
const handleStartWorkFlow = async (data: any) => {
try {
submitFormData.value.businessId = lubeInstanceId;
//
taskVariables.value = {
data: data
};
submitFormData.value.variables = taskVariables.value;
const resp = await startWorkFlow(submitFormData.value);
if (submitVerifyRef.value) {
buttonLoading.value = false;
submitVerifyRef.value.openDialog(resp.data.taskId);
}
} finally {
buttonLoading.value = false;
}
};
//
const handleApprovalRecord = () => {
approvalRecordRef.value.init(lubeInstanceId);
};
//
const submitCallback = async () => {
await getList(); //
proxy?.$modal.msgSuccess("操作成功");
};
</script>
<style scoped>
.form-header {
font-size: 15px;
color: #409eff;
border-bottom: 1px solid #ddd;
margin: 8px 0 15px;
padding-bottom: 10px;
}
</style>

@ -43,12 +43,7 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel"> <el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="form.lubeLevel" placeholder="润滑级别" disabled> <el-select v-model="form.lubeLevel" placeholder="润滑级别" disabled>
<el-option <el-option v-for="dict in lube_level" :key="dict.value" :label="dict.label" :value="dict.value"> </el-option>
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -65,50 +60,30 @@
</el-row> </el-row>
<!-- 中间步骤 (已处理的后续节点) --> <!-- 中间步骤 (已处理的后续节点) -->
<template v-for="(activity) in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId"> <template v-for="activity in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId">
<div v-if="activity.processStepOrder && activity.processStepOrder > 1"> <div v-if="activity.processStepOrder && activity.processStepOrder > 1">
<h4 class="form-header h4">{{ `已处理节点:步骤${activity.processStepOrder}实际参数)` }}</h4> <h4 class="form-header h4">{{ `已处理节点:步骤${activity.processStepOrder}${activity.processStepOrder === 2 ? '实际参数' : '工单完成'}` }}</h4>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="润滑级别"> <el-form-item label="润滑级别">
<el-select <el-select v-model="activity.lubeLevel" placeholder="润滑级别" disabled>
v-model="activity.lubeLevel" <el-option v-for="dict in lube_level" :key="dict.value" :label="dict.label" :value="dict.value"> </el-option>
placeholder="润滑级别"
disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="润滑组别"> <el-form-item label="润滑组别">
<el-input <el-input v-model="activity.lubeGroup" disabled placeholder="润滑组别"> </el-input>
v-model="activity.lubeGroup"
disabled
placeholder="润滑组别">
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="润滑负责人"> <el-form-item label="润滑负责人">
<el-input <el-input v-model="activity.lubeSupervisor" disabled placeholder="润滑负责人"> </el-input>
v-model="activity.lubeSupervisor"
disabled
placeholder="润滑负责人">
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="处理意见"> <el-form-item label="处理意见">
<el-input <el-input v-model="activity.processHandleResolution" disabled placeholder="处理意见"> </el-input>
v-model="activity.processHandleResolution"
disabled
placeholder="处理意见">
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -117,40 +92,51 @@
<!-- 当前步骤表单 (用于提交新节点) --> <!-- 当前步骤表单 (用于提交新节点) -->
<div v-if="isUpdate"> <div v-if="isUpdate">
<h4 class="form-header h4">当前处理节点步骤{{ nextStepOrder }}{{ nextStepOrder === 2 ? '(实际参数)' : '' }}</h4> <h4 class="form-header h4">
{{
isCreatingWorkflow && dmsBillsLubeInstanceActivityList.length === 0
? `创建工单步骤1要求参数`
: `当前处理节点:步骤${nextStepOrder}${nextStepOrder === 2 ? '(实际参数)' : nextStepOrder === 3 ? '(工单完成)' : ''}`
}}
</h4>
<el-form ref="nextStepFormRef" :model="nextStepForm" :rules="nextStepFormRules" label-width="100px"> <el-form ref="nextStepFormRef" :model="nextStepForm" :rules="nextStepFormRules" label-width="100px">
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel"> <el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="nextStepForm.lubeLevel" placeholder="润滑级别"> <el-select v-model="nextStepForm.lubeLevel" placeholder="润滑级别" :disabled="nextStepOrder === 3">
<el-option <el-option v-for="dict in lube_level" :key="dict.value" :label="dict.label" :value="dict.value"> </el-option>
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup"> <el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="nextStepForm.lubeGroup" placeholder="润滑组别"></el-input> <el-input v-model="nextStepForm.lubeGroup" placeholder="润滑组别" :disabled="nextStepOrder === 3"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor"> <el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="nextStepForm.lubeSupervisor" placeholder="润滑负责人"></el-input> <el-input v-model="nextStepForm.lubeSupervisor" placeholder="润滑负责人" :disabled="nextStepOrder === 3"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="nextStepOrder > 1"> <el-col :span="24" v-if="!(isCreatingWorkflow && dmsBillsLubeInstanceActivityList.length === 0)">
<el-form-item label="处理意见" prop="processHandleResolution"> <el-form-item label="处理意见" prop="processHandleResolution">
<el-input v-model="nextStepForm.processHandleResolution" placeholder="处理意见"></el-input> <el-input v-model="nextStepForm.processHandleResolution" placeholder="处理意见"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" class="text-center mt-4"> <el-col :span="24" class="text-center mt-4">
<el-button type="primary" @click="submitForm"> </el-button> <el-button
<el-button v-if="billsInfo && billsInfo.lubeInstanceId !== null && billsInfo.status !== 'draft'" type='primary' type="primary"
@click='handleApprovalRecord'> @click="submitForm"
:loading="buttonLoading"
:disabled="buttonLoading || (!currentTaskId && !isCreatingWorkflow)"
>
{{ buttonText }}
</el-button>
<el-button
v-if="billsInfo && billsInfo.lubeInstanceId !== null && billsInfo.status !== 'draft'"
type="primary"
@click="handleApprovalRecord"
>
流程进度 流程进度
</el-button> </el-button>
</el-col> </el-col>
@ -164,8 +150,7 @@
<el-card shadow="never"> <el-card shadow="never">
<h4 class="form-header h4 text-center">润滑计划详细信息</h4> <h4 class="form-header h4 text-center">润滑计划详细信息</h4>
<el-table v-loading="loading" :data="planLubeDetail"> <el-table v-loading="loading" :data="planLubeDetail">
<el-table-column label="计划ID" align="center" prop="planLubeId" /> <el-table-column label="设备名称" align="center" prop="machineName" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="润滑部位" align="center" prop="lubeStationName" /> <el-table-column label="润滑部位" align="center" prop="lubeStationName" />
<el-table-column label="润滑标准" align="center" prop="lubeStandardCode" /> <el-table-column label="润滑标准" align="center" prop="lubeStandardCode" />
<el-table-column label="操作描述" align="center" prop="operationDescription" /> <el-table-column label="操作描述" align="center" prop="operationDescription" />
@ -173,9 +158,9 @@
</el-card> </el-card>
<!-- 提交组件 --> <!-- 提交组件 -->
<submitVerify ref='submitVerifyRef' :task-variables="taskVariables as any" @submit-callback='submitCallback' /> <submitVerify ref="submitVerifyRef" :task-variables="taskVariables as any" @submit-callback="submitCallback" @cancel-callback="cancelCallback" />
<!-- 审批记录 --> <!-- 审批记录 -->
<approvalRecord ref='approvalRecordRef' /> <approvalRecord ref="approvalRecordRef" />
</div> </div>
</template> </template>
@ -185,20 +170,24 @@ import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus'; // FormInstance FormRules import type { FormInstance, FormRules } from 'element-plus'; // FormInstance FormRules
import { import {
listDmsBillsLubeInstanceActivity, listDmsBillsLubeInstanceActivity,
addDmsBillsLubeInstanceActivity addDmsBillsLubeInstanceActivity,
updateDmsBillsLubeInstanceActivity
} from '@/api/dms/dmsBillsLubeInstanceActivity'; } from '@/api/dms/dmsBillsLubeInstanceActivity';
import { import {
DmsBillsLubeInstanceActivityVO, DmsBillsLubeInstanceActivityVO,
DmsBillsLubeInstanceActivityForm DmsBillsLubeInstanceActivityForm
} from '@/api/dms/dmsBillsLubeInstanceActivity/types'; } from '@/api/dms/dmsBillsLubeInstanceActivity/types';
import { getDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance'; import { getDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
import { getDmsPlanLubeDetail } from '@/api/dms/dmsPlanLubeDetail'; import { getDmsPlanLubeDetailList} from '@/api/dms/dmsPlanLubeDetail';
import {DmsPlanLubeDetailVO} from "@/api/dms/dmsPlanLubeDetail/types"; import {DmsPlanLubeDetailVO} from "@/api/dms/dmsPlanLubeDetail/types";
// API // API
import { startWorkFlow } from '@/api/workflow/task'; import { startWorkFlow, pageByTaskWait } from '@/api/workflow/task';
import { pageByCurrent } from '@/api/workflow/instance';
import SubmitVerify from '@/components/Process/submitVerify.vue'; import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue'; import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
import { FlowInstanceQuery, FlowInstanceVO } from '@/api/workflow/instance/types';
import { TaskQuery, FlowTaskVO } from '@/api/workflow/task/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status')); const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
@ -229,6 +218,14 @@ const planLubeId = ref(''); // 润滑计划ID从工单信息中获取
const lubeInstanceId = route.params.lubeInstanceId as string; // const lubeInstanceId = route.params.lubeInstanceId as string; //
const buttonLoading = ref(false); const buttonLoading = ref(false);
//
const currentTaskId = ref<string | number | null>(null);
const isCreatingWorkflow = ref(false); // true startWorkFlow
const buttonText = ref('创建工单并提交');
//
const pendingActivityData = ref<DmsBillsLubeInstanceActivityForm | null>(null);
// //
const nextStepOrder = computed(() => { const nextStepOrder = computed(() => {
return dmsBillsLubeInstanceActivityList.value.length + 1; return dmsBillsLubeInstanceActivityList.value.length + 1;
@ -267,19 +264,19 @@ const nextStepFormRules = reactive<FormRules>({
lubeLevel: [{ required: true, message: "润滑级别不能为空", trigger: "change" }], lubeLevel: [{ required: true, message: "润滑级别不能为空", trigger: "change" }],
lubeGroup: [{ required: true, message: "润滑组别不能为空", trigger: "blur" }], lubeGroup: [{ required: true, message: "润滑组别不能为空", trigger: "blur" }],
lubeSupervisor: [{ required: true, message: "润滑负责人不能为空", trigger: "blur" }], lubeSupervisor: [{ required: true, message: "润滑负责人不能为空", trigger: "blur" }],
// // updateButtonAndFormState
processHandleResolution: [{ required: nextStepOrder.value > 1, message: "处理意见不能为空", trigger: "blur" }], processHandleResolution: [{ required: false, message: "处理意见不能为空", trigger: "blur" }],
}); });
// //
const queryParams = reactive({ const queryParams = reactive({
pageNum: 1, pageNum: 1,
pageSize: 50, pageSize: 150,
lubeInstanceId: lubeInstanceId, lubeInstanceId: lubeInstanceId,
}); });
// //
onMounted(() => { onMounted(async () => {
// //
if(route.name === 'childDmsBillsLubeInstanceActivity') { if(route.name === 'childDmsBillsLubeInstanceActivity') {
isUpdate.value = true; isUpdate.value = true;
@ -287,23 +284,235 @@ onMounted(() => {
isUpdate.value = false; isUpdate.value = false;
} }
// if (isUpdate.value) { //
dmsBillsLubeInstance(); await loadData();
// } else {
getList(); //
await dmsBillsLubeInstance();
await getList();
loading.value = false;
}
}); });
async function loadData() {
loading.value = true;
try {
//
if (nextStepFormRef.value) {
nextStepFormRef.value.clearValidate();
}
await dmsBillsLubeInstance();
await getList(); // nextStepOrder nextStepForm
if (dmsBillsLubeInstanceActivityList.value.length === 0) {
currentTaskId.value = null;
isCreatingWorkflow.value = true;
} else {
isCreatingWorkflow.value = false;
currentTaskId.value = null; // ID
const completedSteps = dmsBillsLubeInstanceActivityList.value.length;
// 3
if (completedSteps < 3) {
proxy?.$modal.loading("正在获取最新流程任务...");
let expectedNodeName = '';
if (completedSteps === 1) expectedNodeName = '工单处理';
else if (completedSteps === 2) expectedNodeName = '工单完成';
console.log(`[loadData] Attempting to find current task. Completed steps: ${completedSteps}, Expected next node: '${expectedNodeName}' for businessId: ${lubeInstanceId}`);
try {
let tasks: FlowTaskVO[] = [];
// 使
if (expectedNodeName) {
const taskRes = await pageByTaskWait({
pageNum: 1,
pageSize: 10, // ID
flowCode: 'Lube01', // submitFormData
nodeName: expectedNodeName
});
if (taskRes.rows) {
tasks = taskRes.rows.filter(task => task.businessId === lubeInstanceId);
if (tasks.length > 0) {
console.log(`[loadData] Found ${tasks.length} task(s) using specific nodeName '${expectedNodeName}' and businessId '${lubeInstanceId}'.`);
} else {
console.log(`[loadData] No tasks found using specific nodeName '${expectedNodeName}' for businessId '${lubeInstanceId}'. Will try broader search.`);
}
}
}
let foundTask: FlowTaskVO | undefined = tasks.length > 0 ? tasks[0] : undefined; //
if (tasks.length > 1) {
console.warn(`[loadData] Multiple tasks (${tasks.length}) found with specific nodeName '${expectedNodeName}' and businessId '${lubeInstanceId}'. Using the first one found: ${foundTask?.id}.`);
}
// flowCodebusinessId
if (!foundTask) {
console.log(`[loadData] Task not found with specific nodeName. Fetching all waiting tasks for flowCode 'Lube01' to filter by businessId '${lubeInstanceId}'.`);
const taskResAll = await pageByTaskWait({
pageNum: 1,
pageSize: 50, // 便
flowCode: 'Lube01'
});
if (taskResAll.rows && taskResAll.rows.length > 0) {
const businessTasks = taskResAll.rows.filter(task => task.businessId === lubeInstanceId);
if (businessTasks.length === 1) {
foundTask = businessTasks[0];
console.log(`[loadData] Found single task by businessId from all waiting tasks: ${foundTask.id}, Node: ${foundTask.nodeName}`);
} else if (businessTasks.length > 1) {
console.warn(`[loadData] Multiple tasks (${businessTasks.length}) found for businessId '${lubeInstanceId}' from all waiting tasks. Attempting to match with expectedNodeName '${expectedNodeName}'.`);
if (expectedNodeName) {
foundTask = businessTasks.find(task => task.nodeName === expectedNodeName);
}
if (foundTask) {
console.log(`[loadData] Matched task by expectedNodeName from multiple: ${foundTask.id}`);
} else {
// Fallback: expectedNodeName
foundTask = businessTasks[0];
console.warn(`[loadData] Could not specifically match by nodeName among multiple tasks for businessId '${lubeInstanceId}'. Using the first one found: ${foundTask?.id}, Node: ${foundTask?.nodeName}. Review workflow design if this is not correct.`);
}
} else {
console.log(`[loadData] No tasks found for businessId '${lubeInstanceId}' even after broader search by flowCode 'Lube01'.`);
}
}
}
if (foundTask) {
currentTaskId.value = foundTask.id;
console.log(`[loadData] Successfully set currentTaskId via pageByTaskWait to: ${currentTaskId.value} (Node: ${foundTask.nodeName}, BusinessID: ${foundTask.businessId})`);
} else {
console.warn(`[loadData] No suitable waiting task found for businessId ${lubeInstanceId} with flowCode Lube01. Button may show '暂无操作'.`);
}
} catch (error) {
console.error("[loadData] Error fetching current task via pageByTaskWait:", error);
proxy?.$modal.msgError("获取最新流程任务失败");
} finally {
proxy?.$modal.closeLoading();
}
} else {
console.log("[loadData] All expected business steps completed (>=3) or initial creation. No active task to fetch from workflow via pageByTaskWait for middle steps.");
}
}
updateButtonAndFormState();
// UI
setTimeout(() => {
if (nextStepFormRef.value) {
nextStepFormRef.value.clearValidate();
}
}, 100);
} catch (error) {
console.error("Failed to load initial data", error);
proxy?.$modal.msgError("加载数据失败");
//
currentTaskId.value = null;
isCreatingWorkflow.value = dmsBillsLubeInstanceActivityList.value.length === 0;
updateButtonAndFormState();
} finally {
loading.value = false;
}
}
function updateButtonAndFormState() {
const activitiesCount = dmsBillsLubeInstanceActivityList.value.length;
//
if (activitiesCount === 0 && isCreatingWorkflow.value) {
buttonText.value = '创建工单并提交';
nextStepFormRules.processHandleResolution = [{ required: false, message: "处理意见不能为空", trigger: "blur" }];
// nextStepForm
Object.assign(nextStepForm, {
instanceActivityId: undefined, // ID
lubeInstanceId: lubeInstanceId, // lubeInstanceId
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
remark: undefined,
});
}
// ID
else if (currentTaskId.value && !isCreatingWorkflow.value) {
const currentStepBasedOnActivities = activitiesCount + 1; //
if (currentStepBasedOnActivities === 2) {
//
buttonText.value = '工单处理';
nextStepFormRules.processHandleResolution = [{ required: true, message: "处理意见不能为空", trigger: "blur" }];
} else if (currentStepBasedOnActivities === 3) {
//
buttonText.value = '工单完成';
nextStepFormRules.processHandleResolution = [{ required: true, message: "处理意见不能为空", trigger: "blur" }];
} else {
buttonText.value = '提交处理';
nextStepFormRules.processHandleResolution = [{ required: true, message: "处理意见不能为空", trigger: "blur" }];
}
if (activitiesCount > 0) {
if (currentStepBasedOnActivities === 3) {
//
const firstActivity = dmsBillsLubeInstanceActivityList.value[0];
Object.assign(nextStepForm, {
instanceActivityId: undefined, // ID
lubeInstanceId: lubeInstanceId,
lubeGroup: firstActivity.lubeGroup, //
lubeSupervisor: firstActivity.lubeSupervisor, //
lubeLevel: firstActivity.lubeLevel, //
processHandleResolution: '', //
remark: '', //
processHandleStatus: undefined,
processStepOrder: undefined,
});
} else {
// 使
const lastActivity = dmsBillsLubeInstanceActivityList.value[activitiesCount - 1];
Object.assign(nextStepForm, {
instanceActivityId: undefined, // ID
lubeInstanceId: lubeInstanceId,
lubeGroup: lastActivity.lubeGroup,
lubeSupervisor: lastActivity.lubeSupervisor,
lubeLevel: lastActivity.lubeLevel,
processHandleResolution: '', //
remark: '', //
processHandleStatus: undefined,
processStepOrder: undefined,
});
}
} else { // currentTaskId
Object.assign(nextStepForm, {
instanceActivityId: undefined,
lubeInstanceId: lubeInstanceId,
processHandleResolution: '',
remark: '',
});
}
} else { //
buttonText.value = '暂无操作';
if (isUpdate.value) { //
nextStepFormRules.processHandleResolution = [{ required: false }];
}
}
}
// //
const dmsBillsLubeInstance = async () => { const dmsBillsLubeInstance = async () => {
// const res = await listDmsBillsLubeInstance(queryParams);
//billsInfo.value = res.rows[0];
const _lubeInstanceId = lubeInstanceId; const _lubeInstanceId = lubeInstanceId;
const res = await getDmsBillsLubeInstance(_lubeInstanceId); const res = await getDmsBillsLubeInstance(_lubeInstanceId);
billsInfo.value = res.data; billsInfo.value = res.data;
// planLubeId // planLubeId
// const lubeIdFromServer = res.rows[0].planLubeId;
const lubeIdFromServer = res.data.planLubeId; const lubeIdFromServer = res.data.planLubeId;
planLubeId.value = typeof lubeIdFromServer === 'number' ? String(lubeIdFromServer) : lubeIdFromServer; planLubeId.value = typeof lubeIdFromServer === 'number' ? String(lubeIdFromServer) : lubeIdFromServer;
@ -325,13 +534,8 @@ const dmsBillsLubeInstance = async () => {
const getPlanLubeDetailData = async () => { const getPlanLubeDetailData = async () => {
if (!planLubeId.value) return; if (!planLubeId.value) return;
loading.value = true; loading.value = true;
try { const res = await getDmsPlanLubeDetailList({planLubeId: planLubeId.value});
const res = await getDmsPlanLubeDetail(planLubeId.value); planLubeDetail.value = res.data;
planLubeDetail.value = res && res.rows ? [res.rows] : [];
} catch (error) {
console.error('获取润滑计划详情失败', error);
proxy?.$modal.msgError("获取润滑计划详情失败");
}
}; };
// //
@ -360,8 +564,18 @@ const getList = async () => {
processHandleResolution: null, // processHandleResolution: null, //
remark: '' remark: ''
}); });
} else if (nextStepOrder.value > 2) { } else if (nextStepOrder.value === 3) {
// 使 //
const firstActivity = res.rows[0];
Object.assign(nextStepForm, {
lubeGroup: firstActivity.lubeGroup, //
lubeSupervisor: firstActivity.lubeSupervisor, //
lubeLevel: firstActivity.lubeLevel, //
processHandleResolution: null, //
remark: ''
});
} else if (nextStepOrder.value > 3) {
// 使
const lastActivity = res.rows[res.rows.length - 1]; const lastActivity = res.rows[res.rows.length - 1];
Object.assign(nextStepForm, { Object.assign(nextStepForm, {
lubeGroup: lastActivity.lubeGroup, lubeGroup: lastActivity.lubeGroup,
@ -400,52 +614,98 @@ const getList = async () => {
// //
const submitForm = async () => { const submitForm = async () => {
if (!nextStepFormRef.value) return; if (!nextStepFormRef.value) return;
await nextStepFormRef.value.validate(async (valid) => {
try {
//
buttonLoading.value = false;
pendingActivityData.value = null;
// rules
nextStepFormRef.value.clearValidate();
const valid = await nextStepFormRef.value.validate().catch(errors => {
console.error("表单验证错误:", errors);
return false;
});
if (valid) { if (valid) {
buttonLoading.value = true;
try { try {
buttonLoading.value = true; nextStepForm.processStepOrder = dmsBillsLubeInstanceActivityList.value.length + 1;
//
nextStepForm.processStepOrder = nextStepOrder.value;
nextStepForm.lubeInstanceId = lubeInstanceId; nextStepForm.lubeInstanceId = lubeInstanceId;
// // NOT NULL
if (nextStepOrder.value === 1) { if (nextStepForm.processHandleResolution === undefined || nextStepForm.processHandleResolution === null) {
nextStepForm.processHandleResolution = null; nextStepForm.processHandleResolution = '';
} }
// //
const res = await addDmsBillsLubeInstanceActivity(nextStepForm); pendingActivityData.value = JSON.parse(JSON.stringify(nextStepForm));
// // -
await handleStartWorkFlow(res.data); taskVariables.value = {
entity: {
lubeInstanceId: pendingActivityData.value.lubeInstanceId,
lubeGroup: pendingActivityData.value.lubeGroup,
lubeSupervisor: pendingActivityData.value.lubeSupervisor,
lubeLevel: pendingActivityData.value.lubeLevel,
processHandleResolution: pendingActivityData.value.processHandleResolution,
processStepOrder: pendingActivityData.value.processStepOrder
}
};
} catch (error) { if (isCreatingWorkflow.value && dmsBillsLubeInstanceActivityList.value.length === 0) {
console.error('提交失败', error); // :
proxy?.$modal.msgError("提交失败,请检查数据或联系管理员"); submitFormData.value.businessId = lubeInstanceId;
submitFormData.value.variables = taskVariables.value;
console.log("[submitForm] 开始启动工作流, businessId:", lubeInstanceId);
const workflowRes = await startWorkFlow(submitFormData.value);
if (!workflowRes || !workflowRes.data || !workflowRes.data.taskId) {
buttonLoading.value = false;
throw new Error("工作流启动失败未能获取有效的任务ID");
}
console.log("[submitForm] 工作流启动成功, taskId:", workflowRes.data.taskId);
if (submitVerifyRef.value) {
buttonLoading.value = false; // openDialog loading
submitVerifyRef.value.openDialog(String(workflowRes.data.taskId));
} else {
buttonLoading.value = false;
throw new Error("提交流程组件不可用");
}
} else if (currentTaskId.value && !isCreatingWorkflow.value) {
//
console.log("[submitForm] 处理工作流节点, taskId:", currentTaskId.value);
if (submitVerifyRef.value) {
buttonLoading.value = false;
submitVerifyRef.value.openDialog(String(currentTaskId.value));
} else {
buttonLoading.value = false;
throw new Error("提交流程组件不可用");
}
} else {
buttonLoading.value = false;
throw new Error("未知的提交流程状态或没有待办任务ID");
}
} catch (error: any) {
buttonLoading.value = false; buttonLoading.value = false;
pendingActivityData.value = null; //
console.error('[submitForm] 提交失败:', error);
proxy?.$modal.msgError(error.message || "提交失败,请检查数据或联系管理员");
} }
} else { } else {
buttonLoading.value = false;
proxy?.$modal.msgError("表单校验失败,请检查输入项"); proxy?.$modal.msgError("表单校验失败,请检查输入项");
} }
}); } catch (error) {
};
//
const handleStartWorkFlow = async (data: any) => {
try {
submitFormData.value.businessId = lubeInstanceId;
//
taskVariables.value = {
entity: data
};
submitFormData.value.variables = taskVariables.value;
const resp = await startWorkFlow(submitFormData.value);
if (submitVerifyRef.value) {
buttonLoading.value = false;
submitVerifyRef.value.openDialog(resp.data.taskId);
}
} finally {
buttonLoading.value = false; buttonLoading.value = false;
console.error('[submitForm] 意外错误:', error);
proxy?.$modal.msgError("表单提交过程中发生错误");
} }
}; };
@ -455,9 +715,73 @@ const handleApprovalRecord = () => {
}; };
// //
const submitCallback = async () => { const submitCallback = async (/* success?: boolean, nextTaskId?: string | number | null */) => {
await getList(); // // success nextTaskId
proxy?.$modal.msgSuccess("操作成功"); // submitVerify.vue submitCallback
// undefined
console.log('[submitCallback] Invoked.');
try {
if (pendingActivityData.value) {
// submitCallback submitVerify.vue
//
const activityRes = await addDmsBillsLubeInstanceActivity(pendingActivityData.value);
console.log("[submitCallback] Business data saved successfully:", activityRes.data);
//
const stepOrderOfSavedData = pendingActivityData.value.processStepOrder;
if (stepOrderOfSavedData === 1) {
proxy?.$modal.msgSuccess("工单创建数据已保存,流程已流转。");
} else if (stepOrderOfSavedData === 2) {
proxy?.$modal.msgSuccess("工单处理数据已保存,流程已流转。");
} else if (stepOrderOfSavedData === 3) {
proxy?.$modal.msgSuccess("工单完成数据已保存,工作流已结束。");
// currentTaskId loadData null
} else {
// 退1, 2, 3
proxy?.$modal.msgSuccess("业务数据已保存,操作已继续。");
}
// ID (currentTaskId) loadData()
} else {
// pendingActivityData.value null
// submitForm
// submitVerify.vue ""
//
console.warn("[submitCallback] pendingActivityData was null upon callback. This might be normal if a cancel operation occurred or submitForm failed before calling workflow.");
}
} catch (error) {
console.error('[submitCallback] Error saving business data:', error);
//
proxy?.$modal.msgError("关键错误:业务数据保存失败!工作流可能已推进,请紧急核查数据一致性。");
} finally {
//
buttonLoading.value = false;
// ""
// isCreatingWorkflow loadData
// isCreatingWorkflow.value = false; // loadData
pendingActivityData.value = null; //
// UI
if (isUpdate.value) {
try {
console.log("[submitCallback] Reloading data to reflect current workflow state...");
await loadData(); // loadData currentTaskId, dmsBillsLubeInstanceActivityList,
console.log("[submitCallback] Data reloaded. Current Task ID is now:", currentTaskId.value);
} catch (loadError) {
console.error('[submitCallback] Failed to reload data post-submission attempt:', loadError);
proxy?.$modal.msgError("数据刷新失败,请手动刷新页面以查看最新状态。");
}
}
}
};
//
const cancelCallback = () => {
console.log('[cancelCallback] 用户取消了操作');
pendingActivityData.value = null; //
buttonLoading.value = false;
}; };
</script> </script>

@ -1,563 +0,0 @@
<template>
<div class="p-2">
<!-- 顶部操作按钮区域 -->
<el-card shadow="never" class="mb-[10px]">
<div style="display: flex; justify-content: space-between">
<div>
<el-button v-if="submitButtonShow" :loading="buttonLoading" type="info" @click="submitForm('draft')">
</el-button>
<el-button v-if="submitButtonShow" :loading="buttonLoading" type="primary" @click="submitForm('submit')">
</el-button>
<el-button v-if="approvalButtonShow" :loading="buttonLoading" type="primary" @click="approvalVerifyOpen">
审批
</el-button>
<el-button v-if="billsInfo.billsLubeInstanceId && billsInfo.lubeStatus !== 'draft'" type="primary"
@click="handleApprovalRecord">
流程进度
</el-button>
</div>
<div>
<el-button style="float: right" @click="goBack()"></el-button>
</div>
</div>
</el-card>
<!-- 工单信息区域 -->
<h4 class="form-header h4">工单信息</h4>
<el-card shadow="never" class="mb-[10px]">
<el-form label-width="120px">
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="工单编号">
<el-input v-model="billsInfo.billsLubeCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="工单状态">
<el-input v-model="billsStatusCheck" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请人">
<el-input v-model="billsInfo.createBy" disabled />
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="申请时间">
<el-input v-model="billsInfo.createTime" disabled />
</el-form-item>
</el-col>
<el-col :span="16" :offset="2">
<el-form-item label="备注">
<el-input v-model="billsInfo.remark" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<!-- 流程步骤展示区域 -->
<el-card shadow="never" class="mb-[10px]">
<el-form ref="stepFormRef" :model="form" label-width="100px">
<!-- 第一步 -->
<h4 class="form-header h4" v-if="dmsBillsLubeInstanceActivityList.length > 0">1</h4>
<el-row v-if="dmsBillsLubeInstanceActivityList.length > 0">
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="form.lubeLevel" placeholder="润滑级别" disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="form.lubeGroup" placeholder="请输入润滑组别" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="form.lubeSupervisor" placeholder="请输入润滑负责人" disabled />
</el-form-item>
</el-col>
</el-row>
<!-- 中间步骤 (已处理的后续节点) -->
<template v-for="(activity) in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId">
<div v-if="activity.processStepOrder && activity.processStepOrder > 1">
<h4 class="form-header h4">{{ `已处理节点:步骤${activity.processStepOrder}` }}</h4>
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别">
<el-select
v-model="activity.lubeLevel"
placeholder="润滑级别"
disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别">
<el-input
v-model="activity.lubeGroup"
disabled
placeholder="润滑组别">
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人">
<el-input
v-model="activity.lubeSupervisor"
disabled
placeholder="润滑负责人">
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见">
<el-input
v-model="activity.processHandleResolution"
disabled
placeholder="处理意见">
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</template>
<!-- 当前步骤表单 (用于提交新节点) -->
<div v-if="isUpdate">
<h4 class="form-header h4">当前处理节点步骤{{ nextStepOrder }}</h4>
<el-form ref="nextStepFormRef" :model="nextStepForm" :rules="nextStepFormRules" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="润滑级别" prop="lubeLevel">
<el-select v-model="nextStepForm.lubeLevel" placeholder="润滑级别">
<el-option
v-for="dict in lube_level"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别" prop="lubeGroup">
<el-input v-model="nextStepForm.lubeGroup" placeholder="润滑组别"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑负责人" prop="lubeSupervisor">
<el-input v-model="nextStepForm.lubeSupervisor" placeholder="润滑负责人"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="处理意见" prop="processHandleResolution">
<el-input v-model="nextStepForm.processHandleResolution" placeholder="处理意见"></el-input>
</el-form-item>
</el-col>
<el-col :span="24" class="text-center mt-4">
<el-button type="primary" @click="submitNextStep"> </el-button>
</el-col>
</el-row>
</el-form>
</div>
</el-form>
</el-card>
<!-- 润滑计划详情区域 -->
<el-card shadow="never">
<h4 class="form-header h4 text-center">润滑计划详细信息</h4>
<el-table v-loading="loading" :data="planLubeDetail">
<el-table-column label="计划ID" align="center" prop="planLubeId" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="润滑部位" align="center" prop="lubeStationName" />
<el-table-column label="润滑标准" align="center" prop="lubeStandardCode" />
<el-table-column label="操作描述" align="center" prop="operationDescription" />
</el-table>
</el-card>
<!-- 提交组件 -->
<submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" />
<!-- 审批记录 -->
<approvalRecord ref="approvalRecordRef" />
<el-dialog v-model="dialogVisible.visible" :title="dialogVisible.title" :before-close="handleClose" width="500">
<el-select v-model="flowCode" placeholder="Select" style="width: 240px">
<el-option v-for="item in flowCodeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose"></el-button>
<el-button type="primary" @click="submitFlow()"></el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="DmsBillsLubeInstanceActivity" lang="ts">
import { ref, reactive, toRefs, getCurrentInstance, onMounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus';
import { startWorkFlow } from '@/api/workflow/task';
import SubmitVerify from '@/components/Process/submitVerify.vue';
import ApprovalRecord from '@/components/Process/approvalRecord.vue';
import { AxiosResponse } from 'axios';
import { StartProcessBo } from '@/api/workflow/workflowCommon/types';
import {
listDmsBillsLubeInstanceActivity,
addDmsBillsLubeInstanceActivity
} from '@/api/dms/dmsBillsLubeInstanceActivity';
import {
DmsBillsLubeInstanceActivityVO,
DmsBillsLubeInstanceActivityForm
} from '@/api/dms/dmsBillsLubeInstanceActivity/types';
import { listDmsBillsLubeInstance, updateDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
import { getDmsPlanLubeDetail } from '@/api/dms/dmsPlanLubeDetail';
import { DmsPlanLubeDetailVO } from "@/api/dms/dmsPlanLubeDetail/types";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
const route = useRoute();
const router = useRouter();
//
const stepFormRef = ref<FormInstance>();
const nextStepFormRef = ref<FormInstance>();
//
const loading = ref(true);
const buttonLoading = ref(false);
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
const billsInfo = ref<any>({});
const planLubeDetail = ref<DmsPlanLubeDetailVO[]>([]);
const billsStatusCheck = ref('');
const isUpdate = ref(true);
const planLubeId = ref('');
const lubeInstanceId = route.params.lubeInstanceId as string;
//
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
const routeParams = ref<Record<string, any>>({});
const flowCodeOptions = [
{
value: 'planlube',
label: '润滑工单申请'
}
];
const flowCode = ref<string>('');
const dialogVisible = reactive<DialogOption>({
visible: false,
title: '流程定义'
});
const submitFormData = ref<StartProcessBo>({
businessId: '',
flowCode: '',
variables: {}
});
const taskVariables = ref<Record<string, any>>({});
//
const nextStepOrder = computed(() => {
return dmsBillsLubeInstanceActivityList.value.length + 1;
});
// ()
const form = reactive<Partial<DmsBillsLubeInstanceActivityForm>>({
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
remark: undefined,
});
// ()
const nextStepForm = reactive<DmsBillsLubeInstanceActivityForm>({
instanceActivityId: undefined,
lubeInstanceId: lubeInstanceId,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
remark: undefined,
});
//
const nextStepFormRules = reactive<FormRules>({
lubeLevel: [{ required: true, message: "润滑级别不能为空", trigger: "change" }],
lubeGroup: [{ required: true, message: "润滑组别不能为空", trigger: "blur" }],
lubeSupervisor: [{ required: true, message: "润滑负责人不能为空", trigger: "blur" }],
processHandleResolution: [{ required: true, message: "处理意见不能为空", trigger: "blur" }],
});
//
const queryParams = reactive({
pageNum: 1,
pageSize: 50,
lubeInstanceId: lubeInstanceId,
});
//
onMounted(() => {
//
routeParams.value = proxy.$route.query;
if(route.name === 'childDmsBillsLubeInstanceActivity') {
isUpdate.value = true;
} else if(route.name === 'selectChildDmsBillsLubeInstanceActivity') {
isUpdate.value = false;
}
//
getDmsBillsLubeInstance();
//
getList();
});
//
const getDmsBillsLubeInstance = async () => {
try {
const res = await listDmsBillsLubeInstance(queryParams);
if (res.rows && res.rows.length > 0) {
billsInfo.value = res.rows[0];
// planLubeId
const lubeIdFromServer = res.rows[0].planLubeId;
planLubeId.value = typeof lubeIdFromServer === 'number' ? String(lubeIdFromServer) : lubeIdFromServer;
//
if (lube_level.value && billsInfo.value.lubeStatus !== undefined) {
const statusItem = lube_level.value.find((item: any) => String(item.value) === String(billsInfo.value.lubeStatus));
billsStatusCheck.value = statusItem ? statusItem.label : '未知状态';
} else {
billsStatusCheck.value = '未知状态';
}
//
if (planLubeId.value) {
getPlanLubeDetailData();
}
} else {
proxy?.$modal.msgError("未查询到工单信息");
}
} catch (error) {
console.error('获取工单实例数据失败', error);
proxy?.$modal.msgError("获取工单实例数据失败");
}
};
//
const getPlanLubeDetailData = async () => {
if (!planLubeId.value) return;
loading.value = true;
try {
const res = await getDmsPlanLubeDetail(planLubeId.value);
planLubeDetail.value = res && res.rows ? [res.rows] : [];
} catch (error) {
console.error('获取润滑计划详情失败', error);
proxy?.$modal.msgError("获取润滑计划详情失败");
} finally {
loading.value = false;
}
};
//
const getList = async () => {
loading.value = true;
try {
const res = await listDmsBillsLubeInstanceActivity(queryParams);
dmsBillsLubeInstanceActivityList.value = res.rows;
// ()
if (res.rows && res.rows.length > 0) {
Object.assign(form, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
lubeLevel: res.rows[0].lubeLevel,
remark: res.rows[0].remark
});
// ()
const lastActivity = res.rows[res.rows.length - 1];
Object.assign(nextStepForm, {
lubeGroup: lastActivity.lubeGroup,
lubeSupervisor: lastActivity.lubeSupervisor,
lubeLevel: lastActivity.lubeLevel,
processHandleResolution: null,
remark: ''
});
} else {
// nextStepForm
Object.assign(nextStepForm, {
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: null,
remark: ''
});
}
} catch (error) {
console.error('获取工单实例节点数据失败', error);
proxy?.$modal.msgError("获取工单实例节点数据失败");
} finally {
loading.value = false;
}
};
//
const submitNextStep = async () => {
if (!nextStepFormRef.value) return;
await nextStepFormRef.value.validate(async (valid: boolean) => {
if (valid) {
try {
loading.value = true;
//
nextStepForm.processStepOrder = nextStepOrder.value;
//
await addDmsBillsLubeInstanceActivity(nextStepForm);
proxy?.$modal.msgSuccess("提交成功");
//
await getList();
//
Object.assign(nextStepForm, {
processHandleResolution: null,
remark: ''
});
} catch (error) {
console.error('提交节点失败', error);
proxy?.$modal.msgError("提交失败");
} finally {
loading.value = false;
}
}
});
};
//
const handleClose = () => {
dialogVisible.visible = false;
flowCode.value = '';
buttonLoading.value = false;
};
//
const submitForm = (status: string) => {
try {
buttonLoading.value = true;
if (status === 'draft') {
//
buttonLoading.value = false;
proxy?.$modal.msgSuccess('暂存成功');
goBack();
} else {
//
if ((billsInfo.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') {
flowCode.value = flowCodeOptions[0].value;
dialogVisible.visible = true;
return;
}
//
if (flowCode.value === '' || flowCode.value === null) {
flowCode.value = 'xx';
}
handleStartWorkFlow(billsInfo.value);
}
} finally {
buttonLoading.value = false;
}
};
const submitFlow = async () => {
handleStartWorkFlow(billsInfo.value);
dialogVisible.visible = false;
};
//
const handleStartWorkFlow = async (data: any): Promise<void> => {
try {
submitFormData.value.flowCode = flowCode.value;
submitFormData.value.businessId = data.lubeInstanceId;
//
taskVariables.value = {
data: data
};
submitFormData.value.variables = taskVariables.value;
const resp = await startWorkFlow(submitFormData.value);
if (submitVerifyRef.value) {
buttonLoading.value = false;
submitVerifyRef.value.openDialog(resp.data.taskId);
}
} finally {
buttonLoading.value = false;
}
};
//
const handleApprovalRecord = (): void => {
approvalRecordRef.value?.init(billsInfo.value.lubeInstanceId);
};
//
const submitCallback = async () => {
await proxy.$tab.closePage(proxy.$route);
goBack();
// void
};
//
const goBack = () => {
proxy.$tab.closePage(proxy.$route);
proxy.$router.go(-1);
};
//
const approvalVerifyOpen = async () => {
submitVerifyRef.value?.openDialog(routeParams.value.taskId);
};
//
const submitButtonShow = computed(() => {
return (
routeParams.value.type === 'add' ||
(routeParams.value.type === 'update' &&
billsInfo.value.status &&
(billsInfo.value.status === 'draft' || billsInfo.value.status === 'cancel' || billsInfo.value.status === 'back'))
);
});
//
const approvalButtonShow = computed(() => {
return routeParams.value.type === 'approval' && billsInfo.value.status && billsInfo.value.status === 'waiting';
});
</script>
Loading…
Cancel
Save