bpmn简单使用(制作流程图)

news2024/9/27 12:10:49

1、先下载依赖,下面是我下载的版本

"@bpmn-io/properties-panel": "^3.23.0",
"bpmn-js": "^17.9.1",
"bpmn-js-properties-panel": "^5.6.1",
"camunda-bpmn-moddle": "^7.0.1",

2、创建一个文件夹,里面放两个文件

index.scss

// 最外层包裹
.designer-container {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
  background-color: #ffffff;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  position: relative;
}

// 主要内容
#container {
  width: 100%;
  flex: 1;
  overflow: hidden;
  display: flex;
  height: 100%;
}

/* 隐藏右下角logo */
.bjs-powered-by {
  display: none;
}

// 按钮区域样式
.panel {
  width: 400px;
  position: absolute;
  top: 1px;
  right: 1px;
  height: 100%;
  overflow: auto;

  .el-button {
    margin: 0 10px 10px 0 !important;
  }
}

index.vue

<template>
  <div class="designer-container">
    <div id="container"></div>
    <div id="js-properties-panel" class="panel">
      <div class="custom-properties-panel">
        <div style="height: 400px">
          <el-row class="mb-4">
            <el-button>Default</el-button>
            <el-button type="primary" @click="downloadXml">点击下载xml</el-button>
            <el-button type="success" @click="creteXml">导入文件</el-button>
            <el-button type="info">Info</el-button>
            <el-button type="warning">Warning</el-button>
            <el-button type="danger">Danger</el-button>
          </el-row>
        </div>
      </div>
    </div>
  </div>
</template>
<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'commFlowchart'
})
</script>

<script setup lang="ts">
import { markRaw, onMounted, ref } from "vue";
import BpmnModeler from "bpmn-js/lib/Modeler";
import translate from "@/utils/translate/translate";//引入汉化工具
import "bpmn-js/dist/assets/diagram-js.css";
import "bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css";
import "bpmn-js-properties-panel/dist/assets/properties-panel.css"; // 右边工具栏样式
import EventBus from "diagram-js/lib/core/EventBus";
let customTranslateModule = {
  translate: ["value", translate]
};
const bpmnModeler = ref<any>({});
onMounted(() => {
  bpmnModeler.value = markRaw(
    new BpmnModeler({
      container: "#container",
      // 添加控制板
      propertiesPanel: {
        parent: "#js-properties-panel"
      },
      additionalModules: [customTranslateModule]
    })
  );
  bpmnModeler.value.createDiagram();
  // 注册事件监听
  registerEventBus();
});

const registerEventBus = () => {
  // 获取bpmn.js的EventBus。通过打印eventBus可以查看支持的所有EventBus: console.log(eventBus);
  const eventBus: EventBus = bpmnModeler.value.get("eventBus");
  // 注册节点事件,eventTypes中可以写多个事件,需要哪些写那些
  const eventTypes = ["element.click"];
  eventTypes.forEach(eventType => {
    eventBus.on(eventType, (e: { element: any }) => {
      const { element } = e;
      if (!element.parent) return;
      if (!e || element.type === "bpmn:Process") {
        return false;
      } else {
        if (eventType === "element.click") {
          // TODO 节点点击后想要做的处理
          console.log("点击的节点数据", element);
        }
      }
    });
  });
};
// 下载文件
const downloadFile = (fileName: string, data: any, type: string) => {
  const a = document.createElement('a');
  const url = window.URL.createObjectURL(new Blob([data], { type: type }));
  a.href = url;
  a.download = fileName;
  a.click();
  window.URL.revokeObjectURL(url);
};
// 下载流程图
const downloadXml = () => {
  //下载xml
  bpmnModeler.value.saveXML({ format: true }).then((res: any) => {
    console.log("画出的xml数据为", res);
    downloadFile(`测试.xml`, res.xml, 'application/xml');
  });
  // 下载SVG
  // bpmnModeler.value.saveSVG({ format: true }).then((res: any) => {
  //   console.log("画出的svg数据为", res);
  //   downloadFile(`测试.svg`, res.svg, 'image/svg+xml');
  // });
};
const creteXml = () => {
  bpmnModeler.value.importXML(``);
};
</script>

<style lang="scss" scope>
@import "./index.scss";
</style>

3、页面引用

<template>
  <div class="workflow-view">
    <commFlowchart />
  </div>
</template>

<script setup lang="ts">
import commFlowchart from "@/components/commFlowchart/index.vue";
</script>

<style lang="scss" scoped>
.workflow-view{
  height: calc(100vh - 152px);
}
</style>

4、汉化(创建一个文件夹,里面放两个文件translate.ts和zh.ts)

translate.ts

import { zh } from "./zh";
export default function customTranslate(template: string, replacements: any) {
  replacements = replacements || {};
  template = zh[template] || template;
  return template.replace(/{([^}]+)}/g, function (_, key) {
    return replacements[key] || "{" + key + "}";
  });
}

zh.ts

export const zh:any = {
    "Activate global connect tool": "激活全局连接工具",
    "Append {type}": "添加 {type}",
    "Add lane above": "在上面添加道",
    "Divide into two lanes": "分割成两个道",
    "Divide into three lanes": "分割成三个道",
    "Add lane below": "在下面添加道",
    "Append compensation activity": "追加补偿活动",
    "Change type": "修改类型",
    "Connect using association": "使用关联连接",
    "Connect using sequence/message flow or association": "使用顺序/消息流或者关联连接",
    "Connect using data input association": "使用数据输入关联连接",
    "Connect to other element": "连接到其他元素",
    "Add text annotation": "添加文本注释",
    "Delete": "删除",
    "Collection": "收藏",
    "Align elements": "对齐元素",
    "Change element": "修改类型",
    Remove: "移除",
    "Activate hand tool": "激活抓手工具",
    "Activate lasso tool": "激活套索工具",
    "Activate create/remove space tool": "激活创建/删除空间工具",
    "Create expanded sub-process": "创建扩展子过程",
    "Create intermediate/boundary event": "创建中间抛出事件/边界事件",
    "Create pool/participant": "创建池/参与者",
    "Parallel multi-instance": "并行多重事件",
    "Sequential multi-instance": "时序多重事件",
    "Data object reference": "数据对象参考",
    "Data store reference": "数据存储参考",
    Loop: "循环",
    "Ad-hoc": "即席",
    "Create {type}": "创建 {type}",
    Task: "任务",
    "Send task": "发送任务",
    "Receive task": "接收任务",
    "User task": "用户任务",
    "Manual task": "手工任务",
    "Business rule task": "业务规则任务",
    "Service task": "服务任务",
    "Script task": "脚本任务",
    "Call activity": "调用活动",
    "Sub-process (collapsed)": "子流程(折叠的)",
    "Sub-process (expanded)": "子流程(展开的)",
    "Start event": "开始事件",
    StartEvent: "开始事件",
    "Intermediate throw event": "中间事件",
    "End event": "结束事件",
    endEvent: "结束事件",
    "Create gateway": "创建网关",
    "Message start event": "消息开始事件",
    "Timer start event": "定时开始事件",
    "Conditional start event": "条件开始事件",
    "Signal start event": "信号开始事件",
    "Error start event": "错误开始事件",
    "Escalation start event": "升级开始事件",
    "Compensation start event": "补偿开始事件",
    "Message Start event (non-interrupting)": "消息开始事件(非中断)",
    "Timer Start event (non-interrupting)": "定时开始事件(非中断)",
    "Conditional start event (non-interrupting)": "条件开始事件(非中断)",
    "Signal Start event (non-interrupting)": "信号开始事件(非中断)",
    "Escalation start event (non-interrupting)": "升级开始事件(非中断)",
    "Message intermediate catch event": "消息中间捕获事件",
    "Message intermediate throw event": "消息中间抛出事件",
    "Timer intermediate catch event": "定时中间捕获事件",
    "Escalation untermediate throw event": "升级中间抛出事件",
    "Conditional intermediate catch event": "条件中间捕获事件",
    "Link intermediate catch event": "链接中间捕获事件",
    "Link intermediate throw event": "链接中间抛出事件",
    "Compensation intermediate throw event": "补偿中间抛出事件",
    "Signal intermediate catch event": "信号中间捕获事件",
    "Signal intermediate throw event": "信号中间抛出事件",
    "Message end event": "消息结束事件",
    "Escalation end event": "定时结束事件",
    "Error end event": "错误结束事件",
    "Cancel end event": "取消结束事件",
    "Compensation end event": "补偿结束事件",
    "Signal end event": "信号结束事件",
    "Terminate end event": "终止结束事件",
    "Message boundary event": "消息边界事件",
    "Message boundary event (non-interrupting)": "消息边界事件(非中断)",
    "Timer boundary event": "定时边界事件",
    "Timer boundary event (non-interrupting)": "定时边界事件(非中断)",
    "Escalation boundary event": "升级边界事件",
    "Escalation boundary event (non-interrupting)": "升级边界事件(非中断)",
    "Conditional boundary event": "条件边界事件",
    "Conditional boundary event (non-interrupting)": "条件边界事件(非中断)",
    "Error boundary event": "错误边界事件",
    "Cancel boundary event": "取消边界事件",
    "Signal boundary event": "信号边界事件",
    "Signal boundary event (non-interrupting)": "信号边界事件(非中断)",
    "Compensation boundary event": "补偿边界事件",
    "Exclusive gateway": "互斥网关",
    "Parallel gateway": "并行网关",
    "Inclusive gateway": "相容网关",
    "Complex gateway": "复杂网关",
    "Event based gateway": "事件网关",
    Transaction: "转运",
    "Sub process": "子流程",
    "Event Sub process": "事件子流程",
    "Collapsed Pool": "折叠池",
    "Expanded Pool": "展开池",
    "no parent for {element} in {parent}": "在{parent}里,{element}没有父类",
    "no shape type specified": "没有指定的形状类型",
    "flow elements must be children of pools/participants": "流元素必须是池/参与者的子类",
    "out of bounds release": "out of bounds release",
    "more than {count} child lanes": "子道大于{count} ",
    "element required": "元素不能为空",
    "diagram not part of bpmn:Definitions": "流程图不符合bpmn规范",
    "no diagram to display": "没有可展示的流程图",
    "no process or collaboration to display": "没有可展示的流程/协作",
    "element {element} referenced by {referenced}#{property} not yet drawn": "由{referenced}#{property}引用的{element}元素仍未绘制",
    "already rendered {element}": "{element} 已被渲染",
    "failed to import {element}": "导入{element}失败",
    Id: "编号",
    Name: "名称",
    General: "常规",
    Details: "详情",
    "Message Name": "消息名称",
    Message: "消息",
    Initiator: "创建者",
    "Asynchronous Continuations": "持续异步",
    "Asynchronous Before": "异步前",
    "Asynchronous After": "异步后",
    "Job Configuration": "工作配置",
    Exclusive: "排除",
    "Job Priority": "工作优先级",
    "Retry Time Cycle": "重试时间周期",
    Documentation: "文档",
    "Element Documentation": "元素文档",
    "History Configuration": "历史配置",
    "History Time To Live": "历史的生存时间",
    Forms: "表单",
    "Form Key": "表单key",
    "Form Fields": "表单字段",
    "Business Key": "业务key",
    "Form Field": "表单字段",
    ID: "编号",
    Type: "类型",
    Label: "名称",
    "Default Value": "默认值",
    Validation: "校验",
    "Add Constraint": "添加约束",
    Config: "配置",
    Properties: "属性",
    "Add Property": "添加属性",
    Value: "值",
    Listeners: "监听器",
    "Execution Listener": "执行监听",
    "Event Type": "事件类型",
    "Listener Type": "监听器类型",
    "Java Class": "Java类",
    Expression: "表达式",
    "Must provide a value": "必须提供一个值",
    "Delegate Expression": "代理表达式",
    Script: "脚本",
    "Script Format": "脚本格式",
    "Script Type": "脚本类型",
    "Inline Script": "内联脚本",
    "External Script": "外部脚本",
    Resource: "资源",
    "Field Injection": "字段注入",
    Extensions: "扩展",
    "Input/Output": "输入/输出",
    "Input Parameters": "输入参数",
    "Output Parameters": "输出参数",
    Parameters: "参数",
    "Output Parameter": "输出参数",
    "Timer Definition Type": "定时器定义类型",
    "Timer Definition": "定时器定义",
    Date: "日期",
    Duration: "持续",
    Cycle: "循环",
    Signal: "信号",
    "Signal Name": "信号名称",
    Escalation: "升级",
    Error: "错误",
    "Link Name": "链接名称",
    Condition: "条件名称",
    "Variable Name": "变量名称",
    "Variable event": "变量事件",
    "Specify more than one variable change event as a comma separated list.": "多个变量事件以逗号隔开",
    "Wait for Completion": "等待完成",
    "Activity Ref": "活动参考",
    "Version Tag": "版本标签",
    Executable: "可执行文件",
    "External Task Configuration": "扩展任务配置",
    "Task Priority": "任务优先级",
    External: "外部",
    Connector: "连接器",
    "Must configure Connector": "必须配置连接器",
    "Connector Id": "连接器编号",
    Implementation: "实现方式",
    "Field injections": "字段注入",
    Fields: "字段",
    "Result variable": "结果变量",
    Topic: "主题",
    "Configure connector": "配置连接器",
    "Input parameter": "输入参数",
    Assignee: "代理人",
    "Candidate Users": "候选用户",
    "Candidate Groups": "候选组",
    "Due Date": "到期时间",
    "Follow Up Date": "跟踪日期",
    "Specify more than one group as a comma separated list.": "多个用户使用逗号隔开",
    Priority: "优先级",
    // eslint-disable-next-line no-template-curly-in-string
    "The follow up date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)": "跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00",
    // eslint-disable-next-line no-template-curly-in-string
    "The due date as an EL expression (e.g. ${someDate} or an ISO date (e.g. 2015-06-26T09:54:00)": "跟踪日期必须符合EL表达式,如: ${someDate} ,或者一个ISO标准日期,如:2015-06-26T09:54:00",
    Variables: "变量",
    "Candidate Starter Users": "选择启动候选人",
    "Candidate Starter Configuration": "候选人启动器配置",
    "Candidate Starter Groups": "候选人启动组",
    "This maps to the process definition key.": "编号将映射到流程主键.",
  
    save: "保存",
    Tools: "工具",
    "flow gateway": "流程网关",
    "Process control": "流程节点",
    "Create start event": "开始节点",
    "Create end event": "结束节点",
    "Create exclusive gateway": "互斥网关",
    "Create parallel gateway": "并行网关",
    "Create task": "任务节点",
    "Create user task": "用户任务节点",
    "Condition Type": "条件类型",
    "Create group": "创建组",
    "Create data object reference": "创建数据对象引用",
    "Create data store reference": "创建数据存储引用",
    "Append task": "添加任务",
    "Append end event": "追加结束事件节点",
    "Append gateway": "追加网关节点",
    "Append user task": "追加用户任务节点",
    "Append intermediate/boundary event": "追加中间或边界事件",
    "Append text annotation": "追加文本批注" // 此句要有效,必须在CustomContexPadProvide给此节点增加一个translate('Append TextAnnotation')
  };
  

简单的例子完成啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【鸿蒙开发基础学习】HSP-应用程序包开发与使用

HSP - 应用程序包开发与使用 HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0…

【开端】web系统中返回状态码组织管理

一、绪论 http web系统接口返回状态码有很多中&#xff0c;包括行业内定的状态码 &#xff0c;比如200 表示成功&#xff0c;500表示服务器系统不可用&#xff0c;但是有包含很多业务上自定义的状态码。比如阿里&#xff0c;腾讯这些公司的产品会定义很多自己公司产品的状态码…

Spring全家桶(三):Spring AOP

Spring AOP面向切面编程 1.面向切面编程思维&#xff08;AOP&#xff09; 1.1.面向切面编程思想AOP AOP&#xff1a;Aspect Oriented Programming面向切面编程 AOP可以说是OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09;的补充和完善。O…

宝塔+acme.sh 使用https请求

安装acme.sh curl https://get.acme.sh | sh -s emailmyexample.com [记得修改邮箱]安装后的路径 /root/.acme 设置别名 alias acme.sh~/.acme.sh/acme.sh 运行 source ~/.bashrc 或者打开~/.bashrc文件&#xff0c;输入要设置的alias命令&#xff0c;保存&#xff0c;然后运行…

mysql case when用法

目录 一&#xff1a;概述 二&#xff1a;使用场景 一&#xff1a;概述 CASE WHEN 是 SQL 中的一个条件表达式&#xff0c;用于在 SQL 查询中实现条件逻辑。它类似于编程语言中的 if-else 或 switch 语句。通过使用 CASE WHEN&#xff0c;你可以在执行查询时根据条件对结果进行…

全网最全的设计效率工具?设计师的最佳助手!

身为设计师的你&#xff0c;是不是下载的素材堆积如山&#xff0c;用时却得在文件夹里层层翻找。在PS&#xff0c;Figma等不同的设计软件里做好的效果样式和工程&#xff0c;想要整理和再次使用很麻烦。不过&#xff0c;现在有了千鹿设计助手&#xff0c;提供一系列适合设计师的…

系统编程-02进程间通信

目录 1、管道 2、消息队列 &#xff08;1&#xff09;ftock()--创建IPC的键值KEY &#xff08;2&#xff09;获取消息队列ID &#xff08;3&#xff09;发送和接收消息 &#xff08;4&#xff09;设置或者获取消息队列的相关属性 3、共享内存 &#xff08;1&#xff09…

14.Spring程序部署-Linux部署

文章目录 1. 打包项目2. linux中删除mariadb&#xff0c;下载mysql3. .yml配置文件4.xshell中部署项目1)首先先在Linux中创建一个新的文件夹2)进入刚创建的文件夹&#xff0c;并将刚打包好的.jar包文件拖进来3)进入Linux中的mysql&#xff0c;并建库建表4)启动程序5)Linux服务器…

使用Anaconda安装多个版本的Python并与Pycharm进行对接

1、参考链接 Anaconda安装使用教程解决多Python版本问题_anaconda安装多个python版本-CSDN博客 基于上面的一篇博客的提示&#xff0c;我做了尝试。并在Pycharm的对接上做了拓展。 2、首先安装Anaconda 这个比较简单&#xff0c;直接安装即可&#xff1a; 3、设置conda.exe的…

筑牢企业防线,打造高效员工行为管控体系!行为管控软件分享,老板的智慧之选!

商贾之道&#xff0c;在于治事有序&#xff0c;人心齐整。有言曰&#xff0c;防身立命&#xff0c;先固其本。企业之基&#xff0c;在于人心与秩序。 行为管控软件乃老板之智慧&#xff0c;企业之福音也&#xff01;本文将以安企神行为管控软件为例&#xff0c;探讨如何借助这…

人工智能在肿瘤免疫微环境领域的研究进展|顶刊速递·24-08-07

小罗碎碎念 2024-08-07 今天这期推文的主题是——人工智能在肿瘤免疫微环境领域的研究进展。 第三、五、六篇文献在06-02的推文中介绍过&#xff0c;但是考虑到知识体系的完整性&#xff0c;同时方便大家补充这一部分的临床知识&#xff0c;所以再次把这三篇文章收纳进来。 我…

进程状态(三)----- linux 中具体的进程状态(下)

目录 前言1. T && t 状态2. X 与 Z 状态3. 孤儿进程 前言 继上一篇文章 进程状态&#xff08;二&#xff09;----- linux 中具体的进程状态&#xff08;上&#xff09; 介绍了 linux 系统中具体的 R、S、D 状态&#xff0c;而这篇文章继续介绍 linux 系统中剩下的三种…

【hbz分享】-springboot启动时做了哪些事情

spring启动类启动时的流程 先调用SpringApplication完成一系列初始化操作 先把启动类保存起来&#xff0c;就是带有main函数的那个类&#xff0c;把这个保存起来保存应用类型&#xff0c;是Servlet还是Ractive通过getSpringFactoriesInstances(BootstrapRegistryInitializer.…

<数据集>战斗机识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;7903张 标注数量(xml文件个数)&#xff1a;7903 标注数量(txt文件个数)&#xff1a;7903 标注类别数&#xff1a;43 标注类别名称&#xff1a;[F16, Mig31, F35, F18, SR71, A10, A400M, AG600, J20, F4, C17, Tor…

C语言程序设计之基础易错题锦集2

C语言程序设计之基础易错题锦集2 自加自减代码2_0_1运行结果2_0_1代码2_0_2运行结果2_0_2 问题2_1解答2_1 问题2_2结果2_2 问题2_3结果2_3 问题2_4结果2_4 问题2_5结果2_5 问题2_6结果2_6 自加自减 代码2_0_1 #include<stdio.h>main(){int a,b,c,d;abcd10;printf("…

【枚举 图论】2242. 节点序列的最大得分

本文涉及知识点 枚举 图论知识汇总 LeetCode 2242. 节点序列的最大得分 给你一个 n 个节点的 无向图 &#xff0c;节点编号为 0 到 n - 1 。 给你一个下标从 0 开始的整数数组 scores &#xff0c;其中 scores[i] 是第 i 个节点的分数。同时给你一个二维整数数组 edges &…

区分虚拟网卡和物理网卡

枚举注册表网卡信息 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}读取没一项的Characteristics、NetCfgInstanceId信息Characteristics & NCF_PHYSICAL 即为物理网卡 Characteristics值 类型值说明NCF_VIRTUAL0x01…

STM32L051K8U6-HAL-LED闪烁设计

HAL三步法&#xff1a; 1、配置下载线 2、配置晶振 3、配置时钟 注意&#xff1a;中断优先级&#xff08;这里防止HAL_Delay卡死&#xff0c;详细请看 http://t.csdnimg.cn/NQhQV&#xff09; 4、 配置灯引脚属性为输出模式。并设置标签为LED 生成代码&#xff1a;编写while里…

《关于触手 AI 图像合成算法的分析报告》

一、算法全周期行为分析 算法安全 信息内容安全&#xff1a;在图像生成过程中&#xff0c;需要确保所生成的图像内容不包含违法、有害、侵犯他人权益或违反道德规范的信息。例如&#xff0c;不能生成涉及暴力、色情、恐怖主义等内容的图像。信息源安全&#xff1a;对于输入的原…

警惕智能手机的“隐形眼”:如何保护我们的数字隐私堡垒

随着智能手机深入我们生活的方方面面&#xff0c;它变得无所不在&#xff0c;甚至无所不知。 但你是否意识到&#xff0c;你的手机可能正在悄无声息地“监听”你的一举一动&#xff1f; 从你的搜索习惯到日常对话&#xff0c;手机的个性化推荐系统正不断收集你的数据。 本文…