流程設(shè)計器

快速介紹

bpmn-js是BPMN2.0渲染工具包和WEB建模器炼杖,它是用JavaScript編寫的粱快,將BPMN2.0圖嵌入到瀏覽器中,不需要服務器后端惊窖。

github地址:https://github.com/bpmn-io
demo地址:https://demo.bpmn.io/s/start

了解bpmn-js內(nèi)部

如下面的架構(gòu)圖所示敷扫,bpmn-js構(gòu)建在兩個重要的庫之上:diagram-jsbpmn-moddle哀蘑。

架構(gòu)圖.png

如何使用(基于vue)

首先通過npm安裝bpmn-js:

npm install bpmn-js

通過ES訪問BPMN建模器:

<template>
  <div class="containers" ref="content">
    <div class="canvas" ref="canvas"></div>
    <ul class="buttons">
      <li>下載</li>
      <li>
        <a ref="saveDiagram" href="javascript:" title="download BPMN diagram">BPMN diagram</a>
      </li>
    </ul>
  </div>
</template>
<script>
  import BpmnModeler from 'bpmn-js/lib/Modeler'
  export default {
  data () {
    return {
      // bpmn建模器
      bpmnModeler: null
    }
  },
 mounted () {
    // 獲取到屬性ref為"canvas"的dom節(jié)點
    const canvas = this.$refs.canvas
    // 新建modeler實例,并掛載到dom節(jié)點上
    this.bpmnModeler = new BpmnModeler({
      container: canvas
    })
    // 渲染圖畫
    this.createNewDiagram()
  },
  methods: {
    createNewDiagram () {
      const bpmnXmlStr = '<?xml version="1.0" encoding="UTF-8"?>\n' +
        '<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">\n' +
        '  <bpmn2:process id="Process_1" isExecutable="false">\n' +
        '    <bpmn2:startEvent id="StartEvent_1"/>\n' +
        '  </bpmn2:process>\n' +
        '  <bpmndi:BPMNDiagram id="BPMNDiagram_1">\n' +
        '    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">\n' +
        '      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">\n' +
        '        <dc:Bounds height="36.0" width="36.0" x="412.0" y="240.0"/>\n' +
        '      </bpmndi:BPMNShape>\n' +
        '    </bpmndi:BPMNPlane>\n' +
        '  </bpmndi:BPMNDiagram>\n' +
        '</bpmn2:definitions>'
      // 將符合BPMN2.0標準的xml解析成對象樹渲染成圖顯示出來
      this.bpmnModeler.importXML(bpmnXmlStr, function (err) {
        if (err) {
          console.error(err)
        }
      })
    }
   }
  }
</script>

添加樣式表

將建模器嵌入到頁面時葵第,需引入diagram-js樣式表以及BPMN圖標字體:

<style lang="scss">
  /*左邊工具欄以及編輯節(jié)點的樣式*/
  @import 'bpmn-js/dist/assets/diagram-js.css';
  @import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
</style>

生命周期掛鉤事件

通過事件綁定建模器的生命周期以及圖表交互:

// 給建模器綁定事件绘迁,當模型有發(fā)生改變就會觸發(fā)這個事件
let _this = this
// 獲取a標簽dom節(jié)點
const downloadLink = this.$refs.saveDiagram
this.bpmnModeler.on('commandStack.changed', function () {
  _this.bpmnModeler.saveXML({ format: true }, function (err, xml) {
    _this.setEncoded(downloadLink, 'diagram.bpmn.xml', err ? null : xml)
  })
})
setEncoded (link, name, data) {
  // 把xml轉(zhuǎn)換為URI,下載要用到的
  const encodedData = encodeURIComponent(data)
  // 獲取到圖的xml卒密,保存就是把這個xml提交給后臺
  this.xmlStr = data
  // 下載圖的具體操作,改變a的屬性缀台,className令a標簽可點擊,href令能下載哮奇,download是下載的文件的名字
  if (data) {
   link.className = 'active'
   link.href = 'data:application/bpmn20-xml;charset=UTF-8,' + encodedData
   link.download = name
  }
}

擴展功能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膛腐,一起剝皮案震驚了整個濱河市睛约,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哲身,老刑警劉巖辩涝,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異勘天,居然都是意外死亡怔揩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門脯丝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商膊,“玉大人,你說我怎么就攤上這事宠进∏逃” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵砰苍,是天一觀的道長。 經(jīng)常有香客問我阱高,道長赚导,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任赤惊,我火速辦了婚禮吼旧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘未舟。我一直安慰自己圈暗,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布裕膀。 她就那樣靜靜地躺著员串,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昼扛。 梳的紋絲不亂的頭發(fā)上寸齐,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音抄谐,去河邊找鬼渺鹦。 笑死,一個胖子當著我的面吹牛蛹含,可吹牛的內(nèi)容都是我干的毅厚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼浦箱,長吁一口氣:“原來是場噩夢啊……” “哼吸耿!你這毒婦竟也來了祠锣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤珍语,失蹤者是張志新(化名)和其女友劉穎锤岸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體板乙,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡是偷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了募逞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛋铆。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖放接,靈堂內(nèi)的尸體忽然破棺而出刺啦,到底是詐尸還是另有隱情,我是刑警寧澤纠脾,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布玛瘸,位于F島的核電站,受9級特大地震影響苟蹈,放射性物質(zhì)發(fā)生泄漏糊渊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一慧脱、第九天 我趴在偏房一處隱蔽的房頂上張望渺绒。 院中可真熱鬧,春花似錦菱鸥、人聲如沸宗兼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殷绍。三九已至,卻和暖如春扳抽,著一層夾襖步出監(jiān)牢的瞬間篡帕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工贸呢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镰烧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓楞陷,卻偏偏與公主長得像怔鳖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子固蛾,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容