首页 > 其他分享 >自定义bpmn 属性面板

自定义bpmn 属性面板

时间:2023-04-17 17:25:25浏览次数:31  
标签:name 自定义 bpmn bpmnModeler label element modeling 面板 id

点击查看代码
<template>
  <div class="custom-properties-panel my-card">
    <div v-if="selectedElements.length <= 0" class="empty">请选择一个节点</div>
    <div v-else-if="selectedElements.length > 1" class="empty">
      只能选择一个节点
    </div>
    <div v-else>
      <fieldset class="element-item">
        <label>id</label>
        <span>{{ element.id }}</span>
      </fieldset>
      <fieldset class="element-item">
        <label>name</label>
        <input
          :value="element.name"
          @change="(event) => changeField(event, 'name')"
        >
      </fieldset>
      <fieldset class="element-item">
        <label>customProps</label>
        <input
          :value="element.name"
          @change="(event) => changeField(event, 'customProps')"
        >
      </fieldset>
      <el-form
        ref="dataForm"
        :model="dataForm"
        :rules="rules"
        label-width="140px"
      >
        <el-row>
          <el-col :span="24">
            <el-form-item label="名称" prop="name">
              <el-input v-model="dataForm.name" placeholder="请输入名称" />
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="节点最大审批人数" prop="code">
              <el-select
                v-model="dataForm.approvalNum"
                placeholder="请选择节点最大审批人数"
                style="width: 100%"
              >
                <el-option
                  v-for="item in approvalNum"
                  :key="item.id"
                  :label="item.label"
                  :value="item.id"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="审批类型" prop="code">
              <el-select
                v-model="dataForm.approvalType"
                placeholder="请选择审批类型"
                style="width: 100%"
              >
                <el-option
                  v-for="item in approvalType"
                  :key="item.id"
                  :label="item.label"
                  :value="item.id"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col
            v-if="dataForm.approvalType == 1 || dataForm.approvalType == 2"
            :span="24"
          >
            <el-form-item label="已选人员" prop="code">
              <el-input v-model="dataForm.code" placeholder="请输入编码" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </div>
  </div>
</template>

<script>
export default {
  name: 'PropertiesView',
  props: {
    bpmnModeler: {
      type: Object,
      default: () => ({})
    }
  },
  data() {
    return {
      selectedElements: [],
      element: null,
      approvalNum: [
        {
          id: 1,
          label: '1'
        },
        {
          id: 2,
          label: '全部'
        }
      ],
      approvalType: [
        {
          id: 1,
          label: '指定人员'
        },
        {
          id: 2,
          label: '指定角色'
        },
        {
          id: 3,
          label: '由上一步指定'
        }
      ],
      dataForm: {
        id: null,
        deptType: null,
        name: null,
        platforms: []
      },
      rules: {
        platforms: [
          { required: true, message: '所属平台不能为空', trigger: 'change' }
        ],
        code: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
        name: [{ required: true, message: '名称不能为空', trigger: 'blur' }]
      }
    };
  },
  created() {
    this.init();
  },
  methods: {
  // 因此功能还未写完,流程图跟右侧panel的联动功能逻辑还未实现,在这里可以实现
    init() {
      // 右侧面板改变事件
      this.bpmnModeler.on('selection.changed', (e) => {
        this.selectedElements = e.newSelection;
        this.element = e.newSelection[0]?.businessObject;
        console.log(this.element, 'e.newSelection');
      });
      this.bpmnModeler.on('element.changed', (e) => {
        const { element } = e;
        const { element: currentElement } = this;
        if (!currentElement) {
          return;
        }
        // 如果当前选择的元素改变,需要同步更新面板
        if (element.id === currentElement.id) {
          this.element = element;
        }
      });
    },
    /**
     * 改变控件触发的事件
     * @param { Object } input的Event
     * @param { String } 要修改的属性的名称
     */
    changeField(event, type) {
      const value = event.target.value;
      let properties = {};
      properties[type] = value;
      this.element[type] = value;
      this.updateProperties(properties);
    },
    updateName(name) {
      const modeling = this.bpmnModeler.get('modeling');
      // modeling.updateLabel(element, name)
    //   modeling.updateProperties(element, {
    //     name
    //   });
    },
    /**
     * 更新元素属性
     * @param { Object } 要更新的属性, 例如 { name: '' }
     */
    updateProperties(properties) {
      const modeling = this.bpmnModeler.get('modeling');
    //   modeling.updateProperties(element, properties);
    }
  }
};
</script>

<style scoped>

</style>


标签:name,自定义,bpmn,bpmnModeler,label,element,modeling,面板,id
From: https://www.cnblogs.com/ellafive/p/17326488.html

相关文章

  • angular项目国际化yaml自定义配置(ngx-translate)
    angular国际化配置很简单,但是想不用json文件用yaml文件,并且同一语言分label.jp.yaml和message.jp.yaml两个文件分开管理。1、下载ngx-translate的依赖库npminstall@ngx-translate/core--savenpminstall@ngx-translate/http-loader--save2、app.module.ts 中引入TranslateMo......
  • npm自定义模块及发布模块NodeJS
    在模块目录下执行:npminit(可以加--yes一键生成)新建文件index.jsvaryunan='helloyunan';module.exports=yunan;然后将文件夹放到node_modules可以用下面方法使用试试constyunan=require('huyunan');console.log('yunan',yunan);//yunanhelloyunan发布之前......
  • splunk 自定义SPL命令关联威胁情报数据
    通过自定义SPL命令关联微步情报数据,效果如下:  1、安装splunk-sdkcd/data/splunk/etc/apps/search/binpip3install-t.splunk-sdk2、自定义脚本开发[root@SIEM-P-VC-A001bin]#morethreatquery.py#!/usr/bin/python#-*-coding:utf-8-*-importsysfromsplunklib.s......
  • Dockerfile自定义镜像
    常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。镜像结构镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。我们以MySQL为例,来看看镜像的组成结构:简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、......
  • 在.NET 6.0中自定义接口路由
    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。在本文中,我们将讨论ASP.NETCore中的新路由。我们将了解什么是接口(endpoints)路由,它是如何工作的,它在哪里使用,以及如何创建自己的路由。本文主题:探索接口路由......
  • Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线
    场景Java中Thread类的常用API以及使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126596884上面讲了Thread的常用API,下面记录下线程的一些常用操作。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现后台线程后台线程,是指运行时在后台提供的一......
  • 自定义数据类型
    内置类型---intshortchardoubleflaot---C语言自己的类型复杂类型---结构体,枚举,联合体---自己创造的类型结构体结构体类型引用声明结构体是一些值的集合,这些值可以是不同类型。structStu//如果不屑Stu就是匿名结构体类型{ member-list;//--成员列表}Variable-list;//变量列表......
  • docker 构建自定义镜像
    1、docker构建自定义镜像copy与add的区别copy指令和add指令的唯一区别在于:是否支持从远程URL获取资源。COPY指令只能从执行dockerbuild所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。相同需求时,推荐使用COPY指令。ADD指令更......
  • Qt5.9 UI设计(四)——布局设计及自定义界面
    前言前面我们已经创建了mainwindowControlTabWidgetControlTreeWidgetmaintitlebar4个UI几面,我们需要将其他三个UI放置到mainwindow显示,同时需要它们可以自适应的界面的大小缩放。这里会使用到水平布局和垂直布局方法。(一)主界面布局设计放置一个空的widget将mainwi......
  • nginx自定义负载均衡及根据cpu运行自定义负载均衡
    转载请注明出处:1.nginx如何自定义负载均衡在Nginx中,可以通过配置文件自定义负载均衡策略。具体步骤如下:首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后端服务器列表,例如:upstreammyapp{serverbackend1.example.comweight=3;server......