From dfa374fdc9d43a81c14852a749cbc9dbdeaeda49 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Tue, 13 Jan 2026 11:00:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20[bpm]=20=E5=87=8F=E7=AD=BE=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/bpm/task/index.ts | 6 + .../detail/components/operation-button.vue | 63 +++++- .../detail/delete-sign/index.vue | 181 ++++++++++++++++++ src/utils/constants/biz-bpm-enum.ts | 6 + 4 files changed, 253 insertions(+), 3 deletions(-) create mode 100644 src/pages-bpm/processInstance/detail/delete-sign/index.vue diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts index 4341290..8ff897a 100644 --- a/src/api/bpm/task/index.ts +++ b/src/api/bpm/task/index.ts @@ -30,6 +30,7 @@ export interface Task { processInstance: ProcessInstance reasonRequire?: boolean // 是否填写审批意见 buttonsSetting?: Record // 按钮设置 + children?: Task[] // 由加签生成,包含多层子任务 } /** 查询待办任务分页列表 */ @@ -86,3 +87,8 @@ export function getTaskListByReturn(taskId: string) { export function signCreateTask(data: { id: string, type: string, userIds: number[], reason: string }) { return http.put('/bpm/task/create-sign', data) } + +/** 减签任务 */ +export function signDeleteTask(data: { id: string, reason: string }) { + return http.delete('/bpm/task/delete-sign', data) +} diff --git a/src/pages-bpm/processInstance/detail/components/operation-button.vue b/src/pages-bpm/processInstance/detail/components/operation-button.vue index c4dcc3b..1076eba 100644 --- a/src/pages-bpm/processInstance/detail/components/operation-button.vue +++ b/src/pages-bpm/processInstance/detail/components/operation-button.vue @@ -41,7 +41,9 @@ import type { Action } from 'wot-design-uni/components/wd-action-sheet/types' import type { ButtonType } from 'wot-design-uni/components/wd-button/types' import type { Task } from '@/api/bpm/task' import { useToast } from 'wot-design-uni' +import { useUserStore } from '@/store' import { + BpmProcessInstanceStatus, BpmTaskOperationButtonTypeEnum, BpmTaskStatusEnum, OPERATION_BUTTON_NAME, @@ -71,7 +73,10 @@ const operationIconsMap: Record = { [BpmTaskOperationButtonTypeEnum.DELEGATE]: 'share', [BpmTaskOperationButtonTypeEnum.RETURN]: 'arrow-left', [BpmTaskOperationButtonTypeEnum.COPY]: 'copy', + [BpmTaskOperationButtonTypeEnum.DELETE_SIGN]: 'remove', } + +const userStore = useUserStore() /** 左侧操作按钮 【最多两个】{转办, 委派, 退回, 加签, 抄送等} */ const leftOperations = ref([]) @@ -90,7 +95,7 @@ function loadTodoTask(task: Task) { if (task) { reasonRequire.value = task.reasonRequire ?? false // 右侧按钮 - if (isHandleTaskStatus() && task.buttonsSetting && task.buttonsSetting[BpmTaskOperationButtonTypeEnum.REJECT]?.enable) { + if (isHandleTaskStatus() && isShowButton(BpmTaskOperationButtonTypeEnum.REJECT)) { rightOperationTypes.push(BpmTaskOperationButtonTypeEnum.REJECT) rightOperations.value.push({ operationType: BpmTaskOperationButtonTypeEnum.REJECT, @@ -99,7 +104,7 @@ function loadTodoTask(task: Task) { plain: true, }) } - if (isHandleTaskStatus() && task.buttonsSetting && task.buttonsSetting[BpmTaskOperationButtonTypeEnum.APPROVE]?.enable) { + if (isHandleTaskStatus() && isShowButton(BpmTaskOperationButtonTypeEnum.APPROVE)) { rightOperationTypes.push(BpmTaskOperationButtonTypeEnum.APPROVE) rightOperations.value.push({ operationType: BpmTaskOperationButtonTypeEnum.APPROVE, @@ -108,7 +113,7 @@ function loadTodoTask(task: Task) { plain: false, }) } - // TODO 减签 + // 左侧操作,和更多操作 Object.keys(task.buttonsSetting || {}).forEach((key) => { const operationType = Number(key) @@ -128,6 +133,21 @@ function loadTodoTask(task: Task) { } } }) + /** 减签操作的显示 */ + if (isShowDeleteSign()) { + if (leftOperations.value.length >= 2) { + moreOperations.value.push({ + name: getButtonDisplayName(BpmTaskOperationButtonTypeEnum.DELETE_SIGN), + operationType: BpmTaskOperationButtonTypeEnum.DELETE_SIGN, + }) + } else { + leftOperations.value.push({ + operationType: BpmTaskOperationButtonTypeEnum.DELETE_SIGN, + iconName: operationIconsMap[BpmTaskOperationButtonTypeEnum.DELETE_SIGN], + displayName: getButtonDisplayName(BpmTaskOperationButtonTypeEnum.DELETE_SIGN), + }) + } + } } } /** 跳转到相应的操作页面 */ @@ -162,6 +182,11 @@ function handleOperation(operationType: number) { url: `/pages-bpm/processInstance/detail/return/index?processInstanceId=${runningTask.value.processInstanceId}&taskId=${runningTask.value.id}`, }) break + case BpmTaskOperationButtonTypeEnum.DELETE_SIGN: + uni.navigateTo({ + url: `/pages-bpm/processInstance/detail/delete-sign/index?processInstanceId=${runningTask.value.processInstanceId}&taskId=${runningTask.value.id}&children=${encodeURIComponent(JSON.stringify(runningTask.value.children || []))}`, + }) + break } } @@ -209,6 +234,38 @@ function isHandleTaskStatus() { return canHandle } +/** 流程状态是否为结束状态 */ +function isEndProcessStatus(status: number) { + let isEndStatus = false + if ( + BpmProcessInstanceStatus.APPROVE === status + || BpmProcessInstanceStatus.REJECT === status + || BpmProcessInstanceStatus.CANCEL === status + ) { + isEndStatus = true + } + return isEndStatus +} + +/** 流程发起人是否为当前用户 */ +function isProcessStartUser() { + let isStartUser = false + if (userStore.userInfo?.userId === runningTask.value?.processInstance?.startUser?.id) { + isStartUser = true + } + return isStartUser +} + +/** 是否显示减签 */ +function isShowDeleteSign() { + return runningTask.value?.children?.length > 0 +} + +/** 是否显示流程发起人取消 */ +function isShowProcessStartCancel() { + return isProcessStartUser +} + /** 暴露方法 */ defineExpose({ loadTodoTask }) diff --git a/src/pages-bpm/processInstance/detail/delete-sign/index.vue b/src/pages-bpm/processInstance/detail/delete-sign/index.vue new file mode 100644 index 0000000..0f5da26 --- /dev/null +++ b/src/pages-bpm/processInstance/detail/delete-sign/index.vue @@ -0,0 +1,181 @@ + + + diff --git a/src/utils/constants/biz-bpm-enum.ts b/src/utils/constants/biz-bpm-enum.ts index 93e18c9..32cdceb 100644 --- a/src/utils/constants/biz-bpm-enum.ts +++ b/src/utils/constants/biz-bpm-enum.ts @@ -147,6 +147,10 @@ export enum BpmTaskOperationButtonTypeEnum { * 委派 */ DELEGATE = 4, + /** + * 减签 + */ + DELETE_SIGN = 8, /** * 拒绝 */ @@ -159,6 +163,7 @@ export enum BpmTaskOperationButtonTypeEnum { * 转办 */ TRANSFER = 3, + } /** @@ -286,6 +291,7 @@ OPERATION_BUTTON_NAME.set(BpmTaskOperationButtonTypeEnum.DELEGATE, '委派') OPERATION_BUTTON_NAME.set(BpmTaskOperationButtonTypeEnum.ADD_SIGN, '加签') OPERATION_BUTTON_NAME.set(BpmTaskOperationButtonTypeEnum.RETURN, '退回') OPERATION_BUTTON_NAME.set(BpmTaskOperationButtonTypeEnum.COPY, '抄送') +OPERATION_BUTTON_NAME.set(BpmTaskOperationButtonTypeEnum.DELETE_SIGN, '减签') /** * 流程实例的变量枚举