From ff8187bcb01bc648f4193d802a80020f3a5b8f5d Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Fri, 21 Nov 2025 09:44:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20[bpm][ele]=20=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=A8=A1=E5=9E=8B=2020%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-ele/src/router/routes/modules/bpm.ts | 48 +- .../src/views/bpm/model/form/index.vue | 498 ++++++++++++++ .../bpm/model/form/modules/basic-info.vue | 442 +++++++++++++ .../model/form/modules/bpm-model-editor.vue | 126 ++++ .../form/modules/custom-print-template.vue | 117 ++++ .../bpm/model/form/modules/extra-setting.vue | 618 ++++++++++++++++++ .../bpm/model/form/modules/form-design.vue | 184 ++++++ .../bpm/model/form/modules/process-design.vue | 79 +++ .../form/modules/simple-model-design.vue | 48 ++ .../bpm/model/form/modules/tinymce-plugin.ts | 78 +++ 10 files changed, 2214 insertions(+), 24 deletions(-) create mode 100644 apps/web-ele/src/views/bpm/model/form/index.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/basic-info.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/bpm-model-editor.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/custom-print-template.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/extra-setting.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/form-design.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/process-design.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/simple-model-design.vue create mode 100644 apps/web-ele/src/views/bpm/model/form/modules/tinymce-plugin.ts diff --git a/apps/web-ele/src/router/routes/modules/bpm.ts b/apps/web-ele/src/router/routes/modules/bpm.ts index c895a34ee..375b45830 100644 --- a/apps/web-ele/src/router/routes/modules/bpm.ts +++ b/apps/web-ele/src/router/routes/modules/bpm.ts @@ -62,30 +62,30 @@ const routes: RouteRecordRaw[] = [ }; }, }, - // { - // path: 'manager/model/create', - // component: () => import('#/views/bpm/model/form/index.vue'), - // name: 'BpmModelCreate', - // meta: { - // title: '创建流程', - // activePath: '/bpm/manager/model', - // icon: 'carbon:flow-connection', - // hideInMenu: true, - // 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, - // }, - // }, + { + path: 'manager/model/create', + component: () => import('#/views/bpm/model/form/index.vue'), + name: 'BpmModelCreate', + meta: { + title: '创建流程', + activePath: '/bpm/manager/model', + icon: 'carbon:flow-connection', + hideInMenu: true, + 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, + }, + }, { path: 'manager/definition', component: () => import('#/views/bpm/model/definition/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 new file mode 100644 index 000000000..79896c35e --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/index.vue @@ -0,0 +1,498 @@ + + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/basic-info.vue b/apps/web-ele/src/views/bpm/model/form/modules/basic-info.vue new file mode 100644 index 000000000..0c82d5b14 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/basic-info.vue @@ -0,0 +1,442 @@ + + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/bpm-model-editor.vue b/apps/web-ele/src/views/bpm/model/form/modules/bpm-model-editor.vue new file mode 100644 index 000000000..4f756afc3 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/bpm-model-editor.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/custom-print-template.vue b/apps/web-ele/src/views/bpm/model/form/modules/custom-print-template.vue new file mode 100644 index 000000000..3a75ed61d --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/custom-print-template.vue @@ -0,0 +1,117 @@ + + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/extra-setting.vue b/apps/web-ele/src/views/bpm/model/form/modules/extra-setting.vue new file mode 100644 index 000000000..739229387 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/extra-setting.vue @@ -0,0 +1,618 @@ + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/form-design.vue b/apps/web-ele/src/views/bpm/model/form/modules/form-design.vue new file mode 100644 index 000000000..534001d77 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/form-design.vue @@ -0,0 +1,184 @@ + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/process-design.vue b/apps/web-ele/src/views/bpm/model/form/modules/process-design.vue new file mode 100644 index 000000000..18a2b65e2 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/process-design.vue @@ -0,0 +1,79 @@ + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/simple-model-design.vue b/apps/web-ele/src/views/bpm/model/form/modules/simple-model-design.vue new file mode 100644 index 000000000..ab9ca3753 --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/simple-model-design.vue @@ -0,0 +1,48 @@ + + diff --git a/apps/web-ele/src/views/bpm/model/form/modules/tinymce-plugin.ts b/apps/web-ele/src/views/bpm/model/form/modules/tinymce-plugin.ts new file mode 100644 index 000000000..145dc894b --- /dev/null +++ b/apps/web-ele/src/views/bpm/model/form/modules/tinymce-plugin.ts @@ -0,0 +1,78 @@ +/** TinyMCE 自定义功能: + * - processrecord 按钮:插入流程记录占位元素 + * - @ 自动补全:插入 mention 占位元素 + */ + +// @ts-ignore TinyMCE 全局或通过打包器提供 +import type { Editor } from 'tinymce'; + +export interface MentionItem { + id: string; + name: string; +} + +/** 在编辑器 setup 回调中注册流程记录按钮和 @ 自动补全 */ +export function setupTinyPlugins( + editor: Editor, + getMentionList: () => MentionItem[], +) { + // 按钮:流程记录 + editor.ui.registry.addButton('processrecord', { + text: '流程记录', + tooltip: '插入流程记录占位', + onAction: () => { + // 流程记录占位显示, 仅用于显示。process-print.vue 组件中会替换掉 + editor.insertContent( + [ + '
', + '', + '', + '', + '', + '', + '', + '
流程记录
节点操作
', + '
', + ].join(''), + ); + }, + }); + + // @ 自动补全 + editor.ui.registry.addAutocompleter('bpmMention', { + trigger: '@', + minChars: 0, + columns: 1, + fetch: ( + pattern: string, + _maxResults: number, + _fetchOptions: Record, + ) => { + const list = getMentionList(); + const keyword = (pattern || '').toLowerCase().trim(); + const data = list + .filter((i) => i.name.toLowerCase().includes(keyword)) + .map((i) => ({ + value: i.id, + text: i.name, + })); + return Promise.resolve(data); + }, + onAction: ( + autocompleteApi: any, + rng: Range, + value: string, + _meta: Record, + ) => { + const list = getMentionList(); + const item = list.find((i) => i.id === value); + const name = item ? item.name : value; + const info = encodeURIComponent(JSON.stringify({ id: value })); + editor.selection.setRng(rng); + editor.insertContent( + `@${name}`, + ); + autocompleteApi.hide(); + }, + }); +}