From 80faf4b47ccd425eae94a16f9167e7d0cfeb6116 Mon Sep 17 00:00:00 2001 From: AN <1983933789@qq.com> Date: Wed, 25 Jun 2025 23:19:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(projects):=20=E6=96=B0=E5=A2=9E=E8=BD=AC?= =?UTF-8?q?=E5=8A=9E=E5=92=8C=E7=BB=88=E6=AD=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/custom/user-select-modal.vue | 13 +- .../custom/workflow/flow-intervene-modal.vue | 112 ++++++++++++++++-- src/service/api/workflow/task.ts | 18 +++ src/typings/api/workflow.api.d.ts | 17 +++ .../workflow/task/all-task-waiting/index.vue | 10 +- 5 files changed, 157 insertions(+), 13 deletions(-) diff --git a/src/components/custom/user-select-modal.vue b/src/components/custom/user-select-modal.vue index 61cccca1..d2757ad0 100644 --- a/src/components/custom/user-select-modal.vue +++ b/src/components/custom/user-select-modal.vue @@ -27,6 +27,12 @@ const props = withDefaults(defineProps(), { disabledIds: () => [] }); +interface Emits { + (e: 'confirm', value: CommonType.IdType[]): void; +} + +const emit = defineEmits(); + const visible = defineModel('visible', { default: false }); @@ -162,6 +168,11 @@ function closeModal() { visible.value = false; } +function handleConfirm() { + emit('confirm', checkedRowKeys.value); + closeModal(); +} + function getRowProps(row: Api.System.User) { return { onClick: () => { @@ -272,7 +283,7 @@ watch(visible, () => { diff --git a/src/components/custom/workflow/flow-intervene-modal.vue b/src/components/custom/workflow/flow-intervene-modal.vue index deba7c8e..d65be204 100644 --- a/src/components/custom/workflow/flow-intervene-modal.vue +++ b/src/components/custom/workflow/flow-intervene-modal.vue @@ -1,5 +1,7 @@ diff --git a/src/service/api/workflow/task.ts b/src/service/api/workflow/task.ts index a78af9e7..17b73ac9 100644 --- a/src/service/api/workflow/task.ts +++ b/src/service/api/workflow/task.ts @@ -43,3 +43,21 @@ export function fetchGetAllFinishedTask(data: Api.Workflow.TaskSearchParams) { params: data }); } + +/** 任务操作 */ +export function fetchTaskOperate(data: Api.Workflow.TaskOperateParams, operateType: Api.Workflow.TaskOperateType) { + return request({ + url: `/workflow/task/taskOperation/${operateType}`, + method: 'post', + data + }); +} + +/** 终止任务 */ +export function fetchTerminateTask(data: Api.Workflow.TerminateTaskOperateParams) { + return request({ + url: '/workflow/task/terminationTask', + method: 'post', + data + }); +} diff --git a/src/typings/api/workflow.api.d.ts b/src/typings/api/workflow.api.d.ts index 52921bc9..9bac1c48 100644 --- a/src/typings/api/workflow.api.d.ts +++ b/src/typings/api/workflow.api.d.ts @@ -312,6 +312,23 @@ declare namespace Api { /** 任务列表 */ type TaskList = Common.PaginatingQueryRecord; + /** 任务操作类型 */ + type TaskOperateType = 'delegateTask' | 'transferTask' | 'addSignature' | 'reductionSignature' | 'stopTask'; + + /** 任务操作参数 */ + type TaskOperateParams = CommonType.RecordNullable<{ + taskId: CommonType.IdType; + userId?: CommonType.IdType; + userIds?: CommonType.IdType[]; + message?: string; + }>; + + /** 终止任务 */ + type TerminateTaskOperateParams = CommonType.RecordNullable<{ + taskId: CommonType.IdType; + comment?: string; + }>; + /** 协作方式 */ type CooperateType = 1 | 2 | 3 | 4 | 5 | 6 | 7; diff --git a/src/views/workflow/task/all-task-waiting/index.vue b/src/views/workflow/task/all-task-waiting/index.vue index 32ae01ce..ee693b75 100644 --- a/src/views/workflow/task/all-task-waiting/index.vue +++ b/src/views/workflow/task/all-task-waiting/index.vue @@ -26,8 +26,8 @@ defineOptions({ useDict('wf_business_status'); useDict('wf_task_status'); const appStore = useAppStore(); -const { bool: viewVisible, setTrue: showViewDrawer } = useBoolean(false); -const { bool: interveneVisible, setTrue: showInterveneDrawer } = useBoolean(false); +const { bool: viewVisible, setTrue: showViewDrawer } = useBoolean(); +const { bool: interveneVisible, setTrue: showInterveneDrawer } = useBoolean(); const dynamicComponent = shallowRef(); type Task = Api.Workflow.Task; @@ -304,7 +304,11 @@ function handleIntervene(row: Api.Workflow.TaskOrHisTask) { class="sm:h-full" /> - +