utils.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // 创建监听器实例
  2. export function createListenerObject(options, isTask, prefix) {
  3. const listenerObj = Object.create(null)
  4. listenerObj.event = options.event
  5. isTask && (listenerObj.id = options.id) // 任务监听器特有的 id 字段
  6. switch (options.listenerType) {
  7. case 'scriptListener':
  8. listenerObj.script = createScriptObject(options, prefix)
  9. break
  10. case 'expressionListener':
  11. listenerObj.expression = options.expression
  12. break
  13. case 'delegateExpressionListener':
  14. listenerObj.delegateExpression = options.delegateExpression
  15. break
  16. default:
  17. listenerObj.class = options.class
  18. }
  19. // 注入字段
  20. if (options.fields) {
  21. listenerObj.fields = options.fields.map((field) => {
  22. return createFieldObject(field, prefix)
  23. })
  24. }
  25. // 任务监听器的 定时器 设置
  26. if (isTask && options.event === 'timeout' && !!options.eventDefinitionType) {
  27. const timeDefinition = window.bpmnInstances.moddle.create('bpmn:FormalExpression', {
  28. body: options.eventTimeDefinitions
  29. })
  30. const TimerEventDefinition = window.bpmnInstances.moddle.create('bpmn:TimerEventDefinition', {
  31. id: `TimerEventDefinition_${uuid(8)}`,
  32. [`time${options.eventDefinitionType.replace(/^\S/, (s) => s.toUpperCase())}`]: timeDefinition
  33. })
  34. listenerObj.eventDefinitions = [TimerEventDefinition]
  35. }
  36. return window.bpmnInstances.moddle.create(
  37. `${prefix}:${isTask ? 'TaskListener' : 'ExecutionListener'}`,
  38. listenerObj
  39. )
  40. }
  41. // 创建 监听器的注入字段 实例
  42. export function createFieldObject(option, prefix) {
  43. const { name, fieldType, string, expression } = option
  44. const fieldConfig = fieldType === 'string' ? { name, string } : { name, expression }
  45. return window.bpmnInstances.moddle.create(`${prefix}:Field`, fieldConfig)
  46. }
  47. // 创建脚本实例
  48. export function createScriptObject(options, prefix) {
  49. const { scriptType, scriptFormat, value, resource } = options
  50. const scriptConfig =
  51. scriptType === 'inlineScript' ? { scriptFormat, value } : { scriptFormat, resource }
  52. return window.bpmnInstances.moddle.create(`${prefix}:Script`, scriptConfig)
  53. }
  54. // 更新元素扩展属性
  55. export function updateElementExtensions(element, extensionList) {
  56. const extensions = window.bpmnInstances.moddle.create('bpmn:ExtensionElements', {
  57. values: extensionList
  58. })
  59. console.log(element, 'elementelementelementelement')
  60. console.log(extensions.values, 'extensionsextensionsextensions')
  61. window.bpmnInstances.modeling.updateProperties(element, {
  62. extensionElements: extensions.values
  63. })
  64. console.log('ssss')
  65. }
  66. // 创建一个id
  67. export function uuid(length = 8, chars) {
  68. let result = ''
  69. const charsString = chars || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  70. for (let i = length; i > 0; --i) {
  71. result += charsString[Math.floor(Math.random() * charsString.length)]
  72. }
  73. return result
  74. }