ruoyi-nbcio-plus基于vue3的flowable任务切换的主文件ElementTask.vue的升级修改

简介: ruoyi-nbcio-plus基于vue3的flowable任务切换的主文件ElementTask.vue的升级修改

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

gitee源代码地址

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

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

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

gitee源代码地址

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

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

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

1、原先vue2的代码如下:

<template>
  <div class="panel-tab__content">
    <el-form size="small" label-width="96px" @submit.native.prevent>
<!--      <el-form-item label="异步延续">-->
<!--        <el-checkbox v-model="taskConfigForm.asyncBefore" label="异步前" @change="changeTaskAsync" />-->
<!--        <el-checkbox v-model="taskConfigForm.asyncAfter" label="异步后" @change="changeTaskAsync" />-->
<!--        <el-checkbox v-model="taskConfigForm.exclusive" v-if="taskConfigForm.asyncAfter || taskConfigForm.asyncBefore" label="排除" @change="changeTaskAsync" />-->
<!--      </el-form-item>-->
      <component :is="witchTaskComponent" v-bind="$props" />
    </el-form>
  </div>
</template>
<script>
import UserTask from "./task-components/UserTask";
import ServiceTask from "./task-components/ServiceTask";
import ScriptTask from "./task-components/ScriptTask";
import ReceiveTask from "./task-components/ReceiveTask";
export default {
  name: "ElementTaskConfig",
  components: { UserTask, ServiceTask, ScriptTask, ReceiveTask },
  props: {
    id: String,
    type: String
  },
  data() {
    return {
      taskConfigForm: {
        asyncAfter: false,
        asyncBefore: false,
        exclusive: false
      },
      witchTaskComponent: "",
      installedComponent: {
        // 手工任务与普通任务一致,不需要其他配置
        // 接收消息任务,需要在全局下插入新的消息实例,并在该节点下的 messageRef 属性绑定该实例
        // 发送任务、服务任务、业务规则任务共用一个相同配置
        UserTask: "UserTask", // 用户任务配置
        ServiceTask: "ServiceTask", // 服务任务配置
        ScriptTask: "ScriptTask", // 脚本任务配置
        ReceiveTask: "ReceiveTask" // 消息接收任务
      }
    };
  },
  watch: {
    id: {
      immediate: true,
      handler() {
        this.bpmnElement = window.bpmnInstances.bpmnElement;
        this.taskConfigForm.asyncBefore = this.bpmnElement?.businessObject?.asyncBefore;
        this.taskConfigForm.asyncAfter = this.bpmnElement?.businessObject?.asyncAfter;
        this.taskConfigForm.exclusive = this.bpmnElement?.businessObject?.exclusive;
      }
    },
    type: {
      immediate: true,
      handler() {
        this.witchTaskComponent = this.installedComponent[this.type];
      }
    }
  },
  methods: {
    changeTaskAsync() {
      if (!this.taskConfigForm.asyncBefore && !this.taskConfigForm.asyncAfter) {
        this.taskConfigForm.exclusive = false;
      }
      window.bpmnInstances.modeling.updateProperties(window.bpmnInstances.bpmnElement, {
        ...this.taskConfigForm
      });
    }
  }
};
</script>

2、修改成vue3代码如下:

<template>
  <div class="panel-tab__content">
    <el-form size="small" label-width="96px" >
<!--      <el-form-item label="异步延续">-->
<!--        <el-checkbox v-model="taskConfigForm.asyncBefore" label="异步前" @change="changeTaskAsync" />-->
<!--        <el-checkbox v-model="taskConfigForm.asyncAfter" label="异步后" @change="changeTaskAsync" />-->
<!--        <el-checkbox v-model="taskConfigForm.exclusive" v-if="taskConfigForm.asyncAfter || taskConfigForm.asyncBefore" label="排除" @change="changeTaskAsync" />-->
<!--      </el-form-item>-->
      <component :is="witchTaskComponent" v-bind="$props" />
    </el-form>
  </div>
</template>
<script lang="ts" setup>
  import UserTask from "./task-components/UserTask";
  import ServiceTask from "./task-components/ServiceTask";
  import ScriptTask from "./task-components/ScriptTask";
  import ReceiveTask from "./task-components/ReceiveTask";
  defineOptions({ name: 'ElementTaskConfig' })
  const props = defineProps({
    id: String,
    type: String
  })
  const taskConfigForm = ref({
    asyncAfter: false,
    asyncBefore: false,
    exclusive: false
  })
  const witchTaskComponent = ref()
  const installedComponent = ref({
    // 手工任务与普通任务一致,不需要其他配置
    // 接收消息任务,需要在全局下插入新的消息实例,并在该节点下的 messageRef 属性绑定该实例
    // 发送任务、服务任务、业务规则任务共用一个相同配置
    UserTask: 'UserTask', // 用户任务配置
    ServiceTask: 'ServiceTask', //服务任务配置
    ScriptTask: 'ScriptTask', // 脚本任务配置
    ReceiveTask: 'ReceiveTask' // 消息接收任务
  })
  const bpmnElement = ref()
  const bpmnInstances = () => (window as any).bpmnInstances
  const changeTaskAsync = () => {
    if (!taskConfigForm.value.asyncBefore && !taskConfigForm.value.asyncAfter) {
      taskConfigForm.value.exclusive = false
    }
    bpmnInstances().modeling.updateProperties(bpmnInstances().bpmnElement, {
      ...taskConfigForm.value
    })
  }
  watch(
    () => props.id,
    () => {
      bpmnElement.value = bpmnInstances().bpmnElement
      taskConfigForm.value.asyncBefore = bpmnElement.value?.businessObject?.asyncBefore
      taskConfigForm.value.asyncAfter = bpmnElement.value?.businessObject?.asyncAfter
      taskConfigForm.value.exclusive = bpmnElement.value?.businessObject?.exclusive
    },
    { immediate: true }
  )
  watch(
    () => props.type,
    () => {
      // witchTaskComponent.value = installedComponent.value[props.type]
      if (props.type == installedComponent.value.UserTask) {
        witchTaskComponent.value = UserTask
      }
      if (props.type == installedComponent.value.ScriptTask) {
        witchTaskComponent.value = ScriptTask
      }
      if (props.type == installedComponent.value.ReceiveTask) {
        witchTaskComponent.value = ReceiveTask
      }
      if (props.type == installedComponent.value.ServiceTask) {
        witchTaskComponent.value = ServiceTask
      }
    },
    { immediate: true }
  )
</script>

3、效果图:

目前只做了4种任务的支持,需要可以增加其它



相关文章
|
16天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
13天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
31 7
|
14天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
36 3
|
13天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
34 1
|
13天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
34 1
|
16天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
16天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
19天前
|
JavaScript API
vue3知识点:ref函数
vue3知识点:ref函数
29 2
|
19天前
|
API
vue3知识点:reactive函数
vue3知识点:reactive函数
24 1
|
19天前
|
JavaScript 前端开发 API
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
23 0