指南

介绍

简介

可视化的流程图编辑器基于cytoscape.js.

特性

  • [x] 导航器提供预览图,方便查看
  • [x] 表格辅助
  • [x] 内置形状,并支持自定义形状
  • [x] 可配置的工具栏,提供常用操作
  • [x] 节点大小控制及节点信息编辑
  • [x] 支持自定义的右键菜单
  • [x] 支持流程图导出为图片,导出json数据
  • [ ] 更多边类型支持,虚线
  • [ ] 元素信息提示浮层

开始使用

安装

npm

使用 npm 的方式安装,与 webpack 打包工具配合使用。

npm install cyeditor

CDN

目前可以通过 jsdelivr 获取到最新版本的资源,在页面上引入 js 和 css 文件即可开始使用。

<!-- 引入样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/cyeditor@${version}/dist/cyeditor.css">
<!-- 引入组件库 -->
<script src="https://cdn.jsdelivr.net/npm/cyeditor@${version}/dist/cyeditor.umd.min.js"></script>

Vue 组件

创建你的vue组件, cyeditor.js:

import CyEditor from 'cyeditor'
export default {
  name: 'CyEditor',
  props: {
    value: {
      type: Object,
      default: () => ({})
    },
    cyConfig: {
      type: Object,
      default: () => ({})
    },
    editorConfig: {
      type: Object,
      default: () => ({})
    }
  },
  mounted () {
    const container = this.$el
    let config = {
      cy: {
        ...this.cyConfig
      },
      editor: {
        container,
        ...this.editorConfig
      }
    }
    this.cyEditor = new CyEditor(config)
    this.cyEditor.json(this.value)
    this.cyEditor.on('change', (scope, editor) => {
      let json = this.cyEditor.json()
      console.log(json)
    })
  },
  render (h) {
    return h('div')
  }
}

然后像使用普通vue组件一样:

<template>
  <cy-editor
    class="cy-editor"
    :value="value"
    :cy-config="cyConfig"
    :editor-config="editorConfig"
    @change="change"
  />
</template>

<script>
import cyEditor from './cyeditor.js'

export default {
  name: 'App',
  components: {
    cyEditor
  },
  data () {
    return {
      value: {
        zoom: 0.7,
        pan: { x: 100, y: 40 },
        elements: {
          nodes: [{
            'data': {
              'type': 'round-rectangle',
              'name': '开始',
              'resize': true,
              'bg': '#1890FF',
              'width': 76,
              'height': 56,
              'id': 'a79249d9-4d5b-43e1-b268-d389df7ed592'
            },
            'position': {
              'x': 192.5,
              'y': 52.5
            }
          }, {
            'data': {
              'type': 'round-rectangle',
              'name': '',
              'resize': true,
              'bg': '#1890FF',
              'width': 76,
              'height': 56,
              'id': '27e14443-0b39-446f-94e2-3e521a1706f9'
            },
            'position': {
              'x': 87.5,
              'y': 262.5
            }
          }, {
            'data': {
              'type': 'diamond',
              'name': '条件',
              'resize': true,
              'bg': '#5CDBD3',
              'width': 156,
              'height': 52,
              'id': '4072b83e-b702-4168-b548-56bcc52eebd9'
            },
            'position': {
              'x': 192.5,
              'y': 157.5
            }
          }, {
            'data': {
              'type': 'round-rectangle',
              'name': '',
              'resize': true,
              'bg': '#1890FF',
              'width': 76,
              'height': 56,
              'id': '6be4a6b0-49e2-4b2c-b3bd-135684da938a'
            },
            'position': {
              'x': 297.5,
              'y': 262.5
            }
          }],
          edges: [{
            'data': {
              'source': 'a79249d9-4d5b-43e1-b268-d389df7ed592',
              'target': '4072b83e-b702-4168-b548-56bcc52eebd9',
              'lineType': 'taxi',
              'id': '3e6d9858-adbe-4b73-828d-d0732ac29279'
            },
            'position': {
              'x': 17.5,
              'y': 17.5
            }
          }, {
            'data': {
              'source': '4072b83e-b702-4168-b548-56bcc52eebd9',
              'target': '27e14443-0b39-446f-94e2-3e521a1706f9',
              'lineType': 'taxi',
              'id': 'b63708fe-3b53-469a-b908-4c9608112164'
            },
            'position': {
              'x': 17.5,
              'y': 17.5
            }
          }, {
            'data': {
              'source': '4072b83e-b702-4168-b548-56bcc52eebd9',
              'target': '6be4a6b0-49e2-4b2c-b3bd-135684da938a',
              'lineType': 'taxi',
              'id': '0c4d0dc9-a2ee-4ea5-b422-4730913a7ab1'
            },
            'position': {
              'x': 17.5,
              'y': 17.5
            }
          }]
        }
      },
      cyConfig: {},
      editorConfig: {
        lineType: 'taxi'
      }
    }
  },
  mounted () {
    //
  },
  computed: {},
  methods: {
    change () {
      //
    }
  }
}

</script>
<style scoped lang="stylus">
  .cy-editor {
    width: 100%;
    height: 600px;
    position: relative;
  }
</style>