1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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 '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
- })
- 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
- }
|