diff --git a/src/api/bpm/processInstance/index.ts b/src/api/bpm/processInstance/index.ts index 3aa393032473a87ce7f650685b3f1a193a730dc5..bcb3f445700532ad775eb0015acb19fcece7f4eb 100644 --- a/src/api/bpm/processInstance/index.ts +++ b/src/api/bpm/processInstance/index.ts @@ -1,3 +1,4 @@ +import type { Task } from '@/api/bpm/task' import type { PageParam, PageResult } from '@/http/types' import { http } from '@/http/http' @@ -47,6 +48,7 @@ export interface ProcessInstance { export interface ApprovalDetail { processInstance: ProcessInstance processDefinition: ProcessDefinition + todoTask: Task } /** 抄送流程实例 */ diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts index 115ba2e895c41ea43d1951b815bc6c9ab3da1897..8ff897afcfbb5a3af27ea5cab8ee1598054a48ef 100644 --- a/src/api/bpm/task/index.ts +++ b/src/api/bpm/task/index.ts @@ -11,6 +11,10 @@ export interface TaskUser { deptName?: string } +export interface OperationButtonSetting { + displayName: string // 按钮名称 + enable: boolean // 是否启用 +} /** 流程任务 */ export interface Task { id: string @@ -24,6 +28,9 @@ export interface Task { ownerUser?: TaskUser processInstanceId?: string // 流程实例 ID processInstance: ProcessInstance + reasonRequire?: boolean // 是否填写审批意见 + buttonsSetting?: Record // 按钮设置 + children?: Task[] // 由加签生成,包含多层子任务 } /** 查询待办任务分页列表 */ @@ -55,3 +62,33 @@ export function getTaskListByProcessInstanceId(processInstanceId: string) { export function getTaskManagerPage(params: PageParam) { return http.get>('/bpm/task/manager-page', params) } + +/** 委派任务 */ +export function delegateTask(data: { id: string, delegateUserId: string, reason: string }) { + return http.put('/bpm/task/delegate', data) +} + +/** 转办任务 */ +export function transferTask(data: { id: string, assigneeUserId: string, reason: string }) { + return http.put('/bpm/task/transfer', data) +} + +/** 退回任务 */ +export function returnTask(data: { id: string, targetTaskDefinitionKey: string, reason: string }) { + return http.put('/bpm/task/return', data) +} + +/** 获取可退回的节点列表 */ +export function getTaskListByReturn(taskId: string) { + return http.get(`/bpm/task/list-by-return?id=${taskId}`) +} + +/** 加签任务 */ +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/components/system-select/user-picker.vue b/src/components/system-select/user-picker.vue index 3dbeca6f6416e99e3bcaf33b853b9456b93f1d69..6efedbe9267819fc7e5e608aba2e3abd7ae6b301 100644 --- a/src/components/system-select/user-picker.vue +++ b/src/components/system-select/user-picker.vue @@ -7,6 +7,7 @@ value-key="id" label-key="nickname" :type="type" + :prop="prop" filterable :placeholder="placeholder" @confirm="handleConfirm" @@ -23,10 +24,12 @@ const props = withDefaults(defineProps<{ type?: 'radio' | 'checkbox' label?: string placeholder?: string + prop?: string }>(), { type: 'checkbox', label: '', placeholder: '请选择', + prop: '', }) const emit = defineEmits<{ diff --git a/src/pages-bpm/processInstance/detail/add-sign/index.vue b/src/pages-bpm/processInstance/detail/add-sign/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..801108a890923cd80d63f95344bbb605ac0f50ac --- /dev/null +++ b/src/pages-bpm/processInstance/detail/add-sign/index.vue @@ -0,0 +1,150 @@ + + + diff --git a/src/pages-bpm/processInstance/detail/components/operation-button.vue b/src/pages-bpm/processInstance/detail/components/operation-button.vue new file mode 100644 index 0000000000000000000000000000000000000000..f209081523cc1e88609960ea8870481fd0ca6eaf --- /dev/null +++ b/src/pages-bpm/processInstance/detail/components/operation-button.vue @@ -0,0 +1,314 @@ + + + + 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 0000000000000000000000000000000000000000..0f5da269345f9013cdbd4b0a8dade5e5a58b80ad --- /dev/null +++ b/src/pages-bpm/processInstance/detail/delete-sign/index.vue @@ -0,0 +1,181 @@ + + + diff --git a/src/pages-bpm/processInstance/detail/index.vue b/src/pages-bpm/processInstance/detail/index.vue index 5474c8d48c24c0a1c58ea02c7622dc37076d330f..196a33c5b6d71c05a28d25ac8e48c3e19895684c 100644 --- a/src/pages-bpm/processInstance/detail/index.vue +++ b/src/pages-bpm/processInstance/detail/index.vue @@ -12,32 +12,31 @@ - {{ processInstance.name }} - - {{ getStatusText(processInstance.status) }} + {{ processInstance?.name }} + + {{ getStatusText(processInstance?.status) }} - {{ processInstance.startUser?.nickname?.[0] || '?' }} + {{ processInstance?.startUser?.nickname?.[0] || '?' }} - {{ processInstance.startUser?.nickname }} - - {{ processInstance.startUser?.deptName }} + {{ processInstance?.startUser?.nickname }} + + {{ processInstance?.startUser?.deptName }} - 提交于 {{ formatDateTime(processInstance.startTime) }} + 提交于 {{ formatDateTime(processInstance?.startTime) }} - @@ -88,29 +87,15 @@ - - - - - 拒绝 - - - 同意 - - - - - - - + + diff --git a/src/pages-bpm/processInstance/detail/process-cancel/index.vue b/src/pages-bpm/processInstance/detail/process-cancel/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..d360bea3ce52649f742b6e1b29e22840c55c9ba5 --- /dev/null +++ b/src/pages-bpm/processInstance/detail/process-cancel/index.vue @@ -0,0 +1,133 @@ + + + diff --git a/src/pages-bpm/processInstance/detail/reassign/index.vue b/src/pages-bpm/processInstance/detail/reassign/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a4a44883508b4421c16dcc38a8664166d889097f --- /dev/null +++ b/src/pages-bpm/processInstance/detail/reassign/index.vue @@ -0,0 +1,153 @@ + + + diff --git a/src/pages-bpm/processInstance/detail/return/index.vue b/src/pages-bpm/processInstance/detail/return/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..b245c7ca3437f71aa7aba30f5c7fe36a50a83f70 --- /dev/null +++ b/src/pages-bpm/processInstance/detail/return/index.vue @@ -0,0 +1,156 @@ + + + diff --git a/src/pages/bpm/components/todo-list.vue b/src/pages/bpm/components/todo-list.vue index d0f61a0c2355944736e2fac9cbebf02832dd118d..3c49bfdac5f36c174a21819b8b2b294c532ef86b 100644 --- a/src/pages/bpm/components/todo-list.vue +++ b/src/pages/bpm/components/todo-list.vue @@ -118,7 +118,7 @@ function handleReset() { /** 查看详情 */ function handleDetail(item: Task) { - uni.navigateTo({ url: `/pages-bpm/processInstance/detail/index?id=${item.processInstance.id}` }) + uni.navigateTo({ url: `/pages-bpm/processInstance/detail/index?id=${item.processInstance.id}&taskId=${item.id}` }) } /** 同意 */ diff --git a/src/store/user.ts b/src/store/user.ts index 651d08023d3fe287256d97e5c25b90f32a0f88f5..6577f03ed0a1edb244c5d80736e2f03635f66143 100644 --- a/src/store/user.ts +++ b/src/store/user.ts @@ -63,6 +63,8 @@ export const useUserStore = defineStore( /** 获取用户信息 */ const fetchUserInfo = async () => { const res = await getAuthPermissionInfo() + // 后端返回的用户 Id 字段为 id. + res.user.userId = res.user.id setUserInfo(res) return res } diff --git a/src/utils/constants/biz-bpm-enum.ts b/src/utils/constants/biz-bpm-enum.ts index 93e18c976cfc329aa6211dccb7a6d7c3c5295296..1149c1dbe498b42d6cbc77c003e75552f57e5b5c 100644 --- a/src/utils/constants/biz-bpm-enum.ts +++ b/src/utils/constants/biz-bpm-enum.ts @@ -147,6 +147,14 @@ export enum BpmTaskOperationButtonTypeEnum { * 委派 */ DELEGATE = 4, + /** + * 减签 + */ + DELETE_SIGN = 8, + /** + * 流程发起人取消 + */ + PROCESS_START_CANCEL = 9, /** * 拒绝 */ @@ -286,6 +294,8 @@ 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, '减签') +OPERATION_BUTTON_NAME.set(BpmTaskOperationButtonTypeEnum.PROCESS_START_CANCEL, '取消') /** * 流程实例的变量枚举