ServiceTask.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <div>
  3. <el-form-item label="执行类型" key="executeType">
  4. <el-select v-model="serviceTaskForm.executeType">
  5. <el-option label="Java类" value="class" />
  6. <el-option label="表达式" value="expression" />
  7. <el-option label="代理表达式" value="delegateExpression" />
  8. </el-select>
  9. </el-form-item>
  10. <el-form-item
  11. v-if="serviceTaskForm.executeType === 'class'"
  12. label="Java类"
  13. prop="class"
  14. key="execute-class"
  15. >
  16. <el-input v-model="serviceTaskForm.class" clearable @change="updateElementTask" />
  17. </el-form-item>
  18. <el-form-item
  19. v-if="serviceTaskForm.executeType === 'expression'"
  20. label="表达式"
  21. prop="expression"
  22. key="execute-expression"
  23. >
  24. <el-input v-model="serviceTaskForm.expression" clearable @change="updateElementTask" />
  25. </el-form-item>
  26. <el-form-item
  27. v-if="serviceTaskForm.executeType === 'delegateExpression'"
  28. label="代理表达式"
  29. prop="delegateExpression"
  30. key="execute-delegate"
  31. >
  32. <el-input v-model="serviceTaskForm.delegateExpression" clearable @change="updateElementTask" />
  33. </el-form-item>
  34. </div>
  35. </template>
  36. <script lang="ts" setup>
  37. defineOptions({ name: 'ServiceTask' })
  38. const props = defineProps({
  39. id: String,
  40. type: String
  41. })
  42. const defaultTaskForm = ref({
  43. executeType: '',
  44. class: '',
  45. expression: '',
  46. delegateExpression: ''
  47. })
  48. const serviceTaskForm = ref<any>({})
  49. const bpmnElement = ref()
  50. const bpmnInstances = () => (window as any)?.bpmnInstances
  51. const resetTaskForm = () => {
  52. for (let key in defaultTaskForm.value) {
  53. let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
  54. serviceTaskForm.value[key] = value
  55. if (value) {
  56. serviceTaskForm.value.executeType = key
  57. }
  58. }
  59. }
  60. const updateElementTask = () => {
  61. let taskAttr = Object.create(null);
  62. const type = serviceTaskForm.value.executeType;
  63. for (let key in serviceTaskForm.value) {
  64. if (key !== 'executeType' && key !== type) taskAttr[key] = null;
  65. }
  66. taskAttr[type] = serviceTaskForm.value[type] || "";
  67. bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
  68. }
  69. onBeforeUnmount(() => {
  70. bpmnElement.value = null
  71. })
  72. watch(
  73. () => props.id,
  74. () => {
  75. bpmnElement.value = bpmnInstances().bpmnElement
  76. nextTick(() => {
  77. resetTaskForm()
  78. })
  79. },
  80. { immediate: true }
  81. )
  82. </script>