uniapp 集成BPMN.js

本文详细描述了如何在uniapp项目中使用BPMN.js库创建并显示流程图,包括引入步骤、页面结构、初始化BpmnViewer以及设置高亮效果的过程。作者强调了在renderjs层级进行相关操作的重要性。
摘要由CSDN通过智能技术生成

记录最近使用uniapp+BPMN 在手机端展示流程图的项目案例

uniapp 没有windos对象,用之前需用到RenderJs

1、uniapp(vue项目同理)中引入bpmn.js,在package.json在原有的基础下加入以下内容后npm install

"dependencies": {
    "bpmn-js": "^9.4.0",
    "crypto-js": "^3.1.9-1",
    "minio": "^7.0.29",
    "qs": "^6.9.7",
    "vue-i18n": "^8.20.0"
  },

2.uniapp 引入bpmn.js(注意此时应在rederjs 层级引入包)

3、接下来在页面中创建id为bpmnCanvas(id叫啥都行)的view标签

<template>
		<view id="bpmnCanvas" :change:prop="bpmnCanvas.initPage" :prop="bpmnObj" 
          class="bpmnCanvas bpmnCanvasBox">
		</view>
</template>

特此说明:此处的bpmnObj数据均在第一个script接受/

初始化BpmnViewer,并创建流程图(注意此操作,均在renderjs中创建)

async initPage() {
                let that = this;
                bpmnViewer && bpmnViewer.destroy();
                bpmnViewer = new BpmnViewer({
                    container: document.getElementById('bpmnCanvas'),
                    width: '100%'
                });
               //this.bpmnTemplate是后端传过来的数据
                try {
                    const result = await bpmnViewer.importXML(this.bpmnTemplate);
                    const { warnings } = result;
document.getElementById('bpmnCanvas').addMarker('BPMNEdge_flow9','highlight');
                   this.importXmlSuccess();
                 } catch (err) {
                    console.log(err.message, err.warnings);
                }
            },

importXmlSuccess() {
				// 使流程图自适应屏幕
				let canvas = bpmnViewer.get('canvas');
				this.$ownerInstance.callMethod('initLoadin',false);
				
				// canvas.zoom('fit-viewport', 'auto')
				//设置高亮线和高亮节点,需要配合style中的css样式一起使用,否则没有颜色
				this.setViewerStyle(canvas)

			},
setViewerStyle(canvas) {
				//已完成节点高亮
				let executedLightNode = this.executedLightNode;
				if (executedLightNode && executedLightNode.length > 0) {
					executedLightNode.forEach(item => {
						canvas.addMarker(item, 'highlight')
					})
					document.querySelectorAll('.highlight').forEach((item, index) => {
						item.querySelector('.djs-visual rect').setAttribute('stroke-dasharray', '4,4')
					})
				}
				
				//顺序线高亮
				let highlightLines = this.highlightLine;
				if (highlightLines && highlightLines.length > 0) {
					highlightLines.forEach(item => {
						canvas.addMarker(item, 'highlight');
					})

				}

				//正在执行节点高亮
				let activeLightNode = this.bpmnObj.activeLightNode;
				if (activeLightNode && activeLightNode.length > 0) {
					activeLightNode.forEach((item, index) => {
						canvas.addMarker(item, 'highlight')
					})
					document.querySelectorAll('.highlight').forEach((item, index) => {
						item.querySelector('.djs-visual rect').setAttribute('stroke-dasharray', '4,4')
					})
				}
				
				
			},
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤在 Uniapp 应用中使用 bpmn.js 流程图: 1. 在 `pages` 目录下创建一个新的页面,比如 `ProcessDiagram.vue`; 2. 在 `ProcessDiagram.vue` 中引入 `bpmn.js` 和 `VueBpmn` 组件: ```javascript <template> <div> <vue-bpmn :xml="xml"></vue-bpmn> </div> </template> <script> import VueBpmn from 'vue-bpmn'; import 'bpmn-js/dist/assets/diagram-js.min.css'; import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'; import 'bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css'; import * as bpmnModeler from 'bpmn-js/lib/Modeler'; import * as camundaModdleDescriptor from 'camunda-bpmn-moddle/resources/camunda'; export default { name: 'ProcessDiagram', components: { VueBpmn, }, data() { return { xml: '<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/schema" id="Definitions_1">\n<bpmn:process id="Process_1" isExecutable="false">\n<bpmn:startEvent id="StartEvent_1"/>\n</bpmn:process>\n</bpmn:definitions>', }; }, mounted() { this.bpmnModeler = new bpmnModeler({ container: this.$refs.bpmnContainer, moddleExtensions: { camunda: camundaModdleDescriptor, }, }); this.bpmnModeler.importXML(this.xml, () => { const canvas = this.bpmnModeler.get('canvas'); canvas.zoom('fit-viewport'); }); }, }; </script> ``` 3. 在 `mounted` 生命周期中,将 `bpmn.js` 模型渲染到页面中: ```javascript mounted() { this.bpmnModeler = new bpmnModeler({ container: this.$refs.bpmnContainer, moddleExtensions: { camunda: camundaModdleDescriptor, }, }); this.bpmnModeler.importXML(this.xml, () => { const canvas = this.bpmnModeler.get('canvas'); canvas.zoom('fit-viewport'); }); }, ``` 4. 在 `template` 中添加一个挂载点 `ref="bpmnContainer"`。 以上代码示例是基于 `vue-bpmn` 和 `camunda-bpmn-moddle` 实现的,需要在 `package.json` 文件中添加依赖: ```json "dependencies": { "bpmn-js": "^8.5.1", "camunda-bpmn-moddle": "^3.3.3", "vue-bpmn": "^0.1.1" } ``` 您可以通过修改 `xml` 数据来加载自己的 bpmn.xml 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值