!88 合并flowable工作流功能
* merge 合并dev * add 添加抄送查询 * add 添加我的已办 * add 添加抄送 * add 添加附件下载 * update 优化类型 * Merge remote-tracking branch 'origin/future/flowable' into future/flowable * fix 修复 流程设计器打包部署报错问题 * add 添加审批附件上传 * update 修复固定值未在xml显示问题 * update 修复跳转条件回显Object问题 * update 优化面板文件名称 * update 调整key * remove 移除旧设计器,添加xml保存 * update 增加任务面板提示 * update 优化xml预览和svg预览 * update 优化xml预览和svg预览 * update 优化模型设计 * update 优化设计器 * update 优化设计器 * update 优化设计器 * update 删除旧设计器 * update 删除console.log * add 添加模型接口 * update 优化预览xml和svg样式被修改问题 * update 优化属性面板,增加展开动画 * update 去除开发模式 * update 优化任务栏样式 * update 优化图标渲染样式 * update 增加BpmnFactory类型 * update 增加BpmnFactory * update 移除users和group * update 移除无用类型 * update 优化页面类型 * update 去除多余属性 * update 完善流程线 * update 增加复杂网关 * update 完善流程 * update 完善网关 * update 优化网关汉化 * update 优化过期时间选择 * update 支持多实例 * update 增加类容提示 * update 支持选择组 * update 新增角色api * update 优化roleSelect 选中未确定,再次打开还保留选中的问题 * update 优化userSelect 选中未确定,再次打开还保留选中的问题 * update 优化userSelect 选中未确定,再次打开还保留选中的问题 * update 去掉modeler store多余属性 bpmnModel * update 优化属性面板,当面板未选中时默认展示流程面板 * update 优化TaskPanel类型,去掉roles属性 * update 优化用户api * update 优化用户选择器 * update 优化执行监听器 * update 优化任务监听器 * update 优化usePanel方法 * update 选人优化 * update 增加扩展节点信息 * update 增加usePanel默认方法 * update 去除处理事件 * update 扩展flowable userinfo属性 * update 全局modeler 改为非响应式 * update 增加hooks方法 * update 修改命名 * update 修改面板formData来源 * update 重写用户任务面板选择逻辑 * update 重写用户任务面板选择逻辑 * update 修改用户选择组件获取数据逻辑 * update 修改枚举类型 * update 修改默认配置列 * update 增加修改节点方法 * update 调整预览窗口大小 * update 优化用户选择组件 返回值 * update 优化用户选择组件 * update 新增通过ids 获取用户信息 * update 重写task面板选人 未完成 * update 升级用户选择 支持多选配置 * update 升级bpmnjs依赖版本 * update 增加useDialog类型 * update 调整全局样式 * update 代码高亮设置 * update 优化领用,归还加载 * update 增加选择角色 * update 新增角色选择组件 * update 新增过期时间选择组件 * update 调整任务面板样式 * update 调整全局dialog header 增加分割线 * update 代码高亮设置 * update 调整面板位置 * update 封装用户选择组件 * update 移除所有的节点描述 * update 删除分类 * update 调整面板位置 * update 修改命名,增加自定义渲染 * update 修改命名,增加自定义渲染 * update 增加 Element类型定义 * update 调整样式 * update 移除bpmn panel依赖,升级bpmn.js依赖到最新,修改汉化包 * update 调整类型声明文件 * update 调整类型声明文件 * update 优化面板工具 * update 优化面板工具 * Merge remote-tracking branch 'origin/future/flowable' into future/flowable * update 优化面板工具 * Merge branch 'future/flowable' of https://gitee.com/JavaLionLi/plus-ui… * add 添加修改办理人 * update 优化面板工具 * update 初始化流程数据 * Merge remote-tracking branch 'origin/future/flowable' into future/flowable * add 流程设计面板 * update 调整初始化xml * add 任务面板 * add 新增bpmn.js * update 优化request请求类判断请求头方式 * update 流程定义预览 优化 * update 流程定义预览 优化 * update 去掉console.log * update 优化工作流代码 * fix 修复待办任务 重置查询条件失效问题 * add 增加待办任务 接口类型,优化页面 * add 增加vite 启动预编译css * fix 修复i18n无感刷新问题 * Merge branch 'dev' into future/flowable * update 调整选择请假事件 * Merge branch 'dev' into future/flowable * 同步dev代码 * Merge branch 'dev' into future/flowable * 合并dev * remove 设计器无用代码 调整请假查询 * update 调整请假申请 * update 移动请假表单包结构,调整设计器选择引用表单请求错误 * remove 移除动态表单 * update 调整流程办理 * Merge branch 'dev' into future/flowable * Merge branch 'dev' into future/flowable * Merge branch 'dev' into future/flowable * Merge branch 'dev' into future/flowable * 合并 * update 调整请假申请流程提交 * update 修改业务单据流程提交 * update 调整业务单据流程提交 * 优化代码 * 优化工作流代码缩进 * 项目格式化配置修改 * 调整代码缩进 * Merge branch 'ts' into future/flowable * add 添加动态表单提交流程 * add 添加动态表单单据 * add 新增流程定义与表单关联 * update 调整点击左侧部门查询人员,部门刷新问题 * update 调整按钮图标 * 调整错别字 * update 调整流程定义图片预览 * add 添加流程实例迁移版本 * fix 修复我的单据无法提交问题 * Merge branch 'ts' into future/flowable * remove 还原代码后端解决 * update 流程设计器中分配发起人变量错误,先移除 * fix 修复设计器无法编辑问题 * update 调整设计器请求头 * Merge branch 'ts' into future/flowable * Merge branch 'ts' into future/flowable * add 添加流程定义历史列表 * update 审批记录v2改为v3 * update 调整请假必填项 * add 添加请假申请示例,添加流程定义文件部署 * update 移除流程表单 formConfig 属性,表单配置信息都放一起便于使用。 * add 添加任务加签,减签 * update 调整流程作废 * update 优化流程状态 * add 添加任务驳回 * add 添加查询当前租户所有待办,已办任务 * add 增加审批意见 * add 添加流程办理弹窗确认组件 * add 添加任务作废理由 * update 调整流程实例,流程定义检索 * add 添加我的单据页面 * add 添加任务归还认领 * add 添加流程实例,流程定义分类查询 * add 添加模型分类查询 * add 添加流程分类 * Merge remote-tracking branch 'origin/future/flowable' into future/flowable * add 添加流程表单管理页面 * add 集成vForm动态表单组件 * update xml调整超出滚动 * add 添加已办列表 * add 添加单据状态 * update 优化流程实例删除 * fix 修复流程实例查询挂起状态错误 * update 调整流程实例挂起激活状态 * add 添加流程实例列表 * update 调整流程定义弹窗提示 * add 添加流程定义列表,添加流程图,xml预览,添加简单流程启动,办理 * 调整审批记录悬浮逻辑 * 删除无用代码 * add 添加节点悬浮信息 * 调整流程预览 * 调整流程追踪 * add 添加审批记录 * add 模型设计的types * update 修改排版 * add lang=ts * update 修改ele的废弃api * fix调整审批记录图片不显示问题 * add 添加任务待办,流程图 * 调整设计器关闭 * add 添加待办 * remove 删除无用代码 * update types * 添加模型token验证 * 隐藏设计器验证按钮,隐藏表单,案例,应用程序等 * 添加模型部署 * 添加画图接口token,优化画图接口 * 添加工作流模型新增,修改,查询,删除,画图工具
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
function generateRandomValue() {
|
||||
// 生成一个随机数
|
||||
const randomValue = Math.random().toString(36).slice(2, 12);
|
||||
return `Process_${randomValue}`;
|
||||
}
|
||||
|
||||
const cartage: string = 'default';
|
||||
export default `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:bioc="http://bpmn.io/schema/bpmn/biocolor/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" targetNamespace="http://www.flowable.org/processdef">
|
||||
<process id="process_${generateRandomValue()}" name="name_${generateRandomValue()}">
|
||||
<startEvent id="startNode1" name="开始" />
|
||||
</process>
|
||||
<bpmndi:BPMNDiagram id="BPMNDiagram_flow">
|
||||
<bpmndi:BPMNPlane id="BPMNPlane_flow" bpmnElement="T-2d89e7a3-ba79-4abd-9f64-ea59621c258c">
|
||||
<bpmndi:BPMNShape id="BPMNShape_startNode1" bpmnElement="startNode1" bioc:stroke="">
|
||||
<omgdc:Bounds x="240" y="200" width="30" height="30" />
|
||||
<bpmndi:BPMNLabel>
|
||||
<omgdc:Bounds x="242" y="237" width="23" height="14" />
|
||||
</bpmndi:BPMNLabel>
|
||||
</bpmndi:BPMNShape>
|
||||
</bpmndi:BPMNPlane>
|
||||
</bpmndi:BPMNDiagram>
|
||||
</definitions>`;
|
||||
@@ -0,0 +1,118 @@
|
||||
export const NodeName = {
|
||||
'bpmn:Process': '流程',
|
||||
'bpmn:StartEvent': '开始事件',
|
||||
'bpmn:IntermediateThrowEvent': '中间事件',
|
||||
'bpmn:Task': '任务',
|
||||
'bpmn:SendTask': '发送任务',
|
||||
'bpmn:ReceiveTask': '接收任务',
|
||||
'bpmn:UserTask': '用户任务',
|
||||
'bpmn:ManualTask': '手工任务',
|
||||
'bpmn:BusinessRuleTask': '业务规则任务',
|
||||
'bpmn:ServiceTask': '服务任务',
|
||||
'bpmn:ScriptTask': '脚本任务',
|
||||
'bpmn:EndEvent': '结束事件',
|
||||
'bpmn:SequenceFlow': '流程线',
|
||||
'bpmn:ExclusiveGateway': '互斥网关',
|
||||
'bpmn:ParallelGateway': '并行网关',
|
||||
'bpmn:InclusiveGateway': '相容网关',
|
||||
'bpmn:ComplexGateway': '复杂网关',
|
||||
'bpmn:EventBasedGateway': '事件网关'
|
||||
};
|
||||
|
||||
export default {
|
||||
'Activate hand tool': '启动手动工具',
|
||||
'Activate lasso tool': '启动 Lasso 工具',
|
||||
'Activate create/remove space tool': '启动创建/删除空间工具',
|
||||
'Activate global connect tool': '启动全局连接工具',
|
||||
'Ad-hoc': 'Ad-hoc',
|
||||
'Add lane above': '在上方添加泳道',
|
||||
'Add lane below': '在下方添加泳道',
|
||||
'Business rule task': '规则任务',
|
||||
'Call activity': '引用流程',
|
||||
'Compensation end event': '结束补偿事件',
|
||||
'Compensation intermediate throw event': '中间补偿抛出事件',
|
||||
'Complex gateway': '复杂网关',
|
||||
'Conditional intermediate catch event': '中间条件捕获事件',
|
||||
'Conditional start event (non-interrupting)': '条件启动事件 (非中断)',
|
||||
'Conditional start event': '条件启动事件',
|
||||
'Connect using association': '文本关联',
|
||||
'Connect using sequence/message flow or association': '消息关联',
|
||||
'Change element': '更改元素',
|
||||
'Change type': '更改类型',
|
||||
'Create data object reference': '创建数据对象引用',
|
||||
'Create data store reference': '创建数据存储引用',
|
||||
'Create expanded sub-process': '创建可折叠子流程',
|
||||
'Create pool/participant': '创建池/参与者',
|
||||
'Collection': '集合',
|
||||
'Connect using data input association': '数据输入关联',
|
||||
'Data store reference': '数据存储引用',
|
||||
'Data object reference': '数据对象引用',
|
||||
'Divide into two lanes': '分成两个泳道',
|
||||
'Divide into three lanes': '分成三个泳道',
|
||||
'End event': '结束事件',
|
||||
'Error end event': '结束错误事件',
|
||||
'Escalation end event': '结束升级事件',
|
||||
'Escalation intermediate throw event': '中间升级抛出事件',
|
||||
'Event sub-process': '事件子流程',
|
||||
'Event-based gateway': '事件网关',
|
||||
'Exclusive gateway': '互斥网关',
|
||||
'Empty pool/participant (removes content)': '清空池/参与者 (删除内容)',
|
||||
'Inclusive gateway': '相容网关',
|
||||
'Intermediate throw event': '中间抛出事件',
|
||||
'Loop': '循环',
|
||||
'Link intermediate catch event': '中间链接捕获事件',
|
||||
'Link intermediate throw event': '中间链接抛出事件',
|
||||
'Manual task': '手动任务',
|
||||
'Message end event': '结束消息事件',
|
||||
'Message intermediate catch event': '中间消息捕获事件',
|
||||
'Message intermediate throw event': '中间消息抛出事件',
|
||||
'Message start event': '消息启动事件',
|
||||
'Parallel gateway': '并行网关',
|
||||
'Parallel multi-instance': '并行多实例',
|
||||
'Participant multiplicity': '参与者多重性',
|
||||
'Receive task': '接受任务',
|
||||
'Remove': '移除',
|
||||
'Script task': '脚本任务',
|
||||
'Send task': '发送任务',
|
||||
'Sequential multi-instance': '串行多实例',
|
||||
'Service task': '服务任务',
|
||||
'Signal end event': '结束信号事件',
|
||||
'Signal intermediate catch event': '中间信号捕获事件',
|
||||
'Signal intermediate throw event': '中间信号抛出事件',
|
||||
'Signal start event (non-interrupting)': '信号启动事件 (非中断)',
|
||||
'Signal start event': '信号启动事件',
|
||||
'Start event': '开始事件',
|
||||
'Sub-process (collapsed)': '可折叠子流程',
|
||||
'Sub-process (expanded)': '可展开子流程',
|
||||
'Sub rocess': '子流程',
|
||||
'Task': '任务',
|
||||
'Transaction': '事务',
|
||||
'Terminate end event': '终止边界事件',
|
||||
'Timer intermediate catch event': '中间定时捕获事件',
|
||||
'Timer start event (non-interrupting)': '定时启动事件 (非中断)',
|
||||
'Timer start event': '定时启动事件',
|
||||
'User task': '用户任务',
|
||||
'Create start event': '创建开始事件',
|
||||
'Create gateway': '创建网关',
|
||||
'Create intermediate/boundary event': '创建中间/边界事件',
|
||||
'Create end event': '创建结束事件',
|
||||
'Create group': '创建组',
|
||||
'Create startEvent': '开始节点',
|
||||
'Create endEvent': '结束节点',
|
||||
'Create exclusiveGateway': '互斥网关',
|
||||
'Create parallelGateway': '并行网关',
|
||||
'Create task': '任务节点',
|
||||
'Create userTask': '用户任务节点',
|
||||
'Condition type': '条件类型',
|
||||
'Append end event': '追加结束事件节点',
|
||||
'Append gateway': '追加网关节点',
|
||||
'Append task': '追加任务',
|
||||
'Append user task': '追加用户任务节点',
|
||||
'Append text annotation': '追加文本注释',
|
||||
'Append intermediate/boundary event': '追加中间或边界事件',
|
||||
'Append receive task': '追加接收任务节点',
|
||||
'Append message intermediate catch event': '追加中间消息捕获事件',
|
||||
'Append timer intermediate catch event': '追加中间定时捕获事件',
|
||||
'Append conditional intermediate catch event': '追加中间条件捕获事件',
|
||||
'Append signal intermediate catch event': '追加中间信号捕获事件'
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,138 @@
|
||||
import ContextPadProvider from 'bpmn-js/lib/features/context-pad/ContextPadProvider';
|
||||
import { Injector } from 'didi';
|
||||
import EventBus from 'diagram-js/lib/core/EventBus';
|
||||
import ContextPad from 'diagram-js/lib/features/context-pad/ContextPad';
|
||||
import Modeling from 'bpmn-js/lib/features/modeling/Modeling.js';
|
||||
import ElementFactory from 'bpmn-js/lib/features/modeling/ElementFactory';
|
||||
import Connect from 'diagram-js/lib/features/connect/Connect';
|
||||
import Create from 'diagram-js/lib/features/create/Create';
|
||||
import PopupMenu from 'diagram-js/lib/features/popup-menu/PopupMenu';
|
||||
import Canvas from 'diagram-js/lib/core/Canvas';
|
||||
import Rules from 'diagram-js/lib/features/rules/Rules';
|
||||
import { Element, Shape } from 'diagram-js/lib/model/Types';
|
||||
import BpmnFactory from 'bpmn-js/lib/features/modeling/BpmnFactory';
|
||||
import modeler from '@/store/modules/modeler';
|
||||
|
||||
// @Description: 增强元素连线事件
|
||||
|
||||
class CustomContextPadProvider extends ContextPadProvider {
|
||||
private _contextPad: ContextPad;
|
||||
private _modeling: Modeling;
|
||||
private _elementFactory: ElementFactory;
|
||||
private _autoPlace: any;
|
||||
private _connect: Connect;
|
||||
private _create: Create;
|
||||
private _popupMenu: PopupMenu;
|
||||
private _canvas: Canvas;
|
||||
private _rules: Rules;
|
||||
|
||||
constructor(
|
||||
config: any,
|
||||
injector: Injector,
|
||||
eventBus: EventBus,
|
||||
contextPad: ContextPad,
|
||||
modeling: Modeling,
|
||||
elementFactory: ElementFactory,
|
||||
connect: Connect,
|
||||
create: Create,
|
||||
popupMenu: PopupMenu,
|
||||
canvas: Canvas,
|
||||
rules: Rules,
|
||||
translate
|
||||
) {
|
||||
// @ts-ignore
|
||||
super(config, injector, eventBus, contextPad, modeling, elementFactory, connect, create, popupMenu, canvas, rules, translate);
|
||||
|
||||
this._contextPad = contextPad;
|
||||
this._modeling = modeling;
|
||||
this._elementFactory = elementFactory;
|
||||
this._connect = connect;
|
||||
this._create = create;
|
||||
this._popupMenu = popupMenu;
|
||||
this._canvas = canvas;
|
||||
this._rules = rules;
|
||||
|
||||
this._autoPlace = injector.get('autoPlace', false);
|
||||
}
|
||||
|
||||
getContextPadEntries(element: Element) {
|
||||
const actions: Record<string, any> = {};
|
||||
|
||||
const appendUserTask = (event: Event, element: Shape) => {
|
||||
const shape = this._elementFactory.createShape({ type: 'bpmn:UserTask' });
|
||||
this._create.start(event, shape, {
|
||||
source: element
|
||||
});
|
||||
};
|
||||
|
||||
const appendMultiInstanceUserTask = (event: Event, element: Shape) => {
|
||||
const store = modeler();
|
||||
const bpmnFactory = store.getModeler().get('bpmnFactory') as BpmnFactory;
|
||||
const businessObject = bpmnFactory.create('bpmn:UserTask', {
|
||||
// name: '多实例用户任务',
|
||||
isForCompensation: false
|
||||
});
|
||||
businessObject.loopCharacteristics = bpmnFactory.create('bpmn:MultiInstanceLoopCharacteristics');
|
||||
// 创建 Shape
|
||||
const shape = this._elementFactory.createShape({
|
||||
type: 'bpmn:UserTask',
|
||||
businessObject: businessObject
|
||||
});
|
||||
this._create.start(event, shape, { source: element });
|
||||
};
|
||||
|
||||
const appendTask = this._autoPlace
|
||||
? (event, element) => {
|
||||
const bpmnFactory: BpmnFactory | undefined = modeler().getModeler().get('bpmnFactory');
|
||||
const businessObject = bpmnFactory.create('bpmn:UserTask', {
|
||||
// name: '多实例用户任务',// 右键创建显示
|
||||
isForCompensation: false
|
||||
});
|
||||
|
||||
// 创建多实例属性并分配给用户任务的 loopCharacteristics
|
||||
businessObject.loopCharacteristics = bpmnFactory.create('bpmn:MultiInstanceLoopCharacteristics');
|
||||
|
||||
// 创建 Shape
|
||||
const shape = this._elementFactory.createShape({
|
||||
type: 'bpmn:UserTask',
|
||||
businessObject: businessObject
|
||||
});
|
||||
|
||||
this._autoPlace.append(element, shape);
|
||||
}
|
||||
: appendMultiInstanceUserTask;
|
||||
|
||||
const append = this._autoPlace
|
||||
? (event: Event, element: Shape) => {
|
||||
const shape = this._elementFactory.createShape({ type: 'bpmn:UserTask' });
|
||||
this._autoPlace.append(element, shape);
|
||||
}
|
||||
: appendUserTask;
|
||||
|
||||
// // 添加创建用户任务按钮
|
||||
actions['append.append-user-task'] = {
|
||||
group: 'model',
|
||||
className: 'bpmn-icon-user-task',
|
||||
title: '用户任务',
|
||||
action: {
|
||||
dragstart: appendUserTask,
|
||||
click: append
|
||||
}
|
||||
};
|
||||
|
||||
// 添加创建多实例用户任务按钮
|
||||
actions['append.append-multi-instance-user-task'] = {
|
||||
group: 'model',
|
||||
className: 'bpmn-icon-user', // 你可以使用多实例用户任务的图标 bpmn-icon-user bpmn-icon-user-task
|
||||
title: '多实例用户任务',
|
||||
action: {
|
||||
dragstart: appendMultiInstanceUserTask,
|
||||
click: appendTask
|
||||
}
|
||||
};
|
||||
|
||||
return actions;
|
||||
}
|
||||
}
|
||||
|
||||
export default CustomContextPadProvider;
|
||||
@@ -0,0 +1,119 @@
|
||||
import { assign } from 'min-dash';
|
||||
import PaletteProvider from 'bpmn-js/lib/features/palette/PaletteProvider';
|
||||
import ElementFactory from 'bpmn-js/lib/features/modeling/ElementFactory';
|
||||
import Create from 'diagram-js/lib/features/create/Create';
|
||||
import SpaceTool from 'diagram-js/lib/features/space-tool/SpaceTool';
|
||||
import LassoTool from 'diagram-js/lib/features/lasso-tool/LassoTool';
|
||||
import HandTool from 'diagram-js/lib/features/hand-tool/HandTool';
|
||||
import GlobalConnect from 'diagram-js/lib/features/global-connect/GlobalConnect';
|
||||
import Palette from 'diagram-js/lib/features/palette/Palette';
|
||||
import modeler from '@/store/modules/modeler';
|
||||
import BpmnFactory from 'bpmn-js/lib/features/modeling/BpmnFactory';
|
||||
|
||||
// @Description: 增强左侧面板
|
||||
class CustomPaletteProvider extends PaletteProvider {
|
||||
private readonly _palette: Palette;
|
||||
private readonly _create: Create;
|
||||
private readonly _elementFactory: ElementFactory;
|
||||
private readonly _spaceTool: SpaceTool;
|
||||
private readonly _lassoTool: LassoTool;
|
||||
private readonly _handTool: HandTool;
|
||||
private readonly _globalConnect: GlobalConnect;
|
||||
private readonly _translate: any;
|
||||
|
||||
constructor(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) {
|
||||
super(
|
||||
palette,
|
||||
create,
|
||||
elementFactory,
|
||||
spaceTool,
|
||||
lassoTool,
|
||||
handTool,
|
||||
globalConnect,
|
||||
translate
|
||||
// 2000
|
||||
);
|
||||
this._palette = palette;
|
||||
this._create = create;
|
||||
this._elementFactory = elementFactory;
|
||||
this._spaceTool = spaceTool;
|
||||
this._lassoTool = lassoTool;
|
||||
this._handTool = handTool;
|
||||
this._globalConnect = globalConnect;
|
||||
this._translate = translate;
|
||||
}
|
||||
|
||||
getPaletteEntries() {
|
||||
const actions = {},
|
||||
create = this._create,
|
||||
elementFactory = this._elementFactory,
|
||||
translate = this._translate;
|
||||
|
||||
function createAction(type: string, group: string, className: string, title: string, options?: object) {
|
||||
function createListener(event) {
|
||||
const shape = elementFactory.createShape(assign({ type: type }, options));
|
||||
if (options) {
|
||||
!shape.businessObject.di && (shape.businessObject.di = {});
|
||||
shape.businessObject.di.isExpanded = (options as { [key: string]: any }).isExpanded;
|
||||
}
|
||||
create.start(event, shape, null);
|
||||
}
|
||||
const shortType = type.replace(/^bpmn:/, '');
|
||||
return {
|
||||
group: group,
|
||||
className: className,
|
||||
title: title || translate('Create {type}', { type: shortType }),
|
||||
action: {
|
||||
dragstart: createListener,
|
||||
click: createListener
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function createMultiInstanceUserTask(event) {
|
||||
const bpmnFactory: BpmnFactory | undefined = modeler().getBpmnFactory();
|
||||
// 创建一个 bpmn:UserTask
|
||||
const userTask = bpmnFactory.create('bpmn:UserTask', {
|
||||
// name: '多实例用户任务', // 在画板中显示字段
|
||||
isForCompensation: false
|
||||
});
|
||||
// 将多实例属性分配给 bpmn:UserTask 的 loopCharacteristics
|
||||
userTask.loopCharacteristics = bpmnFactory.create('bpmn:MultiInstanceLoopCharacteristics');
|
||||
const customUserTask = elementFactory.createShape({
|
||||
type: 'bpmn:UserTask',
|
||||
businessObject: userTask // 分配创建的 userTask 到 businessObject
|
||||
});
|
||||
create.start(event, customUserTask, {});
|
||||
}
|
||||
|
||||
assign(actions, {
|
||||
'create.parallel-gateway': createAction('bpmn:ParallelGateway', 'gateway', 'bpmn-icon-gateway-parallel', '并行网关'),
|
||||
'create.event-base-gateway': createAction('bpmn:EventBasedGateway', 'gateway', 'bpmn-icon-gateway-eventbased', '事件网关'),
|
||||
// 分组线
|
||||
'gateway-separator': {
|
||||
group: 'gateway',
|
||||
separator: true
|
||||
},
|
||||
'create.user-task': createAction('bpmn:UserTask', 'activity', 'bpmn-icon-user-task', '创建用户任务'),
|
||||
'create.multi-instance-user-task': {
|
||||
group: 'activity',
|
||||
type: 'bpmn:UserTask',
|
||||
className: 'bpmn-icon-user task-multi-instance',
|
||||
title: '创建多实例用户任务',
|
||||
action: {
|
||||
click: createMultiInstanceUserTask,
|
||||
dragstart: createMultiInstanceUserTask
|
||||
}
|
||||
},
|
||||
'task-separator': {
|
||||
group: 'activity',
|
||||
separator: true
|
||||
}
|
||||
});
|
||||
return actions;
|
||||
}
|
||||
}
|
||||
|
||||
CustomPaletteProvider['$inject'] = ['palette', 'create', 'elementFactory', 'spaceTool', 'lassoTool', 'handTool', 'globalConnect', 'translate'];
|
||||
|
||||
export default CustomPaletteProvider;
|
||||
@@ -0,0 +1,56 @@
|
||||
import BaseRenderer from 'diagram-js/lib/draw/BaseRenderer';
|
||||
import {
|
||||
append as svgAppend,
|
||||
attr as svgAttr,
|
||||
create as svgCreate,
|
||||
select as svgSelect,
|
||||
selectAll as svgSelectAll,
|
||||
clone as svgClone,
|
||||
clear as svgClear,
|
||||
remove as svgRemove
|
||||
} from 'tiny-svg';
|
||||
|
||||
const HIGH_PRIORITY = 1500;
|
||||
export default class CustomRenderer extends BaseRenderer {
|
||||
bpmnRenderer: BaseRenderer;
|
||||
modeling: any;
|
||||
constructor(eventBus, bpmnRenderer, modeling) {
|
||||
super(eventBus, HIGH_PRIORITY);
|
||||
this.bpmnRenderer = bpmnRenderer;
|
||||
this.modeling = modeling;
|
||||
}
|
||||
canRender(element) {
|
||||
// ignore labels
|
||||
return !element.labelTarget;
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义节点图形
|
||||
* @param {*} parentNode 当前元素的svgNode
|
||||
* @param {*} element
|
||||
* @returns
|
||||
*/
|
||||
drawShape(parentNode, element) {
|
||||
const shape = this.bpmnRenderer.drawShape(parentNode, element);
|
||||
const { type, width, height } = element;
|
||||
// 开始 填充绿色
|
||||
if (type === 'bpmn:StartEvent') {
|
||||
svgAttr(shape, { fill: '#77DF6D' });
|
||||
return shape;
|
||||
}
|
||||
if (type === 'bpmn:EndEvent') {
|
||||
svgAttr(shape, { fill: '#EE7B77' });
|
||||
return shape;
|
||||
}
|
||||
if (type === 'bpmn:UserTask') {
|
||||
svgAttr(shape, { fill: '#A9C4F8' });
|
||||
return shape;
|
||||
}
|
||||
return shape;
|
||||
}
|
||||
|
||||
getShapePath(shape) {
|
||||
return this.bpmnRenderer.getShapePath(shape);
|
||||
}
|
||||
}
|
||||
CustomRenderer['$inject'] = ['eventBus', 'bpmnRenderer'];
|
||||
@@ -0,0 +1,15 @@
|
||||
import zh from '@/components/BpmnDesign/assets/lang/zh';
|
||||
|
||||
const customTranslate = (template: any, replacements: any) => {
|
||||
replacements = replacements || {};
|
||||
template = zh[template] || template;
|
||||
return template.replace(/{([^}]+)}/g, function (_: any, key: any) {
|
||||
return replacements[key] || '{' + key + '}';
|
||||
});
|
||||
};
|
||||
|
||||
export const translateModule = {
|
||||
translate: ['value', customTranslate]
|
||||
};
|
||||
|
||||
export default translateModule;
|
||||
@@ -0,0 +1,17 @@
|
||||
// 翻译模块
|
||||
import TranslationModule from './Translate';
|
||||
import { ModuleDeclaration } from 'didi';
|
||||
import CustomPaletteProvider from './Palette/CustomPaletteProvider';
|
||||
import CustomRenderer from './Renderer/CustomRenderer';
|
||||
import CustomContextPadProvider from './ContextPad/CustomContextPadProvider';
|
||||
|
||||
const Module: ModuleDeclaration[] = [
|
||||
{
|
||||
__init__: ['customPaletteProvider', 'customContextPadProvider', 'customRenderer'],
|
||||
customPaletteProvider: ['type', CustomPaletteProvider],
|
||||
customRenderer: ['type', CustomRenderer],
|
||||
customContextPadProvider: ['type', CustomContextPadProvider]
|
||||
},
|
||||
TranslationModule
|
||||
];
|
||||
export default Module;
|
||||
@@ -0,0 +1,50 @@
|
||||
export default {
|
||||
'bpmn:EndEvent': {},
|
||||
'bpmn:StartEvent': {
|
||||
initiator: true,
|
||||
formKey: true
|
||||
},
|
||||
'bpmn:UserTask': {
|
||||
allocationType: true,
|
||||
specifyDesc: true,
|
||||
multipleUserAuditType: true,
|
||||
async: true,
|
||||
priority: true,
|
||||
skipExpression: true,
|
||||
dueDate: true,
|
||||
taskListener: true,
|
||||
executionListener: true
|
||||
},
|
||||
'bpmn:ServiceTask': {
|
||||
async: true,
|
||||
skipExpression: true,
|
||||
isForCompensation: true,
|
||||
triggerable: true,
|
||||
class: true
|
||||
},
|
||||
'bpmn:ScriptTask': {
|
||||
async: true,
|
||||
isForCompensation: true,
|
||||
autoStoreVariables: true
|
||||
},
|
||||
'bpmn:ManualTask': {
|
||||
async: true,
|
||||
isForCompensation: true
|
||||
},
|
||||
'bpmn:ReceiveTask': {
|
||||
async: true,
|
||||
isForCompensation: true
|
||||
},
|
||||
'bpmn:SendTask': {
|
||||
async: true,
|
||||
isForCompensation: true
|
||||
},
|
||||
'bpmn:BusinessRuleTask': {
|
||||
async: true,
|
||||
isForCompensation: true,
|
||||
ruleVariablesInput: true,
|
||||
rules: true,
|
||||
resultVariable: true,
|
||||
exclude: true
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,230 @@
|
||||
.djs-palette {
|
||||
width: 300px;
|
||||
|
||||
.bpmn-icon-hand-tool:hover {
|
||||
&:after {
|
||||
content: '启动手动工具';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-lasso-tool:hover {
|
||||
&:after {
|
||||
content: '启动套索工具';
|
||||
position: absolute;
|
||||
left: 100px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-space-tool:hover {
|
||||
&:after {
|
||||
content: '启动创建/删除空间工具';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 170px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-connection-multi:hover {
|
||||
&:after {
|
||||
content: '启动全局连接工具';
|
||||
position: absolute;
|
||||
left: 100px;
|
||||
width: 140px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-start-event-none:hover {
|
||||
&:after {
|
||||
content: '创建开始事件';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-intermediate-event-none:hover {
|
||||
&:after {
|
||||
content: '创建中间/边界事件';
|
||||
position: absolute;
|
||||
left: 100px;
|
||||
width: 140px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-end-event-none:hover {
|
||||
&:after {
|
||||
content: '创建结束事件';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-gateway-none:hover {
|
||||
&:after {
|
||||
content: '创建网关';
|
||||
position: absolute;
|
||||
left: 100px;
|
||||
width: 90px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-gateway-parallel:hover {
|
||||
&:after {
|
||||
content: '创建并行网关';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-gateway-eventbased:hover {
|
||||
&:after {
|
||||
content: '创建事件网关';
|
||||
position: absolute;
|
||||
left: 100px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-task:hover {
|
||||
&:after {
|
||||
content: '创建任务';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 80px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-subprocess-expanded:hover {
|
||||
&:after {
|
||||
content: '创建可折叠子流程';
|
||||
position: absolute;
|
||||
left: 100px;
|
||||
width: 140px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-user-task:hover {
|
||||
&:after {
|
||||
content: '创建用户任务';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
.task-multi-instance:hover {
|
||||
&:after {
|
||||
content: '创建多实例用户任务';
|
||||
position: absolute;
|
||||
left: 100px;
|
||||
width: 160px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
.bpmn-icon-participant:hover {
|
||||
&:after {
|
||||
content: '创建泳池/泳道';
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
width: 120px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
color: #3a84de;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #fafafa;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user