yinq 1 month ago
commit 1c461e8304

@ -7,7 +7,7 @@
"type": "module",
"scripts": {
"dev": "vite serve --mode development",
"build:prod": "node --max_old_space_size=9012 node_modules/vite/bin/vite.js build --mode production",
"build:prod": "node --max_old_space_size=8192 node_modules/vite/bin/vite.js build --mode production",
"build:dev": "vite build --mode development",
"preview": "vite preview",
"lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ",

@ -122,6 +122,11 @@ export interface DmsBillsInspectInstanceForm extends BaseEntity {
*/
remark?: string;
/**
* draft稿 waiting processing completed cancel back退
*/
status?: string;
}
export interface DmsBillsInspectInstanceQuery extends PageQuery {

@ -141,6 +141,16 @@ export interface DmsBillsLubeInstanceForm extends BaseEntity {
*/
planLubeCode?: string;
/**
* draft稿 waiting processing completed cancel back退
*/
status?: string;
createBy?: string;
createTime?: string;
}
export interface DmsBillsLubeInstanceQuery extends PageQuery {
@ -214,6 +224,10 @@ export interface DmsBillsLubeInstanceQuery extends PageQuery {
*
*/
planLubeCode?: string;
createBy?: string;
createTime?: string;
}

@ -15,11 +15,11 @@
<el-option v-for="dict in instance_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="报修来源类型" prop="faultSourceType">
<!-- <el-form-item label="报修来源类型" prop="faultSourceType" label-width="100px">
<el-select v-model="queryParams.faultSourceType" placeholder="请选择报修来源类型" clearable >
<el-option v-for="dict in fault_source_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
</el-form-item>-->
<!-- <el-form-item label="报修来源ID" prop="faultSourceId">
<el-input v-model="queryParams.faultSourceId" placeholder="请输入报修来源ID" clearable @keyup.enter="handleQuery" />
</el-form-item>

@ -0,0 +1,522 @@
<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>

@ -0,0 +1,450 @@
<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>

@ -0,0 +1,476 @@
<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>

@ -4,49 +4,75 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<!-- <el-form-item label="主键标识" prop="billsLubeDetailId">
<el-input v-model="queryParams.billsLubeDetailId" placeholder="请输入主键标识" clearable @keyup.enter="handleQuery" />
<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="润滑工单" prop="lubeInstanceId">
<el-input v-model="queryParams.lubeInstanceId" placeholder="请输入润滑工单" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<!-- <el-form-item label="设备" prop="machineId">
<el-input v-model="queryParams.machineId" placeholder="请输入设备" clearable @keyup.enter="handleQuery" />
<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="润滑部位" prop="lubeStationId">
<el-input v-model="queryParams.lubeStationId" placeholder="请输入润滑部位" clearable @keyup.enter="handleQuery" />
<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="润滑标准" prop="lubeStandardId">
<el-input v-model="queryParams.lubeStandardId" placeholder="请输入润滑标准" clearable @keyup.enter="handleQuery" />
<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="操作描述" prop="operationDescription">
<el-input v-model="queryParams.operationDescription" placeholder="请输入操作描述" clearable @keyup.enter="handleQuery" />
</el-form-item>-->
<el-form-item label="润滑状态" prop="maintStatus">
<el-select v-model="queryParams.maintStatus" placeholder="请选择润滑状态" clearable >
<el-option v-for="dict in lube_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
<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="润滑开始时间" prop="beginTime" label-width="100px">
<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.beginTime"
v-model="queryParams.startTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择润滑开始时间"
placeholder="请选择执行开始时间"
/>
</el-form-item>
<!-- <el-form-item label="润滑结束时间" prop="endTime">
<el-form-item label="执行结束时间" prop="endTime">
<el-date-picker clearable
v-model="queryParams.endTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择润滑结束时间"
placeholder="请选择执行结束时间"
/>
</el-form-item>-->
<el-form-item label="激活标识" prop="activeFlag">
<el-select v-model="queryParams.activeFlag" placeholder="请选择激活标识" clearable >
<el-option v-for="dict in active_flag" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</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>
@ -61,57 +87,68 @@
<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:dmsBillsLubeDetail:add']"></el-button>
<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:dmsBillsLubeDetail:edit']"></el-button>
<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:dmsBillsLubeDetail:remove']"></el-button>
<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:dmsBillsLubeDetail:export']"></el-button>
<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="dmsBillsLubeDetailList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" :data="dmsBillsLubeInstanceActivityList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键标识" align="center" prop="billsLubeDetailId" v-if="columns[0].visible"/>
<el-table-column label="润滑工单" align="center" prop="lubeInstanceId" v-if="columns[2].visible"/>
<el-table-column label="设备" align="center" prop="machineId" v-if="columns[3].visible"/>
<el-table-column label="润滑部位" align="center" prop="lubeStationId" v-if="columns[4].visible"/>
<el-table-column label="润滑标准" align="center" prop="lubeStandardId" v-if="columns[5].visible"/>
<el-table-column label="操作描述" align="center" prop="operationDescription" v-if="columns[6].visible"/>
<el-table-column label="润滑状态" align="center" prop="maintStatus" v-if="columns[7].visible">
<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_status" :value="scope.row.maintStatus"/>
<dict-tag :options="lube_level" :value="scope.row.lubeLevel"/>
</template>
</el-table-column>
<el-table-column label="润滑开始时间" align="center" prop="beginTime" width="180" v-if="columns[8].visible">
<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">
<span>{{ parseTime(scope.row.beginTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
<dict-tag :options="process_handle_status" :value="scope.row.processHandleStatus"/>
</template>
</el-table-column>
<el-table-column label="润滑结束时间" align="center" prop="endTime" width="180" v-if="columns[9].visible">
<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="激活标识" align="center" prop="activeFlag" v-if="columns[10].visible">
<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">
<dict-tag :options="active_flag" :value="scope.row.activeFlag"/>
<span>{{ parseTime(scope.row.handleTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[11].visible"/>
<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:dmsBillsLubeDetail:edit']"></el-button>
<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:dmsBillsLubeDetail:remove']"></el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['dms:dmsBillsLubeInstanceActivity:remove']"></el-button>
</el-tooltip>
</template>
</el-table-column>
@ -119,62 +156,88 @@
<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="dmsBillsLubeDetailFormRef" :model="form" :rules="rules" label-width="120px">
<!-- <el-form-item label="主键标识" prop="billsLubeDetailId">
<el-input v-model="form.billsLubeDetailId" placeholder="请输入主键标识" />
</el-form-item>-->
<el-form-item label="润滑工单" prop="lubeInstanceId">
<!-- <el-input v-model="form.lubeInstanceId" placeholder="请输入润滑工单" />-->
<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="设备" prop="machineId">
<!-- <el-input v-model="form.machineId" placeholder="请输入设备" />-->
<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="润滑部位" prop="lubeStationId">
<!-- <el-input v-model="form.lubeStationId" placeholder="请输入润滑部位" />-->
<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="润滑标准" prop="lubeStandardId">
<!-- <el-input v-model="form.lubeStandardId" placeholder="请输入润滑标准" />-->
<el-form-item label="工单流程节点ID" prop="wfNodeId">
<el-input v-model="form.wfNodeId" placeholder="请输入工单流程节点ID" />
</el-form-item>
<el-form-item label="操作描述" prop="operationDescription">
<el-input v-model="form.operationDescription" placeholder="请输入操作描述" />
<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="润滑状态" prop="maintStatus">
<el-select v-model="form.maintStatus" placeholder="请选择润滑状态">
<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_status"
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="润滑开始时间" prop="beginTime">
<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.beginTime"
v-model="form.startTime"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择润滑开始时间">
placeholder="请选择执行开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="润滑结束时间" prop="endTime">
<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="请选择润滑结束时间">
placeholder="请选择执行结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="激活标识" prop="activeFlag">
<el-select v-model="form.activeFlag" placeholder="请选择激活标识">
<el-option
v-for="dict in active_flag"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
<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="请输入备注" />
@ -190,14 +253,14 @@
</div>
</template>
<script setup name="DmsBillsLubeDetail" lang="ts">
import { listDmsBillsLubeDetail, getDmsBillsLubeDetail, delDmsBillsLubeDetail, addDmsBillsLubeDetail, updateDmsBillsLubeDetail } from '@/api/dms/dmsBillsLubeDetail';
import { DmsBillsLubeDetailVO, DmsBillsLubeDetailQuery, DmsBillsLubeDetailForm } from '@/api/dms/dmsBillsLubeDetail/types';
<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 { active_flag, lube_status } = toRefs<any>(proxy?.useDict('active_flag', 'lube_status'));
const { lube_level, process_handle_status } = toRefs<any>(proxy?.useDict('lube_level', 'process_handle_status'));
const dmsBillsLubeDetailList = ref<DmsBillsLubeDetailVO[]>([]);
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
@ -207,7 +270,7 @@ const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const dmsBillsLubeDetailFormRef = ref<ElFormInstance>();
const dmsBillsLubeInstanceActivityFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
@ -216,70 +279,88 @@ const dialog = reactive<DialogOption>({
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `主键标识`, visible: false },
{ key: 1, label: `租户编号`, visible: false },
{ key: 2, label: `润滑工单`, visible: true },
{ key: 3, label: `设备`, visible: true },
{ key: 4, label: `润滑部位`, visible: true },
{ key: 5, label: `润滑标准`, visible: true },
{ key: 6, label: `操作描述`, visible: true },
{ key: 7, label: `润滑状态`, visible: true },
{ key: 8, label: `润滑开始时间`, visible: true },
{ key: 9, label: `润滑结束时间`, visible: true },
{ key: 10, label: `激活标识`, visible: true },
{ key: 11, label: `备注`, visible: true },
{ key: 12, label: `创建部门`, visible: false },
{ key: 13, label: `创建人`, visible: false },
{ key: 14, label: `创建时间`, visible: false },
{ key: 15, label: `更新人`, visible: false },
{ key: 16, label: `更新时间`, visible: false },
{ 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: DmsBillsLubeDetailForm = {
billsLubeDetailId: undefined,
const initFormData: DmsBillsLubeInstanceActivityForm = {
instanceActivityId: undefined,
lubeInstanceId: undefined,
machineId: undefined,
lubeStationId: undefined,
lubeStandardId: undefined,
operationDescription: undefined,
maintStatus: undefined,
beginTime: undefined,
wfDefinitionId: undefined,
wfNodeId: undefined,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
activeFlag: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
remark: undefined,
}
const data = reactive<PageData<DmsBillsLubeDetailForm, DmsBillsLubeDetailQuery>>({
const data = reactive<PageData<DmsBillsLubeInstanceActivityForm, DmsBillsLubeInstanceActivityQuery>>({
form: {...initFormData},
queryParams: {
pageNum: 1,
pageSize: 10,
billsLubeDetailId: undefined,
instanceActivityId: undefined,
lubeInstanceId: undefined,
machineId: undefined,
lubeStationId: undefined,
lubeStandardId: undefined,
operationDescription: undefined,
maintStatus: undefined,
beginTime: undefined,
wfDefinitionId: undefined,
wfNodeId: undefined,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
processHandleResolution: undefined,
processHandleStatus: undefined,
processStepOrder: undefined,
startTime: undefined,
endTime: undefined,
activeFlag: undefined,
handleUserId: undefined,
handleBy: undefined,
handleTime: undefined,
transferUserId: undefined,
attr1: undefined,
params: {
}
},
rules: {
activeFlag: [
{ required: true, message: "激活标识不能为空", trigger: "change" }
],
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询润滑工单明细列表 */
/** 查询润滑工单实例节点列表 */
const getList = async () => {
loading.value = true;
const res = await listDmsBillsLubeDetail(queryParams.value);
dmsBillsLubeDetailList.value = res.rows;
const res = await listDmsBillsLubeInstanceActivity(queryParams.value);
dmsBillsLubeInstanceActivityList.value = res.rows;
total.value = res.total;
loading.value = false;
}
@ -293,7 +374,7 @@ const cancel = () => {
/** 表单重置 */
const reset = () => {
form.value = {...initFormData};
dmsBillsLubeDetailFormRef.value?.resetFields();
dmsBillsLubeInstanceActivityFormRef.value?.resetFields();
}
/** 搜索按钮操作 */
@ -309,8 +390,8 @@ const resetQuery = () => {
}
/** 多选框选中数据 */
const handleSelectionChange = (selection: DmsBillsLubeDetailVO[]) => {
ids.value = selection.map(item => item.billsLubeDetailId);
const handleSelectionChange = (selection: DmsBillsLubeInstanceActivityVO[]) => {
ids.value = selection.map(item => item.instanceActivityId);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
@ -319,28 +400,28 @@ const handleSelectionChange = (selection: DmsBillsLubeDetailVO[]) => {
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = "添加润滑工单明细";
dialog.title = "添加润滑工单实例节点";
}
/** 修改按钮操作 */
const handleUpdate = async (row?: DmsBillsLubeDetailVO) => {
const handleUpdate = async (row?: DmsBillsLubeInstanceActivityVO) => {
reset();
const _billsLubeDetailId = row?.billsLubeDetailId || ids.value[0]
const res = await getDmsBillsLubeDetail(_billsLubeDetailId);
const _instanceActivityId = row?.instanceActivityId || ids.value[0]
const res = await getDmsBillsLubeInstanceActivity(_instanceActivityId);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改润滑工单明细";
dialog.title = "修改润滑工单实例节点";
}
/** 提交按钮 */
const submitForm = () => {
dmsBillsLubeDetailFormRef.value?.validate(async (valid: boolean) => {
dmsBillsLubeInstanceActivityFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.billsLubeDetailId) {
await updateDmsBillsLubeDetail(form.value).finally(() => buttonLoading.value = false);
if (form.value.instanceActivityId) {
await updateDmsBillsLubeInstanceActivity(form.value).finally(() => buttonLoading.value = false);
} else {
await addDmsBillsLubeDetail(form.value).finally(() => buttonLoading.value = false);
await addDmsBillsLubeInstanceActivity(form.value).finally(() => buttonLoading.value = false);
}
proxy?.$modal.msgSuccess("操作成功");
dialog.visible = false;
@ -350,19 +431,19 @@ const submitForm = () => {
}
/** 删除按钮操作 */
const handleDelete = async (row?: DmsBillsLubeDetailVO) => {
const _billsLubeDetailIds = row?.billsLubeDetailId || ids.value;
await proxy?.$modal.confirm('是否确认删除润滑工单明细编号为"' + _billsLubeDetailIds + '"的数据项?').finally(() => loading.value = false);
await delDmsBillsLubeDetail(_billsLubeDetailIds);
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/dmsBillsLubeDetail/export', {
proxy?.download('dms/dmsBillsLubeInstanceActivity/export', {
...queryParams.value
}, `dmsBillsLubeDetail_${new Date().getTime()}.xlsx`)
}, `dmsBillsLubeInstanceActivity_${new Date().getTime()}.xlsx`)
}
onMounted(() => {

@ -0,0 +1,475 @@
<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>

@ -36,12 +36,9 @@
<!-- 流程步骤展示区域 -->
<el-card shadow="never" class="mb-[10px]">
<el-row>
<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">
@ -67,17 +64,17 @@
</el-col>
</el-row>
<!-- 中间步骤 -->
<template v-for="(activity, index) in dmsBillsLubeInstanceActivityList" :key="activity.instanceActivityId">
<div v-if="activity.processStepOrder != 1">
<h4 class="form-header h4">{{activity.name || '流程节点'}}</h4>
<!-- 中间步骤 (已处理的后续节点) -->
<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="activity.processStepOrder != currentStepOrder">
disabled>
<el-option
v-for="dict in lube_level"
:key="dict.value"
@ -91,7 +88,7 @@
<el-form-item label="润滑组别">
<el-input
v-model="activity.lubeGroup"
:disabled="activity.processStepOrder != currentStepOrder"
disabled
placeholder="润滑组别">
</el-input>
</el-form-item>
@ -100,7 +97,7 @@
<el-form-item label="润滑负责人">
<el-input
v-model="activity.lubeSupervisor"
:disabled="activity.processStepOrder != currentStepOrder"
disabled
placeholder="润滑负责人">
</el-input>
</el-form-item>
@ -109,7 +106,7 @@
<el-form-item label="处理意见">
<el-input
v-model="activity.processHandleResolution"
:disabled="activity.processStepOrder != currentStepOrder"
disabled
placeholder="处理意见">
</el-input>
</el-form-item>
@ -118,11 +115,10 @@
</div>
</template>
<!-- 当前步骤表单 -->
<div v-if="canSubmitNext && isUpdate">
<h4 class="form-header h4" v-if="wfProcessActivityList.length > dmsBillsLubeInstanceActivityList.length">
{{wfProcessActivityList[dmsBillsLubeInstanceActivityList.length]?.processActivityName}}
</h4>
<!-- 当前步骤表单 (用于提交新节点) -->
<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">
@ -137,27 +133,31 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="润滑组别">
<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="润滑负责人">
<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="处理意见">
<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-row>
</el-card>
<!-- 润滑计划详情区域 -->
@ -171,13 +171,18 @@
<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 { ElFormInstance } from 'element-plus';
import { useRoute, useRouter } from 'vue-router';
import type { FormInstance, FormRules } from 'element-plus'; // FormInstance FormRules
import {
listDmsBillsLubeInstanceActivity,
addDmsBillsLubeInstanceActivity
@ -186,71 +191,61 @@ import {
DmsBillsLubeInstanceActivityVO,
DmsBillsLubeInstanceActivityForm
} from '@/api/dms/dmsBillsLubeInstanceActivity/types';
import { listDmsBillsLubeInstance } from '@/api/dms/dmsBillsLubeInstance';
// import { listWfprocessactivity } from '@/api/system/common/wfprocessactivity';
// import { selectPlanLubeDetailByPlanLubeId } from '@/api/dms/dmsPlanLubeDetail';
// import { selectUserIdByDmsBillsLubeInstanceActivityId } from '@/api/dms/dmsBillsLubeInstanceActivity';
import { useUserStore } from '@/store/modules/user';
import { getDmsBillsLubeInstance } 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 router = useRouter();
const userStore = useUserStore();
//
const stepFormRef = ref<ElFormInstance>();
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: 'Lube01',
variables: {}
});
//
const loading = ref(true);
const dmsBillsLubeInstanceActivityList = ref<DmsBillsLubeInstanceActivityVO[]>([]);
const wfProcessActivityList = ref<any[]>([]);
const billsInfo = ref<any>({});
const planLubeDetail = ref<any[]>([]);
const billsStatusCheck = ref('');
const isUpdate = ref(true);
const planLubeId = ref('');
const currentStepOrder = ref(0);
const lubeInstanceId = route.params.lubeInstanceId as string;
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 canSubmitNext = computed(() => {
return dmsBillsLubeInstanceActivityList.value.length < wfProcessActivityList.value.length;
});
//
const form = reactive<DmsBillsLubeInstanceActivityForm>({
instanceActivityId: undefined,
lubeInstanceId: lubeInstanceId,
wfDefinitionId: undefined,
wfNodeId: undefined,
// ()
const form = reactive<Partial<DmsBillsLubeInstanceActivityForm>>({
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,
lubeGroup: undefined,
lubeSupervisor: undefined,
lubeLevel: undefined,
@ -267,6 +262,15 @@ const nextStepForm = reactive<DmsBillsLubeInstanceActivityForm>({
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,
@ -284,72 +288,49 @@ onMounted(() => {
}
//
getDmsBillsLubeInstance();
dmsBillsLubeInstance();
//
getList();
});
//
const getDmsBillsLubeInstance = async () => {
try {
const res = await listDmsBillsLubeInstance({ lubeInstanceId });
if (res.rows && res.rows.length > 0) {
billsInfo.value = res.rows[0];
planLubeId.value = res.rows[0].planLubeId;
const dmsBillsLubeInstance = async () => {
//
// const res = await listDmsBillsLubeInstance(queryParams);
//billsInfo.value = res.rows[0];
const _lubeInstanceId = lubeInstanceId;
const res = await getDmsBillsLubeInstance(_lubeInstanceId);
billsInfo.value = res.data;
// planLubeId
// const lubeIdFromServer = res.rows[0].planLubeId;
const lubeIdFromServer = res.data.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) => item.value == billsInfo.value.lubeStatus);
const statusItem = lube_level.value.find((item: any) => String(item.value) === String(billsInfo.value.lubeStatus));
billsStatusCheck.value = statusItem ? statusItem.label : '未知状态';
} else {
billsStatusCheck.value = '未知状态';
}
//
getWfprocessActivity(res.rows[0].wfProcessId || 106);
//
if (planLubeId.value) {
getPlanLubeDetail();
}
}
} catch (error) {
console.error('获取工单实例数据失败', error);
}
};
//
const getWfprocessActivity = async (wfProcessId: number) => {
try {
// const res = await listWfprocessactivity({ wfProcessId });
wfProcessActivityList.value = res.rows;
//
if (dmsBillsLubeInstanceActivityList.value.length > 0) {
dmsBillsLubeInstanceActivityList.value.forEach(activity => {
const matchedProcess = wfProcessActivityList.value.find(
process => process.processActivityOrder === activity.processStepOrder
);
if (matchedProcess) {
activity.name = matchedProcess.processActivityName;
}
});
}
//
checkUserPermission();
} catch (error) {
console.error('获取流程定义失败', error);
getPlanLubeDetailData();
}
};
//
const getPlanLubeDetail = async () => {
const getPlanLubeDetailData = async () => {
if (!planLubeId.value) return;
loading.value = true;
try {
const res = await selectPlanLubeDetailByPlanLubeId(planLubeId.value);
planLubeDetail.value = res.rows;
const res = await getDmsPlanLubeDetail(planLubeId.value);
planLubeDetail.value = res && res.rows ? [res.rows] : [];
} catch (error) {
console.error('获取润滑计划详情失败', error);
} finally {
loading.value = false;
proxy?.$modal.msgError("获取润滑计划详情失败");
}
};
@ -360,8 +341,8 @@ const getList = async () => {
const res = await listDmsBillsLubeInstanceActivity(queryParams);
dmsBillsLubeInstanceActivityList.value = res.rows;
//
if (res.rows.length > 0) {
// ()
if (res.rows && res.rows.length > 0) {
Object.assign(form, {
lubeGroup: res.rows[0].lubeGroup,
lubeSupervisor: res.rows[0].lubeSupervisor,
@ -369,80 +350,114 @@ const getList = async () => {
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,
processStepOrder: res.rows.length + 1,
processHandleResolution: null
processHandleResolution: null, //
remark: ''
});
currentStepOrder.value = res.rows.length + 1;
}
} 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 checkUserPermission = async () => {
if (dmsBillsLubeInstanceActivityList.value.length === wfProcessActivityList.value.length) {
//
const submitForm = async () => {
if (!nextStepFormRef.value) return;
await nextStepFormRef.value.validate(async (valid) => {
if (valid) {
try {
const hasPermission = await selectUserIdByDmsBillsLubeInstanceActivityId(
lubeInstanceId,
userStore.userId
);
buttonLoading.value = true;
//
nextStepForm.processStepOrder = nextStepOrder.value;
nextStepForm.lubeInstanceId = lubeInstanceId;
if (!hasPermission) {
proxy?.$modal.alert("您没有权限处理此工单");
//
proxy?.$store.dispatch("tagsView/delView", route);
//
router.replace({ path: "/dms/deviceLube/dmsBillsLubeInstance" });
//
if (nextStepOrder.value === 1) {
nextStepForm.processHandleResolution = null;
}
//
const res = await addDmsBillsLubeInstanceActivity(nextStepForm);
//
await handleStartWorkFlow(res.data);
} catch (error) {
console.error('检查权限失败', 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 = {
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;
}
};
//
const submitForm = async () => {
try {
//
if (!nextStepForm.processHandleResolution) {
proxy?.$modal.msgError("请填写处理意见");
return;
}
//
const handleApprovalRecord = () => {
approvalRecordRef.value.init(lubeInstanceId);
};
// ID
if (wfProcessActivityList.value.length > 0) {
const currentProcess = wfProcessActivityList.value.find(
process => process.processActivityOrder === nextStepOrder.value
);
if (currentProcess) {
nextStepForm.processActivityId = currentProcess.processActivityId;
}
}
//
nextStepForm.processStepOrder = nextStepOrder.value;
nextStepForm.wfLength = wfProcessActivityList.value.length;
//
await addDmsBillsLubeInstanceActivity(nextStepForm);
proxy?.$modal.msgSuccess("提交成功");
//
await getList();
} catch (error) {
console.error('提交失败', error);
proxy?.$modal.msgError("提交失败");
}
//
const submitCallback = async () => {
await getList(); //
proxy?.$modal.msgSuccess("操作成功");
};
</script>

@ -0,0 +1,563 @@
<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>

@ -4,20 +4,20 @@
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="主键标识" prop="instanceFileId">
<!-- <el-form-item label="主键标识" prop="instanceFileId">
<el-input v-model="queryParams.instanceFileId" placeholder="请输入主键标识" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="关联类型(1维修前2维修后)" prop="targetType">
<el-select v-model="queryParams.targetType" placeholder="请选择关联类型(1维修前2维修后)" clearable >
</el-form-item>-->
<el-form-item label="关联类型" prop="targetType">
<el-select v-model="queryParams.targetType" placeholder="请选择关联类型" clearable >
<el-option v-for="dict in target_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" prop="targetId">
<!-- <el-form-item label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" prop="targetId">
<el-input v-model="queryParams.targetId" placeholder="请输入关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="故障文件地址,一般是图片" prop="filePath">
</el-form-item>-->
<!-- <el-form-item label="故障文件地址,一般是图片" prop="filePath">
<el-input v-model="queryParams.filePath" placeholder="请输入故障文件地址,一般是图片" clearable @keyup.enter="handleQuery" />
</el-form-item>
</el-form-item>-->
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
@ -49,13 +49,14 @@
<el-table v-loading="loading" :data="dmsInstanceFileList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键标识" align="center" prop="instanceFileId" v-if="columns[0].visible"/>
<el-table-column label="关联类型(1维修前2维修后)" align="center" prop="targetType" v-if="columns[2].visible">
<el-table-column label="关联类型" align="center" prop="targetType" v-if="columns[2].visible">
<template #default="scope">
<dict-tag :options="target_type" :value="scope.row.targetType"/>
</template>
</el-table-column>
<el-table-column label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" align="center" prop="targetId" v-if="columns[3].visible"/>
<el-table-column label="故障文件地址,一般是图片" align="center" prop="filePath" v-if="columns[4].visible"/>
<!-- <el-table-column label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" align="center" prop="targetId" v-if="columns[3].visible"/>-->
<el-table-column label="关联节点" align="center" prop="targetId" v-if="columns[3].visible"/>
<el-table-column label="故障文件地址" align="center" prop="filePath" v-if="columns[4].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
@ -73,10 +74,10 @@
<!-- 添加或修改维修工单文件对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="dmsInstanceFileFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="主键标识" prop="instanceFileId">
<!-- <el-form-item label="主键标识" prop="instanceFileId">
<el-input v-model="form.instanceFileId" placeholder="请输入主键标识" />
</el-form-item>
<el-form-item label="关联类型(1维修前2维修后)" prop="targetType">
</el-form-item>-->
<el-form-item label="关联类型" prop="targetType">
<el-radio-group v-model="form.targetType">
<el-radio
v-for="dict in target_type"
@ -85,6 +86,9 @@
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<!-- <el-form-item label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" prop="targetId">
<el-input v-model="form.targetId" placeholder="请输入关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" />
</el-form-item>-->
<el-form-item label="关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" prop="targetId">
<el-input v-model="form.targetId" placeholder="请输入关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID" />
</el-form-item>
@ -128,16 +132,16 @@ const dialog = reactive<DialogOption>({
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `主键标识`, visible: true },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `关联类型(1维修前2维修后)`, visible: true },
{ key: 3, label: `关联类型为1时关联维修工单实例节点主键关联类型为2时关联维修记录ID`, visible: true },
{ key: 4, label: `故障文件地址,一般是图片`, visible: true },
{ key: 5, label: `创建部门`, visible: true },
{ key: 6, label: `创建人`, visible: true },
{ key: 7, label: `创建时间`, visible: true },
{ key: 8, label: `更新人`, visible: true },
{ key: 9, label: `更新时间`, visible: true },
{ key: 0, label: `主键标识`, visible: false },
{ key: 1, label: `租户编号`, visible: false },
{ key: 2, label: `关联类型`, visible: true },
{ key: 3, label: `关联`, visible: false },
{ key: 4, label: `故障文件地址`, visible: true },
{ key: 5, label: `创建部门`, visible: false },
{ key: 6, label: `创建人`, visible: false },
{ key: 7, label: `创建时间`, visible: false },
{ key: 8, label: `更新人`, visible: false },
{ key: 9, label: `更新时间`, visible: false },
]);
const initFormData: DmsInstanceFileForm = {

@ -3,7 +3,7 @@
<el-row :gutter="20">
<!-- 生产bom树 -->
<el-col :lg="6" :xs="24" style="" v-loading="treeLoading">
<el-card shadow="hover">
<el-card shadow="hover" style="height: calc(100vh - 120px);overflow:auto;">
<el-input v-model="materialName" placeholder="请输入物料名称" prefix-icon="Search" clearable />
<el-tree
ref="materialBomTreeRef"
@ -18,21 +18,41 @@
@node-click="handleNodeClick"
>
<template #default="{ node, data }">
<el-tooltip :content="`${data.label}`">
<div class="custom-tree-node">
<span>{{ node.label }}</span>
<div style="width: 100%">
<el-tooltip :content="`${data.label}`" style="width: 100%">
<div class="custom-tree-node"
style="display: inline-block;vertical-align: top;max-width: 80%;overflow: hidden;">
<span
:style="{backgroundColor:getColor(data)?.[0],color:getColor(data)?.[1],verticalAlign: 'center'}">{{ node.label
}}</span>
</div>
</el-tooltip>
<el-button type="primary" link @click="fun(data)"
style=" vertical-align: top; ">
上传
</el-button>
</div>
</template>
</el-tree>
</el-card>
</el-col>
<el-col :lg="18" :xs="24" v-loading="loading">
<div>
<el-divider content-position="left">父级物料</el-divider>
<el-card shadow="hover">
<template #header>
<el-row :gutter="10">
<el-col :span="1.5">
<el-button v-has-permi="['mes:materialBom:add']" type="primary" plain icon="Plus"
@click="addNewMaterialBomVersion()" :loading="btnLoading"
:disabled="addNewMaterialBomVersionBtnDisabled">{{ addNewMaterialBomVersionBtnText }}
</el-button>
</el-col>
</el-row>
</template>
<el-form ref="parentMaterialBomFormRef" label-width="120px" :model="parentForm" :rules="parentRules">
<el-row>
<el-row :gutter="20">
<el-form-item label='父物料ID' prop='parentId' v-if="false">
<el-input v-model='parentForm.parentId' placeholder='' style="width:360px" />
</el-form-item>
@ -40,6 +60,17 @@
<el-input v-model='parentForm.parentMaterialTypeId' placeholder='' style="width:360px" />
</el-form-item>
<el-form-item label='状态' prop='activeFlag' style="width:260px">
<el-select v-model='parentForm.activeFlag' disabled>
<el-option v-for='dict in material_bom_active_flag' :key='dict.value' :label='dict.label'
:value='dict.value' />
</el-select>
</el-form-item>
<el-form-item label="BOM版本" prop='materialBomVersion'>
<el-input v-model='parentForm.materialBomVersion' placeholder='' style="width:260px" disabled />
</el-form-item>
<el-form-item label='父物料名称' prop='parentMaterialName'>
<el-input v-model='parentForm.parentMaterialName' placeholder='请点击检索物料'
@click='handleMaterialSelect(parentForm,SELECT_MATERIAL_MODEL.PARENT_SELECT)'
@ -51,17 +82,17 @@
</el-form-item>
<el-form-item label="BOM版本" prop='materialBomVersion' :model="parentForm">
<el-select v-model="parentForm.materialBomVersion"
placeholder="请选择" style="width:200px">
<el-option
v-for="item in materialBomVersionOptions"
:key="item.materialBomVersion"
:label="item.materialBomVersion"
:value="item.materialBomVersion"
></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="BOM版本" prop='materialBomVersion' :model="parentForm">-->
<!-- <el-select v-model="parentForm.materialBomVersion"-->
<!-- placeholder="请选择" style="width:200px">-->
<!-- <el-option-->
<!-- v-for="item in materialBomVersionOptions"-->
<!-- :key="item.materialBomVersion"-->
<!-- :label="item.materialBomVersion"-->
<!-- :value="item.materialBomVersion"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label='父物料数量' prop='parentStandardAmount'>
<el-input-number v-model='parentForm.parentStandardAmount' :precision="2" :step="1"
@ -80,10 +111,13 @@
</el-select>
</el-form-item>
<el-form-item label="BOM说明" prop='materialBomDesc'>
<el-input v-model='parentForm.materialBomDesc' placeholder='' style="width:360px" type="textarea" />
</el-form-item>
</el-row>
</el-form>
</div>
</el-card>
<el-divider content-position="left">子级物料</el-divider>
@ -243,23 +277,28 @@ import {
materialBomTreeSelect,
listMaterialBomJoinStructure,
addBatchMaterialBom,
getUnitInfoList, getMaterialBomVersionList, getParentMaterialBom, deleteMaterialBoms
} from "@/api/mes/materialBom";
getUnitInfoList, getMaterialBomVersionList, getParentMaterialBom, deleteMaterialBoms,
selectNextMaterialBomVersion
} from '@/api/mes/materialBom';
import { MaterialBomVO, MaterialBomForm, MaterialBomQuery } from '@/api/mes/materialBom/types';
import { BaseMaterialTypeVO } from '@/api/mes/baseMaterialType/types';
import MaterialSelect from '@/views/mes/baseMaterialInfo/addMaterial.vue';
import { to } from 'await-to-js';
import {nextTick} from "vue";
import {MaterialBomVersionVO} from "@/api/mes/materialBomVersion/types";
import {BaseMeasurementUnitInfoVO} from "@/api/mes/baseMeasurementUnitInfo/types";
import {BaseStructureBomTreeVO} from "@/api/mes/baseStructureBom/types";
import { nextTick } from 'vue';
import { MaterialBomVersionVO } from '@/api/mes/materialBomVersion/types';
import { BaseMeasurementUnitInfoVO } from '@/api/mes/baseMeasurementUnitInfo/types';
import { BaseStructureBomTreeVO } from '@/api/mes/baseStructureBom/types';
const materialTypeId = ref(0);//使
const router = useRouter();
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { material_bom_active_flag } = toRefs<any>(proxy?.useDict('material_bom_active_flag'));
const materialBomList = ref<MaterialBomVO[]>();
const saveMaterialBomList = ref<MaterialBomVO[]>([]);
const treeLoading = ref(false);
@ -293,7 +332,20 @@ const SELECT_MATERIAL_MODEL = ref({
PARENT_SELECT: '1',//
CHILD_SELECT: '2',//
DIALOG_CHILD_SELECT: '3'//
})
});
const MATERIAL_BOM_ACTIVE_FLAG = ref({
ACTIVE: '1',//
HISTORY: '2',//
DESIGN: '3'//
});
const addNewMaterialBomVersionBtnText = ref('新增中');
const addNewMaterialBomVersionBtnDisabled = ref(true);
const publishBtnDisplay = ref(false);
const initialMaterialBomVersion = ref('01');
//
const columns = ref<FieldOption[]>([
@ -338,9 +390,9 @@ const initParentFormData: MaterialBomForm = {
assembleTime: undefined,
materialClassfication: undefined,
attachId: undefined,
activeFlag: '1',
activeFlag: undefined,
remark: undefined,
materialTypeName: undefined,
materialTypeName: undefined
};
const initFormData: MaterialBomForm = {
@ -362,9 +414,9 @@ const initFormData: MaterialBomForm = {
assembleTime: undefined,
materialClassfication: undefined,
attachId: undefined,
activeFlag: '1',
activeFlag: undefined,
remark: undefined,
materialTypeName: undefined,
materialTypeName: undefined
};
const data = reactive<PageData<MaterialBomForm, MaterialBomQuery>>({
@ -382,31 +434,31 @@ const data = reactive<PageData<MaterialBomForm, MaterialBomQuery>>({
},
rules: {
materialTypeId: [
{required: true, message: "物料类型不能为空", trigger: "blur"}
{ required: true, message: '物料类型不能为空', trigger: 'blur' }
],
materialBomVersion: [
{required: true, message: "BOM版本不能为空", trigger: "blur"}
{ required: true, message: 'BOM版本不能为空', trigger: 'blur' }
],
materialName: [
{required: true, message: "物料名称不能为空", trigger: "blur"}
{ required: true, message: '物料名称不能为空', trigger: 'blur' }
],
standardAmount: [
{required: true, message: "子物料数量不能为空", trigger: "blur"}
{ required: true, message: '子物料数量不能为空', trigger: 'blur' }
]
},
parentRules: {
parentMaterialName: [
{required: true, message: "父物料名称不能为空", trigger: "blur"}
{ required: true, message: '父物料名称不能为空', trigger: 'blur' }
],
materialBomVersion: [
{required: true, message: "BOM版本不能为空", trigger: "blur"}
{ required: true, message: 'BOM版本不能为空', trigger: 'blur' }
],
parentStandardAmount: [
{required: true, message: "父物料数量不能为空", trigger: "blur"}
{ required: true, message: '父物料数量不能为空', trigger: 'blur' }
],
parentUnitId: [
{required: true, message: "父物料单位不能为空", trigger: "blur"}
{ required: true, message: '父物料单位不能为空', trigger: 'blur' }
]
}
@ -421,7 +473,7 @@ const parentQueryParams = ref({
materialName: undefined,
materialBomVersion: undefined,
params: {}
})
});
const { queryParams, form, rules, parentForm, parentRules } = toRefs(data);
@ -452,7 +504,7 @@ const getTreeSelect = async () => {
id: virtualTopNodeId,//materialBomId
parentId: -1,
materialId: 0,
label: "生产BOM",
label: '生产BOM',
children: res.data
};
materialBomOptions.value.push(initialTree);
@ -462,12 +514,12 @@ const getTreeSelect = async () => {
if (!focusKeyNode.value) {//focus
focusKeyNode.value = { treeKey: virtualTopNodeId };
} else {
const clickNode = findObjectByTreeKey(materialBomOptions.value, focusKeyNode.value.treeKey)
const clickNode = findObjectByTreeKey(materialBomOptions.value, focusKeyNode.value.treeKey);
if (!clickNode) {
focusKeyNode.value = undefined;
focusKeyNode.value = { treeKey: virtualTopNodeId };
}
// if (!allTreeKeys || allTreeKeys.length <= 0) {
// focusKeyNode.value = {
// treeKey: virtualTopNodeId,
@ -484,7 +536,7 @@ const getTreeSelect = async () => {
nextTick(function() {
materialBomTreeRef.value?.setCurrentKey(focusKeyNode.value.treeKey, true);
})
});
loading.value = false;
treeLoading.value = false;
@ -495,6 +547,16 @@ const getTreeSelect = async () => {
// materialTypeOptions.value[0].children.push(dd);
};
/** 查询生产bom列表 */
const getNextMaterialBomVersion = async () => {
//
// loading.value = true;
const res = await selectNextMaterialBomVersion(parentForm.value.parentId);
parentForm.value.materialBomVersion = res.data;
// materialBomList.value = res.data;
// loading.value = false;
};
/** 查询生产bom列表 */
const getList = async () => {
//BOM
@ -507,17 +569,21 @@ const getList = async () => {
const resetParentQueryParams = () => {
parentQueryParams.value.parentId = undefined;//materialId
parentQueryParams.value.materialBomVersion = undefined;
}
};
const resetQueryParams = () => {
queryParams.value.parentId = undefined;//materialid
queryParams.value.parentMaterialTypeId = undefined;
}
};
/** 节点单击事件 */
const handleNodeClick = (data: MaterialBomVO) => {
materialBomList.value = [];
parentMaterialDisabled.value = true;
publishBtnDisplay.value = false;
addNewMaterialBomVersionBtnDisabled.value = true;
btnLoading.value = true;
resetParentForm();
resetQueryParams();
resetParentQueryParams();
@ -526,27 +592,39 @@ const handleNodeClick = (data: MaterialBomVO) => {
parentQueryParams.value.parentId = data.materialId;//materialId
parentQueryParams.value.materialBomVersion = data.materialBomVersion;
getParentMaterialBomInfo();
queryParams.value.parentId = data.materialId;
queryParams.value.parentMaterialTypeId = data.materialTypeId;
queryParams.value.materialBomVersion = data.materialBomVersion
handleQuery();
} else {
if (materialBomVersionOptions.value.length > 0) {
parentForm.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion;
queryParams.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion;
}
parentForm.value.activeFlag = MATERIAL_BOM_ACTIVE_FLAG.value.DESIGN;
handleBtnStatus();
btnLoading.value = false;
// if (materialBomVersionOptions.value.length > 0) {
// parentForm.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion;
// queryParams.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion;
// }
}
parentMaterialDisabled.value = focusKeyNode.value.treeKey != -1;
};
const handleBtnStatus = () => {
if (parentForm.value.materialBomVersion && parentForm.value.materialBomVersion !== '') {
addNewMaterialBomVersionBtnDisabled.value = false;
addNewMaterialBomVersionBtnText.value = '新增版本';
publishBtnDisplay.value = parentForm.value.activeFlag !== MATERIAL_BOM_ACTIVE_FLAG.value.ACTIVE;
} else {
addNewMaterialBomVersionBtnDisabled.value = true;
addNewMaterialBomVersionBtnText.value = '新增中';
publishBtnDisplay.value = false;
}
};
const clickDisplay = () => {
if (queryParams.value.parentId === 0) {
parentFormDisplay.value = false;
childTableTitle.value = "顶级物料";
childTableTitle.value = '顶级物料';
} else {
parentFormDisplay.value = true;
childTableTitle.value = "子级物料";
childTableTitle.value = '子级物料';
}
};
@ -588,7 +666,7 @@ const handleDelete = async (row?: MaterialBomVO) => {
});
// alert(JSON.stringify(toDeleteMaterialBoms.value))
if (toDeleteMaterialBoms.value.length > 0) {
await deleteMaterialBoms(toDeleteMaterialBoms.value)
await deleteMaterialBoms(toDeleteMaterialBoms.value);
await getTreeSelect();
}
@ -734,7 +812,7 @@ const handleMaterialSelect = (row, selectMode) => {
} else if (selectMode === SELECT_MATERIAL_MODEL.value.CHILD_SELECT) {//materialTypeId
materialTypeId.value = row.materialTypeId;
} else {
materialTypeId.value = undefined
materialTypeId.value = undefined;
}
materialOpen.value = true;
};
@ -746,14 +824,15 @@ const submitMaterialForm = () => {
//
if (globalSelectMode.value === SELECT_MATERIAL_MODEL.value.PARENT_SELECT) {
editedRow.value.materialBomVersion = undefined;
editedRow.value.parentId = selectedRow.materialId;
editedRow.value.parentMaterialName = selectedRow.materialName;
editedRow.value.parentMaterialTypeId = selectedRow.materialTypeId;
editedRow.value.parentMaterialTypeName = selectedRow.matrialTypeName;
queryParams.value.parentId = selectedRow.materialId;
queryParams.value.parentMaterialTypeId = selectedRow.materialTypeId;
getNextMaterialBomVersion();
// alert(JSON.stringify(queryParams.value))
getList();
} else {
@ -787,9 +866,12 @@ const submitBatchSaveMaterialBoms = async () => {
item.parentId = parentForm.value.parentId;
item.parentUnitId = parentForm.value.parentUnitId;
item.materialBomVersion = parentForm.value.materialBomVersion;
item.parentStandardAmount = parentForm.value.parentStandardAmount;
item.parentMaterialTypeId = parentForm.value.parentMaterialTypeId;
item.materialBomDesc = parentForm.value.materialBomDesc;
item.materialBomVersion = parentForm.value.materialBomVersion;
item.activeFlag = parentForm.value.activeFlag;
saveMaterialBomList.value.push(item);
}
}
@ -801,7 +883,9 @@ const submitBatchSaveMaterialBoms = async () => {
await addBatchMaterialBom(saveMaterialBomList.value);
proxy?.$modal.msgSuccess('操作成功');
focusKeyNode.value.treeKey = parentForm.value.parentId + "-" + parentForm.value.materialBomVersion;
focusKeyNode.value.treeKey = parentForm.value.parentId + '-' + parentForm.value.materialBomVersion;
focusKeyNode.value.materialId = parentForm.value.parentId;
focusKeyNode.value.materialTypeId = parentForm.value.parentMaterialTypeId;
focusKeyNode.value.materialBomVersion = parentForm.value.materialBomVersion;
focusKeyNode.value.parentUnitId = parentForm.value.parentUnitId;
focusKeyNode.value.parentStandardAmount = parentForm.value.parentStandardAmount;
@ -817,7 +901,7 @@ const submitBatchSaveMaterialBoms = async () => {
}
}
});
}
};
/** 初始化单位数据 */
@ -849,7 +933,18 @@ const initMaterialBomVersionData = async () => {
const getParentMaterialBomInfo = async () => {
const res = await getParentMaterialBom(parentQueryParams.value);
parentForm.value = res.data;
handleBtnStatus();
if (!parentForm.value.materialBomVersion || parentForm.value.materialBomVersion === '') {
parentForm.value.materialBomVersion = initialMaterialBomVersion.value;
parentForm.value.activeFlag = MATERIAL_BOM_ACTIVE_FLAG.value.DESIGN;
}
queryParams.value.parentId = parentForm.value.parentId;
queryParams.value.parentMaterialTypeId = parentForm.value.parentMaterialTypeId;
queryParams.value.materialBomVersion = parentForm.value.materialBomVersion;
handleQuery();
btnLoading.value = false;
};
@ -862,8 +957,19 @@ const findObjectByTreeKey = (list, targetTreeKey) => {
}
}
return null;
}
};
/** 基于当前父级物料和版本新增物料bom版本 */
const addNewMaterialBomVersion = async () => {
loading.value = true;
parentForm.value.activeFlag = MATERIAL_BOM_ACTIVE_FLAG.value.DESIGN;
await getNextMaterialBomVersion();
materialBomList.value.forEach(childMaterialBom => {
childMaterialBom.materialBomId = undefined;
});
loading.value = false;
console.log(materialBomList);
};
// const getClickNode = (obj) => {
// // id,focusid
@ -880,6 +986,22 @@ const findObjectByTreeKey = (list, targetTreeKey) => {
// }
//
// }
const getColor = (e) => {
if (e.materialBomVersion === '01') {
return ['#ff0000', '#fff'];
}
if (e.materialBomVersion === '02') {
return ['#00ff00', '#000'];
}
if (e.materialBomVersion === '03') {
return ['#0000ff', '#fff'];
}
};
</script>
<style lang="scss" scoped></style>
<style lang="less" scoped>
:deep(.el-tree-node__content) {
width: 100%;
}
</style>

Loading…
Cancel
Save