@szjy/workflow 0.1.29 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,34 +2,299 @@
2
2
 
3
3
  [![Publish to NPM](https://github.com/szjy-work/workflow/actions/workflows/release.yml/badge.svg)](https://github.com/szjy-work/workflow/actions/workflows/release.yml)
4
4
 
5
- 基于 vite + vue3 + typescript 的组件
5
+ ## 项目概述
6
6
 
7
+ @szjy/workflow 是基于 Vue 3、TypeScript 和 BPMN.js 开发的工作流设计器组件库,提供了完整的工作流程设计、表单权限配置和电子签章管理能力。该组件库适用于需要实现业务流程设计与管理的企业应用系统,特别是在建筑信息化领域。
7
8
 
8
- ## 使用
9
+ ## 目录结构
9
10
 
10
- 先安装:
11
- ```shell
12
- npm i @szjy/workflow
13
11
  ```
12
+ workflow/
13
+ ├── examples/ # 示例代码
14
+ │ ├── App.vue # 示例应用
15
+ │ └── ui/ # 示例UI组件
16
+ ├── packages/
17
+ │ ├── components/ # 核心组件
18
+ │ │ ├── Hello/ # Hello组件(示例)
19
+ │ │ └── Workflow/ # 工作流组件
20
+ │ │ ├── activiti/ # Activiti引擎配置
21
+ │ │ ├── biz-logic/ # 业务逻辑实现
22
+ │ │ ├── components/ # 子组件
23
+ │ │ ├── palette/ # 自定义画板
24
+ │ │ ├── store/ # 状态管理
25
+ │ │ └── utils/ # 工具函数
26
+ │ └── i18n/ # 国际化资源
27
+ │ ├── en_US/ # 英文
28
+ │ └── zh_CN/ # 中文
29
+ ├── public/ # 静态资源
30
+ └── index.ts # 入口文件
31
+ ```
32
+
33
+ ## 环境要求
34
+
35
+ - Node.js >= 16
36
+ - Vue 3
37
+ - TypeScript >= 4.8
38
+ - Vite >= 5.0.0
39
+
40
+ ## 安装
41
+
42
+ ```bash
43
+ # npm
44
+ npm install @szjy/workflow
14
45
 
15
- 本地开发:
16
- ```shell
17
- npm run dev
46
+ # yarn
47
+ yarn add @szjy/workflow
48
+
49
+ # pnpm
50
+ pnpm add @szjy/workflow
18
51
  ```
19
52
 
20
- 然后在项目中引入:
53
+ ## 快速开始
54
+
55
+ ### 全局注册
21
56
 
22
57
  ```typescript
23
- import SWorkflow from '@szjy/workflow';
24
- import '@szjy/workflow/dist/style.css';
58
+ // main.ts
59
+ import { createApp } from 'vue'
60
+ import App from './App.vue'
61
+ import SWorkflow from '@szjy/workflow'
62
+ import '@szjy/workflow/dist/style.css'
25
63
 
64
+ const app = createApp(App)
26
65
  app.use(SWorkflow).mount('#app')
27
66
  ```
28
67
 
29
- 这样就可以在项目中使用组件了:
68
+ ### 组件使用
69
+
70
+ ```vue
71
+ <template>
72
+ <sz-workflow ref="workflowRef" @init="onInitWorkflow">
73
+ <!-- 自定义工具栏插槽 -->
74
+ <template #TOOLBAR_SUFFIX>
75
+ <button>导入模板</button>
76
+ </template>
77
+
78
+ <!-- 自定义用户选择器插槽 -->
79
+ <template #USER_CHOOSER_SUFFIX="userProps">
80
+ <user-chooser :user-id="userProps.userId" :on-change="userProps.onChange"></user-chooser>
81
+ </template>
82
+ </sz-workflow>
83
+ </template>
84
+
85
+ <script setup lang="ts">
86
+ import { ref } from 'vue'
87
+
88
+ const workflowRef = ref()
89
+
90
+ // 初始化回调
91
+ const onInitWorkflow = (modeler) => {
92
+ console.log('工作流编辑器初始化完成', modeler)
93
+ }
94
+
95
+ // 获取工作流XML
96
+ const getXml = async () => {
97
+ const xml = await workflowRef.value?.getWorkflowXml()
98
+ console.log(xml)
99
+ }
100
+
101
+ // 导入工作流XML
102
+ const importXml = (xml) => {
103
+ workflowRef.value?.initXmlToStore(xml)
104
+ }
105
+ </script>
106
+ ```
107
+
108
+ ## 核心功能
109
+
110
+ ### 工作流设计器
111
+
112
+ 提供基于BPMN.js的可视化流程设计器,支持拖拽式流程设计。
113
+
114
+ ### 表单权限配置
115
+
116
+ 支持为工作流各节点配置表单字段的权限(编辑、只读、隐藏)。
117
+
118
+ ### 电子签章管理
119
+
120
+ 支持配置电子签章的位置、样式和触发条件。
121
+
122
+ ### 国际化支持
123
+
124
+ 内置中文和英文语言包,支持多语言配置。
125
+
126
+ ## API文档
127
+
128
+ ### 属性
129
+
130
+ | 属性名 | 类型 | 默认值 | 说明 |
131
+ |-------|------|-------|------|
132
+ | mode | string | 'normal' | 工作流模式,可选值:'normal'(编辑模式)、'preview'(预览模式) |
133
+ | height | string | '' | 工作流设计器高度,为空时自动计算 |
134
+
135
+ ### 事件
136
+
137
+ | 事件名 | 参数 | 说明 |
138
+ |-------|------|------|
139
+ | init | modeler | 工作流编辑器初始化完成时触发 |
140
+
141
+ ### 方法
142
+
143
+ | 方法名 | 参数 | 返回值 | 说明 |
144
+ |-------|------|-------|------|
145
+ | getWorkflowXml | - | Promise\<string\> | 获取当前工作流的XML定义 |
146
+ | initXmlToStore | xml: string | Promise\<void\> | 导入工作流XML定义 |
147
+ | updateProcessId | processId: string | void | 更新流程ID |
148
+ | getPermissionJSON | - | PermissionJSONLike | 获取表单权限配置 |
149
+ | setPermissionByFields | permissonJSON: PermissionJSONLike, fields: FieldItemType[] | void | 设置表单权限配置 |
150
+ | updatePermFields | fields: FieldItemType[] | void | 更新表单字段列表 |
151
+ | getEsignJSON | - | EsignJSONLike | 获取电子签章配置 |
152
+ | setEsignConfig | esignJSON: EsignJSONLike | void | 设置电子签章配置 |
153
+
154
+ ### 插槽
155
+
156
+ | 插槽名 | 参数 | 说明 |
157
+ |-------|------|------|
158
+ | TOOLBAR_PREFIX | - | 工具栏前置内容 |
159
+ | TOOLBAR_SUFFIX | - | 工具栏后置内容 |
160
+ | USER_CHOOSER_SUFFIX | { userId, onChange } | 用户选择器自定义渲染 |
161
+ | FORMID_CHOOSER_SUFFIX | { formFieldId, onChange } | 表单字段选择器自定义渲染 |
162
+
163
+ ## 工作流架构
164
+
165
+ ```mermaid
166
+ flowchart TD
167
+ A[工作流组件] --> B[BPMN编辑器]
168
+ A --> C[属性面板]
169
+ A --> D[工具栏]
170
+
171
+ B --> E[Activiti引擎]
172
+ B --> F[自定义画板]
173
+
174
+ C --> G[节点属性]
175
+ C --> H[表单权限]
176
+ C --> I[电子签章]
177
+
178
+ G --> J[基础属性]
179
+ G --> K[监听器]
180
+
181
+ H --> L[字段权限]
182
+ H --> M[条件配置]
183
+
184
+ D --> N[保存/导出]
185
+ D --> O[放大/缩小]
186
+ D --> P[对齐工具]
187
+ ```
188
+
189
+ ## 使用示例
190
+
191
+ ### 基础工作流设计
192
+
193
+ ```vue
194
+ <template>
195
+ <sz-workflow ref="workflowRef"></sz-workflow>
196
+ <button @click="saveWorkflow">保存流程</button>
197
+ </template>
30
198
 
31
- ```html
32
- <sz-workflow></sz-workflow>
199
+ <script setup>
200
+ import { ref } from 'vue'
201
+
202
+ const workflowRef = ref()
203
+
204
+ const saveWorkflow = async () => {
205
+ const xml = await workflowRef.value?.getWorkflowXml()
206
+ console.log('流程定义XML:', xml)
207
+ // 保存到服务器的代码
208
+ }
209
+ </script>
33
210
  ```
34
211
 
212
+ ### 表单权限配置
213
+
214
+ ```typescript
215
+ // 字段列表
216
+ const fields = [
217
+ { id: 'field1', name: '姓名' },
218
+ { id: 'field2', name: '部门' },
219
+ { id: 'field3', name: '职位' }
220
+ ]
221
+
222
+ // 权限配置
223
+ const permissions = {
224
+ createFieldPermission: {
225
+ assigneeFieldPermissionMap: [
226
+ { key: 'field1', fieldId: 'field1', fieldName: '姓名', permission: 'EDITABLE' },
227
+ { key: 'field2', fieldId: 'field2', fieldName: '部门', permission: 'EDITABLE' },
228
+ { key: 'field3', fieldId: 'field3', fieldName: '职位', permission: 'EDITABLE' }
229
+ ],
230
+ othersFieldPermissionMap: [
231
+ { key: 'field1', fieldId: 'field1', fieldName: '姓名', permission: 'ALL_READ_ONLY' },
232
+ { key: 'field2', fieldId: 'field2', fieldName: '部门', permission: 'ALL_READ_ONLY' },
233
+ { key: 'field3', fieldId: 'field3', fieldName: '职位', permission: 'HIDDEN' }
234
+ ]
235
+ },
236
+ taskToFieldPermissionMap: {
237
+ 'Activity_1': {
238
+ assigneeFieldPermissionMap: [
239
+ { key: 'field1', fieldId: 'field1', fieldName: '姓名', permission: 'EDITABLE' }
240
+ ],
241
+ othersFieldPermissionMap: [
242
+ { key: 'field1', fieldId: 'field1', fieldName: '姓名', permission: 'ALL_READ_ONLY' }
243
+ ]
244
+ }
245
+ }
246
+ }
247
+
248
+ // 设置权限
249
+ workflowRef.value?.setPermissionByFields(permissions, fields)
250
+ ```
251
+
252
+ ## 项目开发
253
+
254
+ ### 本地开发
255
+
256
+ ```bash
257
+ # 安装依赖
258
+ pnpm install
259
+
260
+ # 启动开发服务器
261
+ pnpm dev
262
+
263
+ # 构建
264
+ pnpm build
265
+
266
+ # 发布
267
+ pnpm release
268
+ ```
269
+
270
+ ### 代码规范
271
+
272
+ 项目使用 TypeScript 强类型检查,请确保所有代码通过类型检查。
273
+
274
+ ### 提交流程
275
+
276
+ 使用 commit-and-tag-version 进行版本管理,提交前请确保代码已通过测试。
277
+
278
+ ## 常见问题
279
+
280
+ ### Q: 为什么工作流编辑器无法保存?
281
+
282
+ A: 请检查是否调用了 `getWorkflowXml()` 方法获取XML内容,该方法返回Promise,需要使用 `await` 或 `.then()` 处理。
283
+
284
+ ### Q: 如何自定义节点图标?
285
+
286
+ A: 可以通过扩展 BPMN.js 的 PaletteProvider 来添加自定义节点。具体可参考 `packages/components/Workflow/palette/` 下的实现。
287
+
288
+ ### Q: 如何处理表单权限与后端的交互?
289
+
290
+ A: 可通过 `getPermissionJSON()` 获取权限配置JSON,然后发送至后端保存。加载时通过 `setPermissionByFields()` 方法恢复配置。
291
+
292
+ ## 参考文档
293
+
294
+ 1. [BPMN.js 官方文档](https://bpmn.io/toolkit/bpmn-js/)
295
+ 2. [Vue 3 组件开发指南](https://v3.vuejs.org/guide/component-basics.html)
296
+ 3. [Activiti 工作流引擎文档](https://www.activiti.org/documentation)
297
+ 4. [Vue 3 组合式 API 参考](https://v3.vuejs.org/api/composition-api.html)
298
+ 5. [Vite 构建工具文档](https://vitejs.dev/guide/)
299
+
35
300