From 16140848b16d9d316994e672133acfad6d86f559 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Tue, 29 Apr 2025 15:30:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=A8=A1=E5=9E=8B=E5=88=97?= =?UTF-8?q?=E8=A1=A8=2050%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/package.json | 5 +- apps/web-antd/src/api/bpm/category/index.ts | 30 +- apps/web-antd/src/api/bpm/model/index.ts | 107 +++++ apps/web-antd/src/views/bpm/model/index.vue | 254 ++++++++++- .../modules/category-draggable-model.vue | 398 ++++++++++++++++++ pnpm-lock.yaml | 3 + 6 files changed, 772 insertions(+), 25 deletions(-) create mode 100644 apps/web-antd/src/api/bpm/model/index.ts create mode 100644 apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index 164d7449a..ece23c22b 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -44,8 +44,8 @@ "@vben/types": "workspace:*", "@vben/utils": "workspace:*", "@vueuse/core": "catalog:", + "@vueuse/integrations": "catalog:", "ant-design-vue": "catalog:", - "vxe-table": "catalog:", "cropperjs": "catalog:", "crypto-js": "catalog:", "dayjs": "catalog:", @@ -53,7 +53,8 @@ "pinia": "catalog:", "vue": "catalog:", "vue-dompurify-html": "catalog:", - "vue-router": "catalog:" + "vue-router": "catalog:", + "vxe-table": "catalog:" }, "devDependencies": { "@types/crypto-js": "catalog:" diff --git a/apps/web-antd/src/api/bpm/category/index.ts b/apps/web-antd/src/api/bpm/category/index.ts index 852b2a868..1519c758c 100644 --- a/apps/web-antd/src/api/bpm/category/index.ts +++ b/apps/web-antd/src/api/bpm/category/index.ts @@ -1,5 +1,7 @@ import type { PageParam, PageResult } from '@vben/request'; +import type { BpmModelApi } from '#/api/bpm/model'; + import { requestClient } from '#/api/request'; export namespace BpmCategoryApi { @@ -11,6 +13,13 @@ export namespace BpmCategoryApi { status: number; sort: number; // 分类排序 } + + /** 模型分类信息 */ + export interface ModelCategoryInfo { + id: number; + name: string; + modelList: BpmModelApi.ModelVO[]; + } } /** 查询流程分类分页 */ @@ -30,15 +39,30 @@ export async function getCategory(id: number) { /** 新增流程分类 */ export async function createCategory(data: BpmCategoryApi.CategoryVO) { - return requestClient.post('/bpm/category/create', data); + return requestClient.post('/bpm/category/create', data); } /** 修改流程分类 */ export async function updateCategory(data: BpmCategoryApi.CategoryVO) { - return requestClient.put('/bpm/category/update', data); + return requestClient.put('/bpm/category/update', data); } /** 删除流程分类 */ export async function deleteCategory(id: number) { - return requestClient.delete(`/bpm/category/delete?id=${id}`); + return requestClient.delete(`/bpm/category/delete?id=${id}`); +} + +/** 查询流程分类列表 */ +export async function getCategorySimpleList() { + return requestClient.get( + `/bpm/category/simple-list`, + ); +} + +/** 批量修改流程分类的排序 */ +export async function updateCategorySortBatch(ids: number[]) { + const params = ids.join(','); + return requestClient.put( + `/bpm/category/update-sort-batch?ids=${params}`, + ); } diff --git a/apps/web-antd/src/api/bpm/model/index.ts b/apps/web-antd/src/api/bpm/model/index.ts new file mode 100644 index 000000000..06c444e04 --- /dev/null +++ b/apps/web-antd/src/api/bpm/model/index.ts @@ -0,0 +1,107 @@ +import { requestClient } from '#/api/request'; + +export namespace BpmModelApi { + /** 用户信息 TODO 这个是不是可以抽取出来定义在公共模块 */ + export interface UserInfo { + id: number; + nickname: string; + avatar?: string; + deptId?: number; + deptName?: string; + } + /** 流程定义 VO */ + export interface ProcessDefinitionVO { + id: string; + version: number; + deploymentTime: number; + suspensionState: number; + formType?: number; + } + + /** 流程模型 VO */ + export interface ModelVO { + id: number; + key: string; + name: string; + icon?: string; + description: string; + category: string; + formName: string; + formType: number; + formId: number; + formCustomCreatePath: string; + formCustomViewPath: string; + processDefinition: ProcessDefinitionVO; + status: number; + remark: string; + createTime: string; + bpmnXml: string; + startUsers?: UserInfo[]; + } + + /** 模型分类信息 */ + export interface ModelCategoryInfo { + id: number; + name: string; + modelList: ModelVO[]; + } +} + +/** 获取流程模型列表 */ +export async function getModelList(name: string | undefined) { + return requestClient.get('/bpm/model/list', { + params: { name }, + }); +} + +/** 获取流程模型详情 */ +export async function getModel(id: string) { + return requestClient.get(`/bpm/model/get?id=${id}`); +} + +/** 更新流程模型 */ +export async function updateModel(data: BpmModelApi.ModelVO) { + return requestClient.put('/bpm/model/update', data); +} + +/** 批量修改流程模型排序 */ +export async function updateModelSortBatch(ids: number[]) { + const params = ids.join(','); + return requestClient.put( + `/bpm/model/update-sort-batch?ids=${params}`, + ); +} + +/** 更新流程模型的 BPMN XML */ +export async function updateModelBpmn(data: BpmModelApi.ModelVO) { + return requestClient.put('/bpm/model/update-bpmn', data); +} + +/** 更新流程模型状态 */ +export async function updateModelState(id: number, state: number) { + const data = { + id, + state, + }; + return requestClient.put('/bpm/model/update-state', data); +} + +/** 创建流程模型 */ +export async function createModel(data: BpmModelApi.ModelVO) { + return requestClient.post('/bpm/model/create', data); +} + +/** 删除流程模型 */ +export async function deleteModel(id: number) { + return requestClient.delete(`/bpm/model/delete?id=${id}`); +} + +/** 部署流程模型 */ +export async function deployModel(id: number) { + return requestClient.post(`/bpm/model/deploy?id=${id}`); +} + +/** 清理流程模型 */ +export async function cleanModel(id: number) { + return requestClient.delete(`/bpm/model/clean?id=${id}`); +} diff --git a/apps/web-antd/src/views/bpm/model/index.vue b/apps/web-antd/src/views/bpm/model/index.vue index c7d4938c1..c51782e24 100644 --- a/apps/web-antd/src/views/bpm/model/index.vue +++ b/apps/web-antd/src/views/bpm/model/index.vue @@ -1,28 +1,242 @@ 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 new file mode 100644 index 000000000..5ebcee1f7 --- /dev/null +++ b/apps/web-antd/src/views/bpm/model/modules/category-draggable-model.vue @@ -0,0 +1,398 @@ + + + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f698b3f9..d67bda69d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -728,6 +728,9 @@ importers: '@vueuse/core': specifier: 'catalog:' version: 12.8.2(typescript@5.8.3) + '@vueuse/integrations': + specifier: 'catalog:' + version: 12.8.2(async-validator@4.2.5)(axios@1.8.4)(focus-trap@7.6.4)(jwt-decode@4.0.0)(nprogress@0.2.0)(qrcode@1.5.4)(sortablejs@1.15.6)(typescript@5.8.3) ant-design-vue: specifier: 'catalog:' version: 4.2.6(vue@3.5.13(typescript@5.8.3)) From 3d2f803dd8f9ba77947eb511903a526a27382938 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Tue, 29 Apr 2025 15:57:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E5=86=B2=E7=AA=81=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bacd048e..2ca8fa031 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -733,7 +733,7 @@ importers: version: 13.1.0(vue@3.5.13(typescript@5.8.3)) '@vueuse/integrations': specifier: 'catalog:' - version: 12.8.2(async-validator@4.2.5)(axios@1.8.4)(focus-trap@7.6.4)(jwt-decode@4.0.0)(nprogress@0.2.0)(qrcode@1.5.4)(sortablejs@1.15.6)(typescript@5.8.3) + version: 13.1.0(async-validator@4.2.5)(axios@1.9.0)(focus-trap@7.6.4)(jwt-decode@4.0.0)(nprogress@0.2.0)(qrcode@1.5.4)(sortablejs@1.15.6)(vue@3.5.13(typescript@5.8.3)) ant-design-vue: specifier: 'catalog:' version: 4.2.6(vue@3.5.13(typescript@5.8.3))