当前位置:   article > 正文

ruoyi-nbcio-plus基于vue3的flowable服务任务的升级修改_flowable的vue3版本

flowable的vue3版本

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/

更多nbcio-boot功能请看演示系统 

gitee源代码地址

后端代码: https://gitee.com/nbacheng/nbcio-boot

前端代码:https://gitee.com/nbacheng/nbcio-vue.git

在线演示(包括H5) : http://122.227.135.243:9888

1、flowableDescriptor.json上要增加下面内容bpmn:ServiceTask

  1. {
  2. "name": "Field",
  3. "superClass": ["Element"],
  4. "meta": {
  5. "allowedIn": [
  6. "flowable:ServiceTaskLike",
  7. "flowable:ExecutionListener",
  8. "flowable:TaskListener",
  9. "bpmn:ServiceTask"
  10. ]
  11. },

2、服务任务原先代码

  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 v-if="serviceTaskForm.executeType === 'expression'" label="结果变量">
  27. <el-input v-model="serviceTaskForm.resultVariable" clearable @change="updateInfo('resultVariable')" />
  28. </el-form-item>
  29. <el-form-item
  30. v-if="serviceTaskForm.executeType === 'delegateExpression'"
  31. label="代理表达式"
  32. prop="delegateExpression"
  33. key="execute-delegate"
  34. >
  35. <el-input v-model="serviceTaskForm.delegateExpression" clearable @change="updateElementTask" />
  36. </el-form-item>
  37. </div>
  38. </template>
  39. <script>
  40. export default {
  41. name: "ServiceTask",
  42. props: {
  43. id: String,
  44. type: String
  45. },
  46. data() {
  47. return {
  48. defaultTaskForm: {
  49. executeType: "",
  50. class: "",
  51. expression: "",
  52. resultVariable: "",
  53. delegateExpression: ""
  54. },
  55. serviceTaskForm: {}
  56. };
  57. },
  58. watch: {
  59. id: {
  60. immediate: true,
  61. handler() {
  62. this.bpmnElement = window.bpmnInstances.bpmnElement;
  63. this.$nextTick(() => this.resetTaskForm());
  64. }
  65. }
  66. },
  67. methods: {
  68. resetTaskForm() {
  69. for (let key in this.defaultTaskForm) {
  70. let value = this.bpmnElement?.businessObject[key] || this.defaultTaskForm[key];
  71. if (value) this.$set(this.serviceTaskForm, "executeType", key);
  72. this.$set(this.serviceTaskForm, key, value);
  73. }
  74. },
  75. updateElementTask() {
  76. let taskAttr = Object.create(null);
  77. const type = this.serviceTaskForm.executeType;
  78. for (let key in this.serviceTaskForm) {
  79. if (key !== 'executeType' && key !== type) taskAttr[key] = null;
  80. }
  81. taskAttr[type] = this.serviceTaskForm[type] || "";
  82. window.bpmnInstances.modeling.updateProperties(this.bpmnElement, taskAttr);
  83. }
  84. },
  85. beforeDestroy() {
  86. this.bpmnElement = null;
  87. }
  88. };
  89. </script>

3、修改成vue3版本如下:

  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 v-if="serviceTaskForm.executeType === 'expression'" label="结果变量">
  27. <el-input v-model="serviceTaskForm.resultVariable" clearable @change="updateInfo('resultVariable')" />
  28. </el-form-item>
  29. <el-form-item
  30. v-if="serviceTaskForm.executeType === 'delegateExpression'"
  31. label="代理表达式"
  32. prop="delegateExpression"
  33. key="execute-delegate"
  34. >
  35. <el-input v-model="serviceTaskForm.delegateExpression" clearable @change="updateElementTask" />
  36. </el-form-item>
  37. </div>
  38. </template>
  39. <script lang="ts" setup>
  40. defineOptions({ name: 'ServiceTask' })
  41. const props = defineProps({
  42. id: String,
  43. type: String
  44. })
  45. const defaultTaskForm = ref({
  46. executeType: "",
  47. class: "",
  48. expression: "",
  49. resultVariable: "",
  50. delegateExpression: ""
  51. })
  52. const serviceTaskForm = ref<any>({})
  53. const bpmnElement = ref()
  54. const bpmnInstances = () => (window as any)?.bpmnInstances
  55. watch(
  56. () => props.id,
  57. () => {
  58. bpmnElement.value = bpmnInstances().bpmnElement
  59. nextTick(() => {
  60. resetTaskForm()
  61. })
  62. },
  63. { immediate: true }
  64. )
  65. const resetTaskForm = () => {
  66. for (let key in defaultTaskForm.value) {
  67. let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
  68. if (value) serviceTaskForm.value["executeType"] = key
  69. serviceTaskForm.value[key] = value;
  70. }
  71. }
  72. const updateElementTask = () => {
  73. let taskAttr = Object.create(null)
  74. const type = serviceTaskForm.value["executeType"];
  75. for (let key in serviceTaskForm.value) {
  76. if (key !== 'executeType' && key !== type) taskAttr[key] = null;
  77. }
  78. taskAttr[type] = serviceTaskForm.value[type] || "";
  79. bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr);
  80. }
  81. onBeforeUnmount(() => {
  82. bpmnElement.value = null
  83. })
  84. </script>

4、效果图如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/418035
推荐阅读
相关标签
  

闽ICP备14008679号