ScriptTask.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div style="margin-top: 16px">
  3. <el-form-item label="脚本格式">
  4. <el-input
  5. v-model="scriptTaskForm.scriptFormat"
  6. clearable
  7. @input="updateElementTask()"
  8. @change="updateElementTask()"
  9. />
  10. </el-form-item>
  11. <el-form-item label="脚本类型">
  12. <el-select v-model="scriptTaskForm.scriptType">
  13. <el-option label="内联脚本" value="inline" />
  14. <el-option label="外部资源" value="external" />
  15. </el-select>
  16. </el-form-item>
  17. <el-form-item label="脚本" v-show="scriptTaskForm.scriptType === 'inline'">
  18. <el-input
  19. v-model="scriptTaskForm.script"
  20. type="textarea"
  21. resize="vertical"
  22. :autosize="{ minRows: 2, maxRows: 4 }"
  23. clearable
  24. @input="updateElementTask()"
  25. @change="updateElementTask()"
  26. />
  27. </el-form-item>
  28. <el-form-item label="资源地址" v-show="scriptTaskForm.scriptType === 'external'">
  29. <el-input
  30. v-model="scriptTaskForm.resource"
  31. clearable
  32. @input="updateElementTask()"
  33. @change="updateElementTask()"
  34. />
  35. </el-form-item>
  36. <el-form-item label="结果变量">
  37. <el-input
  38. v-model="scriptTaskForm.resultVariable"
  39. clearable
  40. @input="updateElementTask()"
  41. @change="updateElementTask()"
  42. />
  43. </el-form-item>
  44. </div>
  45. </template>
  46. <script setup lang="ts" name="ScriptTask">
  47. const props = defineProps({
  48. id: String,
  49. type: String
  50. })
  51. const defaultTaskForm = ref({
  52. scriptFormat: '',
  53. script: '',
  54. resource: '',
  55. resultVariable: ''
  56. })
  57. const scriptTaskForm = ref<any>({})
  58. const bpmnElement = ref()
  59. const bpmnInstances = () => (window as any)?.bpmnInstances
  60. const resetTaskForm = () => {
  61. for (let key in defaultTaskForm.value) {
  62. let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
  63. scriptTaskForm.value[key] = value
  64. }
  65. scriptTaskForm.value.scriptType = scriptTaskForm.value.script ? 'inline' : 'external'
  66. }
  67. const updateElementTask = () => {
  68. let taskAttr = Object.create(null)
  69. taskAttr.scriptFormat = scriptTaskForm.value.scriptFormat || null
  70. taskAttr.resultVariable = scriptTaskForm.value.resultVariable || null
  71. if (scriptTaskForm.value.scriptType === 'inline') {
  72. taskAttr.script = scriptTaskForm.value.script || null
  73. taskAttr.resource = null
  74. } else {
  75. taskAttr.resource = scriptTaskForm.value.resource || null
  76. taskAttr.script = null
  77. }
  78. bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
  79. }
  80. onBeforeUnmount(() => {
  81. bpmnElement.value = null
  82. })
  83. watch(
  84. () => props.id,
  85. () => {
  86. bpmnElement.value = bpmnInstances().bpmnElement
  87. nextTick(() => {
  88. resetTaskForm()
  89. })
  90. },
  91. { immediate: true }
  92. )
  93. </script>