diff --git a/apps/web-antd/src/api/workflow/task/model.d.ts b/apps/web-antd/src/api/workflow/task/model.d.ts index b79e0a22..6ae21043 100644 --- a/apps/web-antd/src/api/workflow/task/model.d.ts +++ b/apps/web-antd/src/api/workflow/task/model.d.ts @@ -62,6 +62,10 @@ export interface StartWorkFlowReqData { * 流程变量 */ variables: Record; + /** + * 流程实例业务扩展业务对象 + */ + flowInstanceBizExtBo?: Record; } export interface TaskOperationData { diff --git a/apps/web-antd/src/views/workflow/leave/api/index.ts b/apps/web-antd/src/views/workflow/leave/api/index.ts index 20b87efc..0be0d5d8 100644 --- a/apps/web-antd/src/views/workflow/leave/api/index.ts +++ b/apps/web-antd/src/views/workflow/leave/api/index.ts @@ -60,3 +60,15 @@ export function leaveUpdate(data: LeaveForm) { export function leaveRemove(id: ID | IDS) { return requestClient.deleteWithMsg(`/workflow/leave/${id}`); } + +/** + * 提交 & 发起流程(后端发起) + * @param data data + * @returns void + */ +export function submitAndStartWorkflow(data: LeaveForm) { + return requestClient.postWithMsg( + '/workflow/leave/submitAndFlowStart', + data, + ); +} diff --git a/apps/web-antd/src/views/workflow/leave/data.tsx b/apps/web-antd/src/views/workflow/leave/data.tsx index 6ebf3b59..8eabf0e7 100644 --- a/apps/web-antd/src/views/workflow/leave/data.tsx +++ b/apps/web-antd/src/views/workflow/leave/data.tsx @@ -121,6 +121,22 @@ export const modalSchema: () => VbenFormSchema[] = () => [ triggerFields: [''], }, }, + { + label: '发起类型', + fieldName: 'type', + component: 'Select', + help: '这里仅仅为了测试, 实际不应该包含此字段', + componentProps: { + options: [ + { + label: '前端发起(可选审批人, 选抄送人, 上传附件)', + value: 'frontend', + }, + { label: '后端发起(自行编写构造发起参数)', value: 'backend' }, + ], + }, + defaultValue: 'frontend', + }, { label: '请假类型', fieldName: 'leaveType', diff --git a/apps/web-antd/src/views/workflow/leave/leave-form.vue b/apps/web-antd/src/views/workflow/leave/leave-form.vue index 8a6730e6..6268d2ff 100644 --- a/apps/web-antd/src/views/workflow/leave/leave-form.vue +++ b/apps/web-antd/src/views/workflow/leave/leave-form.vue @@ -15,7 +15,12 @@ import { useVbenForm } from '#/adapter/form'; import { startWorkFlow } from '#/api/workflow/task'; import { applyModal } from '../components'; -import { leaveAdd, leaveInfo, leaveUpdate } from './api'; +import { + leaveAdd, + leaveInfo, + leaveUpdate, + submitAndStartWorkflow, +} from './api'; import { modalSchema } from './data'; const route = useRoute(); @@ -58,10 +63,6 @@ const router = useRouter(); * 提取通用逻辑 */ async function handleSaveOrUpdate() { - const { valid } = await formApi.validate(); - if (!valid) { - return; - } let data = cloneDeep(await formApi.getValues()) as any; data = omit(data, 'flowType'); // 处理日期 @@ -96,28 +97,44 @@ async function handleTempSave() { async function handleStartWorkFlow() { loading.value = true; try { - // 保存业务 - const leaveResp = await handleSaveOrUpdate(); - // 启动流程 - const taskVariables = { - leaveDays: leaveResp!.leaveDays, - userList: ['1', '3', '4'], - }; - const formValues = await formApi.getValues(); - const flowCode = formValues?.flowType ?? 'leave1'; - const startWorkFlowData: StartWorkFlowReqData = { - businessId: leaveResp!.id, - flowCode, - variables: taskVariables, - }; - const { taskId } = await startWorkFlow(startWorkFlowData); - // 打开窗口 - applyModalApi.setData({ - taskId, - taskVariables, - variables: {}, - }); - applyModalApi.open(); + const { valid } = await formApi.validate(); + if (!valid) { + return; + } + // 获取发起类型 + const { type } = await formApi.getValues(); + if (type === 'backend') { + let data = cloneDeep(await formApi.getValues()) as any; + data = omit(data, 'flowType', 'type'); + // 处理日期 + data.startDate = dayjs(data.dateRange[0]).format('YYYY-MM-DD HH:mm:ss'); + data.endDate = dayjs(data.dateRange[1]).format('YYYY-MM-DD HH:mm:ss'); + await submitAndStartWorkflow(data); + await handleCompleteOrCancel(); + } else { + // 保存业务 + const leaveResp = await handleSaveOrUpdate(); + // 启动流程 + const taskVariables = { + leaveDays: leaveResp!.leaveDays, + userList: ['1', '3', '4'], + }; + const formValues = await formApi.getValues(); + const flowCode = formValues?.flowType ?? 'leave1'; + const startWorkFlowData: StartWorkFlowReqData = { + businessId: leaveResp!.id, + flowCode, + variables: taskVariables, + }; + const { taskId } = await startWorkFlow(startWorkFlowData); + // 打开窗口 + applyModalApi.setData({ + taskId, + taskVariables, + variables: {}, + }); + applyModalApi.open(); + } } catch (error) { console.error(error); } finally {