!354 fix: [bpm] OA 请假流程重新发起问题修复

Merge pull request !354 from Jason/master
pull/355/head^2
xingyu 2026-06-05 10:22:47 +00:00 committed by Gitee
commit a0735e1bba
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
22 changed files with 64 additions and 63 deletions

View File

@ -21,11 +21,6 @@ export async function createLeave(data: BpmOALeaveApi.Leave) {
return requestClient.post('/bpm/oa/leave/create', data);
}
/** 更新请假申请 */
export async function updateLeave(data: BpmOALeaveApi.Leave) {
return requestClient.post('/bpm/oa/leave/update', data);
}
/** 获得请假申请 */
export async function getLeave(id: number) {
return requestClient.get<BpmOALeaveApi.Leave>(`/bpm/oa/leave/get?id=${id}`);

View File

@ -293,7 +293,7 @@ const showChildProcessNodeConfig = (node: SimpleFlowNode) => {
if (configForm.value.timeoutType === DelayTypeEnum.FIXED_TIME_DURATION) {
const strTimeDuration =
node.childProcessSetting.timeoutSetting.timeExpression ?? '';
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
configForm.value.timeUnit = convertTimeUnit(parseTimeUnit);
@ -359,12 +359,12 @@ const loadFormInfo = async () => {
};
const getIsoTimeDuration = () => {
let strTimeDuration = 'PT';
let strTimeDuration = 'P';
if (configForm.value.timeUnit === TimeUnitType.MINUTE) {
strTimeDuration += `${configForm.value.timeDuration}M`;
strTimeDuration += `T${configForm.value.timeDuration}M`;
}
if (configForm.value.timeUnit === TimeUnitType.HOUR) {
strTimeDuration += `${configForm.value.timeDuration}H`;
strTimeDuration += `T${configForm.value.timeDuration}H`;
}
if (configForm.value.timeUnit === TimeUnitType.DAY) {
strTimeDuration += `${configForm.value.timeDuration}D`;

View File

@ -84,12 +84,12 @@ function getShowText(): string {
// ISO
function getIsoTimeDuration() {
let strTimeDuration = 'PT';
let strTimeDuration = 'P';
if (configForm.value.timeUnit === TimeUnitType.MINUTE) {
strTimeDuration += `${configForm.value.timeDuration}M`;
strTimeDuration += `T${configForm.value.timeDuration}M`;
}
if (configForm.value.timeUnit === TimeUnitType.HOUR) {
strTimeDuration += `${configForm.value.timeDuration}H`;
strTimeDuration += `T${configForm.value.timeDuration}H`;
}
if (configForm.value.timeUnit === TimeUnitType.DAY) {
strTimeDuration += `${configForm.value.timeDuration}D`;
@ -135,7 +135,7 @@ function openDrawer(node: SimpleFlowNode) {
//
if (configForm.value.delayType === DelayTypeEnum.FIXED_TIME_DURATION) {
const strTimeDuration = node.delaySetting.delayTime;
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
configForm.value.timeUnit = convertTimeUnit(parseTimeUnit);

View File

@ -417,7 +417,7 @@ function showUserTaskNodeConfig(node: SimpleFlowNode) {
configForm.value.timeoutHandlerEnable = node.timeoutHandler?.enable;
if (node.timeoutHandler?.enable && node.timeoutHandler?.timeDuration) {
const strTimeDuration = node.timeoutHandler.timeDuration;
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
timeUnit.value = convertTimeUnit(parseTimeUnit);
@ -563,12 +563,12 @@ function useTimeoutHandler() {
if (!configForm.value.timeoutHandlerEnable) {
return undefined;
}
let strTimeDuration = 'PT';
let strTimeDuration = 'P';
if (timeUnit.value === TimeUnitType.MINUTE) {
strTimeDuration += `${configForm.value.timeDuration}M`;
strTimeDuration += `T${configForm.value.timeDuration}M`;
}
if (timeUnit.value === TimeUnitType.HOUR) {
strTimeDuration += `${configForm.value.timeDuration}H`;
strTimeDuration += `T${configForm.value.timeDuration}H`;
}
if (timeUnit.value === TimeUnitType.DAY) {
strTimeDuration += `${configForm.value.timeDuration}D`;

View File

@ -14,7 +14,7 @@ import { Button, Card, Col, message, Row, Space } from 'ant-design-vue';
import dayjs from 'dayjs';
import { getProcessDefinition } from '#/api/bpm/definition';
import { createLeave, getLeave, updateLeave } from '#/api/bpm/oa/leave';
import { createLeave, getLeave } from '#/api/bpm/oa/leave';
import { getApprovalDetail as getApprovalDetailApi } from '#/api/bpm/processInstance';
import { $t } from '#/locales';
import { router } from '#/router';
@ -88,9 +88,7 @@ async function onSubmit() {
};
try {
formLoading.value = true;
await (formData.value?.id
? updateLeave(submitData)
: createLeave(submitData));
await createLeave(submitData);
//
message.success($t('ui.actionMessage.operationSuccess'));
await closeCurrentTab();

View File

@ -198,7 +198,7 @@ function shouldShowCustomUserSelect(
function shouldShowApprovalReason(task: any, nodeType: BpmNodeTypeEnum) {
return (
task.reason &&
[BpmNodeTypeEnum.END_EVENT_NODE, BpmNodeTypeEnum.USER_TASK_NODE].includes(
[BpmNodeTypeEnum.START_USER_NODE, BpmNodeTypeEnum.USER_TASK_NODE].includes(
nodeType,
)
);

View File

@ -21,11 +21,6 @@ export async function createLeave(data: BpmOALeaveApi.Leave) {
return requestClient.post('/bpm/oa/leave/create', data);
}
/** 更新请假申请 */
export async function updateLeave(data: BpmOALeaveApi.Leave) {
return requestClient.post('/bpm/oa/leave/update', data);
}
/** 获得请假申请 */
export async function getLeave(id: number) {
return requestClient.get<BpmOALeaveApi.Leave>(`/bpm/oa/leave/get?id=${id}`);

View File

@ -292,7 +292,7 @@ const showChildProcessNodeConfig = (node: SimpleFlowNode) => {
if (configForm.value.timeoutType === DelayTypeEnum.FIXED_TIME_DURATION) {
const strTimeDuration =
node.childProcessSetting.timeoutSetting.timeExpression ?? '';
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
configForm.value.timeUnit = convertTimeUnit(parseTimeUnit);
@ -358,12 +358,12 @@ const loadFormInfo = async () => {
};
const getIsoTimeDuration = () => {
let strTimeDuration = 'PT';
let strTimeDuration = 'P';
if (configForm.value.timeUnit === TimeUnitType.MINUTE) {
strTimeDuration += `${configForm.value.timeDuration}M`;
strTimeDuration += `T${configForm.value.timeDuration}M`;
}
if (configForm.value.timeUnit === TimeUnitType.HOUR) {
strTimeDuration += `${configForm.value.timeDuration}H`;
strTimeDuration += `T${configForm.value.timeDuration}H`;
}
if (configForm.value.timeUnit === TimeUnitType.DAY) {
strTimeDuration += `${configForm.value.timeDuration}D`;

View File

@ -83,12 +83,12 @@ function getShowText(): string {
// ISO
function getIsoTimeDuration() {
let strTimeDuration = 'PT';
let strTimeDuration = 'P';
if (configForm.value.timeUnit === TimeUnitType.MINUTE) {
strTimeDuration += `${configForm.value.timeDuration}M`;
strTimeDuration += `T${configForm.value.timeDuration}M`;
}
if (configForm.value.timeUnit === TimeUnitType.HOUR) {
strTimeDuration += `${configForm.value.timeDuration}H`;
strTimeDuration += `T${configForm.value.timeDuration}H`;
}
if (configForm.value.timeUnit === TimeUnitType.DAY) {
strTimeDuration += `${configForm.value.timeDuration}D`;
@ -134,7 +134,7 @@ function openDrawer(node: SimpleFlowNode) {
//
if (configForm.value.delayType === DelayTypeEnum.FIXED_TIME_DURATION) {
const strTimeDuration = node.delaySetting.delayTime;
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
configForm.value.timeUnit = convertTimeUnit(parseTimeUnit);

View File

@ -416,7 +416,7 @@ function showUserTaskNodeConfig(node: SimpleFlowNode) {
configForm.value.timeoutHandlerEnable = node.timeoutHandler?.enable;
if (node.timeoutHandler?.enable && node.timeoutHandler?.timeDuration) {
const strTimeDuration = node.timeoutHandler.timeDuration;
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
timeUnit.value = convertTimeUnit(parseTimeUnit);

View File

@ -14,7 +14,7 @@ import { Button, Card, Col, message, Row, Space } from 'antdv-next';
import dayjs from 'dayjs';
import { getProcessDefinition } from '#/api/bpm/definition';
import { createLeave, getLeave, updateLeave } from '#/api/bpm/oa/leave';
import { createLeave, getLeave } from '#/api/bpm/oa/leave';
import { getApprovalDetail as getApprovalDetailApi } from '#/api/bpm/processInstance';
import { $t } from '#/locales';
import { router } from '#/router';
@ -88,9 +88,7 @@ async function onSubmit() {
};
try {
formLoading.value = true;
await (formData.value?.id
? updateLeave(submitData)
: createLeave(submitData));
await createLeave(submitData);
//
message.success($t('ui.actionMessage.operationSuccess'));
await closeCurrentTab();

View File

@ -205,7 +205,7 @@ function shouldShowCustomUserSelect(
function shouldShowApprovalReason(task: any, nodeType: BpmNodeTypeEnum) {
return (
task.reason &&
[BpmNodeTypeEnum.END_EVENT_NODE, BpmNodeTypeEnum.USER_TASK_NODE].includes(
[BpmNodeTypeEnum.START_USER_NODE, BpmNodeTypeEnum.USER_TASK_NODE].includes(
nodeType,
)
);

View File

@ -21,10 +21,6 @@ export async function createLeave(data: BpmOALeaveApi.Leave) {
return requestClient.post('/bpm/oa/leave/create', data);
}
/** 更新请假申请 */
export async function updateLeave(data: BpmOALeaveApi.Leave) {
return requestClient.post('/bpm/oa/leave/update', data);
}
/** 获得请假申请 */
export async function getLeave(id: number) {

View File

@ -280,7 +280,7 @@ const showChildProcessNodeConfig = (node: SimpleFlowNode) => {
if (configForm.value.timeoutType === DelayTypeEnum.FIXED_TIME_DURATION) {
const strTimeDuration =
node.childProcessSetting.timeoutSetting.timeExpression ?? '';
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
configForm.value.timeUnit = convertTimeUnit(parseTimeUnit);
@ -346,12 +346,12 @@ const loadFormInfo = async () => {
};
const getIsoTimeDuration = () => {
let strTimeDuration = 'PT';
let strTimeDuration = 'P';
if (configForm.value.timeUnit === TimeUnitType.MINUTE) {
strTimeDuration += `${configForm.value.timeDuration}M`;
strTimeDuration += `T${configForm.value.timeDuration}M`;
}
if (configForm.value.timeUnit === TimeUnitType.HOUR) {
strTimeDuration += `${configForm.value.timeDuration}H`;
strTimeDuration += `T${configForm.value.timeDuration}H`;
}
if (configForm.value.timeUnit === TimeUnitType.DAY) {
strTimeDuration += `${configForm.value.timeDuration}D`;

View File

@ -83,12 +83,12 @@ function getShowText(): string {
// ISO
function getIsoTimeDuration() {
let strTimeDuration = 'PT';
let strTimeDuration = 'P';
if (configForm.value.timeUnit === TimeUnitType.MINUTE) {
strTimeDuration += `${configForm.value.timeDuration}M`;
strTimeDuration += `T${configForm.value.timeDuration}M`;
}
if (configForm.value.timeUnit === TimeUnitType.HOUR) {
strTimeDuration += `${configForm.value.timeDuration}H`;
strTimeDuration += `T${configForm.value.timeDuration}H`;
}
if (configForm.value.timeUnit === TimeUnitType.DAY) {
strTimeDuration += `${configForm.value.timeDuration}D`;
@ -134,7 +134,7 @@ function openDrawer(node: SimpleFlowNode) {
//
if (configForm.value.delayType === DelayTypeEnum.FIXED_TIME_DURATION) {
const strTimeDuration = node.delaySetting.delayTime;
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
configForm.value.timeUnit = convertTimeUnit(parseTimeUnit);

View File

@ -402,7 +402,7 @@ function showUserTaskNodeConfig(node: SimpleFlowNode) {
configForm.value.timeoutHandlerEnable = node.timeoutHandler?.enable;
if (node.timeoutHandler?.enable && node.timeoutHandler?.timeDuration) {
const strTimeDuration = node.timeoutHandler.timeDuration;
const parseTime = strTimeDuration.slice(2, -1);
const parseTime = strTimeDuration.match(/\d+/)?.[0] ?? '';
const parseTimeUnit = strTimeDuration.slice(-1);
configForm.value.timeDuration = Number.parseInt(parseTime);
timeUnit.value = convertTimeUnit(parseTimeUnit);

View File

@ -21,7 +21,7 @@ import {
} from 'element-plus';
import { getProcessDefinition } from '#/api/bpm/definition';
import { createLeave, getLeave, updateLeave } from '#/api/bpm/oa/leave';
import { createLeave, getLeave } from '#/api/bpm/oa/leave';
import { getApprovalDetail as getApprovalDetailApi } from '#/api/bpm/processInstance';
import { $t } from '#/locales';
import { router } from '#/router';
@ -95,9 +95,7 @@ async function onSubmit() {
};
try {
formLoading.value = true;
await (formData.value?.id
? updateLeave(submitData)
: createLeave(submitData));
await createLeave(submitData);
//
ElMessage.success($t('ui.actionMessage.operationSuccess'));
await closeCurrentTab();

View File

@ -42,7 +42,7 @@ import { registerComponent } from '#/utils';
import ProcessInstanceBpmnViewer from './modules/bpm-viewer.vue';
import ProcessInstanceOperationButton from './modules/operation-button.vue';
import ProcessssPrint from './modules/process-print.vue';
import ProcessPrint from './modules/process-print.vue';
import ProcessInstanceSimpleViewer from './modules/simple-bpm-viewer.vue';
import BpmProcessInstanceTaskList from './modules/task-list.vue';
import ProcessInstanceTimeline from './modules/time-line.vue';
@ -200,7 +200,7 @@ const refresh = () => {
};
const [PrintModal, printModalApi] = useVbenModal({
connectedComponent: ProcessssPrint,
connectedComponent: ProcessPrint,
destroyOnClose: true,
});
@ -343,7 +343,12 @@ onMounted(async () => {
</ElCol>
</ElRow>
</ElTabPane>
<ElTabPane label="流程图" name="diagram" class="pb-20 pr-3">
<ElTabPane
label="流程图"
name="diagram"
:lazy="false"
class="pb-20 pr-3"
>
<ProcessInstanceSimpleViewer
v-show="
processDefinition.modelType &&
@ -420,7 +425,21 @@ onMounted(async () => {
}
:deep(.el-tabs__content) {
display: flex;
flex: 1;
flex-direction: column;
overflow-y: auto;
}
:deep(.el-tab-pane) {
flex: 1;
overflow-y: auto;
}
/* 流程图 tab 特殊处理:需要内部 flex 布局 */
:deep(#pane-diagram) {
display: flex;
flex-direction: column;
overflow-y: auto;
}
</style>

View File

@ -33,6 +33,7 @@ watch(
view.value = newModelView;
}
},
{ immediate: true },
);
/** 监听 bpmnXml */

View File

@ -278,7 +278,7 @@ async function openPopover(type: string) {
}
}
Object.keys(popOverVisible.value).forEach((item) => {
if (popOverVisible.value[item]) popOverVisible.value[item] = item === type;
popOverVisible.value[item] = item === type;
});
if (type === 'approve') {
// form-create fApi

View File

@ -56,6 +56,7 @@ watch(
simpleModel.value = newModelView.simpleModel || {};
}
},
{ immediate: true },
);
/** 监控模型结构数据 */

View File

@ -205,7 +205,7 @@ function shouldShowCustomUserSelect(
function shouldShowApprovalReason(task: any, nodeType: BpmNodeTypeEnum) {
return (
task.reason &&
[BpmNodeTypeEnum.END_EVENT_NODE, BpmNodeTypeEnum.USER_TASK_NODE].includes(
[BpmNodeTypeEnum.START_USER_NODE, BpmNodeTypeEnum.USER_TASK_NODE].includes(
nodeType,
)
);