diff --git a/apps/web-antd/src/api/workflow/task/index.ts b/apps/web-antd/src/api/workflow/task/index.ts index 581d45e4..d38006e7 100644 --- a/apps/web-antd/src/api/workflow/task/index.ts +++ b/apps/web-antd/src/api/workflow/task/index.ts @@ -95,7 +95,7 @@ export function getTaskByTaskId(taskId: string) { * 终止任务 * @param data */ -export function terminationTask(data: any) { +export function terminationTask(data: { taskId: string }) { return requestClient.postWithMsg( '/workflow/task/terminationTask', data, @@ -142,7 +142,9 @@ export function backProcess(data: any) { * @param instanceId 实例id */ export function getBackTaskNode(instanceId: string) { - return requestClient.get(`/workflow/task/getBackTaskNode/${instanceId}`); + return requestClient.get<{ nodeCode: string; nodeName: string }[]>( + `/workflow/task/getBackTaskNode/${instanceId}`, + ); } /** diff --git a/apps/web-antd/src/views/workflow/components/approval-panel.vue b/apps/web-antd/src/views/workflow/components/approval-panel.vue index 790179a5..b57d2227 100644 --- a/apps/web-antd/src/views/workflow/components/approval-panel.vue +++ b/apps/web-antd/src/views/workflow/components/approval-panel.vue @@ -4,12 +4,13 @@ import type { TaskInfo } from '#/api/workflow/task/model'; import { computed, onUnmounted, ref, watch } from 'vue'; -import { Fallback, VbenAvatar } from '@vben/common-ui'; +import { Fallback, useVbenModal, VbenAvatar } from '@vben/common-ui'; import { DictEnum } from '@vben/constants'; import { Card, Divider, + Modal, Popconfirm, Space, TabPane, @@ -17,9 +18,10 @@ import { } from 'ant-design-vue'; import { flowInfo } from '#/api/workflow/instance'; +import { terminationTask } from '#/api/workflow/task'; import { renderDict } from '#/utils/render'; -import { ApprovalTimeline } from '.'; +import { approvalRejectionModal, ApprovalTimeline } from '.'; defineOptions({ name: 'ApprovalPanel', @@ -32,8 +34,9 @@ const props = defineProps<{ task?: TaskInfo; type: ApprovalType }>(); /** * myself 我发起的 * readonly 只读 只用于查看 + * approve 审批 */ -type ApprovalType = 'myself' | 'readonly'; +type ApprovalType = 'approve' | 'myself' | 'readonly'; const showFooter = computed(() => { if (props.type === 'readonly') { return false; @@ -74,6 +77,35 @@ onUnmounted(() => (currentFlowInfo.value = undefined)); async function handleCancel() { // await cancelProcessApply() } + +/** + * 审批驳回 + */ +const [RejectionModal, rejectionModalApi] = useVbenModal({ + connectedComponent: approvalRejectionModal, +}); +function handleRejection() { + rejectionModalApi.setData({ + taskId: props.task?.id, + instanceId: props.task?.instanceId, + }); + rejectionModalApi.open(); +} + +/** + * 审批终止 + */ +function handleTermination() { + Modal.confirm({ + title: '审批终止', + content: '确定终止当前审批流程吗?', + centered: true, + okButtonProps: { danger: true }, + onOk: async () => { + await terminationTask({ taskId: props.task!.id }); + }, + }); +}