From e18bbca3761877291a654002a56d4d5c3e718b38 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Sun, 30 Nov 2025 00:08:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20[bpm][ele]=20bpm=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-ele/src/api/bpm/task/index.ts | 19 ++------- apps/web-ele/src/router/routes/modules/bpm.ts | 18 --------- .../src/views/bpm/model/form/index.vue | 15 +++++-- .../bpm/processInstance/create/index.vue | 39 +++++-------------- .../processInstance/create/modules/form.vue | 2 +- .../bpm/processInstance/detail/index.vue | 15 ++++--- .../detail/modules/operation-button.vue | 29 +++++--------- .../detail/modules/signature.vue | 24 ++++++------ .../detail/modules/task-list.vue | 8 ++-- .../src/views/bpm/task/manager/index.vue | 2 +- 10 files changed, 64 insertions(+), 107 deletions(-) diff --git a/apps/web-ele/src/api/bpm/task/index.ts b/apps/web-ele/src/api/bpm/task/index.ts index d6a0e81cb..4f329abc7 100644 --- a/apps/web-ele/src/api/bpm/task/index.ts +++ b/apps/web-ele/src/api/bpm/task/index.ts @@ -8,26 +8,15 @@ export namespace BpmTaskApi { /** 流程任务 */ export interface Task { id: number; // 编号 - name: string; // 监听器名字 - type: string; // 监听器类型 - status: number; // 监听器状态 - event: string; // 监听事件 - valueType: string; // 监听器值类型 - processInstance?: BpmProcessInstanceApi.ProcessInstance; // 流程实例 - } - - // 流程任务 - export interface TaskManager { - id: string; // 编号 - name: string; // 任务名称 + name: string; // 任务名字 + status: number; // 任务状态 createTime: number; // 创建时间 endTime: number; // 结束时间 durationInMillis: number; // 持续时间 - status: number; // 状态 - reason: string; // 原因 + reason: string; // 审批理由 ownerUser: any; // 负责人 assigneeUser: any; // 处理人 - taskDefinitionKey: string; // 任务定义key + taskDefinitionKey: string; // 任务定义的标识 processInstanceId: string; // 流程实例id processInstance: BpmProcessInstanceApi.ProcessInstance; // 流程实例 parentTaskId: any; // 父任务id diff --git a/apps/web-ele/src/router/routes/modules/bpm.ts b/apps/web-ele/src/router/routes/modules/bpm.ts index 05e0e5664..bd4a7a209 100644 --- a/apps/web-ele/src/router/routes/modules/bpm.ts +++ b/apps/web-ele/src/router/routes/modules/bpm.ts @@ -9,24 +9,6 @@ const routes: RouteRecordRaw[] = [ hideInMenu: true, }, children: [ - { - path: 'task', - name: 'BpmTask', - meta: { - title: '审批中心', - icon: 'ant-design:history-outlined', - }, - children: [ - { - path: 'my', - name: 'BpmTaskMy', - component: () => import('#/views/bpm/processInstance/index.vue'), - meta: { - title: '我的流程', - }, - }, - ], - }, { path: 'process-instance/detail', component: () => import('#/views/bpm/processInstance/detail/index.vue'), diff --git a/apps/web-ele/src/views/bpm/model/form/index.vue b/apps/web-ele/src/views/bpm/model/form/index.vue index 8c42659c1..8e5e4b7b7 100644 --- a/apps/web-ele/src/views/bpm/model/form/index.vue +++ b/apps/web-ele/src/views/bpm/model/form/index.vue @@ -259,6 +259,7 @@ async function validateAllSteps() { return true; } +const saveLoading = ref(false); /** 保存操作 */ async function handleSave() { try { @@ -272,7 +273,7 @@ async function handleSave() { const modelData = { ...formData.value, }; - + saveLoading.value = true; switch (actionType) { case 'copy': { // 情况三:复制场景 @@ -309,9 +310,12 @@ async function handleSave() { } } catch (error: any) { console.error('保存失败:', error); + } finally { + saveLoading.value = false; } } - +// 发布加载中状态 +const deployLoading = ref(false); /** 发布操作 */ async function handleDeploy() { try { @@ -322,6 +326,8 @@ async function handleDeploy() { // 1.2 校验所有步骤 await validateAllSteps(); + deployLoading.value = true; + // 2.1 更新表单数据 const modelData = { ...formData.value, @@ -342,6 +348,8 @@ async function handleDeploy() { } catch (error: any) { console.error('发布失败:', error); ElMessage.warning(error.message || '发布失败'); + } finally { + deployLoading.value = false; } } @@ -448,11 +456,12 @@ onBeforeUnmount(() => { 发 布 - + 恢 复 保 存 diff --git a/apps/web-ele/src/views/bpm/processInstance/create/index.vue b/apps/web-ele/src/views/bpm/processInstance/create/index.vue index df5507705..74953f91e 100644 --- a/apps/web-ele/src/views/bpm/processInstance/create/index.vue +++ b/apps/web-ele/src/views/bpm/processInstance/create/index.vue @@ -234,9 +234,10 @@ onMounted(() => { > -
+
{{ definition.name?.slice(0, 2) }} @@ -301,31 +305,8 @@ onMounted(() => { } } -.process-definition-container { - .definition-item-card { - .flow-icon-img { - width: 48px; - height: 48px; - border-radius: 0.25rem; - } - - .flow-icon { - @apply bg-primary; - - display: flex; - align-items: center; - justify-content: center; - width: 48px; - height: 48px; - border-radius: 0.25rem; - } - - &.search-match { - background-color: rgb(63 115 247 / 10%); - border: 1px solid var(--primary); - animation: bounce 0.5s ease; - } - } +.animate-bounce-once { + animation: bounce 0.5s ease; } :deep(.el-tabs__content) { diff --git a/apps/web-ele/src/views/bpm/processInstance/create/modules/form.vue b/apps/web-ele/src/views/bpm/processInstance/create/modules/form.vue index 7ba63b5fa..7c5ed297c 100644 --- a/apps/web-ele/src/views/bpm/processInstance/create/modules/form.vue +++ b/apps/web-ele/src/views/bpm/processInstance/create/modules/form.vue @@ -112,7 +112,7 @@ async function submitForm() { // 关闭并提示 ElMessage.success('发起流程成功'); await closeCurrentTab(); - await router.push({ name: 'BpmTaskMy' }); + await router.push({ name: 'BpmProcessInstanceMy' }); } finally { processInstanceStartLoading.value = false; } diff --git a/apps/web-ele/src/views/bpm/processInstance/detail/index.vue b/apps/web-ele/src/views/bpm/processInstance/detail/index.vue index fad5ed688..5713fd6fa 100644 --- a/apps/web-ele/src/views/bpm/processInstance/detail/index.vue +++ b/apps/web-ele/src/views/bpm/processInstance/detail/index.vue @@ -220,17 +220,22 @@ watch( } }, ); - +const loading = ref(false); /** 初始化 */ onMounted(async () => { - await getDetail(); - // 获得用户列表 - userOptions.value = await getSimpleUserList(); + loading.value = true; + try { + await getDetail(); + // 获得用户列表 + userOptions.value = await getSimpleUserList(); + } finally { + loading.value = false; + } }); diff --git a/apps/web-ele/src/views/bpm/processInstance/detail/modules/task-list.vue b/apps/web-ele/src/views/bpm/processInstance/detail/modules/task-list.vue index 5b64e38ad..afdca1146 100644 --- a/apps/web-ele/src/views/bpm/processInstance/detail/modules/task-list.vue +++ b/apps/web-ele/src/views/bpm/processInstance/detail/modules/task-list.vue @@ -42,7 +42,7 @@ function useGridColumns(): VxeTableGridOptions['columns'] { field: 'approver', title: '审批人', slots: { - default: ({ row }: { row: BpmTaskApi.TaskManager }) => { + default: ({ row }: { row: BpmTaskApi.Task }) => { return row.assigneeUser?.nickname || row.ownerUser?.nickname; }, }, @@ -104,7 +104,7 @@ function handleRefresh() { } /** 显示表单详情 */ -async function handleShowFormDetail(row: BpmTaskApi.TaskManager) { +async function handleShowFormDetail(row: BpmTaskApi.Task) { // 设置表单配置和表单字段 taskForm.value = { rule: [], @@ -156,7 +156,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ toolbarConfig: { enabled: false, }, - } as VxeTableGridOptions, + } as VxeTableGridOptions, }); defineExpose({ @@ -186,7 +186,7 @@ defineExpose({
- +