添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
} = require ( '@vue/cli-service' ) module . exports = defineConfig ( { transpileDependencies : true , configureWebpack : { module : { rules : [ { test : / \.bpmn / , type : 'asset/source'

引入样式文件

import 'bpmn-js/dist/assets/diagram-js.css' // 左边工具栏以及编辑节点的样式
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css'

在vue文件中引入使用

import BpmnModeler from 'bpmn-js/lib/Modeler' //创建 #bpmn-container为容器id this.bpmnModeler = new BpmnModeler({ container: '#bpmn-container' });

加载xml流程图

导入流程图文件

import testXML from './test.bpmn';

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn">
  <bpmn2:process id="Process_1" isExecutable="false">
    <bpmn2:startEvent id="StartEvent_1"/>
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds height="36.0" width="36.0" x="412.0" y="240.0"/>
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>
this.bpmnModeler.importXML(testXML).then(()=>{
					console.log("加载成功")
				}).catch(err=>{
					console.log("加载失败",err)
				});
 

代码中引入文件

import customTranslate from './customTranslate/customTranslate';
let customTranslateModule = {
		translate: ['value', customTranslate]

修改构建时的代码如下

this.bpmnModeler = new BpmnModeler({
					keyboard: {
						bindTo: window
					container: '#bpmn-container',
					additionalModules: [
						customTranslateModule
				});

以下代码可以在流程图上使用键盘操作

keyboard: {
			bindTo: window
pnpm install --save bpmn-js-properties-panel @bpmn-io/properties-panel
//右侧面板样式
import 'bpmn-js-properties-panel/dist/assets/properties-panel.css'

页面中引入组件

import {
		BpmnPropertiesPanelModule,
		BpmnPropertiesProviderModule
	} from 'bpmn-js-properties-panel';

修改创建代码

this.bpmnModeler = new BpmnModeler({
					keyboard: {
						bindTo: window
					propertiesPanel: {//指定面板容器
						parent: '#js-properties-panel'
					container: '#bpmn-container',
					additionalModules: [//加入模块
						customTranslateModule,
						BpmnPropertiesPanelModule,
						BpmnPropertiesProviderModule
				});

最终项目效果

<template>
	<div class="container">
		<div class="bpmn" id="bpmn-container"></div>
		<div class="properties-panel-parent" id="js-properties-panel"></div>
	</div>
</template>
<script>
	import BpmnModeler from 'bpmn-js/lib/Modeler'
	import testXML from './test.bpmn';
	import customTranslate from './customTranslate/customTranslate';
	let customTranslateModule = {
		translate: ['value', customTranslate]
	import {
		BpmnPropertiesPanelModule,
		BpmnPropertiesProviderModule
	} from 'bpmn-js-properties-panel';
	export default {
		mounted() {
			this.init()
		data() {
			return {
				// bpmn建模器
				bpmnModeler: null
		methods: {
			init() {
				// 建模
				this.bpmnModeler = new BpmnModeler({
					keyboard: {
						bindTo: window
					propertiesPanel: { //指定面板容器
						parent: '#js-properties-panel'
					container: '#bpmn-container',
					additionalModules: [ //加载模块
						customTranslateModule,
						BpmnPropertiesPanelModule,
						BpmnPropertiesProviderModule
				});
				this.createNewDiagram()
			createNewDiagram() {
				// 将字符串转换成图显示出来
				this.bpmnModeler.importXML(testXML).then(() => {
					console.log("加载成功")
				}).catch(err => {
					console.log("加载失败", err)
				});
</script>
<style scoped lang="scss">
	.container {
		width: 100%;
		height: 100%;
		position: relative;
		.bpmn {
			width: 100%;
			height: 100%;
		.properties-panel-parent {
			width: 400px;
			border-left: 1px solid #ccc;
			border-top: 1px solid #ccc;
			overflow: auto;
			position: absolute;
			right:0px;
			top:0px;
</style>
2、vue引入相关依赖
import { markRaw } from 'vue';
import 'bpmn-js/dist/assets/diagram-js.css';
import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';
import BpmnModeler from 'bpmn-js/lib/Modeler';
<div id="containe
				
最近工作转到工作流模块开发了,需要开发一个流程设计器。 于是就开始接触到bpmn-js,搜索了不少资料,整合demo。现在总结一下如何在vue工程中集成bpmn-js流程设计器。 集成的效果: 目前这个demo只是初步实现简单的几个功能。业务当中要扩展的话,就需要老铁更进一步进行改造和完善了。 1、保存模型为BPMN 的xml格式,这个xml数据可以提交到后端工作流引擎保存,完成流程设计的功能。 2、保存SVG。 3、导入BPMN。将文件中的xml数据转化为流程图,重新设计或保存。 修改package.json: "bpmn-js-properties-panel":"https://github.com/RubyLinT/bpmn-js-properties-panel.git", "activiti-bpmn-mod...
一、bpmn.js官方例子有一个bpmn-js-examples/i18n专门讲了如何将bpmn-js中显示的字符转换为另一种语言的方案,本文根据官方的描述进行的实战。 二、原理: bpmn-js在实例化时,它把转换语言的功能(custom-translate)作为一个额外的配置模块,这样就覆盖了缺省的原来语言,在你 BpmnModeler实例化的js文件中,加入以下代码: var c...
最近项目需求需要用到Activiti以及Bpmn.js,我就去查阅资料学习了一下,现在项目已经到了收尾阶段,回头整理记录一下我整合bpmn.js的步骤及操作。 步骤一:创建项目 // 创建一个Vue项目 vue create bpmn-demo // 安装一下项目依赖 // 或者使用npm npm install 项目创建完成以后我们要安装一下bpmn.js的依赖然后进行整合。 // yarn 安装 yarn add bpmn-js // npm安装 npm install bp
Vue 3 + TypeScript + Vite 中使用 vue-draggable-next 插件实现按钮在区域内任意移动的功能,你可以按照以下步骤进行操作: 1. 确保你已经安装Vue 3、TypeScript 和 Vite,并且已经创建了一个 Vue 3 + TypeScript + Vite 的项目。 2. 在项目根目录下,通过命令行安装 vue-draggable-next: ```bash npm install vue-draggable-next 3. 在你的 Vue 组件中,首先导入所需的库和类型: ```typescript import { defineComponent, ref } from 'vue'; import { draggable } from 'vue-draggable-next'; 4. 创建一个包含按钮的区域容器,并在容器内部使用 `draggable` 组件来包裹按钮。将 `v-model` 指令绑定到按钮的位置属性。 ```typescript export default defineComponent({ components: { draggable setup() { const buttonPosition = ref({ x: 0, y: 0 }); return { buttonPosition 5. 在模板中使用 `draggable` 组件和按钮。 ```html <template> <div class="container"> <draggable v-model="buttonPosition" :bounds="containerBounds"> <button class="button">移动按钮</button> </draggable> </template> 6. 添加样式,确保容器具有适当的宽度、高度和边界。 ```html <style> .container { position: relative; width: 500px; height: 500px; border: 1px solid #ccc; .button { position: absolute; left: 0; top: 0; </style> 通过以上步骤,你就可以在 Vue 3 + TypeScript + Vite 中使用 vue-draggable-next 插件来实现按钮在区域内任意移动的功能。这样,按钮的位置将随着拖动而改变,并受到容器边界的限制。希望对你有所帮助!
CSDN-Ada助手: 很高兴看到你分享关于ant design pro集成阿里低代码引擎的博客,这个主题非常具有技术挑战性,而你的博文也解释得非常清晰详细。希望你能继续分享关于前端开发和低代码引擎集成的经验和见解。另外,或许可以在未来的博文中介绍一些关于低代码引擎的优缺点,以及如何在实际项目中应用低代码引擎来提高开发效率和用户体验。期待你更多的精彩内容! 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2