Files
frontend/apps/web-antd/src/components/bpmnProcessDesigner/package/utils.ts
2025-09-05 15:38:09 +08:00

94 lines
2.9 KiB
TypeScript

import { toRaw } from 'vue';
const bpmnInstances = () => (window as any)?.bpmnInstances;
// 创建监听器实例
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 'delegateExpressionListener': {
listenerObj.delegateExpression = options.delegateExpression;
break;
}
case 'expressionListener': {
listenerObj.expression = options.expression;
break;
}
case 'scriptListener': {
listenerObj.script = createScriptObject(options, prefix);
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 = bpmnInstances().moddle.create(
'bpmn:FormalExpression',
{
body: options.eventTimeDefinitions,
},
);
const TimerEventDefinition = bpmnInstances().moddle.create(
'bpmn:TimerEventDefinition',
{
id: `TimerEventDefinition_${uuid(8)}`,
[`time${options.eventDefinitionType.replace(/^\S/, (s) => s.toUpperCase())}`]:
timeDefinition,
},
);
listenerObj.eventDefinitions = [TimerEventDefinition];
}
return 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 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 bpmnInstances().moddle.create(`${prefix}:Script`, scriptConfig);
}
// 更新元素扩展属性
export function updateElementExtensions(element, extensionList) {
const extensions = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
values: extensionList,
});
bpmnInstances().modeling.updateProperties(toRaw(element), {
extensionElements: extensions,
});
}
// 创建一个id
export function uuid(length = 8, chars?) {
let result = '';
const charsString =
chars || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for (let i = length; i > 0; --i) {
result += charsString[Math.floor(Math.random() * charsString.length)];
}
return result;
}