From 2c687266b2a7932ba1fbc268ba4bd579fdf98980 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 2 Aug 2025 16:25:06 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90BPM=20=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81=E3=80=91=E5=A2=9E=E5=8A=A0=E5=AE=A1=E6=89=B9=E4=BA=BA?= =?UTF-8?q?=E6=92=A4=E9=94=80=E7=9A=84=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/bpm/task/index.ts | 5 ++++ .../src/views/bpm/model/form/index.vue | 1 + .../bpm/model/form/modules/extra-setting.vue | 15 ++++++++++++ .../src/views/bpm/task/done/index.vue | 23 ++++++++++++++++--- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/apps/web-antd/src/api/bpm/task/index.ts b/apps/web-antd/src/api/bpm/task/index.ts index 510ea1747..7d9f25091 100644 --- a/apps/web-antd/src/api/bpm/task/index.ts +++ b/apps/web-antd/src/api/bpm/task/index.ts @@ -130,3 +130,8 @@ export const getChildrenTaskList = async (id: string) => { `/bpm/task/list-by-parent-task-id?parentTaskId=${id}`, ); }; + +// 撤回任务 +export const withdrawTask = async (taskId: string) => { + return await requestClient.put('/bpm/task/withdraw', null, { params: { taskId } }); +}; diff --git a/apps/web-antd/src/views/bpm/model/form/index.vue b/apps/web-antd/src/views/bpm/model/form/index.vue index 0446ed44d..8427ceac6 100644 --- a/apps/web-antd/src/views/bpm/model/form/index.vue +++ b/apps/web-antd/src/views/bpm/model/form/index.vue @@ -123,6 +123,7 @@ const formData: any = ref({ enable: false, summary: [], }, + allowWithdrawTask: false, }); // 流程数据 diff --git a/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue b/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue index ee42d6801..3c549114d 100644 --- a/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue +++ b/apps/web-antd/src/views/bpm/model/form/modules/extra-setting.vue @@ -217,6 +217,9 @@ function initData() { if (modelData.value.taskAfterTriggerSetting) { taskAfterTriggerEnable.value = true; } + if (modelData.value.allowWithdrawTask === undefined) { + modelData.value.allowWithdrawTask = false; + } } /** 监听表单 ID 变化,加载表单数据 */ @@ -267,6 +270,18 @@ defineExpose({ initData, validate }); + +
+ + 允许审批人撤回任务 + +
+ + 审批人可撤回正在审批节点的前一节点 + +
+
+
diff --git a/apps/web-antd/src/views/bpm/task/done/index.vue b/apps/web-antd/src/views/bpm/task/done/index.vue index 2c568a43a..abd6fcbf6 100644 --- a/apps/web-antd/src/views/bpm/task/done/index.vue +++ b/apps/web-antd/src/views/bpm/task/done/index.vue @@ -4,8 +4,10 @@ import type { BpmTaskApi } from '#/api/bpm/task'; import { DocAlert, Page } from '@vben/common-ui'; +import { message } from 'ant-design-vue'; + import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; -import { getTaskDonePage } from '#/api/bpm/task'; +import { getTaskDonePage, withdrawTask } from '#/api/bpm/task'; import { router } from '#/router'; import { useGridColumns, useGridFormSchema } from './data'; @@ -23,7 +25,15 @@ function handleHistory(row: BpmTaskApi.TaskManager) { }); } -const [Grid] = useVbenVxeGrid({ +/** 撤回任务 */ +async function handleWithdraw(row: BpmTaskApi.TaskManager) { + await withdrawTask(row.id); + message.success('撤回成功'); + // 刷新表格数据 + await gridApi.query(); +} + +const [Grid, gridApi] = useVbenVxeGrid({ formOptions: { schema: useGridFormSchema(), }, @@ -52,7 +62,7 @@ const [Grid] = useVbenVxeGrid({ cellConfig: { height: 64, }, - } as VxeTableGridOptions, + } as VxeTableGridOptions, }); @@ -75,6 +85,13 @@ const [Grid] = useVbenVxeGrid({