admin-vue3/src/components/bpmnProcessDesigner/package/utils.ts

78 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 '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 = 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
})
// 直接使用原始元素对象不需要toRaw包装
bpmnInstances().modeling.updateProperties(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
}