From 6abefe9c1e9707d7994913e85e12e704f2c49e19 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Sun, 8 Jun 2025 23:41:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81]=20-?= =?UTF-8?q?=20=E6=B5=81=E7=A8=8B=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E7=AD=89=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-antd/src/router/routes/modules/bpm.ts | 12 ++ .../src/views/bpm/model/form/index.vue | 3 +- apps/web-antd/src/views/bpm/model/index.vue | 2 +- .../modules/category-draggable-model.vue | 141 +++++++++++++++++- 4 files changed, 151 insertions(+), 7 deletions(-) diff --git a/apps/web-antd/src/router/routes/modules/bpm.ts b/apps/web-antd/src/router/routes/modules/bpm.ts index 8773271bc..0287c1749 100644 --- a/apps/web-antd/src/router/routes/modules/bpm.ts +++ b/apps/web-antd/src/router/routes/modules/bpm.ts @@ -74,6 +74,18 @@ const routes: RouteRecordRaw[] = [ keepAlive: true, }, }, + { + path: 'manager/model/:type/:id', + component: () => import('#/views/bpm/model/form/index.vue'), + name: 'BpmModelUpdate', + meta: { + title: '修改流程', + activePath: '/bpm/manager/model', + icon: 'carbon:flow-connection', + hideInMenu: true, + keepAlive: true, + }, + }, ], }, ]; diff --git a/apps/web-antd/src/views/bpm/model/form/index.vue b/apps/web-antd/src/views/bpm/model/form/index.vue index eeb408188..d1881b80b 100644 --- a/apps/web-antd/src/views/bpm/model/form/index.vue +++ b/apps/web-antd/src/views/bpm/model/form/index.vue @@ -339,8 +339,7 @@ const handleDeploy = async () => { // 发布 await deployModel(formData.value.id); message.success('发布成功'); - // TODO 返回列表页 - await router.push({ name: 'BpmModel' }); + await router.push({ path: '/bpm/manager/model' }); } catch (error: any) { console.error('发布失败:', error); message.warning(error.message || '发布失败'); diff --git a/apps/web-antd/src/views/bpm/model/index.vue b/apps/web-antd/src/views/bpm/model/index.vue index 41579bc9d..32028843b 100644 --- a/apps/web-antd/src/views/bpm/model/index.vue +++ b/apps/web-antd/src/views/bpm/model/index.vue @@ -167,7 +167,7 @@ const handleCategorySortSubmit = async () => {
diff --git a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue index 2583fc867..631ff9adb 100644 --- a/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue +++ b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue @@ -2,8 +2,10 @@ import type { BpmModelApi, ModelCategoryInfo } from '#/api/bpm/model'; import { computed, ref, watchEffect } from 'vue'; +import { useRouter } from 'vue-router'; import { confirm, useVbenModal } from '@vben/common-ui'; +import { useUserStore } from '@vben/stores'; import { cloneDeep, formatDateTime, isEqual } from '@vben/utils'; import { useDebounceFn } from '@vueuse/core'; @@ -21,7 +23,7 @@ import { } from 'ant-design-vue'; import { deleteCategory } from '#/api/bpm/category'; -import { updateModelSortBatch } from '#/api/bpm/model'; +import { deployModel, updateModelSortBatch } from '#/api/bpm/model'; import { DictTag } from '#/components/dict-tag'; import { $t } from '#/locales'; import { DICT_TYPE } from '#/utils'; @@ -36,6 +38,10 @@ const props = defineProps<{ const emit = defineEmits(['success']); +const router = useRouter(); +// 获取当前登录用户Id +const userStore = useUserStore(); +const userId = userStore.userInfo?.id; const isModelSorting = ref(false); const originalData = ref([]); const modelList = ref([]); @@ -55,7 +61,7 @@ const columns = [ key: 'name', align: 'left' as const, ellipsis: true, - width: 250, + width: 230, }, { title: '可见范围', @@ -71,7 +77,7 @@ const columns = [ key: 'type', align: 'center' as const, ellipsis: true, - width: 120, + width: 150, }, { title: '表单信息', @@ -178,6 +184,68 @@ const handleFormDetail = (row: any) => { console.warn('待实现', row); }; +/** 判断是否是流程管理员 */ +function isManagerUser(row: any) { + return row.managerUserIds && row.managerUserIds.includes(userId); +} + +async function modelOperation(type: string, id: number) { + await router.push({ + name: 'BpmModelUpdate', + params: { id, type }, + }); +} + +/** 发布流程 */ +async function handleDeploy(row: any) { + confirm({ + beforeClose: async ({ isConfirm }) => { + if (!isConfirm) return; + // 发起部署 + await deployModel(row.id); + return true; + }, + content: `确认要发布[${row.name}]流程吗?`, + icon: 'question', + }).then(async () => { + message.success(`发布[${row.name}]流程成功`); + // 刷新列表 + emit('success'); + }); +} + +/** '更多'操作按钮 */ +function handleModelCommand(command: string, row: any) { + switch (command) { + case 'handleChangeState': { + console.warn('停用/启用待实现', row); + break; + } + case 'handleClean': { + console.warn('清理待实现', row); + break; + } + case 'handleCopy': { + modelOperation('copy', row.id); + break; + } + case 'handleDefinitionList': { + console.warn('历史待实现', row); + break; + } + case 'handleDelete': { + console.warn('删除待实现', row); + break; + } + case 'handleReport': { + console.warn('报表待实现', row); + break; + } + default: { + break; + } + } +} /** 更新 modelList 模型列表 */ const updateModelList = useDebounceFn(() => { const newModelList = props.categoryInfo.modelList; @@ -435,7 +503,72 @@ const handleRenameSuccess = () => {