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种任务的支持,需要可以增加其它



相关文章
|
4天前
|
缓存 JavaScript 前端开发
Vue 3的响应式系统
【5月更文挑战第31天】Vue 3的响应式系统
8 1
|
4天前
|
JavaScript 前端开发 API
vue2 /vue3【nextTick】的使用方法及实现原理,一文全搞懂!
vue2 /vue3【nextTick】的使用方法及实现原理,一文全搞懂!
|
4天前
|
JavaScript 开发者
[vue2/vue3] -- 深入剖析v-model的原理、父子组件双向绑定的多种写法
[vue2/vue3] -- 深入剖析v-model的原理、父子组件双向绑定的多种写法
[vue2/vue3] -- 深入剖析v-model的原理、父子组件双向绑定的多种写法
|
4天前
|
JavaScript API
vue3父子组件相互调用方法详解
vue3父子组件相互调用方法详解
|
11天前
|
JavaScript API
Vue3 基础语法
该内容介绍了Vue项目的创建和Vue3的语法、响应式API、生命周期、组件通信及跨组件通信方法。包括使用`npm init vue@latest`创建项目,`npm install`初始化,Vue3的`setup`语法,`reactive`、`ref`、`computed`和`watch`的用法,生命周期图解,以及父子组件间的数据传递。此外,还提到了Vue3中使用`provide`和`inject`进行跨层数据传递,以及通过Pinia库进行状态管理。
37 0
Vue3 基础语法
|
15天前
|
JavaScript 定位技术 API
在 vue3 中使用高德地图
在 vue3 中使用高德地图
23 0
|
15天前
vue3 键盘事件 回车发送消息,ctrl+回车 内容换行
const textarea = textInput.value.textarea; //获取输入框元素
29 3
|
17天前
|
JavaScript 前端开发 CDN
vue3速览
vue3速览
29 0
|
18天前
|
设计模式 JavaScript 前端开发
Vue3报错Property “xxx“ was accessed during render but is not defined on instance
Vue3报错Property “xxx“ was accessed during render but is not defined on instance
|
18天前
|
JavaScript 前端开发 安全
Vue3官方文档速通(下)
Vue3官方文档速通(下)
29 0