ScriptTask.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 lang="ts" setup>
  47. defineOptions({ name: 'ScriptTask' })
  48. const props = defineProps({
  49. id: String,
  50. type: String
  51. })
  52. const defaultTaskForm = ref({
  53. scriptFormat: '',
  54. script: '',
  55. resource: '',
  56. resultVariable: ''
  57. })
  58. const scriptTaskForm = ref<any>({})
  59. const bpmnElement = ref()
  60. const bpmnInstances = () => (window as any)?.bpmnInstances
  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. bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
  80. }
  81. onBeforeUnmount(() => {
  82. bpmnElement.value = null
  83. })
  84. watch(
  85. () => props.id,
  86. () => {
  87. bpmnElement.value = bpmnInstances().bpmnElement
  88. nextTick(() => {
  89. resetTaskForm()
  90. })
  91. },
  92. { immediate: true }
  93. )
  94. </script>