# WorkFlow 工作流模块
WorkFlow 模块是 DarkM 框架的流程引擎模块,提供了完整的工作流管理系统。支持流程定义、任务管理、节点配置、流程代理、会签等功能,满足企业各种审批流程需求。
# 📋 模块概述
| 属性 | 说明 |
|---|---|
| 模块名称 | WorkFlow(工作流) |
| 模块类型 | 业务模块 |
| 依赖关系 | 依赖 Admin 模块、Common 模块 |
| 必需性 | 可选(审批流程必需) |
| Git 仓库 | framework/darkm/darkm (opens new window) |
# 🎯 核心功能
# 功能清单
| 功能分类 | 功能 | 说明 | 重要性 |
|---|---|---|---|
| 流程定义 | 流程管理 | 流程定义、版本管理 | ⭐⭐⭐⭐⭐ |
| 节点管理 | 流程节点配置 | ⭐⭐⭐⭐⭐ | |
| 路径管理 | 节点间流转路径 | ⭐⭐⭐⭐ | |
| 流程参数 | 流程参数配置 | ⭐⭐⭐⭐ | |
| 任务管理 | 任务管理 | 流程任务处理 | ⭐⭐⭐⭐⭐ |
| 任务提交 | 任务审批提交 | ⭐⭐⭐⭐⭐ | |
| 任务退回 | 任务退回到上节点 | ⭐⭐⭐⭐ | |
| 任务撤回 | 申请人撤回任务 | ⭐⭐⭐⭐ | |
| 流程控制 | 流程代理 | 任务代理处理 | ⭐⭐⭐⭐ |
| 会签管理 | 多节点会签 | ⭐⭐⭐⭐ | |
| 流程委托 | 任务委托处理 | ⭐⭐⭐ | |
| 消息通知 | 流程消息 | 流程通知消息 | ⭐⭐⭐⭐ |
| 消息队列 | 消息发送队列 | ⭐⭐⭐ |
# 📦 安装配置
# NuGet 包安装
Install-Package DarkM.Module.WorkFlow.Web -Version 1.0.0
1
# NPM 包安装
npm i -S darkm-module-workflow
1
# 配置文件
{
"Db": {
"Modules": [
{
"Name": "WorkFlow",
"Database": "Nm_WorkFlow",
"Prefix": ""
}
]
},
"WorkFlow": {
// 是否开启流程引擎
"Enable": true,
// 流程超时时间(分钟)
"TimeoutMinutes": 30,
// 是否开启流程代理
"EnableDelegation": true
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
配置说明:
| 配置项 | 说明 | 默认值 |
|---|---|---|
Enable | 是否开启流程引擎 | true |
TimeoutMinutes | 流程超时时间(分钟) | 30 |
EnableDelegation | 是否开启流程代理 | true |
# 🗄️ 数据库表结构
# 流程定义表
| 表名 | 说明 | 主键 |
|---|---|---|
Flow | 流程定义表 | Id (Guid) |
FlowParam | 流程参数表 | Id (long) |
FlowOperator | 流程操作员表 | Id (long) |
FlowDelegation | 流程代理表 | Id (long) |
# 节点配置表
| 表名 | 说明 | 主键 |
|---|---|---|
Node | 流程节点表 | Id (Guid) |
NodeAttribute | 节点属性表 | Id (long) |
NodeCountersign | 节点会签表 | Id (long) |
Path | 节点路径表 | Id (Guid) |
# 任务管理表
| 表名 | 说明 | 主键 |
|---|---|---|
Task | 流程任务表 | Id (Guid) |
TaskParam | 任务参数表 | Id (long) |
TaskKey | 任务密钥表 | Id (long) |
TaskQueue | 任务队列表 | Id (long) |
# 消息通知表
| 表名 | 说明 | 主键 |
|---|---|---|
ProcessMessage | 流程消息表 | Id (long) |
MessageSendQueue | 消息发送队列表 | Id (long) |
ProcessOperator | 流程操作员表 | Id (long) |
# 内部领用表
| 表名 | 说明 | 主键 |
|---|---|---|
InternalPickUpHeader | 内部领用主表 | Id (long) |
InternalPickUpDetail | 内部领用明细表 | Id (long) |
# 🔐 权限系统设计
# Controller 定义
# 1. 流程定义管理
using System;
using System.ComponentModel;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using DarkM.Lib.Auth.Web.Attributes;
using DarkM.Lib.Utils.Core.Models;
namespace DarkM.Module.WorkFlow.Web.Controllers
{
[Description("流程定义管理")]
public class FlowController : ModuleController
{
private readonly IFlowService _service;
public FlowController(IFlowService service)
{
_service = service;
}
[HttpGet]
[Description("查询")]
public Task<IResultModel> Query([FromQuery]FlowQueryModel model)
{
return _service.Query(model);
}
[HttpPost]
[Description("添加")]
public Task<IResultModel> Add(FlowAddModel model)
{
return _service.Add(model);
}
[HttpDelete]
[Description("删除")]
public Task<IResultModel> Delete([BindRequired]Guid id)
{
return _service.Delete(id);
}
[HttpGet]
[Description("编辑")]
public Task<IResultModel> Edit([BindRequired]Guid id)
{
return _service.Edit(id);
}
[HttpPost]
[Description("修改")]
public Task<IResultModel> Update(FlowUpdateModel model)
{
return _service.Update(model);
}
[HttpGet]
[Description("下拉列表")]
[Common(CommonPermissionType.All)]
public Task<IResultModel> Select()
{
return _service.Select();
}
[HttpGet]
[Description("流程版本下拉列表")]
[Common(CommonPermissionType.All)]
public Task<IResultModel> SelectVersion(int? flowNo)
{
return _service.SelectVersion(flowNo == null ? 0 : flowNo.Value);
}
[HttpPost]
[Description("发起任务")]
public async Task<IResultModel> Start(StartFlowModel model)
{
return await _service.Start(model.FlowNo, model.FlowVersion, model.Application);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 2. 任务管理
[Description("流程任务管理")]
public class TaskController : ModuleController
{
private readonly ITaskService _service;
public TaskController(ITaskService service)
{
_service = service;
}
[HttpGet]
[Description("查询")]
public Task<IResultModel> Query([FromQuery] TaskQueryModel model)
{
return _service.Query(model);
}
[HttpPost]
[Description("进入任务")]
public async Task<IResultModel> Enter(TaskCommitModel model)
{
return await _service.Enter(model.TaskId, model.OriginalHandler);
}
[HttpPost]
[Description("提交任务")]
public async Task<IResultModel> Submit(TaskCommitModel model)
{
return await _service.Submit(model.TaskId, model.OpinionMessage, model.OpinionType, model.OriginalHandler);
}
[HttpPost]
[Description("退档任务")]
public async Task<IResultModel> Rollback(TaskCommitModel model)
{
return await _service.Rollback(model);
}
[HttpPost]
[Description("撤回任务")]
public async Task<IResultModel> Revocation(TaskCommitModel model)
{
return await _service.Rollback(model, false, FlowTaskStatus.Revocation);
}
[HttpPost]
[Description("取消任务")]
public async Task<IResultModel> Cancel(TaskCommitModel model)
{
return await _service.Cancel(model.TaskId, model.OpinionMessage, model.OpinionType, model.OriginalHandler);
}
[HttpPost]
[Description("否决任务")]
public async Task<IResultModel> Reject(TaskCommitModel model)
{
return await _service.Reject(model.TaskId, model.OpinionMessage, model.OpinionType, model.OriginalHandler);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 权限解析结果
| 权限编码 | 说明 | 访问级别 |
|---|---|---|
workflow_flow_query_get | 流程定义 - 查询 | 需授权 |
workflow_flow_add_post | 流程定义 - 添加 | 需授权 |
workflow_flow_edit_get | 流程定义 - 编辑 | 需授权 |
workflow_flow_update_post | 流程定义 - 修改 | 需授权 |
workflow_flow_delete_delete | 流程定义 - 删除 | 需授权 |
workflow_flow_start_post | 流程定义 - 发起任务 | 需授权 |
workflow_task_query_get | 任务管理 - 查询 | 需授权 |
workflow_task_enter_post | 任务管理 - 进入任务 | 需授权 |
workflow_task_submit_post | 任务管理 - 提交任务 | 需授权 |
workflow_task_rollback_post | 任务管理 - 退档任务 | 需授权 |
workflow_task_revocation_post | 任务管理 - 撤回任务 | 需授权 |
workflow_task_cancel_post | 任务管理 - 取消任务 | 需授权 |
workflow_task_reject_post | 任务管理 - 否决任务 | 需授权 |
# 🎨 核心功能详解
# 一、流程定义管理
# 1. 流程实体
[Table("Flow")]
public partial class FlowEntity : EntityBase
{
/// <summary>
/// 流程编号
/// </summary>
public int FlowNo { get; set; }
/// <summary>
/// 流程版本
/// </summary>
public int FlowVersion { get; set; }
/// <summary>
/// 流程名称
/// </summary>
[Length(100)]
public string FlowName { get; set; }
/// <summary>
/// 流程编码
/// </summary>
[Length(50)]
public string FlowCode { get; set; }
/// <summary>
/// 流程状态
/// </summary>
public FlowStatus Status { get; set; }
/// <summary>
/// 流程版本状态
/// </summary>
public FlowVersionStatus VersionStatus { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 2. 流程状态枚举
public enum FlowStatus
{
/// <summary>
/// 草稿
/// </summary>
Draft = 0,
/// <summary>
/// 已发布
/// </summary>
Published = 1,
/// <summary>
/// 已停用
/// </summary>
Disabled = 2
}
public enum FlowVersionStatus
{
/// <summary>
/// 无效版本
/// </summary>
Invalid = 0,
/// <summary>
/// 有效版本
/// </summary>
Valid = 1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 二、任务管理
# 1. 任务操作类型
public enum OpinionType
{
/// <summary>
/// 同意
/// </summary>
Agree = 0,
/// <summary>
/// 驳回
/// </summary>
Reject = 1,
/// <summary>
/// 退回
/// </summary>
Rollback = 2,
/// <summary>
/// 撤回
/// </summary>
Revocation = 3,
/// <summary>
/// 取消
/// </summary>
Cancel = 4,
/// <summary>
/// 否决
/// </summary>
Veto = 5
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 2. 任务提交模型
public class TaskCommitModel
{
/// <summary>
/// 任务 ID
/// </summary>
[Required]
public Guid TaskId { get; set; }
/// <summary>
/// 审批意见
/// </summary>
[Length(500)]
public string OpinionMessage { get; set; }
/// <summary>
/// 意见类型
/// </summary>
public OpinionType OpinionType { get; set; }
/// <summary>
/// 原始处理人
/// </summary>
[Length(100)]
public string OriginalHandler { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 三、流程代理
# 1. 代理配置
public class FlowDelegation
{
/// <summary>
/// 委托人
/// </summary>
public string Delegator { get; set; }
/// <summary>
/// 代理人
/// </summary>
public string Delegate { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime StartTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime EndTime { get; set; }
/// <summary>
/// 代理流程号
/// </summary>
public int? FlowNo { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 🔧 核心服务接口
# IFlowService(流程定义服务)
public interface IFlowService
{
/// <summary>
/// 查询流程列表
/// </summary>
Task<IResultModel> Query(FlowQueryModel model);
/// <summary>
/// 添加流程
/// </summary>
Task<IResultModel> Add(FlowAddModel model);
/// <summary>
/// 删除流程
/// </summary>
Task<IResultModel> Delete(Guid id);
/// <summary>
/// 编辑流程
/// </summary>
Task<IResultModel> Edit(Guid id);
/// <summary>
/// 修改流程
/// </summary>
Task<IResultModel> Update(FlowUpdateModel model);
/// <summary>
/// 加载流程配置
/// </summary>
Task<IList<IFlow>> Load(bool reload = false, int? flowNo = null);
/// <summary>
/// 获取当前有效流程版本
/// </summary>
Task<IFlow> GetCurrentFlow(int flowNo, int? flowVersion = null);
/// <summary>
/// 获取流程代理
/// </summary>
Task<IList<IFlowDelegation>> GetDelegation(FlowDelegationQueryBaseModel model);
/// <summary>
/// 获取下拉列表
/// </summary>
Task<IResultModel> Select();
/// <summary>
/// 获取流程版本列表
/// </summary>
Task<IResultModel> SelectVersion(int flowNo);
/// <summary>
/// 发起新流程
/// </summary>
Task<IResultModel<IWorkQueue>> Start(int flowNo, int? flowVersion = null, string application = null, bool isService = false);
/// <summary>
/// 导出
/// </summary>
Task<IResultModel<ExcelExportResultModel>> Export(FlowQueryModel model);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# ITaskService(任务服务)
public interface ITaskService
{
/// <summary>
/// 查询任务列表
/// </summary>
Task<IResultModel> Query(TaskQueryModel model);
/// <summary>
/// 加载任务
/// </summary>
Task<IResultModel> LoadTask(Guid taskId);
/// <summary>
/// 进入任务
/// </summary>
Task<IResultModel> Enter(Guid taskId, string originalHandler);
/// <summary>
/// 提交任务
/// </summary>
Task<IResultModel> Submit(Guid taskId, string opinionMessage, OpinionType opinionType, string originalHandler);
/// <summary>
/// 退档任务
/// </summary>
Task<IResultModel> Rollback(TaskCommitModel model);
/// <summary>
/// 强制退档
/// </summary>
Task<IResultModel> RollbackForce(TaskCommitModel model);
/// <summary>
/// 撤回任务
/// </summary>
Task<IResultModel> Revocation(TaskCommitModel model);
/// <summary>
/// 取消任务
/// </summary>
Task<IResultModel> Cancel(Guid taskId, string opinionMessage, OpinionType opinionType, string originalHandler);
/// <summary>
/// 否决任务
/// </summary>
Task<IResultModel> Reject(Guid taskId, string opinionMessage, OpinionType opinionType, string originalHandler);
/// <summary>
/// 获取驳回目标节点列表
/// </summary>
Task<IResultModel> RollbackNodeSelect(Guid taskId, bool keyIsNodeNo = true, bool showNodeNo = true);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 🖥️ 前端组件说明
# NPM 包信息
{
"name": "darkm-module-workflow",
"version": "1.5.0-beta-3.0",
"code": "workFlow",
"title": "流程引擎",
"dependencies": {
"d3": "^6.5.0",
"darkm-module-admin": "^1.5.0-beta-2.0",
"darkm-module-common": "^1.5.0-beta-2.0",
"darkm-ui": "^1.5.0-beta-2.0"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 组件目录结构
src/UI/module-workflow/
├── src/
│ ├── views/ # 页面组件
│ │ ├── flow/ # 流程管理
│ │ ├── task/ # 任务管理
│ │ ├── node/ # 节点管理
│ │ └── ...
│ └── components/ # 通用组件
│ ├── flow-select/ # 流程选择器
│ ├── flow-version-select/ # 流程版本选择器
│ ├── node-select/ # 节点选择器
│ ├── node-tree-select/ # 节点树选择器
│ ├── task-turn-over/ # 任务移交
│ ├── task-countersign/ # 任务会签
│ ├── task-rollback-node-select/ # 退档节点选择
│ └── flow-delegation-* # 流程代理相关
└── package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 📦 通用组件详解
# 1. FlowSelect 流程选择器
组件路径: components/flow-select
功能: 下拉选择流程
使用示例:
<template>
<flow-select v-model="flowId" />
</template>
<script>
import { components } from 'darkm-module-workflow'
const { FlowSelect } = components
export default {
components: { FlowSelect },
data() {
return {
flowId: ''
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Props 参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
value | String | 否 | - | 选中的流程 ID(v-model) |
disabled | Boolean | 否 | false | 是否禁用 |
Events 事件:
| 事件名 | 参数 | 说明 |
|---|---|---|
input | (value: String) | 选中值变化时触发(v-model) |
change | (value: String, data: Object) | 选中值变化时触发,返回完整数据 |
特点:
- ✅ 支持缓存(clientCacheKey: 'select-cache-workflow-flow')
- ✅ 基于 mixins.select
# 2. FlowVersionSelect 流程版本选择器
组件路径: components/flow-version-select
功能: 下拉选择流程版本
使用示例:
<template>
<flow-version-select
v-model="flowVersion"
:flowNo="flowNo"
/>
</template>
<script>
import { components } from 'darkm-module-workflow'
const { FlowVersionSelect } = components
export default {
components: { FlowVersionSelect },
data() {
return {
flowVersion: '',
flowNo: 1
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Props 参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
value | Number | 否 | - | 选中的流程版本(v-model) |
flowNo | Number | 是 | - | 流程编号 |
disabled | Boolean | 否 | false | 是否禁用 |
Events 事件:
| 事件名 | 参数 | 说明 |
|---|---|---|
input | (value: Number) | 选中值变化时触发 |
change | (value: Number, data: Object) | 选中值变化时触发 |
# 3. NodeSelect 节点选择器
组件路径: components/node-select
功能: 下拉选择流程节点
使用示例:
<template>
<node-select
v-model="nodeId"
:flowNo="flowNo"
/>
</template>
<script>
import { components } from 'darkm-module-workflow'
const { NodeSelect } = components
export default {
components: { NodeSelect },
data() {
return {
nodeId: '',
flowNo: 1
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Props 参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
value | String | 否 | - | 选中的节点 ID(v-model) |
flowNo | Number | 是 | - | 流程编号 |
disabled | Boolean | 否 | false | 是否禁用 |
Events 事件:
| 事件名 | 参数 | 说明 |
|---|---|---|
input | (value: String) | 选中值变化时触发 |
change | (value: String, data: Object) | 选中值变化时触发 |
# 4. TaskCountersign 任务会签
组件路径: components/task-countersign
功能: 任务会签处理,支持多人会签
使用示例:
<template>
<task-countersign
:taskId="taskId"
@complete="handleComplete"
/>
</template>
<script>
import { components } from 'darkm-module-workflow'
const { TaskCountersign } = components
export default {
components: { TaskCountersign },
data() {
return {
taskId: 'xxx'
}
},
methods: {
handleComplete() {
console.log('会签完成')
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Props 参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
taskId | String | 是 | - | 任务 ID |
disabled | Boolean | 否 | false | 是否禁用 |
Events 事件:
| 事件名 | 参数 | 说明 |
|---|---|---|
complete | - | 会签完成时触发 |
子组件:
replay- 会签回复组件
# 5. TaskRollbackNodeSelect 退档节点选择器
组件路径: components/task-rollback-node-select
功能: 选择退档的目标节点
使用示例:
<template>
<task-rollback-node-select
v-model="targetNodeId"
:taskId="taskId"
/>
</template>
<script>
import { components } from 'darkm-module-workflow'
const { TaskRollbackNodeSelect } = components
export default {
components: { TaskRollbackNodeSelect },
data() {
return {
targetNodeId: '',
taskId: 'xxx'
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Props 参数:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
value | String/Number | 否 | - | 选中的节点 ID(v-model) |
taskId | String | 是 | - | 任务 ID |
keyIsNodeNo | Boolean | 否 | true | key 是否使用节点编号 |
showNodeNo | Boolean | 否 | true | 是否显示节点编号 |
disabled | Boolean | 否 | false | 是否禁用 |
Events 事件:
| 事件名 | 参数 | 说明 |
|---|---|---|
input | (value: String/Number) | 选中值变化时触发 |
change | (value: String/Number, data: Object) | 选中值变化时触发 |
# 📋 组件使用注意事项
# 1. 组件引入方式
// 方式一:引入单个组件
import { components } from 'darkm-module-workflow'
const { FlowSelect, TaskCountersign } = components
// 方式二:全局注册
import WorkFlow from 'darkm-module-workflow'
Vue.use(WorkFlow)
1
2
3
4
5
6
7
2
3
4
5
6
7
# 2. v-model 双向绑定
所有选择器组件都支持 v-model 双向绑定:
<!-- 推荐用法 -->
<flow-select v-model="flowId" />
<!-- 等价于 -->
<flow-select
:value="flowId"
@input="flowId = $event"
/>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 3. 级联选择
多个选择器可以级联使用:
<template>
<div>
<flow-select v-model="flowId" />
<flow-version-select v-model="flowVersion" :flowNo="flowId" />
<node-select v-model="nodeId" :flowNo="flowId" />
</div>
</template>
1
2
3
4
5
6
7
2
3
4
5
6
7
# 4. 数据格式
所有组件返回的数据格式:
- 单选: 返回 ID(String/Number)
- change 事件: 返回
(value, data),data 为完整对象
# 5. 组件依赖
WorkFlow 模块依赖以下模块:
darkm-module-admin- 权限管理darkm-module-common- 通用模块darkm-ui- UI 组件库d3- 流程图绘制库
确保先安装依赖:
npm install darkm-module-admin --registry http://npm.woowis.com
npm install darkm-module-common --registry http://npm.woowis.com
npm install darkm-ui --registry http://npm.woowis.com
npm install d3 --registry http://npm.woowis.com
1
2
3
4
2
3
4
# 🔍 常见问题
# 1. 流程无法启动
问题: 点击发起任务报错
解决:
# 检查流程是否已发布
# 检查流程版本是否有效
# 检查申请人是否有权限
# 查看详细错误日志
tail -f logs/workflow.log
1
2
3
4
5
6
2
3
4
5
6
# 2. 任务提交失败
问题: 提交任务时提示错误
解决:
- 检查任务状态是否正确
- 检查当前处理人是否匹配
- 检查必填字段是否完整
- 查看后端日志错误信息
# 3. 流程图无法显示
问题: 流程图加载失败
解决:
# 检查 d3 库是否正确安装
npm list d3
# 检查流程节点数据是否完整
# 检查前端控制台错误信息
1
2
3
4
5
2
3
4
5
# 4. 流程代理不生效
问题: 设置了代理但任务未转交
解决:
- 检查代理时间范围是否有效
- 检查代理流程配置是否正确
- 检查代理人账户状态是否正常
- 清除缓存后重试
# 📚 相关文档
- Admin 权限管理 - 权限配置
- Common 通用模块 - 通用功能
- Message 消息服务 - 消息通知
- 系统架构 - 整体架构
# 🔗 参考链接
- 工作流引擎最佳实践 (opens new window)
- BPMN 2.0 规范 (opens new window)
- ASP.NET Core 工作流 (opens new window)
- GitLab 仓库 (opens new window)
最后更新: 2026-03-20