ScriptTask.vue 2.8 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. import { ref, watch, nextTick, onBeforeUnmount } from 'vue'
  48. import { ElInput, ElFormItem } from 'element-plus'
  49. const props = defineProps({
  50. id: String,
  51. type: String
  52. })
  53. const defaultTaskForm = ref({
  54. scriptFormat: '',
  55. script: '',
  56. resource: '',
  57. resultVariable: ''
  58. })
  59. const scriptTaskForm = ref({})
  60. const bpmnElement = ref()
  61. const resetTaskForm = () => {
  62. for (let key in defaultTaskForm.value) {
  63. let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
  64. scriptTaskForm.value[key] = value
  65. }
  66. scriptTaskForm.value.scriptType = scriptTaskForm.value.script ? 'inline' : 'external'
  67. }
  68. const updateElementTask = () => {
  69. let taskAttr = Object.create(null)
  70. taskAttr.scriptFormat = scriptTaskForm.value.scriptFormat || null
  71. taskAttr.resultVariable = scriptTaskForm.value.resultVariable || null
  72. if (scriptTaskForm.value.scriptType === 'inline') {
  73. taskAttr.script = scriptTaskForm.value.script || null
  74. taskAttr.resource = null
  75. } else {
  76. taskAttr.resource = scriptTaskForm.value.resource || null
  77. taskAttr.script = null
  78. }
  79. window.bpmnInstances.modeling.updateProperties(bpmnElement.value, taskAttr)
  80. }
  81. onBeforeUnmount(() => {
  82. bpmnElement.value = null
  83. })
  84. watch(
  85. () => props.id,
  86. () => {
  87. bpmnElement.value = window.bpmnInstances.bpmnElement
  88. nextTick(() => {
  89. resetTaskForm()
  90. })
  91. },
  92. { immediate: true }
  93. )
  94. </script>