日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue項目中使用bpmn-自定義platter的示例代碼

瀏覽:24日期:2023-01-21 15:51:03

內容概述

本系列“vue項目中使用bpmn-xxxx”分為七篇,均為自己使用過程中用到的實例,手工原創,目前陸續更新中。主要包括vue項目中bpmn使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。如果轉載或通過爬蟲直接爬的,格式特別丑,請來原創看:我是作者原文

前情提要

經過前四篇的學習,我們能夠實現bpmn基本繪圖、預覽、為節點加事件加顏色等效果,這一篇我們來說,如何自定義左側工具欄(platter),首先看一下自定義前后效果圖對比:

vue項目中使用bpmn-自定義platter的示例代碼

我們本次要實現的目標:基于左側platter原有元素類型,創建出一個新的自定義節點。暫且叫它“草莓蛋糕”節點,類型是 bpmn:Task,樣式我們自己找一個好看的小草莓蛋糕圖案。所以,開動吧~首先新建一個“customPalette”文件夾,里面放我們今天所有自定義的文件。

步驟1:建立platter類函數,命名為CustomPalette.js

export default class CustomPalette { constructor(create, elementFactory, palette) { this.create = create; this.elementFactory = elementFactory; palette.registerProvider(this); } // 這個是繪制palette的核心,函數名不要變 getPaletteEntries() { const elementFactory = this.elementFactory; const create = this.create; function dragEventFactory(type) { return function (event) { const taskShape = elementFactory.create(’shape’, { type: type }); create.start(event, taskShape); }; } return { ’create.cake’: { title: ’我是自定義節點-草莓蛋糕’, // 鼠標懸浮到節點上顯示的文字 className: ’icon-custom bpmn-icon-cake’, // 樣式名 action: { // 操作該節點時會觸發的事件,此時只注冊一個拖動事件即可,否則拖動時沒有效果 dragstart: dragEventFactory(’bpmn:Task’) } } }; }}CustomPalette.$inject = [ ’create’, ’elementFactory’, ’palette’];

此時,我們已經注冊好了一個名稱為“create.cake”的節點,拖動它時,畫布中會出現一個'bpmn:Task'類型的節點,此時需要將該文件導出并在頁面中引入,否則沒有效果。

步驟2:在CustomPalette.js同級,建立一個index.js文件將其導出

import CustomPalette from ’./CustomPalette’;export default { __init__: [’customPalette’] customPalette: [’type’, CustomPalette],};

步驟3:頁面中(index.vue)引入index.js

import customModule from ’./customPalette’;export default { mounted() { this.containerEl = document.getElementById(’container’); this.bpmnModeler = new BpmnModeler({ additionalModules: [ customModule ] });}

步驟4:為節點定義樣式

新建一個customPalette.scss文件,在該文件同級放一張“cake.png”的圖片,作為節點的背景圖寫入。背景圖引入的話,貌似只支持.png格式,親測:jpg報錯

.bpmn-icon-cake { background-image: url(’./cake.png’);} .icon-custom { background-size: 65%; background-repeat: no-repeat; background-position: center center;}

并且在main.js中引入,注意,一定要在main.js中全局引入,否則不生效。

import ’customPalette/customPalette.scss’;

此時,我們便可以在左側工具欄中看到自定義的“草莓蛋糕”節點了,但是此時拖動該節點,右側只會產生一個“bpmn:Task”的節點,只有一個框框。

vue項目中使用bpmn-自定義platter的示例代碼

我們希望的是,拖動后畫布中也顯示自定義圖標,所以我們進行下一步:自定義渲染

步驟5:畫布渲染自定義節點

此時需要我們新建一個 CustomRenderer.js文件,作用:自定義 renderer。因為我們是在bpmn原有的元素“bpmn:Task”基礎上進行修改,所以我們需要對將BaseRenderer進行繼承。

import BaseRenderer from ’diagram-js/lib/draw/BaseRenderer’; // 引入默認的renderer const HIGH_PRIORITY = 1500; // 最高優先級 export default class CustomRenderer extends BaseRenderer { // 繼承BaseRenderer constructor(eventBus, bpmnRenderer) { super(eventBus, HIGH_PRIORITY); this.bpmnRenderer = bpmnRenderer; } canRender(element) { return !element.labelTarget; } drawShape(parentNode, element) { const shape = this.bpmnRenderer.drawShape(parentNode, element); return shape; } getShapePath(shape) { return this.bpmnRenderer.getShapePath(shape); }} CustomRenderer.$inject = [’eventBus’, ’bpmnRenderer’];

此時, CustomRenderer.js文件大概結構完成了,注意:HIGH_PRIORITY變量和canRender不可以刪掉,否則會有問題。重頭戲是里面的drawShape函數。

步驟6:書寫drawShape函數

我們在CustomRenderer.js同級建立一個util文件,記錄自定義類型節點的一些屬性。

import cake from ’./cake.png’;// 自定義元素的類型,此時我們只需要自定義一種節點,所以數組只有一個元素const customElements = [’bpmn:Task’]; const customConfig = { // 自定義元素的配置 cake: { url: cake, attr: {x: 0, y: 0, width: 50, height: 50} }}; export {customElements, customConfig};

現在我們來書寫drawShape函數

import { customElements, customConfig } from ’./util’;import { append as svgAppend, create as svgCreate } from ’tiny-svg’;...drawShape(parentNode, element) { const type = element.type; // 獲取到類型 // 所有節點都會走這個函數,所以此時只限制,需要自定義的才去自定義,否則仍顯示bpmn默認圖標 if (customElements.includes(type)) { const {url, attr} = customConfig[’cake’]; const customIcon = svgCreate(’image’, {...attr, href: url}); element[’width’] = attr.width; element[’height’] = attr.height; svgAppend(parentNode, customIcon); return customIcon; } const shape = this.bpmnRenderer.drawShape(parentNode, element); return shape;}

步驟7: 導出并使用CustomRenderer

修改之前導出CustomPalette的index.js文件

import CustomPalette from ’./CustomPalette’;import CustomRenderer from ’./CustomRenderer’; export default { __init__: [’customPalette’, ’customRenderer’], customPalette: [’type’, CustomPalette], customRenderer: [’type’, CustomRenderer]};

意:此時__init__內的屬性名都不可以改,不要問為什么,因為改了報錯。

步驟3中已經將該index.js引入到了頁面中,此時無需再次引入,此時我們來看看效果。

vue項目中使用bpmn-自定義platter的示例代碼

后續

項目目錄:index.vue是畫布主頁面,同級customPalette文件夾下共有6個文件,結構如下:

vue項目中使用bpmn-自定義platter的示例代碼

總結

到此這篇關于vue項目中使用bpmn-自定義platter的示例代碼的文章就介紹到這了,更多相關vue自定義platter內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
色偷偷色偷偷色偷偷在线视频| 欧美伊人久久| av中文字幕在线观看第一页| 国产欧美日韩一区二区三区四区| 亚洲女同中文字幕| 亚洲午夜视频| av不卡在线看| 一区二区国产精品| 亚洲精品美女91| 婷婷综合电影| 97精品一区二区| 性欧美xxxx免费岛国不卡电影| 久久亚洲图片| 久久精品免费看| 欧美日韩一二三四| 日韩制服丝袜先锋影音| 欧美日韩亚洲一区三区| 国产福利片在线观看| 国产精品毛片久久久| 久久亚洲人体| 91九色精品国产一区二区| 亚洲午夜免费| av资源亚洲| 日韩欧乱色一区二区三区在线| 国产精品多人| 好吊日精品视频| 久久99影视| 久久九九国产| 国产精品伦一区二区| 在线一区免费| 欧美国产偷国产精品三区| 一二三区精品| 欧美一级精品| yellow在线观看网址| 日韩午夜av| 欧美成人一二区| 免费看日韩精品| 亚洲国产专区| 亚洲国产福利| 中文字幕成人| 视频一区二区三区中文字幕| 捆绑调教日本一区二区三区| 国产精品大片免费观看| 日韩区一区二| 鲁大师影院一区二区三区| 久久黄色影院| 国产高潮在线| 中文字幕在线官网| 国产日韩欧美一区在线| 美女久久精品| 欧美精品97| 久久久精品区| 日韩国产欧美在线播放| 亚洲日产国产精品| 精品入口麻豆88视频| 国产精品.xx视频.xxtv| 日本精品另类| 日韩国产91| 一区二区三区四区在线观看国产日韩 | 黄色aa久久| 精品国产黄a∨片高清在线| 久久99蜜桃| 日韩国产欧美在线视频| 日韩高清在线一区| 久久国产人妖系列| 久久精品97| 国产精品亚洲片在线播放| 国产精品99久久免费| 精品一区二区三区中文字幕视频| 欧美激情aⅴ一区二区三区 | 久久久久久色| 午夜一级在线看亚洲| 久久久夜精品| 久久一区二区三区电影| 国精品一区二区| 欧美特黄一级大片| 中文一区在线| 蜜桃久久久久久| 日韩av午夜在线观看| 国产亚洲久久| 精品九九久久| 日本国产精品| 欧美大黑bbbbbbbbb在线| 欧美天堂亚洲电影院在线观看| 一区免费在线| 青草国产精品久久久久久| 日日摸夜夜添夜夜添国产精品| 午夜亚洲一区| 国产乱人伦精品一区| 久久精品影视| 久久xxxx| 国产在线不卡一区二区三区| 香蕉久久99| 国产日韩欧美三区| 欧美亚洲在线日韩| 久久国产精品免费一区二区三区| 日韩中文影院| 国产精品调教| 午夜精品亚洲| 欧产日产国产精品视频| 国产欧美激情| 亚洲综合丁香| 美女av在线免费看| 日本欧美一区二区在线观看| 亚洲女同一区| 蜜桃视频欧美| 日韩在线二区| 精品国产美女a久久9999| 欧美亚洲人成在线| 亚洲人www| 一区二区三区国产在线| 久久人人97超碰国产公开结果| 久久a爱视频| 91精品福利观看| 日韩欧乱色一区二区三区在线| 狠狠干成人综合网| 国产一区二区中文| 热三久草你在线| 国产福利91精品一区二区| 牛牛精品成人免费视频| 国产精品亚洲成在人线| 国产乱论精品| 风间由美中文字幕在线看视频国产欧美| 欧美综合精品| 美女在线视频一区| 电影91久久久| av亚洲一区二区三区| 丝袜美腿诱惑一区二区三区| 最近高清中文在线字幕在线观看1| 国产精品久久久久久久免费软件| 亚洲免费专区| 久久国产精品色av免费看| 亚洲精品第一| 日韩精品欧美成人高清一区二区| 一区二区电影| 国产精品一国产精品| 高清av一区| 久久九九国产| 中文一区一区三区高中清不卡免费| 国产a亚洲精品| 日本高清不卡一区二区三区视频| 少妇久久久久| 久久av一区二区三区| 日韩欧美精品一区二区综合视频| 国产精品久久777777毛茸茸| 国产999精品在线观看| 久久网站免费观看| 99成人在线| 欧美精品影院| 日韩精品2区| 久久国产精品久久w女人spa| 五月天久久久| 91精品美女| av亚洲在线观看| 欧美激情综合| 免费精品视频| 国产一卡不卡| 欧美性感美女一区二区| 91成人小视频| 91九色精品| 精品高清久久| 日韩精品一区二区三区中文字幕| 欧美亚洲专区| 国产亚洲毛片| 精品三级久久| 久久天堂影院| 国产精品一区二区三区美女| 免费精品视频| 国产一区二区中文| 成人黄色av| 精品国产成人| 国产美女亚洲精品7777| 首页国产欧美久久| 国产在线日韩| 亚洲电影有码| 日韩精品永久网址| 国产一区二区三区四区五区| 日韩中文字幕| 欧美日韩视频一区二区三区| 日本蜜桃在线观看视频| 精品伊人久久| 国产精品xxxav免费视频| 日韩精品社区| 日本a级不卡| 日韩黄色在线观看| 亚洲精品四区| 蜜桃一区二区三区在线| 免费看的黄色欧美网站| 99国产精品私拍| 久久国产精品99国产| 香蕉视频成人在线观看| 一区二区自拍| 亚洲成人一区| 亚洲黄页一区| 亚洲三级精品| 欧美亚洲一区二区三区| 欧美激情在线精品一区二区三区| 国产精品对白| 亚洲最新无码中文字幕久久| 吉吉日韩欧美|