ScriptTask.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 resetTaskForm = () => {
  60. for (let key in defaultTaskForm.value) {
  61. let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
  62. scriptTaskForm.value[key] = value
  63. }
  64. scriptTaskForm.value.scriptType = scriptTaskForm.value.script ? 'inline' : 'external'
  65. }
  66. const updateElementTask = () => {
  67. let taskAttr = Object.create(null)
  68. taskAttr.scriptFormat = scriptTaskForm.value.scriptFormat || null
  69. taskAttr.resultVariable = scriptTaskForm.value.resultVariable || null
  70. if (scriptTaskForm.value.scriptType === 'inline') {
  71. taskAttr.script = scriptTaskForm.value.script || null
  72. taskAttr.resource = null
  73. } else {
  74. taskAttr.resource = scriptTaskForm.value.resource || null
  75. taskAttr.script = null
  76. }
  77. window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
  78. }
  79. onBeforeUnmount(() => {
  80. bpmnElement.value = null
  81. })
  82. watch(
  83. () => props.id,
  84. () => {
  85. bpmnElement.value = window.bpmnInstances.bpmnElement
  86. nextTick(() => {
  87. resetTaskForm()
  88. })
  89. },
  90. { immediate: true }
  91. )
  92. </script>