From f95f6e8390c355bd601849de26b338bb64c97b90 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期五, 07 六月 2024 21:38:17 +0800 Subject: [PATCH] update 优化审批按钮判断 --- src/views/workflow/leave/leaveEdit.vue | 175 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 93 insertions(+), 82 deletions(-) diff --git a/src/views/workflow/leave/leaveEdit.vue b/src/views/workflow/leave/leaveEdit.vue index 61909ea..a4ed946 100644 --- a/src/views/workflow/leave/leaveEdit.vue +++ b/src/views/workflow/leave/leaveEdit.vue @@ -1,26 +1,20 @@ <template> <div class="p-2"> - <el-affix target=".p-2" :offset="80"> - <el-card shadow="never"> - <div style="display: flex;justify-content: space-between;"> - <div> - <el-button :loading="buttonLoading" - v-if="routeParams.type === 'add' || (routeParams.type === 'update' && form.processInstanceVo.businessStatus && (form.processInstanceVo.businessStatus === 'draft' || form.processInstanceVo.businessStatus === 'cancel' || form.processInstanceVo.businessStatus === 'back'))" - type="info" @click="submitForm('draft')">鏆傚瓨</el-button> - <el-button :loading="buttonLoading" v-if="routeParams.type === 'add' || (routeParams.type === 'update' && form.processInstanceVo && (form.processInstanceVo.businessStatus === 'draft' || form.processInstanceVo.businessStatus === 'cancel' || form.processInstanceVo.businessStatus === 'back'))" - type="primary" @click="submitForm('submit')">鎻� 浜�</el-button> - <el-button :loading="buttonLoading" v-if="routeParams.type === 'approval' && form.processInstanceVo && form.processInstanceVo.businessStatus === 'waiting'" - type="primary" @click="approvalVerifyOpen">瀹℃壒</el-button> - <el-button @click="handleApprovalRecord" type="primary" v-if="processInstanceId">娴佺▼杩涘害</el-button> - </div> - <div> - <el-button style="float: right" @click="goBack()">杩斿洖</el-button> - </div> - </div> - </el-card> - </el-affix> <el-card shadow="never"> - <el-form ref="leaveFormRef" :disabled="routeParams.type ==='view'" v-loading="loading" :model="form" :rules="rules" label-width="80px"> + <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="form && form.id && form.status !== 'draft'" type="primary" @click="handleApprovalRecord">娴佺▼杩涘害</el-button> + </div> + <div> + <el-button style="float: right" @click="goBack()">杩斿洖</el-button> + </div> + </div> + </el-card> + <el-card shadow="never" style="height: 78vh; overflow-y: auto"> + <el-form ref="leaveFormRef" v-loading="loading" :disabled="routeParams.type === 'view'" :model="form" :rules="rules" label-width="80px"> <el-form-item label="璇峰亣绫诲瀷" prop="leaveType"> <el-select v-model="form.leaveType" placeholder="璇烽�夋嫨璇峰亣绫诲瀷" style="width: 100%"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> @@ -58,16 +52,14 @@ 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'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; const buttonLoading = ref(false); const loading = ref(true); const leaveTime = ref<Array<string>>([]); -//娴佺▼瀹炰緥id -const processInstanceId = ref(''); -//璺敱鍙傛暟 -const routeParams = ref<Record<string, any>>({}) +//璺敱鍙傛暟 +const routeParams = ref<Record<string, any>>({}); const options = [ { value: '1', @@ -93,13 +85,12 @@ const leaveFormRef = ref<ElFormInstance>(); -const submitFormData = ref<Record<string, any>>({ +const submitFormData = ref<StartProcessBo>({ businessKey: '', - processKey: '', + tableName: '', variables: {} }); const taskVariables = ref<Record<string, any>>({}); - const initFormData: LeaveForm = { id: undefined, @@ -108,7 +99,7 @@ endDate: undefined, leaveDays: undefined, remark: undefined, - processInstanceVo: {} + status: undefined }; const data = reactive<PageData<LeaveForm, LeaveQuery>>({ form: { ...initFormData }, @@ -128,7 +119,6 @@ const { form, rules } = toRefs(data); - /** 琛ㄥ崟閲嶇疆 */ const reset = () => { form.value = { ...initFormData }; @@ -140,11 +130,11 @@ const startDate = new Date(leaveTime.value[0]).getTime(); const endDate = new Date(leaveTime.value[1]).getTime(); const diffInMilliseconds = endDate - startDate; - form.value.leaveDays = Math.floor(diffInMilliseconds / (1000 * 60 * 60 * 24)); + form.value.leaveDays = Math.floor(diffInMilliseconds / (1000 * 60 * 60 * 24)) + 1; }; /** 鑾峰彇璇︽儏 */ const getInfo = () => { - loading.value = true + loading.value = true; buttonLoading.value = false; nextTick(async () => { const res = await getLeave(routeParams.value.id); @@ -152,10 +142,7 @@ leaveTime.value = []; leaveTime.value.push(form.value.startDate); leaveTime.value.push(form.value.endDate); - if(form.value.processInstanceVo){ - processInstanceId.value = form.value.processInstanceVo.id - } - loading.value = false + loading.value = false; buttonLoading.value = false; }); }; @@ -166,74 +153,98 @@ proxy?.$modal.msgError('璇峰亣鏃堕棿涓嶈兘涓虹┖'); return; } - leaveFormRef.value?.validate(async (valid: boolean) => { - form.value.startDate = leaveTime.value[0]; - form.value.endDate = leaveTime.value[1]; - if (valid) { - buttonLoading.value = true; - let res: AxiosResponse<LeaveVO>; - if (form.value.id) { - res = await updateLeave(form.value); - } else { - res = await addLeave(form.value); + try { + leaveFormRef.value?.validate(async (valid: boolean) => { + form.value.startDate = leaveTime.value[0]; + form.value.endDate = leaveTime.value[1]; + if (valid) { + buttonLoading.value = true; + let res: AxiosResponse<LeaveVO>; + if (form.value.id) { + res = await updateLeave(form.value); + } else { + res = await addLeave(form.value); + } + form.value = res.data; + if (status === 'draft') { + buttonLoading.value = false; + proxy?.$modal.msgSuccess('鏆傚瓨鎴愬姛'); + proxy.$tab.closePage(proxy.$route); + proxy.$router.go(-1); + } else { + await handleStartWorkFlow(res.data); + } } - form.value = res.data; - if (status === 'draft') { - buttonLoading.value = false; - proxy?.$modal.msgSuccess('鏆傚瓨鎴愬姛'); - proxy.$tab.closePage(proxy.$route); - proxy.$router.go(-1) - } else { - await handleStartWorkFlow(res.data); - } - } - }); + }); + } finally { + buttonLoading.value = false; + } }; //鎻愪氦鐢宠 const handleStartWorkFlow = async (data: LeaveVO) => { - submitFormData.value.processKey = 'test'; - submitFormData.value.businessKey = data.id; - //娴佺▼鍙橀噺 - taskVariables.value = { - entity: data, - leaveDays: data.leaveDays, - userList: [1, 2], - userList2: [1, 2] - }; - submitFormData.value.variables = taskVariables.value; - const resp = await startWorkFlow(submitFormData.value); - if (submitVerifyRef.value) { + try { + submitFormData.value.tableName = 'test_leave'; + submitFormData.value.businessKey = data.id; + //娴佺▼鍙橀噺 + taskVariables.value = { + entity: data, + leaveDays: data.leaveDays, + userList: [1, 3], + userList2: [1, 3] + }; + 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; - submitVerifyRef.value.openDialog(resp.data.taskId); } }; //瀹℃壒璁板綍 const handleApprovalRecord = () => { - approvalRecordRef.value.init(processInstanceId.value); + approvalRecordRef.value.init(form.value.id); }; //鎻愪氦鍥炶皟 const submitCallback = async () => { - proxy.$tab.closePage(proxy.$route); - proxy.$router.go(-1) + await proxy.$tab.closePage(proxy.$route); + proxy.$router.go(-1); }; //杩斿洖 const goBack = () => { proxy.$tab.closePage(proxy.$route); - proxy.$router.go(-1) -} + proxy.$router.go(-1); +}; //瀹℃壒 const approvalVerifyOpen = async () => { - submitVerifyRef.value.openDialog(proxy.$route.query.taskId); + submitVerifyRef.value.openDialog(routeParams.value.taskId); }; +//鏍¢獙鎻愪氦鎸夐挳鏄惁鏄剧ず +const submitButtonShow = computed(() => { + return ( + routeParams.value.type === 'add' || + (routeParams.value.type === 'update' && + form.value.status && + (form.value.status === 'draft' || form.value.status === 'cancel' || form.value.status === 'back')) + ); +}); + +//鏍¢獙瀹℃壒鎸夐挳鏄惁鏄剧ず +const approvalButtonShow = computed(() => { + return routeParams.value.type === 'approval' && form.value.status && form.value.status === 'waiting'; +}); + onMounted(() => { nextTick(async () => { - routeParams.value = proxy?.$route.params - reset(); - if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { - getInfo() - } - }) + routeParams.value = proxy.$route.query; + reset(); + loading.value = false; + if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { + getInfo(); + } + }); }); </script> -- Gitblit v1.9.3