auto-workflow

用于快速构建各种关系图的库

github地址:https://github.com/auto-workflow/AWorkflow

快速开始

npm install aworkflow

或者引用dist文件夹下的产出文件

访问demo

npm install

npm run dev

默认模版:http://localhost:9999/

动画:http://localhost:9999/demo/animate

自动排列:http://localhost:9999/demo/autosort

自定义模版:http://localhost:9999/demo/custom

登陆流程图:http://localhost:9999/demo/process

也可以访问在线demo:

默认模版:http://zhoushengfe.com/flow/dist/index.html

动画:http://zhoushengfe.com/flow/dist/demo/animate/index.html

自动排列:http://zhoushengfe.com/flow/dist/demo/autosort/index.html

自定义模版:http://zhoushengfe.com/flow/dist/demo/custom/index.html

登录流程图:http://zhoushengfe.com/flow/dist/demo/process/index.html

技术文档

快速开始

1,定义node:

let node1 = {
// 唯一标识,必须
id: '123',
// 自定义数据,用于填充模版,nodeName为组件文案
defineData: {
nodeName: '数据拆分'
},
// 画布中位置
position: [100, 100],
// 输入圈,对象数组,每个对象表示一个输入,以下标区分
input: [
{
}
],
// 输出圈,对象数组,每个对象表示一个输出,allInputs:能链接到所有node的输入,enbaleInputs:对象数组,每个对象定义可以输入的圈信息(id对应节点,inputIndex对应输入点下标)
output: [
{
allInputs: true,
enbaleInputs: [{
id: '124',
inputIndex: 0
}]
}
]
};
let node2 = {
// 使用的模版,默认使用defaultTemplate
templateName: 'iconTemplate',
id: '124',
defineData: {
nodeName: '随机采样',
imgSrc: 'base64...'
},
// 画布中位置
position: [300, 100],
// 输入
input: [
{
}
],
// 输出
output: [
]
};

2,定义节点关系:

let edges = [
{
// 输出节点及输出圈,‘123:0’表示id为123的node的下标为0的输出点
src: '123:0',
// 输入节点及输入圈,'124:0'表示id为124的node的下标为0的输入点
to: '124:0'
}
];

3,实例化:

// 全局配置
let globalConfig = {
// 是否静态图片,true:节点和连线都不可拖动,false:可以添加事件监听
isStatic: false,
// 整个图默认模版,默认为defaultTemplate
templateName: 'defaultTemplate',
// templateName: 'iconTemplate',
// 是否需要自动排序,true: 程序智能计算每个node的位置,false: 根据node position来定位
autoSort: true,
// 自动排序时,true: 水平排序,false: 垂直排序
horizontal: false,
// 可选,node对齐方式,start: 水平排列时表示上对齐,垂直排列时表示左对齐 middle: 中间对齐 end: 水平排列时表示下对齐,垂直排列时表示右对齐
align: 'middle',
// 可选,beginX 起点X坐标,默认10
beginX: 30,
// 可选,beginY 起点Y坐标,默认10
beginY: 30,
// 可选,spaceX 横向间距,默认200
spaceX: 200,
// 可选,spaceY 纵向间距,默认100
spaceY: 60
};
// 实例化
let workflow = new AWrokflow(document.getElementById('aw'), {nodes, edges}, globalConfig);

API

接口文档: http://zhoushengfe.com/flow/api/index.html

基础概念

模版

模版是形状和样式的结合体,定义了节点(node)和连线(edge)的具体形状和样式

默认为defaultTemplate,由矩形和文案组成

系统内置iconTemplate模版,由一个icon和文案组成

系统内置菱形模版diamondTemplate,由菱形和文案组成

当然还可以自定义模版,可以参考demo,定义了一个红色模版

定义的模版可以在node和edge中使用,这样就可以画出不同的节点和连线了

node

节点,可以定义使用的模版,模版中参数,输入,输出圈信息

edge

连线,可以定义模版,连线信息

高级用法,自定义node和edge的基础绘制方法

DrawView

在渲染工作流中,为了方便地处理缩放,所以整个工作流的图形集合是一个对象,对应zrender中的Group类,默认情况下是Aworkflow中的DrawView类,在DrawView中包含了NodeViewEdgeViewNodeViewEdgeView是由不同的Shape组成的Group。
如果想自定义一个渲染规则,可以参考src/draw/basicdraw/DrawView.js中的代码,使用Draw.extend()实现一个自定义的类,需要设置type字段,并且实现render()方法,render()方法中需要将最终使用的zrender的形状实例对象return出去,以便于在Aworkflow中add到zrender对象中。
(这个地方实现的好像不太好)

NodeView

Node是工作流中的节点,默认的实现类是src/draw/basicDraw/NodeView,父类是src/draw/Node,Node也是一个Group,包含了像文字(Text),图标(Image),矩形(Rect)等基本形状。在NodeView中render输入输出点的时候,会根据点的个数和Node的position来计算出每个点的坐标来绘制,同时可以在config中配置input或者output在node中的位置,如top、right、bottom、left。
同样,如果想要自定义一个Node,需要使用Node.extend()方法,需要定义type和实现render()方法,render()方法中需要将最终使用的zrender的形状实例对象return出去,以便于在DrawView或者父集合对象中add到对应的Group对象中。

EdgeView

Edge是工作流中的连线,默认的实现类是src/draw/basicDraw/EdgeView,父类是src/draw/Edge,Edge也是一个Group,包含了像贝塞尔曲线和三角形箭头基本形状。渲染连线需要在渲染节点之后进行,因为连线的信息只有节点信息没有坐标信息,所以需要在节点渲染后,根据起止节点来计算处连线的起始点坐标,同时会根据箭头的位置对终点坐标进行细微的调整。
同样,如果想要自定义一个Edge,需要使用Edge.extend()方法,需要定义type和实现render()方法,render()方法中需要将最终使用的zrender的形状实例对象return出去,以便于在DrawView或者父集合对象中add到对应的Group对象中。

Shape

Shape是一些基本形状,目前实现了的有BezierCurve、CirCle、Image、Text、React、Triangle,是对zrender中Displayable中的简单封装。在使用Shape的时候,需要先实例化,然后调用shape.init()方法实例化对应的zrender对象,init之后shape.dom中存储便是对应的zrender对象。 需要自定义Shape的时候,需要使用Shape.extend()方法。和上面几个类似,具体可参考src/draw/shape目录中的代码

测试

npm run test

如何贡献

讨论

qq群:869605396

js流程图:aworkflow.js的更多相关文章

  1. 前端 go.js 流程图基于vue开发项目案例

    一.流程图效果 最近一段时间在研究go.js,它是一款前端开发画流程图的一个插件,也是一个难点,要说为什么是难点,首先,它是依赖画布canvas知识开发.其次,要依赖于内部API开发需求,开发项目需求 ...

  2. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

  3. 再谈React.js实现原生js拖拽效果

    前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...

  4. spring访问静态资源出错,No mapping found for HTTP request with URI xxx/resources/js/jquery.min.js...

    问题:spring访问静态资源出错,No mapping found for HTTP request with URI xxx/resources/js/jquery.min.js... web.x ...

  5. prototype.js 和 jQuery.js中 ajax 的使用

    这次还是prototype.js 和 jQuery.js冲突的问题,前面说到过解决办法http://www.cnblogs.com/Joanna-Yan/p/4836252.html,以及上网说的大部 ...

  6. LazyLoad.js及scrollLoading.js

    http://blog.csdn.net/ning109314/article/details/7042829 目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片):二是自动预加载(加 ...

  7. JS引用另外JS文件的顺序问题。

    1.在a.js中可以引用b.js文件,这样就可以在网页中只引用a.js文件,从而可以使用a.js和b.js文件中的所有方法. 引用格式如下:document.write('<script typ ...

  8. jquery的validate.js 和 form.js 的使用方法

    在使用 Jquery 的方法的验证并且修改 原Form 表单的提交方式的时候,需要引用的文件有 <script type="text/javascript" src=&quo ...

  9. 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,

    封装常用的js(Base.js)——[01]理解库,获取节点,连缀,  youjobit07 2014-10-10 15:32:59 前言:       现如今有太多优秀的开源javascript库, ...

  10. iScroll.js和swiper.js

    最近系统地学习了iScroll.js和swiper.js,感觉它们在移动端特别好用:http://www.360doc.com/content/14/0724/11/16276861_39669990 ...

随机推荐

  1. Java 版本6下载大全

    Oracle 官方 JDK6 下载地址: 基本包含所有的JDK6版本. 需要登注册相应的账户登录到Oracle官网~ http://www.oracle.com/technetwork/java/ja ...

  2. 安卓权限处理 PermissionDog

    PermissionDog 简介 权限狗 权限申请 最近在一家公司实习,项目中需要用到适配安卓6.0以上的系统,我本来是想用其他人已经写好的权限申请框架来实现的,但是发现跟我的需求有点小区别,所以就自 ...

  3. Druid.io系列(二):基本概念与架构

    原文链接:  https://blog.csdn.net/njpjsoftdev/article/details/52955788 在介绍Druid架构之前,我们先结合有关OLAP的基本原理来理解Dr ...

  4. Oralce OMF 功能详解

    OMF,全称是Oracle_Managed Files,即Oracle文件管理,使用OMF可以简化管理员的管理工作,不用指定文件的名字.大小.路径,其名字,大小, 路径由oracle 自动分配.在删除 ...

  5. START WITH...CONNECT BY PRIOR详解

    START WITH...CONNECT BY PRIOR详解 START WITH...CONNECT BY PRIOR详解 ORACLE中的SELECT语句可以用START WITH...CONN ...

  6. apache 自定义404错误页面

    1.有些提供web服务的网站,在用户访问一个不存在的网站文件时,会提示404错误,如下所示: 现在要求自定义一个错误页面,也就是出现404错误代码时,跳转到我们自定义的网址上.下面记录下方法: 1.编 ...

  7. Julia - 函数的参数传递

    不定参数 不定参数的函数也称变参函数 函数的参数可以被定义成任意个 可以在最后一个参数后紧跟省略号“...”来定义变参函数 julia> bar(x, y, z...) = (x, y, z) ...

  8. css伪类(Pseudo-classes)

    简介:伪类(Pseudo classes)是选择符的螺栓,用来指定一个或者与其相关的选择符的状态.它们的形式是selector:pseudo class { property: value; },简单 ...

  9. Ubuntu TIP

    recovery进系统硬盘是挂载为“只读”的,要想改文件需要remount / 并且添加“w”(写权限). 进一次crub,再root进入 折腾几次似乎就可以编辑磁盘上的文件了

  10. 封装basedao及动态创建新类型的java数组

    package com.huawei.base; import java.io.Serializable;import java.lang.reflect.Array;import java.lang ...