diff --git a/yudao-admin-ui/package.json b/yudao-admin-ui/package.json
index c867a5803..b5cde44ce 100644
--- a/yudao-admin-ui/package.json
+++ b/yudao-admin-ui/package.json
@@ -59,7 +59,10 @@
"vue-cropper": "0.5.5",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
- "vuex": "3.6.0"
+ "vuex": "3.6.0",
+ "bpmn-js-token-simulation": "^0.10.0",
+ "min-dash": "^3.5.2",
+ "xml-js": "^1.6.11"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",
@@ -77,7 +80,19 @@
"script-ext-html-webpack-plugin": "2.1.5",
"svg-sprite-loader": "5.1.1",
"vue-template-compiler": "2.6.12",
- "vue2-ace-editor": "^0.0.15"
+ "vue2-ace-editor": "^0.0.15",
+ "@vue/compiler-sfc": "^3.0.1",
+ "@vue/eslint-config-prettier": "^5.0.0",
+ "axios": "^0.21.1",
+ "bpmn-js": "^7.4.0",
+ "bpmn-js-properties-panel": "^0.37.2",
+ "camunda-bpmn-moddle": "^4.4.1",
+ "compression-webpack-plugin": "^6.1.1",
+ "element-ui": "^2.13.2",
+ "eslint-plugin-prettier": "^3.1.0",
+ "fs-extra": "^8.1.0",
+ "terser-webpack-plugin": "^4.2.3",
+ "webpack-bundle-analyzer": "^3.9.0"
},
"engines": {
"node": ">=8.9",
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue
new file mode 100644
index 000000000..83df81ef4
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue
@@ -0,0 +1,451 @@
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/index.js
new file mode 100644
index 000000000..028fe0543
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/index.js
@@ -0,0 +1,7 @@
+import MyProcessDesigner from "./ProcessDesigner.vue";
+
+MyProcessDesigner.install = function(Vue) {
+ Vue.component(MyProcessDesigner.name, MyProcessDesigner);
+};
+
+export default MyProcessDesigner;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/contentPadProvider.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/contentPadProvider.js
new file mode 100644
index 000000000..447a99b31
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/contentPadProvider.js
@@ -0,0 +1,390 @@
+import { assign, forEach, isArray } from "min-dash";
+
+import { is } from "bpmn-js/lib/util/ModelUtil";
+
+import { isExpanded, isEventSubProcess } from "bpmn-js/lib/util/DiUtil";
+
+import { isAny } from "bpmn-js/lib/features/modeling/util/ModelingUtil";
+
+import { getChildLanes } from "bpmn-js/lib/features/modeling/util/LaneUtil";
+
+import { hasPrimaryModifier } from "diagram-js/lib/util/Mouse";
+
+/**
+ * A provider for BPMN 2.0 elements context pad
+ */
+export default function ContextPadProvider(
+ config,
+ injector,
+ eventBus,
+ contextPad,
+ modeling,
+ elementFactory,
+ connect,
+ create,
+ popupMenu,
+ canvas,
+ rules,
+ translate,
+ elementRegistry
+) {
+ config = config || {};
+
+ contextPad.registerProvider(this);
+
+ 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._translate = translate;
+
+ if (config.autoPlace !== false) {
+ this._autoPlace = injector.get("autoPlace", false);
+ }
+
+ eventBus.on("create.end", 250, function(event) {
+ var context = event.context,
+ shape = context.shape;
+
+ if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) {
+ return;
+ }
+
+ var entries = contextPad.getEntries(shape);
+
+ if (entries.replace) {
+ entries.replace.action.click(event, shape);
+ }
+ });
+}
+
+ContextPadProvider.$inject = [
+ "config.contextPad",
+ "injector",
+ "eventBus",
+ "contextPad",
+ "modeling",
+ "elementFactory",
+ "connect",
+ "create",
+ "popupMenu",
+ "canvas",
+ "rules",
+ "translate",
+ "elementRegistry"
+];
+
+ContextPadProvider.prototype.getContextPadEntries = function(element) {
+ var contextPad = this._contextPad,
+ modeling = this._modeling,
+ elementFactory = this._elementFactory,
+ connect = this._connect,
+ create = this._create,
+ popupMenu = this._popupMenu,
+ canvas = this._canvas,
+ rules = this._rules,
+ autoPlace = this._autoPlace,
+ translate = this._translate;
+
+ var actions = {};
+
+ if (element.type === "label") {
+ return actions;
+ }
+
+ var businessObject = element.businessObject;
+
+ function startConnect(event, element) {
+ connect.start(event, element);
+ }
+
+ function removeElement() {
+ modeling.removeElements([element]);
+ }
+
+ function getReplaceMenuPosition(element) {
+ var Y_OFFSET = 5;
+
+ var diagramContainer = canvas.getContainer(),
+ pad = contextPad.getPad(element).html;
+
+ var diagramRect = diagramContainer.getBoundingClientRect(),
+ padRect = pad.getBoundingClientRect();
+
+ var top = padRect.top - diagramRect.top;
+ var left = padRect.left - diagramRect.left;
+
+ var pos = {
+ x: left,
+ y: top + padRect.height + Y_OFFSET
+ };
+
+ return pos;
+ }
+
+ /**
+ * Create an append action
+ *
+ * @param {string} type
+ * @param {string} className
+ * @param {string} [title]
+ * @param {Object} [options]
+ *
+ * @return {Object} descriptor
+ */
+ function appendAction(type, className, title, options) {
+ if (typeof title !== "string") {
+ options = title;
+ title = translate("Append {type}", { type: type.replace(/^bpmn:/, "") });
+ }
+
+ function appendStart(event, element) {
+ var shape = elementFactory.createShape(assign({ type: type }, options));
+ create.start(event, shape, {
+ source: element
+ });
+ }
+
+ var append = autoPlace
+ ? function(event, element) {
+ var shape = elementFactory.createShape(assign({ type: type }, options));
+
+ autoPlace.append(element, shape);
+ }
+ : appendStart;
+
+ return {
+ group: "model",
+ className: className,
+ title: title,
+ action: {
+ dragstart: appendStart,
+ click: append
+ }
+ };
+ }
+
+ function splitLaneHandler(count) {
+ return function(event, element) {
+ // actual split
+ modeling.splitLane(element, count);
+
+ // refresh context pad after split to
+ // get rid of split icons
+ contextPad.open(element, true);
+ };
+ }
+
+ if (isAny(businessObject, ["bpmn:Lane", "bpmn:Participant"]) && isExpanded(businessObject)) {
+ var childLanes = getChildLanes(element);
+
+ assign(actions, {
+ "lane-insert-above": {
+ group: "lane-insert-above",
+ className: "bpmn-icon-lane-insert-above",
+ title: translate("Add Lane above"),
+ action: {
+ click: function(event, element) {
+ modeling.addLane(element, "top");
+ }
+ }
+ }
+ });
+
+ if (childLanes.length < 2) {
+ if (element.height >= 120) {
+ assign(actions, {
+ "lane-divide-two": {
+ group: "lane-divide",
+ className: "bpmn-icon-lane-divide-two",
+ title: translate("Divide into two Lanes"),
+ action: {
+ click: splitLaneHandler(2)
+ }
+ }
+ });
+ }
+
+ if (element.height >= 180) {
+ assign(actions, {
+ "lane-divide-three": {
+ group: "lane-divide",
+ className: "bpmn-icon-lane-divide-three",
+ title: translate("Divide into three Lanes"),
+ action: {
+ click: splitLaneHandler(3)
+ }
+ }
+ });
+ }
+ }
+
+ assign(actions, {
+ "lane-insert-below": {
+ group: "lane-insert-below",
+ className: "bpmn-icon-lane-insert-below",
+ title: translate("Add Lane below"),
+ action: {
+ click: function(event, element) {
+ modeling.addLane(element, "bottom");
+ }
+ }
+ }
+ });
+ }
+
+ if (is(businessObject, "bpmn:FlowNode")) {
+ if (is(businessObject, "bpmn:EventBasedGateway")) {
+ assign(actions, {
+ "append.receive-task": appendAction("bpmn:ReceiveTask", "bpmn-icon-receive-task", translate("Append ReceiveTask")),
+ "append.message-intermediate-event": appendAction(
+ "bpmn:IntermediateCatchEvent",
+ "bpmn-icon-intermediate-event-catch-message",
+ translate("Append MessageIntermediateCatchEvent"),
+ { eventDefinitionType: "bpmn:MessageEventDefinition" }
+ ),
+ "append.timer-intermediate-event": appendAction(
+ "bpmn:IntermediateCatchEvent",
+ "bpmn-icon-intermediate-event-catch-timer",
+ translate("Append TimerIntermediateCatchEvent"),
+ { eventDefinitionType: "bpmn:TimerEventDefinition" }
+ ),
+ "append.condition-intermediate-event": appendAction(
+ "bpmn:IntermediateCatchEvent",
+ "bpmn-icon-intermediate-event-catch-condition",
+ translate("Append ConditionIntermediateCatchEvent"),
+ { eventDefinitionType: "bpmn:ConditionalEventDefinition" }
+ ),
+ "append.signal-intermediate-event": appendAction(
+ "bpmn:IntermediateCatchEvent",
+ "bpmn-icon-intermediate-event-catch-signal",
+ translate("Append SignalIntermediateCatchEvent"),
+ { eventDefinitionType: "bpmn:SignalEventDefinition" }
+ )
+ });
+ } else if (isEventType(businessObject, "bpmn:BoundaryEvent", "bpmn:CompensateEventDefinition")) {
+ assign(actions, {
+ "append.compensation-activity": appendAction("bpmn:Task", "bpmn-icon-task", translate("Append compensation activity"), {
+ isForCompensation: true
+ })
+ });
+ } else if (
+ !is(businessObject, "bpmn:EndEvent") &&
+ !businessObject.isForCompensation &&
+ !isEventType(businessObject, "bpmn:IntermediateThrowEvent", "bpmn:LinkEventDefinition") &&
+ !isEventSubProcess(businessObject)
+ ) {
+ assign(actions, {
+ "append.end-event": appendAction("bpmn:EndEvent", "bpmn-icon-end-event-none", translate("Append EndEvent")),
+ "append.gateway": appendAction("bpmn:ExclusiveGateway", "bpmn-icon-gateway-none", translate("Append Gateway")),
+ "append.append-task": appendAction("bpmn:UserTask", "bpmn-icon-user-task", translate("Append Task")),
+ "append.intermediate-event": appendAction(
+ "bpmn:IntermediateThrowEvent",
+ "bpmn-icon-intermediate-event-none",
+ translate("Append Intermediate/Boundary Event")
+ )
+ });
+ }
+ }
+
+ if (!popupMenu.isEmpty(element, "bpmn-replace")) {
+ // Replace menu entry
+ assign(actions, {
+ replace: {
+ group: "edit",
+ className: "bpmn-icon-screw-wrench",
+ title: translate("Change type"),
+ action: {
+ click: function(event, element) {
+ var position = assign(getReplaceMenuPosition(element), {
+ cursor: { x: event.x, y: event.y }
+ });
+
+ popupMenu.open(element, "bpmn-replace", position);
+ }
+ }
+ }
+ });
+ }
+
+ if (isAny(businessObject, ["bpmn:FlowNode", "bpmn:InteractionNode", "bpmn:DataObjectReference", "bpmn:DataStoreReference"])) {
+ assign(actions, {
+ "append.text-annotation": appendAction("bpmn:TextAnnotation", "bpmn-icon-text-annotation"),
+
+ connect: {
+ group: "connect",
+ className: "bpmn-icon-connection-multi",
+ title: translate("Connect using " + (businessObject.isForCompensation ? "" : "Sequence/MessageFlow or ") + "Association"),
+ action: {
+ click: startConnect,
+ dragstart: startConnect
+ }
+ }
+ });
+ }
+
+ if (isAny(businessObject, ["bpmn:DataObjectReference", "bpmn:DataStoreReference"])) {
+ assign(actions, {
+ connect: {
+ group: "connect",
+ className: "bpmn-icon-connection-multi",
+ title: translate("Connect using DataInputAssociation"),
+ action: {
+ click: startConnect,
+ dragstart: startConnect
+ }
+ }
+ });
+ }
+
+ if (is(businessObject, "bpmn:Group")) {
+ assign(actions, {
+ "append.text-annotation": appendAction("bpmn:TextAnnotation", "bpmn-icon-text-annotation")
+ });
+ }
+
+ // delete element entry, only show if allowed by rules
+ var deleteAllowed = rules.allowed("elements.delete", { elements: [element] });
+
+ if (isArray(deleteAllowed)) {
+ // was the element returned as a deletion candidate?
+ deleteAllowed = deleteAllowed[0] === element;
+ }
+
+ if (deleteAllowed) {
+ assign(actions, {
+ delete: {
+ group: "edit",
+ className: "bpmn-icon-trash",
+ title: translate("Remove"),
+ action: {
+ click: removeElement
+ }
+ }
+ });
+ }
+
+ return actions;
+};
+
+// helpers /////////
+
+function isEventType(eventBo, type, definition) {
+ var isType = eventBo.$instanceOf(type);
+ var isDefinition = false;
+
+ var definitions = eventBo.eventDefinitions || [];
+ forEach(definitions, function(def) {
+ if (def.$type === definition) {
+ isDefinition = true;
+ }
+ });
+
+ return isType && isDefinition;
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/index.js
new file mode 100644
index 000000000..a9cf887cc
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/index.js
@@ -0,0 +1,6 @@
+import CustomContextPadProvider from "./contentPadProvider";
+
+export default {
+ __init__: ["contextPadProvider"],
+ contextPadProvider: ["type", CustomContextPadProvider]
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/defaultEmpty.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/defaultEmpty.js
new file mode 100644
index 000000000..ae96d2416
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/defaultEmpty.js
@@ -0,0 +1,24 @@
+export default (key, name, type) => {
+ if (!type) type = "camunda";
+ const TYPE_TARGET = {
+ activiti: "http://activiti.org/bpmn",
+ camunda: "http://bpmn.io/schema/bpmn",
+ flowable: "http://flowable.org/bpmn"
+ };
+ return `
+
+
+
+
+
+
+
+`;
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json
new file mode 100644
index 000000000..9daed5081
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json
@@ -0,0 +1,1071 @@
+{
+ "name": "Activiti",
+ "uri": "http://activiti.org/bpmn",
+ "prefix": "activiti",
+ "xml": {
+ "tagAlias": "lowerCase"
+ },
+ "associations": [],
+ "types": [
+ {
+ "name": "Definitions",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Definitions"
+ ],
+ "properties": [
+ {
+ "name": "diagramRelationId",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "InOutBinding",
+ "superClass": [
+ "Element"
+ ],
+ "isAbstract": true,
+ "properties": [
+ {
+ "name": "source",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "sourceExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "target",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "businessKey",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "local",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "variables",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "In",
+ "superClass": [
+ "InOutBinding"
+ ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:CallActivity"
+ ]
+ }
+ },
+ {
+ "name": "Out",
+ "superClass": [
+ "InOutBinding"
+ ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:CallActivity"
+ ]
+ }
+ },
+ {
+ "name": "AsyncCapable",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Activity",
+ "bpmn:Gateway",
+ "bpmn:Event"
+ ],
+ "properties": [
+ {
+ "name": "async",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "asyncBefore",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "asyncAfter",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "exclusive",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": true
+ }
+ ]
+ },
+ {
+ "name": "JobPriorized",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Process",
+ "activiti:AsyncCapable"
+ ],
+ "properties": [
+ {
+ "name": "jobPriority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "SignalEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:SignalEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "async",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ }
+ ]
+ },
+ {
+ "name": "ErrorEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:ErrorEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "errorCodeVariable",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "errorMessageVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Error",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Error"
+ ],
+ "properties": [
+ {
+ "name": "activiti:errorMessage",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "PotentialStarter",
+ "superClass": [
+ "Element"
+ ],
+ "properties": [
+ {
+ "name": "resourceAssignmentExpression",
+ "type": "bpmn:ResourceAssignmentExpression"
+ }
+ ]
+ },
+ {
+ "name": "FormSupported",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:StartEvent",
+ "bpmn:UserTask"
+ ],
+ "properties": [
+ {
+ "name": "formHandlerClass",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "formKey",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "TemplateSupported",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Process",
+ "bpmn:FlowElement"
+ ],
+ "properties": [
+ {
+ "name": "modelerTemplate",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Initiator",
+ "isAbstract": true,
+ "extends": [ "bpmn:StartEvent" ],
+ "properties": [
+ {
+ "name": "initiator",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ScriptTask",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:ScriptTask"
+ ],
+ "properties": [
+ {
+ "name": "resultVariable",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Process",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Process"
+ ],
+ "properties": [
+ {
+ "name": "candidateStarterGroups",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateStarterUsers",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "versionTag",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "historyTimeToLive",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "isStartableInTasklist",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": true
+ },
+ {
+ "name":"executionListener",
+ "isAbstract": true,
+ "type":"Expression"
+ }
+ ]
+ },
+ {
+ "name": "EscalationEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:EscalationEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "escalationCodeVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "FormalExpression",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:FormalExpression"
+ ],
+ "properties": [
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "multiinstance_type",
+ "superClass":[
+ "Element"
+ ]
+ },
+ {
+ "name": "multiinstance_condition",
+ "superClass":[
+ "Element"
+ ]
+ },
+ {
+ "name": "Assignable",
+ "extends": [ "bpmn:UserTask" ],
+ "properties": [
+ {
+ "name": "assignee",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateUsers",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateGroups",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "dueDate",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "followUpDate",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "priority",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "multiinstance_condition",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "CallActivity",
+ "extends": [ "bpmn:CallActivity" ],
+ "properties": [
+ {
+ "name": "calledElementBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "calledElementVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "calledElementVersionTag",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "calledElementTenantId",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseRef",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "caseVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseTenantId",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableMappingClass",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableMappingDelegateExpression",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ServiceTaskLike",
+ "extends": [
+ "bpmn:ServiceTask",
+ "bpmn:BusinessRuleTask",
+ "bpmn:SendTask",
+ "bpmn:MessageEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resultVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "DmnCapable",
+ "extends": [
+ "bpmn:BusinessRuleTask"
+ ],
+ "properties": [
+ {
+ "name": "decisionRef",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "decisionRefBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "decisionRefVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "mapDecisionResult",
+ "isAttr": true,
+ "type": "String",
+ "default": "resultList"
+ },
+ {
+ "name": "decisionRefTenantId",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ExternalCapable",
+ "extends": [
+ "activiti:ServiceTaskLike"
+ ],
+ "properties": [
+ {
+ "name": "type",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "topic",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "TaskPriorized",
+ "extends": [
+ "bpmn:Process",
+ "activiti:ExternalCapable"
+ ],
+ "properties": [
+ {
+ "name": "taskPriority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Properties",
+ "superClass": [
+ "Element"
+ ],
+ "meta": {
+ "allowedIn": [ "*" ]
+ },
+ "properties": [
+ {
+ "name": "values",
+ "type": "Property",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Property",
+ "superClass": [
+ "Element"
+ ],
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "value",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "Connector",
+ "superClass": [
+ "Element"
+ ],
+ "meta": {
+ "allowedIn": [
+ "activiti:ServiceTaskLike"
+ ]
+ },
+ "properties": [
+ {
+ "name": "inputOutput",
+ "type": "InputOutput"
+ },
+ {
+ "name": "connectorId",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "InputOutput",
+ "superClass": [
+ "Element"
+ ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:FlowNode",
+ "activiti:Connector"
+ ]
+ },
+ "properties": [
+ {
+ "name": "inputOutput",
+ "type": "InputOutput"
+ },
+ {
+ "name": "connectorId",
+ "type": "String"
+ },
+ {
+ "name": "inputParameters",
+ "isMany": true,
+ "type": "InputParameter"
+ },
+ {
+ "name": "outputParameters",
+ "isMany": true,
+ "type": "OutputParameter"
+ }
+ ]
+ },
+ {
+ "name": "InputOutputParameter",
+ "properties": [
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ },
+ {
+ "name": "definition",
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "InputOutputParameterDefinition",
+ "isAbstract": true
+ },
+ {
+ "name": "List",
+ "superClass": [ "InputOutputParameterDefinition" ],
+ "properties": [
+ {
+ "name": "items",
+ "isMany": true,
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "Map",
+ "superClass": [ "InputOutputParameterDefinition" ],
+ "properties": [
+ {
+ "name": "entries",
+ "isMany": true,
+ "type": "Entry"
+ }
+ ]
+ },
+ {
+ "name": "Entry",
+ "properties": [
+ {
+ "name": "key",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ },
+ {
+ "name": "definition",
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "Value",
+ "superClass": [
+ "InputOutputParameterDefinition"
+ ],
+ "properties": [
+ {
+ "name": "id",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Script",
+ "superClass": [ "InputOutputParameterDefinition" ],
+ "properties": [
+ {
+ "name": "scriptFormat",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Field",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "activiti:ServiceTaskLike",
+ "activiti:ExecutionListener",
+ "activiti:TaskListener"
+ ]
+ },
+ "properties": [
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "expression",
+ "type": "String"
+ },
+ {
+ "name": "stringValue",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "string",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "InputParameter",
+ "superClass": [ "InputOutputParameter" ]
+ },
+ {
+ "name": "OutputParameter",
+ "superClass": [ "InputOutputParameter" ]
+ },
+ {
+ "name": "Collectable",
+ "isAbstract": true,
+ "extends": [ "bpmn:MultiInstanceLoopCharacteristics" ],
+ "superClass": [ "activiti:AsyncCapable" ],
+ "properties": [
+ {
+ "name": "collection",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "elementVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "FailedJobRetryTimeCycle",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "activiti:AsyncCapable",
+ "bpmn:MultiInstanceLoopCharacteristics"
+ ]
+ },
+ "properties": [
+ {
+ "name": "body",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ExecutionListener",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:Task",
+ "bpmn:ServiceTask",
+ "bpmn:UserTask",
+ "bpmn:BusinessRuleTask",
+ "bpmn:ScriptTask",
+ "bpmn:ReceiveTask",
+ "bpmn:ManualTask",
+ "bpmn:ExclusiveGateway",
+ "bpmn:SequenceFlow",
+ "bpmn:ParallelGateway",
+ "bpmn:InclusiveGateway",
+ "bpmn:EventBasedGateway",
+ "bpmn:StartEvent",
+ "bpmn:IntermediateCatchEvent",
+ "bpmn:IntermediateThrowEvent",
+ "bpmn:EndEvent",
+ "bpmn:BoundaryEvent",
+ "bpmn:CallActivity",
+ "bpmn:SubProcess",
+ "bpmn:Process"
+ ]
+ },
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "event",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "script",
+ "type": "Script"
+ },
+ {
+ "name": "fields",
+ "type": "Field",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "TaskListener",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:UserTask"
+ ]
+ },
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "event",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "script",
+ "type": "Script"
+ },
+ {
+ "name": "fields",
+ "type": "Field",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "FormProperty",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:StartEvent",
+ "bpmn:UserTask"
+ ]
+ },
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "required",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "readable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "writable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "variable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "expression",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "datePattern",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "default",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "values",
+ "type": "Value",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "FormProperty",
+ "superClass": [ "Element" ],
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "label",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "datePattern",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "defaultValue",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "properties",
+ "type": "Properties"
+ },
+ {
+ "name": "validation",
+ "type": "Validation"
+ },
+ {
+ "name": "values",
+ "type": "Value",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Validation",
+ "superClass": [ "Element" ],
+ "properties": [
+ {
+ "name": "constraints",
+ "type": "Constraint",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Constraint",
+ "superClass": [ "Element" ],
+ "properties": [
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "config",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "ConditionalEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:ConditionalEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "variableName",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableEvent",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ }
+ ],
+ "emumerations": [ ]
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json
new file mode 100644
index 000000000..a57dbe639
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json
@@ -0,0 +1,1087 @@
+{
+ "name": "Camunda",
+ "uri": "http://camunda.org/schema/1.0/bpmn",
+ "prefix": "camunda",
+ "xml": {
+ "tagAlias": "lowerCase"
+ },
+ "associations": [],
+ "types": [
+ {
+ "name": "Definitions",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Definitions"
+ ],
+ "properties": [
+ {
+ "name": "diagramRelationId",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "InOutBinding",
+ "superClass": [
+ "Element"
+ ],
+ "isAbstract": true,
+ "properties": [
+ {
+ "name": "source",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "sourceExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "target",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "businessKey",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "local",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "variables",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "In",
+ "superClass": [
+ "InOutBinding"
+ ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:CallActivity",
+ "bpmn:SignalEventDefinition"
+ ]
+ }
+ },
+ {
+ "name": "Out",
+ "superClass": [
+ "InOutBinding"
+ ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:CallActivity"
+ ]
+ }
+ },
+ {
+ "name": "AsyncCapable",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Activity",
+ "bpmn:Gateway",
+ "bpmn:Event"
+ ],
+ "properties": [
+ {
+ "name": "async",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "asyncBefore",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "asyncAfter",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "exclusive",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": true
+ }
+ ]
+ },
+ {
+ "name": "JobPriorized",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Process",
+ "camunda:AsyncCapable"
+ ],
+ "properties": [
+ {
+ "name": "jobPriority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "SignalEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:SignalEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "async",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ }
+ ]
+ },
+ {
+ "name": "ErrorEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:ErrorEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "errorCodeVariable",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "errorMessageVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Error",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Error"
+ ],
+ "properties": [
+ {
+ "name": "camunda:errorMessage",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "PotentialStarter",
+ "superClass": [
+ "Element"
+ ],
+ "properties": [
+ {
+ "name": "resourceAssignmentExpression",
+ "type": "bpmn:ResourceAssignmentExpression"
+ }
+ ]
+ },
+ {
+ "name": "FormSupported",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:StartEvent",
+ "bpmn:UserTask"
+ ],
+ "properties": [
+ {
+ "name": "formHandlerClass",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "formKey",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "TemplateSupported",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Process",
+ "bpmn:FlowElement"
+ ],
+ "properties": [
+ {
+ "name": "modelerTemplate",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "modelerTemplateVersion",
+ "isAttr": true,
+ "type": "Integer"
+ }
+ ]
+ },
+ {
+ "name": "Initiator",
+ "isAbstract": true,
+ "extends": [ "bpmn:StartEvent" ],
+ "properties": [
+ {
+ "name": "initiator",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ScriptTask",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:ScriptTask"
+ ],
+ "properties": [
+ {
+ "name": "resultVariable",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Process",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:Process"
+ ],
+ "properties": [
+ {
+ "name": "candidateStarterGroups",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateStarterUsers",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "versionTag",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "historyTimeToLive",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "isStartableInTasklist",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": true
+ }
+ ]
+ },
+ {
+ "name": "EscalationEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:EscalationEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "escalationCodeVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "FormalExpression",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:FormalExpression"
+ ],
+ "properties": [
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Assignable",
+ "extends": [ "bpmn:UserTask" ],
+ "properties": [
+ {
+ "name": "assignee",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateUsers",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateGroups",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "dueDate",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "followUpDate",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "priority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "CallActivity",
+ "extends": [ "bpmn:CallActivity" ],
+ "properties": [
+ {
+ "name": "calledElementBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "calledElementVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "calledElementVersionTag",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "calledElementTenantId",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseRef",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "caseVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseTenantId",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableMappingClass",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableMappingDelegateExpression",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ServiceTaskLike",
+ "extends": [
+ "bpmn:ServiceTask",
+ "bpmn:BusinessRuleTask",
+ "bpmn:SendTask",
+ "bpmn:MessageEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resultVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "DmnCapable",
+ "extends": [
+ "bpmn:BusinessRuleTask"
+ ],
+ "properties": [
+ {
+ "name": "decisionRef",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "decisionRefBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "decisionRefVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "mapDecisionResult",
+ "isAttr": true,
+ "type": "String",
+ "default": "resultList"
+ },
+ {
+ "name": "decisionRefTenantId",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ExternalCapable",
+ "extends": [
+ "camunda:ServiceTaskLike"
+ ],
+ "properties": [
+ {
+ "name": "type",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "topic",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "TaskPriorized",
+ "extends": [
+ "bpmn:Process",
+ "camunda:ExternalCapable"
+ ],
+ "properties": [
+ {
+ "name": "taskPriority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Properties",
+ "superClass": [
+ "Element"
+ ],
+ "meta": {
+ "allowedIn": [ "*" ]
+ },
+ "properties": [
+ {
+ "name": "values",
+ "type": "Property",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Property",
+ "superClass": [
+ "Element"
+ ],
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "value",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "Connector",
+ "superClass": [
+ "Element"
+ ],
+ "meta": {
+ "allowedIn": [
+ "camunda:ServiceTaskLike"
+ ]
+ },
+ "properties": [
+ {
+ "name": "inputOutput",
+ "type": "InputOutput"
+ },
+ {
+ "name": "connectorId",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "InputOutput",
+ "superClass": [
+ "Element"
+ ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:FlowNode",
+ "camunda:Connector"
+ ]
+ },
+ "properties": [
+ {
+ "name": "inputOutput",
+ "type": "InputOutput"
+ },
+ {
+ "name": "connectorId",
+ "type": "String"
+ },
+ {
+ "name": "inputParameters",
+ "isMany": true,
+ "type": "InputParameter"
+ },
+ {
+ "name": "outputParameters",
+ "isMany": true,
+ "type": "OutputParameter"
+ }
+ ]
+ },
+ {
+ "name": "InputOutputParameter",
+ "properties": [
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ },
+ {
+ "name": "definition",
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "InputOutputParameterDefinition",
+ "isAbstract": true
+ },
+ {
+ "name": "List",
+ "superClass": [ "InputOutputParameterDefinition" ],
+ "properties": [
+ {
+ "name": "items",
+ "isMany": true,
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "Map",
+ "superClass": [ "InputOutputParameterDefinition" ],
+ "properties": [
+ {
+ "name": "entries",
+ "isMany": true,
+ "type": "Entry"
+ }
+ ]
+ },
+ {
+ "name": "Entry",
+ "properties": [
+ {
+ "name": "key",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ },
+ {
+ "name": "definition",
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "Value",
+ "superClass": [
+ "InputOutputParameterDefinition"
+ ],
+ "properties": [
+ {
+ "name": "id",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Script",
+ "superClass": [ "InputOutputParameterDefinition" ],
+ "properties": [
+ {
+ "name": "scriptFormat",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Field",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "camunda:ServiceTaskLike",
+ "camunda:ExecutionListener",
+ "camunda:TaskListener"
+ ]
+ },
+ "properties": [
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "expression",
+ "type": "String"
+ },
+ {
+ "name": "stringValue",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "string",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "InputParameter",
+ "superClass": [ "InputOutputParameter" ]
+ },
+ {
+ "name": "OutputParameter",
+ "superClass": [ "InputOutputParameter" ]
+ },
+ {
+ "name": "Collectable",
+ "isAbstract": true,
+ "extends": [ "bpmn:MultiInstanceLoopCharacteristics" ],
+ "superClass": [ "camunda:AsyncCapable" ],
+ "properties": [
+ {
+ "name": "collection",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "elementVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "FailedJobRetryTimeCycle",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "camunda:AsyncCapable",
+ "bpmn:MultiInstanceLoopCharacteristics"
+ ]
+ },
+ "properties": [
+ {
+ "name": "body",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ExecutionListener",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:Task",
+ "bpmn:ServiceTask",
+ "bpmn:UserTask",
+ "bpmn:BusinessRuleTask",
+ "bpmn:ScriptTask",
+ "bpmn:ReceiveTask",
+ "bpmn:ManualTask",
+ "bpmn:ExclusiveGateway",
+ "bpmn:SequenceFlow",
+ "bpmn:ParallelGateway",
+ "bpmn:InclusiveGateway",
+ "bpmn:EventBasedGateway",
+ "bpmn:StartEvent",
+ "bpmn:IntermediateCatchEvent",
+ "bpmn:IntermediateThrowEvent",
+ "bpmn:EndEvent",
+ "bpmn:BoundaryEvent",
+ "bpmn:CallActivity",
+ "bpmn:SubProcess",
+ "bpmn:Process"
+ ]
+ },
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "event",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "script",
+ "type": "Script"
+ },
+ {
+ "name": "fields",
+ "type": "Field",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "TaskListener",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:UserTask"
+ ]
+ },
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "event",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "script",
+ "type": "Script"
+ },
+ {
+ "name": "fields",
+ "type": "Field",
+ "isMany": true
+ },
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "eventDefinitions",
+ "type": "bpmn:TimerEventDefinition",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "FormProperty",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:StartEvent",
+ "bpmn:UserTask"
+ ]
+ },
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "required",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "readable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "writable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "variable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "expression",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "datePattern",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "default",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "values",
+ "type": "Value",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "FormData",
+ "superClass": [ "Element" ],
+ "meta": {
+ "allowedIn": [
+ "bpmn:StartEvent",
+ "bpmn:UserTask"
+ ]
+ },
+ "properties": [
+ {
+ "name": "fields",
+ "type": "FormField",
+ "isMany": true
+ },
+ {
+ "name": "businessKey",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "FormField",
+ "superClass": [ "Element" ],
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "label",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "datePattern",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "defaultValue",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "properties",
+ "type": "Properties"
+ },
+ {
+ "name": "validation",
+ "type": "Validation"
+ },
+ {
+ "name": "values",
+ "type": "Value",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Validation",
+ "superClass": [ "Element" ],
+ "properties": [
+ {
+ "name": "constraints",
+ "type": "Constraint",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Constraint",
+ "superClass": [ "Element" ],
+ "properties": [
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "config",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "ConditionalEventDefinition",
+ "isAbstract": true,
+ "extends": [
+ "bpmn:ConditionalEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "variableName",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableEvents",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ }
+ ],
+ "emumerations": [ ]
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
new file mode 100644
index 000000000..ef76af47f
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
@@ -0,0 +1,1210 @@
+{
+ "name": "Flowable",
+ "uri": "http://flowable.org/bpmn",
+ "prefix": "flowable",
+ "xml": {
+ "tagAlias": "lowerCase"
+ },
+ "associations": [],
+ "types": [
+ {
+ "name": "InOutBinding",
+ "superClass": ["Element"],
+ "isAbstract": true,
+ "properties": [
+ {
+ "name": "source",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "sourceExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "target",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "businessKey",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "local",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "variables",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "In",
+ "superClass": ["InOutBinding"],
+ "meta": {
+ "allowedIn": ["bpmn:CallActivity"]
+ }
+ },
+ {
+ "name": "Out",
+ "superClass": ["InOutBinding"],
+ "meta": {
+ "allowedIn": ["bpmn:CallActivity"]
+ }
+ },
+ {
+ "name": "AsyncCapable",
+ "isAbstract": true,
+ "extends": ["bpmn:Activity", "bpmn:Gateway", "bpmn:Event"],
+ "properties": [
+ {
+ "name": "async",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "asyncBefore",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "asyncAfter",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "exclusive",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": true
+ }
+ ]
+ },
+ {
+ "name": "JobPriorized",
+ "isAbstract": true,
+ "extends": ["bpmn:Process", "flowable:AsyncCapable"],
+ "properties": [
+ {
+ "name": "jobPriority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "SignalEventDefinition",
+ "isAbstract": true,
+ "extends": ["bpmn:SignalEventDefinition"],
+ "properties": [
+ {
+ "name": "async",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ }
+ ]
+ },
+ {
+ "name": "ErrorEventDefinition",
+ "isAbstract": true,
+ "extends": ["bpmn:ErrorEventDefinition"],
+ "properties": [
+ {
+ "name": "errorCodeVariable",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "errorMessageVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Error",
+ "isAbstract": true,
+ "extends": ["bpmn:Error"],
+ "properties": [
+ {
+ "name": "flowable:errorMessage",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "PotentialStarter",
+ "superClass": ["Element"],
+ "properties": [
+ {
+ "name": "resourceAssignmentExpression",
+ "type": "bpmn:ResourceAssignmentExpression"
+ }
+ ]
+ },
+ {
+ "name": "FormSupported",
+ "isAbstract": true,
+ "extends": ["bpmn:StartEvent", "bpmn:UserTask"],
+ "properties": [
+ {
+ "name": "formHandlerClass",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "formKey",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "formType",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "formReadOnly",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": false
+ },
+ {
+ "name": "formInit",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": true
+ }
+ ]
+ },
+ {
+ "name": "TemplateSupported",
+ "isAbstract": true,
+ "extends": ["bpmn:Process", "bpmn:FlowElement"],
+ "properties": [
+ {
+ "name": "modelerTemplate",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Initiator",
+ "isAbstract": true,
+ "extends": ["bpmn:StartEvent"],
+ "properties": [
+ {
+ "name": "initiator",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ScriptTask",
+ "isAbstract": true,
+ "extends": ["bpmn:ScriptTask"],
+ "properties": [
+ {
+ "name": "resultVariable",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Process",
+ "isAbstract": true,
+ "extends": ["bpmn:Process"],
+ "properties": [
+ {
+ "name": "candidateStarterGroups",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateStarterUsers",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "versionTag",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "historyTimeToLive",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "isStartableInTasklist",
+ "isAttr": true,
+ "type": "Boolean",
+ "default": true
+ }
+ ]
+ },
+ {
+ "name": "EscalationEventDefinition",
+ "isAbstract": true,
+ "extends": ["bpmn:EscalationEventDefinition"],
+ "properties": [
+ {
+ "name": "escalationCodeVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "FormalExpression",
+ "isAbstract": true,
+ "extends": ["bpmn:FormalExpression"],
+ "properties": [
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Assignable",
+ "extends": ["bpmn:UserTask"],
+ "properties": [
+ {
+ "name": "assignee",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateUsers",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "candidateGroups",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "dueDate",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "followUpDate",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "priority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Assignee",
+ "supperClass": "Element",
+ "meta": {
+ "allowedIn": ["*"]
+ },
+ "properties": [
+ {
+ "name": "label",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "viewId",
+ "type": "Number",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "CallActivity",
+ "extends": ["bpmn:CallActivity"],
+ "properties": [
+ {
+ "name": "calledElementBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "calledElementVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "calledElementVersionTag",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "calledElementTenantId",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseRef",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "caseVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "caseTenantId",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableMappingClass",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableMappingDelegateExpression",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ServiceTaskLike",
+ "extends": [
+ "bpmn:ServiceTask",
+ "bpmn:BusinessRuleTask",
+ "bpmn:SendTask",
+ "bpmn:MessageEventDefinition"
+ ],
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resultVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "DmnCapable",
+ "extends": ["bpmn:BusinessRuleTask"],
+ "properties": [
+ {
+ "name": "decisionRef",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "decisionRefBinding",
+ "isAttr": true,
+ "type": "String",
+ "default": "latest"
+ },
+ {
+ "name": "decisionRefVersion",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "mapDecisionResult",
+ "isAttr": true,
+ "type": "String",
+ "default": "resultList"
+ },
+ {
+ "name": "decisionRefTenantId",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ExternalCapable",
+ "extends": ["flowable:ServiceTaskLike"],
+ "properties": [
+ {
+ "name": "type",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "topic",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "TaskPriorized",
+ "extends": ["bpmn:Process", "flowable:ExternalCapable"],
+ "properties": [
+ {
+ "name": "taskPriority",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Properties",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["*"]
+ },
+ "properties": [
+ {
+ "name": "values",
+ "type": "Property",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Property",
+ "superClass": ["Element"],
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "value",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "Button",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:UserTask"]
+ },
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "code",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "isHide",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "next",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "sort",
+ "type": "Integer",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "Assignee",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:UserTask"]
+ },
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "value",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "condition",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "operationType",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "sort",
+ "type": "Integer",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "Connector",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["flowable:ServiceTaskLike"]
+ },
+ "properties": [
+ {
+ "name": "inputOutput",
+ "type": "InputOutput"
+ },
+ {
+ "name": "connectorId",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "InputOutput",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:FlowNode", "flowable:Connector"]
+ },
+ "properties": [
+ {
+ "name": "inputOutput",
+ "type": "InputOutput"
+ },
+ {
+ "name": "connectorId",
+ "type": "String"
+ },
+ {
+ "name": "inputParameters",
+ "isMany": true,
+ "type": "InputParameter"
+ },
+ {
+ "name": "outputParameters",
+ "isMany": true,
+ "type": "OutputParameter"
+ }
+ ]
+ },
+ {
+ "name": "InputOutputParameter",
+ "properties": [
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ },
+ {
+ "name": "definition",
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "InputOutputParameterDefinition",
+ "isAbstract": true
+ },
+ {
+ "name": "List",
+ "superClass": ["InputOutputParameterDefinition"],
+ "properties": [
+ {
+ "name": "items",
+ "isMany": true,
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "Map",
+ "superClass": ["InputOutputParameterDefinition"],
+ "properties": [
+ {
+ "name": "entries",
+ "isMany": true,
+ "type": "Entry"
+ }
+ ]
+ },
+ {
+ "name": "Entry",
+ "properties": [
+ {
+ "name": "key",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ },
+ {
+ "name": "definition",
+ "type": "InputOutputParameterDefinition"
+ }
+ ]
+ },
+ {
+ "name": "Value",
+ "superClass": ["InputOutputParameterDefinition"],
+ "properties": [
+ {
+ "name": "id",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Script",
+ "superClass": ["InputOutputParameterDefinition"],
+ "properties": [
+ {
+ "name": "scriptFormat",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "resource",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "value",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Field",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": [
+ "flowable:ServiceTaskLike",
+ "flowable:ExecutionListener",
+ "flowable:TaskListener"
+ ]
+ },
+ "properties": [
+ {
+ "name": "name",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "expression",
+ "type": "String"
+ },
+ {
+ "name": "stringValue",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "string",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ChildField",
+ "superClass": ["Element"],
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "required",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "readable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "writable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "variable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "expression",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "datePattern",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "default",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "values",
+ "type": "Value",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "InputParameter",
+ "superClass": ["InputOutputParameter"]
+ },
+ {
+ "name": "OutputParameter",
+ "superClass": ["InputOutputParameter"]
+ },
+ {
+ "name": "Collectable",
+ "isAbstract": true,
+ "extends": ["bpmn:MultiInstanceLoopCharacteristics"],
+ "superClass": ["flowable:AsyncCapable"],
+ "properties": [
+ {
+ "name": "collection",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "elementVariable",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "FailedJobRetryTimeCycle",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": [
+ "flowable:AsyncCapable",
+ "bpmn:MultiInstanceLoopCharacteristics"
+ ]
+ },
+ "properties": [
+ {
+ "name": "body",
+ "isBody": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "ExecutionListener",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": [
+ "bpmn:Task",
+ "bpmn:ServiceTask",
+ "bpmn:UserTask",
+ "bpmn:BusinessRuleTask",
+ "bpmn:ScriptTask",
+ "bpmn:ReceiveTask",
+ "bpmn:ManualTask",
+ "bpmn:ExclusiveGateway",
+ "bpmn:SequenceFlow",
+ "bpmn:ParallelGateway",
+ "bpmn:InclusiveGateway",
+ "bpmn:EventBasedGateway",
+ "bpmn:StartEvent",
+ "bpmn:IntermediateCatchEvent",
+ "bpmn:IntermediateThrowEvent",
+ "bpmn:EndEvent",
+ "bpmn:BoundaryEvent",
+ "bpmn:CallActivity",
+ "bpmn:SubProcess",
+ "bpmn:Process"
+ ]
+ },
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "event",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "script",
+ "type": "Script"
+ },
+ {
+ "name": "fields",
+ "type": "Field",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "TaskListener",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:UserTask"]
+ },
+ "properties": [
+ {
+ "name": "expression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "class",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "delegateExpression",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "event",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "script",
+ "type": "Script"
+ },
+ {
+ "name": "fields",
+ "type": "Field",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "FormProperty",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:StartEvent", "bpmn:UserTask"]
+ },
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "required",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "readable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "writable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "variable",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "expression",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "datePattern",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "default",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "values",
+ "type": "Value",
+ "isMany": true
+ },
+ {
+ "name": "children",
+ "type": "ChildField",
+ "isMany": true
+ },
+ {
+ "name": "extensionElements",
+ "type": "bpmn:ExtensionElements",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "FormData",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:StartEvent", "bpmn:UserTask"]
+ },
+ "properties": [
+ {
+ "name": "fields",
+ "type": "FormField",
+ "isMany": true
+ },
+ {
+ "name": "businessKey",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "FormField",
+ "superClass": ["Element"],
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "label",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "type",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "datePattern",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "defaultValue",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "properties",
+ "type": "Properties"
+ },
+ {
+ "name": "validation",
+ "type": "Validation"
+ },
+ {
+ "name": "values",
+ "type": "Value",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Validation",
+ "superClass": ["Element"],
+ "properties": [
+ {
+ "name": "constraints",
+ "type": "Constraint",
+ "isMany": true
+ }
+ ]
+ },
+ {
+ "name": "Constraint",
+ "superClass": ["Element"],
+ "properties": [
+ {
+ "name": "name",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "config",
+ "type": "String",
+ "isAttr": true
+ }
+ ]
+ },
+ {
+ "name": "ConditionalEventDefinition",
+ "isAbstract": true,
+ "extends": ["bpmn:ConditionalEventDefinition"],
+ "properties": [
+ {
+ "name": "variableName",
+ "isAttr": true,
+ "type": "String"
+ },
+ {
+ "name": "variableEvent",
+ "isAttr": true,
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "name": "Condition",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:SequenceFlow"]
+ },
+ "properties": [
+ {
+ "name": "id",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "field",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "compare",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "value",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "logic",
+ "type": "String",
+ "isAttr": true
+ },
+ {
+ "name": "sort",
+ "type": "Integer",
+ "isAttr": true
+ }
+ ]
+ }
+ ],
+ "emumerations": []
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/activitiExtension.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/activitiExtension.js
new file mode 100644
index 000000000..1287e0417
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/activitiExtension.js
@@ -0,0 +1,74 @@
+"use strict";
+
+var some = require("min-dash").some;
+
+var ALLOWED_TYPES = {
+ FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"],
+ Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"],
+ Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"]
+};
+
+function is(element, type) {
+ return element && typeof element.$instanceOf === "function" && element.$instanceOf(type);
+}
+
+function exists(element) {
+ return element && element.length;
+}
+
+function includesType(collection, type) {
+ return (
+ exists(collection) &&
+ some(collection, function(element) {
+ return is(element, type);
+ })
+ );
+}
+
+function anyType(element, types) {
+ return some(types, function(type) {
+ return is(element, type);
+ });
+}
+
+function isAllowed(propName, propDescriptor, newElement) {
+ var name = propDescriptor.name,
+ types = ALLOWED_TYPES[name.replace(/activiti:/, "")];
+
+ return name === propName && anyType(newElement, types);
+}
+
+function ActivitiModdleExtension(eventBus) {
+ eventBus.on(
+ "property.clone",
+ function(context) {
+ var newElement = context.newElement,
+ propDescriptor = context.propertyDescriptor;
+
+ this.canCloneProperty(newElement, propDescriptor);
+ },
+ this
+ );
+}
+
+ActivitiModdleExtension.$inject = ["eventBus"];
+
+ActivitiModdleExtension.prototype.canCloneProperty = function(newElement, propDescriptor) {
+ if (isAllowed("activiti:FailedJobRetryTimeCycle", propDescriptor, newElement)) {
+ return (
+ includesType(newElement.eventDefinitions, "bpmn:TimerEventDefinition") ||
+ includesType(newElement.eventDefinitions, "bpmn:SignalEventDefinition") ||
+ is(newElement.loopCharacteristics, "bpmn:MultiInstanceLoopCharacteristics")
+ );
+ }
+
+ if (isAllowed("activiti:Connector", propDescriptor, newElement)) {
+ return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
+ }
+
+ if (isAllowed("activiti:Field", propDescriptor, newElement)) {
+ return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
+ }
+};
+
+module.exports = ActivitiModdleExtension;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/index.js
new file mode 100644
index 000000000..6ce014af4
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/index.js
@@ -0,0 +1,9 @@
+/*
+ * @author igdianov
+ * address https://github.com/igdianov/activiti-bpmn-moddle
+ * */
+
+module.exports = {
+ __init__: ["ActivitiModdleExtension"],
+ ActivitiModdleExtension: ["type", require("./activitiExtension")]
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/extension.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/extension.js
new file mode 100644
index 000000000..a55236a3a
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/extension.js
@@ -0,0 +1,148 @@
+"use strict";
+
+var isFunction = require("min-dash").isFunction,
+ isObject = require("min-dash").isObject,
+ some = require("min-dash").some;
+
+var WILDCARD = "*";
+
+function CamundaModdleExtension(eventBus) {
+ var self = this;
+
+ eventBus.on("moddleCopy.canCopyProperty", function(context) {
+ var property = context.property,
+ parent = context.parent;
+
+ return self.canCopyProperty(property, parent);
+ });
+}
+
+CamundaModdleExtension.$inject = ["eventBus"];
+
+/**
+ * Check wether to disallow copying property.
+ */
+CamundaModdleExtension.prototype.canCopyProperty = function(property, parent) {
+ // (1) check wether property is allowed in parent
+ if (isObject(property) && !isAllowedInParent(property, parent)) {
+ return false;
+ }
+
+ // (2) check more complex scenarios
+
+ if (is(property, "camunda:InputOutput") && !this.canHostInputOutput(parent)) {
+ return false;
+ }
+
+ if (isAny(property, ["camunda:Connector", "camunda:Field"]) && !this.canHostConnector(parent)) {
+ return false;
+ }
+
+ if (is(property, "camunda:In") && !this.canHostIn(parent)) {
+ return false;
+ }
+};
+
+CamundaModdleExtension.prototype.canHostInputOutput = function(parent) {
+ // allowed in camunda:Connector
+ var connector = getParent(parent, "camunda:Connector");
+
+ if (connector) {
+ return true;
+ }
+
+ // special rules inside bpmn:FlowNode
+ var flowNode = getParent(parent, "bpmn:FlowNode");
+
+ if (!flowNode) {
+ return false;
+ }
+
+ if (isAny(flowNode, ["bpmn:StartEvent", "bpmn:Gateway", "bpmn:BoundaryEvent"])) {
+ return false;
+ }
+
+ if (is(flowNode, "bpmn:SubProcess") && flowNode.get("triggeredByEvent")) {
+ return false;
+ }
+
+ return true;
+};
+
+CamundaModdleExtension.prototype.canHostConnector = function(parent) {
+ var serviceTaskLike = getParent(parent, "camunda:ServiceTaskLike");
+
+ if (is(serviceTaskLike, "bpmn:MessageEventDefinition")) {
+ // only allow on throw and end events
+ return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent");
+ }
+
+ return true;
+};
+
+CamundaModdleExtension.prototype.canHostIn = function(parent) {
+ var callActivity = getParent(parent, "bpmn:CallActivity");
+
+ if (callActivity) {
+ return true;
+ }
+
+ var signalEventDefinition = getParent(parent, "bpmn:SignalEventDefinition");
+
+ if (signalEventDefinition) {
+ // only allow on throw and end events
+ return getParent(parent, "bpmn:IntermediateThrowEvent") || getParent(parent, "bpmn:EndEvent");
+ }
+
+ return true;
+};
+
+module.exports = CamundaModdleExtension;
+
+// helpers //////////
+
+function is(element, type) {
+ return element && isFunction(element.$instanceOf) && element.$instanceOf(type);
+}
+
+function isAny(element, types) {
+ return some(types, function(t) {
+ return is(element, t);
+ });
+}
+
+function getParent(element, type) {
+ if (!type) {
+ return element.$parent;
+ }
+
+ if (is(element, type)) {
+ return element;
+ }
+
+ if (!element.$parent) {
+ return;
+ }
+
+ return getParent(element.$parent, type);
+}
+
+function isAllowedInParent(property, parent) {
+ // (1) find property descriptor
+ var descriptor = property.$type && property.$model.getTypeDescriptor(property.$type);
+
+ var allowedIn = descriptor && descriptor.meta && descriptor.meta.allowedIn;
+
+ if (!allowedIn || isWildcard(allowedIn)) {
+ return true;
+ }
+
+ // (2) check wether property has parent of allowed type
+ return some(allowedIn, function(type) {
+ return getParent(parent, type);
+ });
+}
+
+function isWildcard(allowedIn) {
+ return allowedIn.indexOf(WILDCARD) !== -1;
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/index.js
new file mode 100644
index 000000000..0a9e41cf4
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/index.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = {
+ __init__: ["camundaModdleExtension"],
+ camundaModdleExtension: ["type", require("./extension")]
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/flowableExtension.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/flowableExtension.js
new file mode 100644
index 000000000..4689024bd
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/flowableExtension.js
@@ -0,0 +1,74 @@
+"use strict";
+
+var some = require("min-dash").some;
+
+var ALLOWED_TYPES = {
+ FailedJobRetryTimeCycle: ["bpmn:StartEvent", "bpmn:BoundaryEvent", "bpmn:IntermediateCatchEvent", "bpmn:Activity"],
+ Connector: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"],
+ Field: ["bpmn:EndEvent", "bpmn:IntermediateThrowEvent"]
+};
+
+function is(element, type) {
+ return element && typeof element.$instanceOf === "function" && element.$instanceOf(type);
+}
+
+function exists(element) {
+ return element && element.length;
+}
+
+function includesType(collection, type) {
+ return (
+ exists(collection) &&
+ some(collection, function(element) {
+ return is(element, type);
+ })
+ );
+}
+
+function anyType(element, types) {
+ return some(types, function(type) {
+ return is(element, type);
+ });
+}
+
+function isAllowed(propName, propDescriptor, newElement) {
+ var name = propDescriptor.name,
+ types = ALLOWED_TYPES[name.replace(/flowable:/, "")];
+
+ return name === propName && anyType(newElement, types);
+}
+
+function FlowableModdleExtension(eventBus) {
+ eventBus.on(
+ "property.clone",
+ function(context) {
+ var newElement = context.newElement,
+ propDescriptor = context.propertyDescriptor;
+
+ this.canCloneProperty(newElement, propDescriptor);
+ },
+ this
+ );
+}
+
+FlowableModdleExtension.$inject = ["eventBus"];
+
+FlowableModdleExtension.prototype.canCloneProperty = function(newElement, propDescriptor) {
+ if (isAllowed("flowable:FailedJobRetryTimeCycle", propDescriptor, newElement)) {
+ return (
+ includesType(newElement.eventDefinitions, "bpmn:TimerEventDefinition") ||
+ includesType(newElement.eventDefinitions, "bpmn:SignalEventDefinition") ||
+ is(newElement.loopCharacteristics, "bpmn:MultiInstanceLoopCharacteristics")
+ );
+ }
+
+ if (isAllowed("flowable:Connector", propDescriptor, newElement)) {
+ return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
+ }
+
+ if (isAllowed("flowable:Field", propDescriptor, newElement)) {
+ return includesType(newElement.eventDefinitions, "bpmn:MessageEventDefinition");
+ }
+};
+
+module.exports = FlowableModdleExtension;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/index.js
new file mode 100644
index 000000000..59837cca1
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/index.js
@@ -0,0 +1,9 @@
+/*
+ * @author igdianov
+ * address https://github.com/igdianov/activiti-bpmn-moddle
+ * */
+
+module.exports = {
+ __init__: ["FlowableModdleExtension"],
+ FlowableModdleExtension: ["type", require("./flowableExtension")]
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/CustomPalette.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/CustomPalette.js
new file mode 100644
index 000000000..f67cff951
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/CustomPalette.js
@@ -0,0 +1,156 @@
+import PaletteProvider from "bpmn-js/lib/features/palette/PaletteProvider";
+import { assign } from "min-dash";
+
+export default function CustomPalette(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) {
+ PaletteProvider.call(this, palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate, 2000);
+}
+
+const F = function() {}; // 核心,利用空对象作为中介;
+F.prototype = PaletteProvider.prototype; // 核心,将父类的原型赋值给空对象F;
+
+// 利用中介函数重写原型链方法
+F.prototype.getPaletteEntries = function() {
+ var actions = {},
+ create = this._create,
+ elementFactory = this._elementFactory,
+ spaceTool = this._spaceTool,
+ lassoTool = this._lassoTool,
+ handTool = this._handTool,
+ globalConnect = this._globalConnect,
+ translate = this._translate;
+
+ function createAction(type, group, className, title, options) {
+ function createListener(event) {
+ var shape = elementFactory.createShape(assign({ type: type }, options));
+
+ if (options) {
+ shape.businessObject.di.isExpanded = options.isExpanded;
+ }
+
+ create.start(event, shape);
+ }
+
+ var shortType = type.replace(/^bpmn:/, "");
+
+ return {
+ group: group,
+ className: className,
+ title: title || translate("Create {type}", { type: shortType }),
+ action: {
+ dragstart: createListener,
+ click: createListener
+ }
+ };
+ }
+
+ function createSubprocess(event) {
+ var subProcess = elementFactory.createShape({
+ type: "bpmn:SubProcess",
+ x: 0,
+ y: 0,
+ isExpanded: true
+ });
+
+ var startEvent = elementFactory.createShape({
+ type: "bpmn:StartEvent",
+ x: 40,
+ y: 82,
+ parent: subProcess
+ });
+
+ create.start(event, [subProcess, startEvent], {
+ hints: {
+ autoSelect: [startEvent]
+ }
+ });
+ }
+
+ function createParticipant(event) {
+ create.start(event, elementFactory.createParticipantShape());
+ }
+
+ assign(actions, {
+ "hand-tool": {
+ group: "tools",
+ className: "bpmn-icon-hand-tool",
+ title: translate("Activate the hand tool"),
+ action: {
+ click: function(event) {
+ handTool.activateHand(event);
+ }
+ }
+ },
+ "lasso-tool": {
+ group: "tools",
+ className: "bpmn-icon-lasso-tool",
+ title: translate("Activate the lasso tool"),
+ action: {
+ click: function(event) {
+ lassoTool.activateSelection(event);
+ }
+ }
+ },
+ "space-tool": {
+ group: "tools",
+ className: "bpmn-icon-space-tool",
+ title: translate("Activate the create/remove space tool"),
+ action: {
+ click: function(event) {
+ spaceTool.activateSelection(event);
+ }
+ }
+ },
+ "global-connect-tool": {
+ group: "tools",
+ className: "bpmn-icon-connection-multi",
+ title: translate("Activate the global connect tool"),
+ action: {
+ click: function(event) {
+ globalConnect.toggle(event);
+ }
+ }
+ },
+ "tool-separator": {
+ group: "tools",
+ separator: true
+ },
+ "create.start-event": createAction("bpmn:StartEvent", "event", "bpmn-icon-start-event-none", translate("Create StartEvent")),
+ "create.intermediate-event": createAction(
+ "bpmn:IntermediateThrowEvent",
+ "event",
+ "bpmn-icon-intermediate-event-none",
+ translate("Create Intermediate/Boundary Event")
+ ),
+ "create.end-event": createAction("bpmn:EndEvent", "event", "bpmn-icon-end-event-none", translate("Create EndEvent")),
+ "create.exclusive-gateway": createAction("bpmn:ExclusiveGateway", "gateway", "bpmn-icon-gateway-none", translate("Create Gateway")),
+ "create.user-task": createAction("bpmn:UserTask", "activity", "bpmn-icon-user-task", translate("Create User Task")),
+ "create.data-object": createAction("bpmn:DataObjectReference", "data-object", "bpmn-icon-data-object", translate("Create DataObjectReference")),
+ "create.data-store": createAction("bpmn:DataStoreReference", "data-store", "bpmn-icon-data-store", translate("Create DataStoreReference")),
+ "create.subprocess-expanded": {
+ group: "activity",
+ className: "bpmn-icon-subprocess-expanded",
+ title: translate("Create expanded SubProcess"),
+ action: {
+ dragstart: createSubprocess,
+ click: createSubprocess
+ }
+ },
+ "create.participant-expanded": {
+ group: "collaboration",
+ className: "bpmn-icon-participant",
+ title: translate("Create Pool/Participant"),
+ action: {
+ dragstart: createParticipant,
+ click: createParticipant
+ }
+ },
+ "create.group": createAction("bpmn:Group", "artifact", "bpmn-icon-group", translate("Create Group"))
+ });
+
+ return actions;
+};
+
+CustomPalette.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"];
+
+CustomPalette.prototype = new F(); // 核心,将 F的实例赋值给子类;
+CustomPalette.prototype.constructor = CustomPalette; // 修复子类CustomPalette的构造器指向,防止原型链的混乱;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/index.js
new file mode 100644
index 000000000..85ea4e221
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/index.js
@@ -0,0 +1,23 @@
+// import PaletteModule from "diagram-js/lib/features/palette";
+// import CreateModule from "diagram-js/lib/features/create";
+// import SpaceToolModule from "diagram-js/lib/features/space-tool";
+// import LassoToolModule from "diagram-js/lib/features/lasso-tool";
+// import HandToolModule from "diagram-js/lib/features/hand-tool";
+// import GlobalConnectModule from "diagram-js/lib/features/global-connect";
+// import translate from "diagram-js/lib/i18n/translate";
+//
+// import PaletteProvider from "./paletteProvider";
+//
+// export default {
+// __depends__: [PaletteModule, CreateModule, SpaceToolModule, LassoToolModule, HandToolModule, GlobalConnectModule, translate],
+// __init__: ["paletteProvider"],
+// paletteProvider: ["type", PaletteProvider]
+// };
+
+// custom/index.js
+import CustomPalette from "./CustomPalette";
+
+export default {
+ __init__: ["paletteProvider"],
+ paletteProvider: ["type", CustomPalette]
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/paletteProvider.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/paletteProvider.js
new file mode 100644
index 000000000..e0c32380c
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/palette/paletteProvider.js
@@ -0,0 +1,160 @@
+import { assign } from "min-dash";
+
+/**
+ * A palette provider for BPMN 2.0 elements.
+ */
+export default function PaletteProvider(palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) {
+ this._palette = palette;
+ this._create = create;
+ this._elementFactory = elementFactory;
+ this._spaceTool = spaceTool;
+ this._lassoTool = lassoTool;
+ this._handTool = handTool;
+ this._globalConnect = globalConnect;
+ this._translate = translate;
+
+ palette.registerProvider(this);
+}
+
+PaletteProvider.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"];
+
+PaletteProvider.prototype.getPaletteEntries = function() {
+ var actions = {},
+ create = this._create,
+ elementFactory = this._elementFactory,
+ spaceTool = this._spaceTool,
+ lassoTool = this._lassoTool,
+ handTool = this._handTool,
+ globalConnect = this._globalConnect,
+ translate = this._translate;
+
+ function createAction(type, group, className, title, options) {
+ function createListener(event) {
+ var shape = elementFactory.createShape(assign({ type: type }, options));
+
+ if (options) {
+ shape.businessObject.di.isExpanded = options.isExpanded;
+ }
+
+ create.start(event, shape);
+ }
+
+ var shortType = type.replace(/^bpmn:/, "");
+
+ return {
+ group: group,
+ className: className,
+ title: title || translate("Create {type}", { type: shortType }),
+ action: {
+ dragstart: createListener,
+ click: createListener
+ }
+ };
+ }
+
+ function createSubprocess(event) {
+ var subProcess = elementFactory.createShape({
+ type: "bpmn:SubProcess",
+ x: 0,
+ y: 0,
+ isExpanded: true
+ });
+
+ var startEvent = elementFactory.createShape({
+ type: "bpmn:StartEvent",
+ x: 40,
+ y: 82,
+ parent: subProcess
+ });
+
+ create.start(event, [subProcess, startEvent], {
+ hints: {
+ autoSelect: [startEvent]
+ }
+ });
+ }
+
+ function createParticipant(event) {
+ create.start(event, elementFactory.createParticipantShape());
+ }
+
+ assign(actions, {
+ "hand-tool": {
+ group: "tools",
+ className: "bpmn-icon-hand-tool",
+ title: translate("Activate the hand tool"),
+ action: {
+ click: function(event) {
+ handTool.activateHand(event);
+ }
+ }
+ },
+ "lasso-tool": {
+ group: "tools",
+ className: "bpmn-icon-lasso-tool",
+ title: translate("Activate the lasso tool"),
+ action: {
+ click: function(event) {
+ lassoTool.activateSelection(event);
+ }
+ }
+ },
+ "space-tool": {
+ group: "tools",
+ className: "bpmn-icon-space-tool",
+ title: translate("Activate the create/remove space tool"),
+ action: {
+ click: function(event) {
+ spaceTool.activateSelection(event);
+ }
+ }
+ },
+ "global-connect-tool": {
+ group: "tools",
+ className: "bpmn-icon-connection-multi",
+ title: translate("Activate the global connect tool"),
+ action: {
+ click: function(event) {
+ globalConnect.toggle(event);
+ }
+ }
+ },
+ "tool-separator": {
+ group: "tools",
+ separator: true
+ },
+ "create.start-event": createAction("bpmn:StartEvent", "event", "bpmn-icon-start-event-none", translate("Create StartEvent")),
+ "create.intermediate-event": createAction(
+ "bpmn:IntermediateThrowEvent",
+ "event",
+ "bpmn-icon-intermediate-event-none",
+ translate("Create Intermediate/Boundary Event")
+ ),
+ "create.end-event": createAction("bpmn:EndEvent", "event", "bpmn-icon-end-event-none", translate("Create EndEvent")),
+ "create.exclusive-gateway": createAction("bpmn:ExclusiveGateway", "gateway", "bpmn-icon-gateway-none", translate("Create Gateway")),
+ "create.user-task": createAction("bpmn:UserTask", "activity", "bpmn-icon-user-task", translate("Create User Task")),
+ "create.data-object": createAction("bpmn:DataObjectReference", "data-object", "bpmn-icon-data-object", translate("Create DataObjectReference")),
+ "create.data-store": createAction("bpmn:DataStoreReference", "data-store", "bpmn-icon-data-store", translate("Create DataStoreReference")),
+ "create.subprocess-expanded": {
+ group: "activity",
+ className: "bpmn-icon-subprocess-expanded",
+ title: translate("Create expanded SubProcess"),
+ action: {
+ dragstart: createSubprocess,
+ click: createSubprocess
+ }
+ },
+ "create.participant-expanded": {
+ group: "collaboration",
+ className: "bpmn-icon-participant",
+ title: translate("Create Pool/Participant"),
+ action: {
+ dragstart: createParticipant,
+ click: createParticipant
+ }
+ },
+ "create.group": createAction("bpmn:Group", "artifact", "bpmn-icon-group", translate("Create Group"))
+ });
+
+ return actions;
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js
new file mode 100644
index 000000000..508040d66
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js
@@ -0,0 +1,41 @@
+// import translations from "./zh";
+//
+// export default function customTranslate(template, replacements) {
+// replacements = replacements || {};
+//
+// // Translate
+// template = translations[template] || template;
+//
+// // Replace
+// return template.replace(/{([^}]+)}/g, function(_, key) {
+// let str = replacements[key];
+// if (
+// translations[replacements[key]] !== null &&
+// translations[replacements[key]] !== "undefined"
+// ) {
+// // eslint-disable-next-line no-mixed-spaces-and-tabs
+// str = translations[replacements[key]];
+// // eslint-disable-next-line no-mixed-spaces-and-tabs
+// }
+// return str || "{" + key + "}";
+// });
+// }
+
+export default function customTranslate(translations) {
+ return function(template, replacements) {
+ replacements = replacements || {};
+ // Translate
+ template = translations[template] || template;
+
+ // Replace
+ return template.replace(/{([^}]+)}/g, function(_, key) {
+ let str = replacements[key];
+ if (translations[replacements[key]] !== null && translations[replacements[key]] !== undefined) {
+ // eslint-disable-next-line no-mixed-spaces-and-tabs
+ str = translations[replacements[key]];
+ // eslint-disable-next-line no-mixed-spaces-and-tabs
+ }
+ return str || "{" + key + "}";
+ });
+ };
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js
new file mode 100644
index 000000000..855b561ed
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js
@@ -0,0 +1,238 @@
+/**
+ * This is a sample file that should be replaced with the actual translation.
+ *
+ * Checkout https://github.com/bpmn-io/bpmn-js-i18n for a list of available
+ * translations and labels to translate.
+ */
+export default {
+ // 添加部分
+ "Append EndEvent": "追加结束事件",
+ "Append Gateway": "追加网关",
+ "Append Task": "追加任务",
+ "Append Intermediate/Boundary Event": "追加中间抛出事件/边界事件",
+
+ "Activate the global connect tool": "激活全局连接工具",
+ "Append {type}": "添加 {type}",
+ "Add Lane above": "在上面添加道",
+ "Divide into two Lanes": "分割成两个道",
+ "Divide into three Lanes": "分割成三个道",
+ "Add Lane below": "在下面添加道",
+ "Append compensation activity": "追加补偿活动",
+ "Change type": "修改类型",
+ "Connect using Association": "使用关联连接",
+ "Connect using Sequence/MessageFlow or Association": "使用顺序/消息流或者关联连接",
+ "Connect using DataInputAssociation": "使用数据输入关联连接",
+ Remove: "移除",
+ "Activate the hand tool": "激活抓手工具",
+ "Activate the lasso tool": "激活套索工具",
+ "Activate the create/remove space tool": "激活创建/删除空间工具",
+ "Create expanded SubProcess": "创建扩展子过程",
+ "Create IntermediateThrowEvent/BoundaryEvent": "创建中间抛出事件/边界事件",
+ "Create Pool/Participant": "创建池/参与者",
+ "Parallel Multi Instance": "并行多重事件",
+ "Sequential Multi Instance": "时序多重事件",
+ DataObjectReference: "数据对象参考",
+ DataStoreReference: "数据存储参考",
+ Loop: "循环",
+ "Ad-hoc": "即席",
+ "Create {type}": "创建 {type}",
+ Task: "任务",
+ "Send Task": "发送任务",
+ "Receive Task": "接收任务",
+ "User Task": "用户任务",
+ "Manual Task": "手工任务",
+ "Business Rule Task": "业务规则任务",
+ "Service Task": "服务任务",
+ "Script Task": "脚本任务",
+ "Call Activity": "调用活动",
+ "Sub Process (collapsed)": "子流程(折叠的)",
+ "Sub Process (expanded)": "子流程(展开的)",
+ "Start Event": "开始事件",
+ StartEvent: "开始事件",
+ "Intermediate Throw Event": "中间事件",
+ "End Event": "结束事件",
+ EndEvent: "结束事件",
+ "Create StartEvent": "创建开始事件",
+ "Create EndEvent": "创建结束事件",
+ "Create Task": "创建任务",
+ "Create User Task": "创建用户任务",
+ "Create Gateway": "创建网关",
+ "Create DataObjectReference": "创建数据对象",
+ "Create DataStoreReference": "创建数据存储",
+ "Create Group": "创建分组",
+ "Create Intermediate/Boundary Event": "创建中间/边界事件",
+ "Message Start Event": "消息开始事件",
+ "Timer Start Event": "定时开始事件",
+ "Conditional Start Event": "条件开始事件",
+ "Signal Start Event": "信号开始事件",
+ "Error Start Event": "错误开始事件",
+ "Escalation Start Event": "升级开始事件",
+ "Compensation Start Event": "补偿开始事件",
+ "Message Start Event (non-interrupting)": "消息开始事件(非中断)",
+ "Timer Start Event (non-interrupting)": "定时开始事件(非中断)",
+ "Conditional Start Event (non-interrupting)": "条件开始事件(非中断)",
+ "Signal Start Event (non-interrupting)": "信号开始事件(非中断)",
+ "Escalation Start Event (non-interrupting)": "升级开始事件(非中断)",
+ "Message Intermediate Catch Event": "消息中间捕获事件",
+ "Message Intermediate Throw Event": "消息中间抛出事件",
+ "Timer Intermediate Catch Event": "定时中间捕获事件",
+ "Escalation Intermediate Throw Event": "升级中间抛出事件",
+ "Conditional Intermediate Catch Event": "条件中间捕获事件",
+ "Link Intermediate Catch Event": "链接中间捕获事件",
+ "Link Intermediate Throw Event": "链接中间抛出事件",
+ "Compensation Intermediate Throw Event": "补偿中间抛出事件",
+ "Signal Intermediate Catch Event": "信号中间捕获事件",
+ "Signal Intermediate Throw Event": "信号中间抛出事件",
+ "Message End Event": "消息结束事件",
+ "Escalation End Event": "定时结束事件",
+ "Error End Event": "错误结束事件",
+ "Cancel End Event": "取消结束事件",
+ "Compensation End Event": "补偿结束事件",
+ "Signal End Event": "信号结束事件",
+ "Terminate End Event": "终止结束事件",
+ "Message Boundary Event": "消息边界事件",
+ "Message Boundary Event (non-interrupting)": "消息边界事件(非中断)",
+ "Timer Boundary Event": "定时边界事件",
+ "Timer Boundary Event (non-interrupting)": "定时边界事件(非中断)",
+ "Escalation Boundary Event": "升级边界事件",
+ "Escalation Boundary Event (non-interrupting)": "升级边界事件(非中断)",
+ "Conditional Boundary Event": "条件边界事件",
+ "Conditional Boundary Event (non-interrupting)": "条件边界事件(非中断)",
+ "Error Boundary Event": "错误边界事件",
+ "Cancel Boundary Event": "取消边界事件",
+ "Signal Boundary Event": "信号边界事件",
+ "Signal Boundary Event (non-interrupting)": "信号边界事件(非中断)",
+ "Compensation Boundary Event": "补偿边界事件",
+ "Exclusive Gateway": "互斥网关",
+ "Parallel Gateway": "并行网关",
+ "Inclusive Gateway": "相容网关",
+ "Complex Gateway": "复杂网关",
+ "Event based Gateway": "事件网关",
+ Transaction: "转运",
+ "Sub Process": "子流程",
+ "Event Sub Process": "事件子流程",
+ "Collapsed Pool": "折叠池",
+ "Expanded Pool": "展开池",
+
+ // Errors
+ "no parent for {element} in {parent}": "在{parent}里,{element}没有父类",
+ "no shape type specified": "没有指定的形状类型",
+ "flow elements must be children of pools/participants": "流元素必须是池/参与者的子类",
+ "out of bounds release": "out of bounds release",
+ "more than {count} child lanes": "子道大于{count} ",
+ "element required": "元素不能为空",
+ "diagram not part of bpmn:Definitions": "流程图不符合bpmn规范",
+ "no diagram to display": "没有可展示的流程图",
+ "no process or collaboration to display": "没有可展示的流程/协作",
+ "element {element} referenced by {referenced}#{property} not yet drawn": "由{referenced}#{property}引用的{element}元素仍未绘制",
+ "already rendered {element}": "{element} 已被渲染",
+ "failed to import {element}": "导入{element}失败",
+ //属性面板的参数
+ Id: "编号",
+ Name: "名称",
+ General: "常规",
+ Details: "详情",
+ "Message Name": "消息名称",
+ Message: "消息",
+ Initiator: "创建者",
+ "Asynchronous Continuations": "持续异步",
+ "Asynchronous Before": "异步前",
+ "Asynchronous After": "异步后",
+ "Job Configuration": "工作配置",
+ Exclusive: "排除",
+ "Job Priority": "工作优先级",
+ "Retry Time Cycle": "重试时间周期",
+ Documentation: "文档",
+ "Element Documentation": "元素文档",
+ "History Configuration": "历史配置",
+ "History Time To Live": "历史的生存时间",
+ Forms: "表单",
+ "Form Key": "表单key",
+ "Form Fields": "表单字段",
+ "Business Key": "业务key",
+ "Form Field": "表单字段",
+ ID: "编号",
+ Type: "类型",
+ Label: "名称",
+ "Default Value": "默认值",
+ "Default Flow": "默认流转路径",
+ "Conditional Flow": "条件流转路径",
+ "Sequence Flow": "普通流转路径",
+ Validation: "校验",
+ "Add Constraint": "添加约束",
+ Config: "配置",
+ Properties: "属性",
+ "Add Property": "添加属性",
+ Value: "值",
+ Listeners: "监听器",
+ "Execution Listener": "执行监听",
+ "Event Type": "事件类型",
+ "Listener Type": "监听器类型",
+ "Java Class": "Java类",
+ Expression: "表达式",
+ "Must provide a value": "必须提供一个值",
+ "Delegate Expression": "代理表达式",
+ Script: "脚本",
+ "Script Format": "脚本格式",
+ "Script Type": "脚本类型",
+ "Inline Script": "内联脚本",
+ "External Script": "外部脚本",
+ Resource: "资源",
+ "Field Injection": "字段注入",
+ Extensions: "扩展",
+ "Input/Output": "输入/输出",
+ "Input Parameters": "输入参数",
+ "Output Parameters": "输出参数",
+ Parameters: "参数",
+ "Output Parameter": "输出参数",
+ "Timer Definition Type": "定时器定义类型",
+ "Timer Definition": "定时器定义",
+ Date: "日期",
+ Duration: "持续",
+ Cycle: "循环",
+ Signal: "信号",
+ "Signal Name": "信号名称",
+ Escalation: "升级",
+ Error: "错误",
+ "Link Name": "链接名称",
+ Condition: "条件名称",
+ "Variable Name": "变量名称",
+ "Variable Event": "变量事件",
+ "Specify more than one variable change event as a comma separated list.": "多个变量事件以逗号隔开",
+ "Wait for Completion": "等待完成",
+ "Activity Ref": "活动参考",
+ "Version Tag": "版本标签",
+ Executable: "可执行文件",
+ "External Task Configuration": "扩展任务配置",
+ "Task Priority": "任务优先级",
+ External: "外部",
+ Connector: "连接器",
+ "Must configure Connector": "必须配置连接器",
+ "Connector Id": "连接器编号",
+ Implementation: "实现方式",
+ "Field Injections": "字段注入",
+ Fields: "字段",
+ "Result Variable": "结果变量",
+ Topic: "主题",
+ "Configure Connector": "配置连接器",
+ "Input Parameter": "输入参数",
+ Assignee: "代理人",
+ "Candidate Users": "候选用户",
+ "Candidate Groups": "候选组",
+ "Due Date": "到期时间",
+ "Follow Up Date": "跟踪日期",
+ Priority: "优先级",
+ "The follow up date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)":
+ "跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00",
+ "The due date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)":
+ "跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00",
+ Variables: "变量",
+ "Candidate Starter Configuration": "候选人起动器配置",
+ "Candidate Starter Groups": "候选人起动器组",
+ "This maps to the process definition key.": "这映射到流程定义键。",
+ "Candidate Starter Users": "候选人起动器的用户",
+ "Specify more than one user as a comma separated list.": "指定多个用户作为逗号分隔的列表。",
+ "Tasklist Configuration": "Tasklist配置",
+ Startable: "启动",
+ "Specify more than one group as a comma separated list.": "指定多个组作为逗号分隔的列表。"
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/index.js
new file mode 100644
index 000000000..5695d8fdc
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/index.js
@@ -0,0 +1,20 @@
+import MyProcessDesigner from "./designer";
+import MyProcessPenal from "./penal";
+
+const components = [MyProcessDesigner, MyProcessPenal];
+
+const install = function(Vue) {
+ components.forEach(component => {
+ Vue.component(component.name, component);
+ });
+};
+
+if (typeof window !== "undefined" && window.Vue) {
+ install(window.Vue);
+}
+
+export default {
+ version: "0.0.1",
+ install,
+ ...components
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/palette/ProcessPalette.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/palette/ProcessPalette.vue
new file mode 100644
index 000000000..8d54dee22
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/palette/ProcessPalette.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue
new file mode 100644
index 000000000..5af450dbf
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue
@@ -0,0 +1,193 @@
+
+
+
+
+ 常规
+
+
+
+ 消息与信号
+
+
+
+ 流转条件
+
+
+
+ 表单
+
+
+
+ 任务
+
+
+
+ 多实例
+
+
+
+ 执行监听器
+
+
+
+ 任务监听器
+
+
+
+ 扩展属性
+
+
+
+ 其他
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue
new file mode 100644
index 000000000..533f3509e
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
new file mode 100644
index 000000000..94cf823c8
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue
new file mode 100644
index 000000000..fc7dbb341
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue
@@ -0,0 +1,361 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 表单字段
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+
+ 添加字段
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 枚举值列表:
+ 添加枚举值
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+
+
+
+
+ 约束条件列表:
+ 添加约束
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+
+
+
+ 字段属性列表:
+ 添加属性
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+
+
+ 取 消
+ 保 存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+ 确 定
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/index.js
new file mode 100644
index 000000000..6cb0c77c9
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/index.js
@@ -0,0 +1,7 @@
+import MyPropertiesPanel from "./PropertiesPanel.vue";
+
+MyPropertiesPanel.install = function(Vue) {
+ Vue.component(MyPropertiesPanel.name, MyPropertiesPanel);
+};
+
+export default MyPropertiesPanel;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue
new file mode 100644
index 000000000..16f509951
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+ 添加监听器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注入字段:
+ 添加字段
+
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+
+ 取 消
+ 保 存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+ 确 定
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue
new file mode 100644
index 000000000..b71e868e6
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+ 添加监听器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注入字段:
+ 添加字段
+
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+
+ 取 消
+ 保 存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+ 确 定
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/template.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/template.js
new file mode 100644
index 000000000..455b70d8b
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/template.js
@@ -0,0 +1,178 @@
+export const template = isTaskListener => {
+ return `
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+ 添加监听器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${
+ isTaskListener
+ ? "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ ""
+ : ""
+ }
+
+
+
+ 注入字段:
+ 添加字段
+
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+
+ 取 消
+ 保 存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+ 确 定
+
+
+
+ `;
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/utilSelf.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/utilSelf.js
new file mode 100644
index 000000000..efd13ec0a
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/listeners/utilSelf.js
@@ -0,0 +1,62 @@
+// 初始化表单数据
+export function initListenerForm(listener) {
+ let self = {
+ ...listener
+ };
+ if (listener.script) {
+ self = {
+ ...listener,
+ ...listener.script,
+ scriptType: listener.script.resource ? "externalScript" : "inlineScript"
+ };
+ }
+ if (listener.event === "timeout" && listener.eventDefinitions) {
+ if (listener.eventDefinitions.length) {
+ let k = "";
+ for (let key in listener.eventDefinitions[0]) {
+ console.log(listener.eventDefinitions, key);
+ if (key.indexOf("time") !== -1) {
+ k = key;
+ self.eventDefinitionType = key.replace("time", "").toLowerCase();
+ }
+ }
+ console.log(k);
+ self.eventTimeDefinitions = listener.eventDefinitions[0][k].body;
+ }
+ }
+ return self;
+}
+
+export function initListenerType(listener) {
+ let listenerType;
+ if (listener.class) listenerType = "classListener";
+ if (listener.expression) listenerType = "expressionListener";
+ if (listener.delegateExpression) listenerType = "delegateExpressionListener";
+ if (listener.script) listenerType = "scriptListener";
+ return {
+ ...JSON.parse(JSON.stringify(listener)),
+ ...(listener.script ?? {}),
+ listenerType: listenerType
+ };
+}
+
+export const listenerType = {
+ classListener: "Java 类",
+ expressionListener: "表达式",
+ delegateExpressionListener: "代理表达式",
+ scriptListener: "脚本"
+};
+
+export const eventType = {
+ create: "创建",
+ assignment: "指派",
+ complete: "完成",
+ delete: "删除",
+ update: "更新",
+ timeout: "超时"
+};
+
+export const fieldType = {
+ string: "字符串",
+ expression: "表达式"
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue
new file mode 100644
index 000000000..7d57f504b
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue
new file mode 100644
index 000000000..a4427b222
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue
new file mode 100644
index 000000000..2666a24b2
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+ 编辑
+
+ 移除
+
+
+
+
+ 添加属性
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+ 确 定
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue
new file mode 100644
index 000000000..7ea59f61f
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue
@@ -0,0 +1,104 @@
+
+
+
+ 消息列表
+ 创建新消息
+
+
+
+
+
+
+
+ 信号列表
+ 创建新信号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取 消
+ 保 存
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue
new file mode 100644
index 000000000..fd454ecca
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue
new file mode 100644
index 000000000..282f23826
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 认
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue
new file mode 100644
index 000000000..34ed9fdf1
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue
new file mode 100644
index 000000000..9bd181946
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/element-variables.scss b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/element-variables.scss
new file mode 100644
index 000000000..b61f30fde
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/element-variables.scss
@@ -0,0 +1,70 @@
+/* 改变主题色变量 */
+$--color-primary: #1890ff;
+$--color-danger: #ff4d4f;
+
+/* 改变 icon 字体路径变量,必需 */
+$--font-path: '~element-ui/lib/theme-chalk/fonts';
+
+@import "~element-ui/packages/theme-chalk/src/index";
+
+.el-table td,
+.el-table th {
+ color: #333;
+}
+.el-drawer__header {
+ padding: 16px 16px 8px 16px;
+ margin: 0;
+ line-height: 24px;
+ font-size: 18px;
+ color: #303133;
+ box-sizing: border-box;
+ border-bottom: 1px solid #e8e8e8;
+}
+div[class^="el-drawer"]:focus,
+span:focus {
+ outline: none;
+}
+.el-drawer__body {
+ box-sizing: border-box;
+ padding: 16px;
+ width: 100%;
+ overflow-y: auto;
+}
+
+.el-dialog {
+ margin-top: 50vh !important;
+ transform: translateY(-50%);
+ overflow: hidden;
+}
+.el-dialog__wrapper {
+ overflow: hidden;
+ max-height: 100vh;
+}
+.el-dialog__header {
+ padding: 16px 16px 8px 16px;
+ box-sizing: border-box;
+ border-bottom: 1px solid #e8e8e8;
+}
+.el-dialog__body {
+ padding: 16px;
+ max-height: 80vh;
+ box-sizing: border-box;
+ overflow-y: auto;
+}
+.el-dialog__footer {
+ padding: 16px;
+ box-sizing: border-box;
+ border-top: 1px solid #e8e8e8;
+}
+.el-dialog__close {
+ font-weight: 600;
+}
+.el-select {
+ width: 100%;
+}
+.el-divider:not(.el-divider--horizontal) {
+ margin: 0 8px ;
+}
+.el-divider.el-divider--horizontal {
+ margin: 16px 0;
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/index.scss b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/index.scss
new file mode 100644
index 000000000..21a388a90
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/index.scss
@@ -0,0 +1,2 @@
+@import "./process-designer.scss";
+@import "./process-panel.scss";
\ No newline at end of file
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/process-designer.scss b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/process-designer.scss
new file mode 100644
index 000000000..54df7fd83
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/process-designer.scss
@@ -0,0 +1,156 @@
+@import "~bpmn-js-token-simulation/assets/css/bpmn-js-token-simulation.css";
+@import "~bpmn-js-token-simulation/assets/css/font-awesome.min.css";
+@import "~bpmn-js-token-simulation/assets/css/normalize.css";
+
+// 边框被 token-simulation 样式覆盖了
+.djs-palette {
+ background: var(--palette-background-color);
+ border: solid 1px var(--palette-border-color) !important;
+ border-radius: 2px;
+}
+
+.my-process-designer {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+ .my-process-designer__header {
+ width: 100%;
+ min-height: 36px;
+ .el-button {
+ text-align: center;
+ }
+ .el-button-group {
+ margin: 4px;
+ }
+ .el-tooltip__popper {
+ .el-button {
+ width: 100%;
+ text-align: left;
+ padding-left: 8px;
+ padding-right: 8px;
+ }
+ .el-button:hover {
+ background: rgba(64, 158, 255, 0.8);
+ color: #ffffff;
+ }
+ }
+ .align {
+ position: relative;
+ i {
+ &:after {
+ content: "|";
+ position: absolute;
+ transform: rotate(90deg) translate(200%, 60%);
+ }
+ }
+ }
+ .align.align-left i {
+ transform: rotate(90deg);
+ }
+ .align.align-right i {
+ transform: rotate(-90deg);
+ }
+ .align.align-top i {
+ transform: rotate(180deg);
+ }
+ .align.align-bottom i {
+ transform: rotate(0deg);
+ }
+ .align.align-center i {
+ transform: rotate(90deg);
+ &:after {
+ transform: rotate(90deg) translate(0, 60%);
+ }
+ }
+ .align.align-middle i {
+ transform: rotate(0deg);
+ &:after {
+ transform: rotate(90deg) translate(0, 60%);
+ }
+ }
+ }
+ .my-process-designer__container {
+ display: inline-flex;
+ width: 100%;
+ flex: 1;
+ .my-process-designer__canvas {
+ flex: 1;
+ height: 100%;
+ position: relative;
+ background: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+")
+ repeat !important;
+ div.toggle-mode {
+ display: none;
+ }
+ }
+ .my-process-designer__property-panel {
+ height: 100%;
+ overflow: scroll;
+ overflow-y: auto;
+ z-index: 10;
+ * {
+ box-sizing: border-box;
+ }
+ }
+ svg {
+ width: 100%;
+ height: 100%;
+ min-height: 100%;
+ overflow: hidden;
+ }
+ }
+}
+
+//侧边栏配置
+.djs-palette.open {
+ .djs-palette-entries {
+ div[class^="bpmn-icon-"]:before,
+ div[class*="bpmn-icon-"]:before {
+ line-height: unset;
+ }
+ div.entry {
+ position: relative;
+ }
+ div.entry:hover {
+ &::after {
+ width: max-content;
+ content: attr(title);
+ vertical-align: text-bottom;
+ position: absolute;
+ right: -10px;
+ top: 0;
+ bottom: 0;
+ overflow: hidden;
+ transform: translateX(100%);
+ font-size: 0.5em;
+ display: inline-block;
+ text-decoration: inherit;
+ font-variant: normal;
+ text-transform: none;
+ background: #fafafa;
+ box-shadow: 0 0 6px #eeeeee;
+ border: 1px solid #cccccc;
+ box-sizing: border-box;
+ padding: 0 16px;
+ border-radius: 4px;
+ z-index: 100;
+ }
+ }
+ }
+}
+pre {
+ margin: 0;
+ height: 100%;
+ overflow: hidden;
+ max-height: calc(80vh - 32px);
+ overflow-y: auto;
+}
+.hljs {
+ word-break: break-word;
+ white-space: pre-wrap;
+}
+.hljs * {
+ font-family: Consolas, Monaco, monospace;
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/process-panel.scss b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/process-panel.scss
new file mode 100644
index 000000000..f840cdde6
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/theme/process-panel.scss
@@ -0,0 +1,107 @@
+.process-panel__container {
+ box-sizing: border-box;
+ padding: 0 8px;
+ border-left: 1px solid #eeeeee;
+ box-shadow: 0 0 8px #cccccc;
+ max-height: 100%;
+ overflow-y: scroll;
+}
+.panel-tab__title {
+ font-weight: 600;
+ padding: 0 8px;
+ font-size: 1.1em;
+ line-height: 1.2em;
+ i {
+ margin-right: 8px;
+ font-size: 1.2em;
+ }
+}
+.panel-tab__content {
+ width: 100%;
+ box-sizing: border-box;
+ border-top: 1px solid #eeeeee;
+ padding: 8px 16px;
+ .panel-tab__content--title {
+ display: flex;
+ justify-content: space-between;
+ padding-bottom: 8px;
+ span {
+ flex: 1;
+ text-align: left;
+ }
+ }
+}
+.element-property {
+ width: 100%;
+ display: flex;
+ align-items: flex-start;
+ margin: 8px 0;
+ .element-property__label {
+ display: block;
+ width: 90px;
+ text-align: right;
+ overflow: hidden;
+ padding-right: 12px;
+ line-height: 32px;
+ font-size: 14px;
+ box-sizing: border-box;
+ }
+ .element-property__value {
+ flex: 1;
+ line-height: 32px;
+ }
+ .el-form-item {
+ width: 100%;
+ margin-bottom: 0;
+ padding-bottom: 18px;
+ }
+}
+.list-property {
+ flex-direction: column;
+ .element-listener-item {
+ width: 100%;
+ display: inline-grid;
+ grid-template-columns: 16px auto 32px 32px;
+ grid-column-gap: 8px;
+ }
+ .element-listener-item + .element-listener-item {
+ margin-top: 8px;
+ }
+}
+.listener-filed__title {
+ display: inline-flex;
+ width: 100%;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 0;
+ span {
+ width: 200px;
+ text-align: left;
+ font-size: 14px;
+ }
+ i {
+ margin-right: 8px;
+ }
+}
+.element-drawer__button {
+ margin-top: 8px;
+ width: 100%;
+ display: inline-flex;
+ justify-content: space-around;
+}
+.element-drawer__button > .el-button {
+ width: 100%;
+}
+
+.el-collapse-item__content {
+ padding-bottom: 0;
+}
+.el-input.is-disabled .el-input__inner {
+ color: #999999;
+}
+.el-form-item.el-form-item--mini {
+ margin-bottom: 0;
+ & + .el-form-item {
+ margin-top: 16px;
+ }
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/package/utils.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/utils.js
new file mode 100644
index 000000000..d1a92a08f
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/package/utils.js
@@ -0,0 +1,69 @@
+// 创建监听器实例
+export function createListenerObject(options, isTask, prefix) {
+ const listenerObj = Object.create(null);
+ listenerObj.event = options.event;
+ isTask && (listenerObj.id = options.id); // 任务监听器特有的 id 字段
+ switch (options.listenerType) {
+ case "scriptListener":
+ listenerObj.script = createScriptObject(options, prefix);
+ break;
+ case "expressionListener":
+ listenerObj.expression = options.expression;
+ break;
+ case "delegateExpressionListener":
+ listenerObj.delegateExpression = options.delegateExpression;
+ break;
+ default:
+ listenerObj.class = options.class;
+ }
+ // 注入字段
+ if (options.fields) {
+ listenerObj.fields = options.fields.map(field => {
+ return createFieldObject(field, prefix);
+ });
+ }
+ // 任务监听器的 定时器 设置
+ if (isTask && options.event === "timeout" && !!options.eventDefinitionType) {
+ const timeDefinition = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body: options.eventTimeDefinitions });
+ const TimerEventDefinition = window.bpmnInstances.moddle.create("bpmn:TimerEventDefinition", {
+ id: `TimerEventDefinition_${uuid(8)}`,
+ [`time${options.eventDefinitionType.replace(/^\S/, s => s.toUpperCase())}`]: timeDefinition
+ });
+ listenerObj.eventDefinitions = [TimerEventDefinition];
+ }
+ return window.bpmnInstances.moddle.create(`${prefix}:${isTask ? "TaskListener" : "ExecutionListener"}`, listenerObj);
+}
+
+// 创建 监听器的注入字段 实例
+export function createFieldObject(option, prefix) {
+ const { name, fieldType, string, expression } = option;
+ const fieldConfig = fieldType === "string" ? { name, string } : { name, expression };
+ return window.bpmnInstances.moddle.create(`${prefix}:Field`, fieldConfig);
+}
+
+// 创建脚本实例
+export function createScriptObject(options, prefix) {
+ const { scriptType, scriptFormat, value, resource } = options;
+ const scriptConfig = scriptType === "inlineScript" ? { scriptFormat, value } : { scriptFormat, resource };
+ return window.bpmnInstances.moddle.create(`${prefix}:Script`, scriptConfig);
+}
+
+// 更新元素扩展属性
+export function updateElementExtensions(element, extensionList) {
+ const extensions = window.bpmnInstances.moddle.create("bpmn:ExtensionElements", {
+ values: extensionList
+ });
+ window.bpmnInstances.modeling.updateProperties(element, {
+ extensionElements: extensions
+ });
+}
+
+// 创建一个id
+export function uuid(length = 8, chars) {
+ let result = "";
+ let charsString = chars || "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ for (let i = length; i > 0; --i) {
+ result += charsString[Math.floor(Math.random() * charsString.length)];
+ }
+ return result;
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/App.vue b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/App.vue
new file mode 100644
index 000000000..9015b890f
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/App.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ camunda
+ flowable
+ activiti
+
+
+
+
+ mini
+ small
+ medium
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/highlight/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/highlight/index.js
new file mode 100644
index 000000000..bff9211b5
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/highlight/index.js
@@ -0,0 +1,5 @@
+const hljs = require("highlight.js/lib/core");
+hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml"));
+hljs.registerLanguage("json", require("highlight.js/lib/languages/json"));
+
+module.exports = hljs;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/main.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/main.js
new file mode 100644
index 000000000..90311fb81
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/main.js
@@ -0,0 +1,28 @@
+import Vue from "vue";
+import App from "./App.vue";
+
+import axios from "axios";
+Vue.prototype.$axios = axios;
+
+// 加载基础ElementUI
+import ElementUI from "element-ui";
+Vue.use(ElementUI);
+import "../package/theme/element-variables.scss";
+
+import { vuePlugin } from "@/highlight";
+import "highlight.js/styles/atom-one-dark-reasonable.css";
+Vue.use(vuePlugin);
+
+import MyPD from "../package/index.js";
+Vue.use(MyPD);
+import "../package/theme/index.scss";
+
+import "bpmn-js/dist/assets/diagram-js.css";
+import "bpmn-js/dist/assets/bpmn-font/css/bpmn.css";
+import "bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css";
+
+// import "bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css"; // 右边工具栏样式
+
+new Vue({
+ render: h => h(App)
+}).$mount("#app");
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/custom-renderer/CustomRenderer.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/custom-renderer/CustomRenderer.js
new file mode 100644
index 000000000..92919f63e
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/custom-renderer/CustomRenderer.js
@@ -0,0 +1,14 @@
+import BpmnRenderer from "bpmn-js/lib/draw/BpmnRenderer";
+
+export default function CustomRenderer(config, eventBus, styles, pathMap, canvas, textRenderer) {
+ BpmnRenderer.call(this, config, eventBus, styles, pathMap, canvas, textRenderer, 2000);
+
+ this.handlers["label"] = function() {
+ return null;
+ };
+}
+
+const F = function() {}; // 核心,利用空对象作为中介;
+F.prototype = BpmnRenderer.prototype; // 核心,将父类的原型赋值给空对象F;
+CustomRenderer.prototype = new F(); // 核心,将 F的实例赋值给子类;
+CustomRenderer.prototype.constructor = CustomRenderer; // 修复子类CustomRenderer的构造器指向,防止原型链的混乱;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/custom-renderer/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/custom-renderer/index.js
new file mode 100644
index 000000000..5e573f13c
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/custom-renderer/index.js
@@ -0,0 +1,6 @@
+import CustomRenderer from "./CustomRenderer";
+
+export default {
+ __init__: ["customRenderer"],
+ customRenderer: ["type", CustomRenderer]
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/rules/CustomRules.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/rules/CustomRules.js
new file mode 100644
index 000000000..d46078b3c
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/rules/CustomRules.js
@@ -0,0 +1,16 @@
+import BpmnRules from "bpmn-js/lib/features/rules/BpmnRules";
+import inherits from "inherits";
+
+export default function CustomRules(eventBus) {
+ BpmnRules.call(this, eventBus);
+}
+
+inherits(CustomRules, BpmnRules);
+
+CustomRules.prototype.canDrop = function() {
+ return false;
+};
+
+CustomRules.prototype.canMove = function() {
+ return false;
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/rules/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/rules/index.js
new file mode 100644
index 000000000..ac6a7863a
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/modules/rules/index.js
@@ -0,0 +1,6 @@
+import CustomRules from "./CustomRules";
+
+export default {
+ __init__: ["customRules"],
+ customRules: ["type", CustomRules]
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/translations.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/translations.js
new file mode 100644
index 000000000..ac86e5879
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/translations.js
@@ -0,0 +1,25 @@
+/**
+ * This is a sample file that should be replaced with the actual translation.
+ *
+ * Checkout https://github.com/bpmn-io/bpmn-js-i18n for a list of available
+ * translations and labels to translate.
+ */
+export default {
+ "Exclusive Gateway": "Exklusives Gateway",
+ "Parallel Gateway": "Paralleles Gateway",
+ "Inclusive Gateway": "Inklusives Gateway",
+ "Complex Gateway": "Komplexes Gateway",
+ "Event based Gateway": "Ereignis-basiertes Gateway",
+ "Message Start Event": "消息启动事件",
+ "Timer Start Event": "定时启动事件",
+ "Conditional Start Event": "条件启动事件",
+ "Signal Start Event": "信号启动事件",
+ "Error Start Event": "错误启动事件",
+ "Escalation Start Event": "升级启动事件",
+ "Compensation Start Event": "补偿启动事件",
+ "Message Start Event (non-interrupting)": "消息启动事件 (非中断)",
+ "Timer Start Event (non-interrupting)": "定时启动事件 (非中断)",
+ "Conditional Start Event (non-interrupting)": "条件启动事件 (非中断)",
+ "Signal Start Event (non-interrupting)": "信号启动事件 (非中断)",
+ "Escalation Start Event (non-interrupting)": "升级启动事件 (非中断)"
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/directive/clickOutSide.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/directive/clickOutSide.js
new file mode 100644
index 000000000..fc8644ee5
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/directive/clickOutSide.js
@@ -0,0 +1,39 @@
+//outside.js
+
+const ctx = "@@clickoutsideContext";
+
+export default {
+ bind(el, binding, vnode) {
+ const ele = el;
+ const documentHandler = e => {
+ if (!vnode.context || ele.contains(e.target)) {
+ return false;
+ }
+ // 调用指令回调
+ if (binding.expression) {
+ vnode.context[el[ctx].methodName](e);
+ } else {
+ el[ctx].bindingFn(e);
+ }
+ };
+ // 将方法添加到ele
+ ele[ctx] = {
+ documentHandler,
+ methodName: binding.expression,
+ bindingFn: binding.value
+ };
+
+ setTimeout(() => {
+ document.addEventListener("touchstart", documentHandler); // 为document绑定事件
+ });
+ },
+ update(el, binding) {
+ const ele = el;
+ ele[ctx].methodName = binding.expression;
+ ele[ctx].bindingFn = binding.value;
+ },
+ unbind(el) {
+ document.removeEventListener("touchstart", el[ctx].documentHandler); // 解绑
+ delete el[ctx];
+ }
+};
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/index.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/index.js
new file mode 100644
index 000000000..18fe3dddb
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/index.js
@@ -0,0 +1,10 @@
+export function debounce(fn, delay = 500) {
+ let timer;
+ return function(...args) {
+ if (timer) {
+ clearTimeout(timer);
+ timer = null;
+ }
+ timer = setTimeout(fn.bind(this, ...args), delay);
+ };
+}
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/log.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/log.js
new file mode 100644
index 000000000..350e29070
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/log.js
@@ -0,0 +1,63 @@
+class Log {
+ static type = ["primary", "success", "warn", "error", "info"];
+
+ static typeColor(type = "default") {
+ let color = "";
+ switch (type) {
+ case "primary":
+ color = "#2d8cf0";
+ break;
+ case "success":
+ color = "#19be6b";
+ break;
+ case "info":
+ color = "#909399";
+ break;
+ case "warn":
+ color = "#ff9900";
+ break;
+ case "error":
+ color = "#f03f14";
+ break;
+ case "default":
+ color = "#35495E";
+ break;
+ default:
+ color = type;
+ break;
+ }
+ return color;
+ }
+
+ static print(text, type = "default", back = false) {
+ if (typeof text === "object") {
+ // 如果是對象則調用打印對象方式
+ console.dir(text);
+ return;
+ }
+ if (back) {
+ // 如果是打印帶背景圖的
+ console.log(`%c ${text} `, `background:${this.typeColor(type)}; padding: 2px; border-radius: 4px;color: #fff;`);
+ } else {
+ console.log(`%c ${text} `, `color: ${this.typeColor(type)};`);
+ }
+ }
+
+ static pretty(title, text, type = "primary") {
+ if (typeof text === "object") {
+ console.log(
+ `%c ${title} %c`,
+ `background:${this.typeColor(type)};border:1px solid ${this.typeColor(type)}; padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`
+ );
+ console.dir(text);
+ return;
+ }
+ console.log(
+ `%c ${title} %c ${text} %c`,
+ `background:${this.typeColor(type)};border:1px solid ${this.typeColor(type)}; padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,
+ `border:1px solid ${this.typeColor(type)}; padding: 1px; border-radius: 0 4px 4px 0; color: ${this.typeColor(type)};`,
+ "background:transparent"
+ );
+ }
+}
+export default Log;
diff --git a/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/xml2json.js b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/xml2json.js
new file mode 100644
index 000000000..01b38cafd
--- /dev/null
+++ b/yudao-admin-ui/src/components/bpmnProcessDesigner/src/utils/xml2json.js
@@ -0,0 +1,50 @@
+function xmlStr2XmlObj(xmlStr) {
+ let xmlObj = {};
+ if (document.all) {
+ const xmlDom = new window.ActiveXObject("Microsoft.XMLDOM");
+ xmlDom.loadXML(xmlStr);
+ xmlObj = xmlDom;
+ } else {
+ xmlObj = new DOMParser().parseFromString(xmlStr, "text/xml");
+ }
+ return xmlObj;
+}
+
+function xml2json(xml) {
+ try {
+ let obj = {};
+ if (xml.children.length > 0) {
+ for (let i = 0; i < xml.children.length; i++) {
+ const item = xml.children.item(i);
+ const nodeName = item.nodeName;
+ if (typeof obj[nodeName] == "undefined") {
+ obj[nodeName] = xml2json(item);
+ } else {
+ if (typeof obj[nodeName].push == "undefined") {
+ const old = obj[nodeName];
+ obj[nodeName] = [];
+ obj[nodeName].push(old);
+ }
+ obj[nodeName].push(xml2json(item));
+ }
+ }
+ } else {
+ obj = xml.textContent;
+ }
+ return obj;
+ } catch (e) {
+ console.log(e.message);
+ }
+}
+
+function xmlObj2json(xml) {
+ const xmlObj = xmlStr2XmlObj(xml);
+ console.log(xmlObj);
+ let jsonObj = {};
+ if (xmlObj.childNodes.length > 0) {
+ jsonObj = xml2json(xmlObj);
+ }
+ return jsonObj;
+}
+
+export default xmlObj2json;
diff --git a/yudao-admin-ui/src/main.js b/yudao-admin-ui/src/main.js
index d9978300c..9afe1cbb9 100644
--- a/yudao-admin-ui/src/main.js
+++ b/yudao-admin-ui/src/main.js
@@ -76,6 +76,15 @@ Vue.component('RightToolbar', RightToolbar)
Vue.use(permission)
// Vue.use(hljs.vuePlugin);
+// TODO 芋艿:bpmnProcessDesigner 引入
+import MyPD from "@/components/bpmnProcessDesigner/package/index.js";
+Vue.use(MyPD);
+import "@/components/bpmnProcessDesigner/package/theme/index.scss";
+// TODO 芋艿:bpmnProcessDesigner 引入
+import "bpmn-js/dist/assets/diagram-js.css";
+import "bpmn-js/dist/assets/bpmn-font/css/bpmn.css";
+import "bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css";
+
/**
* If you don't want to use mock-server
* you want to use MockJs for mock api
diff --git a/yudao-admin-ui/src/router/index.js b/yudao-admin-ui/src/router/index.js
index 6a4481720..1e50a329a 100644
--- a/yudao-admin-ui/src/router/index.js
+++ b/yudao-admin-ui/src/router/index.js
@@ -163,6 +163,19 @@ export const constantRoutes = [
}
]
},
+ {
+ path: '/bpm',
+ component: Layout,
+ hidden: true,
+ children: [
+ {
+ path: 'manager/model/edit',
+ component: (resolve) => require(['@/views/bpm/model/modelEditor'], resolve),
+ name: '流程模型-编辑',
+ meta: { title: '流程模型-编辑' }
+ }
+ ]
+ },
]
export default new Router({
diff --git a/yudao-admin-ui/src/views/bpm/model/modelEditor.vue b/yudao-admin-ui/src/views/bpm/model/modelEditor.vue
new file mode 100644
index 000000000..5f661b09e
--- /dev/null
+++ b/yudao-admin-ui/src/views/bpm/model/modelEditor.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ camunda
+ flowable
+ activiti
+
+
+
+
+ mini
+ small
+ medium
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-admin-ui/src/views/bpm/model/translations.js b/yudao-admin-ui/src/views/bpm/model/translations.js
new file mode 100644
index 000000000..ac86e5879
--- /dev/null
+++ b/yudao-admin-ui/src/views/bpm/model/translations.js
@@ -0,0 +1,25 @@
+/**
+ * This is a sample file that should be replaced with the actual translation.
+ *
+ * Checkout https://github.com/bpmn-io/bpmn-js-i18n for a list of available
+ * translations and labels to translate.
+ */
+export default {
+ "Exclusive Gateway": "Exklusives Gateway",
+ "Parallel Gateway": "Paralleles Gateway",
+ "Inclusive Gateway": "Inklusives Gateway",
+ "Complex Gateway": "Komplexes Gateway",
+ "Event based Gateway": "Ereignis-basiertes Gateway",
+ "Message Start Event": "消息启动事件",
+ "Timer Start Event": "定时启动事件",
+ "Conditional Start Event": "条件启动事件",
+ "Signal Start Event": "信号启动事件",
+ "Error Start Event": "错误启动事件",
+ "Escalation Start Event": "升级启动事件",
+ "Compensation Start Event": "补偿启动事件",
+ "Message Start Event (non-interrupting)": "消息启动事件 (非中断)",
+ "Timer Start Event (non-interrupting)": "定时启动事件 (非中断)",
+ "Conditional Start Event (non-interrupting)": "条件启动事件 (非中断)",
+ "Signal Start Event (non-interrupting)": "信号启动事件 (非中断)",
+ "Escalation Start Event (non-interrupting)": "升级启动事件 (非中断)"
+};