版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、(原创)工作流程图的树形展示-使用qunee插件实现这里只介绍如何用qunee来实现树形图。和WorkFlowDemo中的流程图结构如下(局部放大):流程图结构如下(完整):节点数据是json格式,举例如下:vartest=children:children:children:null,codeDescription:2级节点,nodeLevel:2,nodeName:test1_1,nodeOrder:0,codeDescription:1级节点,nodeLevel:1,nodeName:test1,nodeOrder:0,codeDescription:根节点,nodeLevel:0,no
2、deName:test0,nodeOrder:0完整的html代码,每一部分都有较详细的注释。vmetacharset=utf-8/QuneeTreelayoutDemo20160801update!-指定一个div元素,初始化qunee画布vargraph=newQ.Graph(root_box);vargraph=newQ.Graph(root_box);/graph.originAtCenter为false时表示设置左上角为坐标原点graph.originAtCenter=false;创建一个数组存放所有的子孙节点varallChildren=;用来记录最大层级varmaxLevel=1
3、;递归函数,将传入的数据创建成树形图的节点functionloadDatas(json,parent,layoutType)json.forEach(function(data)获取最深的层级if(data.nodeLevelmaxLevel)maxLevel=data.nodeLevel;varnode=createNode(data.nodeName,parent,layoutType);allChildren.push(node);if(layoutType=Q.Consts.LAYOUT_TYPE_EVEN_VERTICAL)node.vGap=20;设置孩子布局的垂直间距,hGap为
4、水平间距递归创建所有节点if(data.children)loadDatas(data.children,node,Q.Consts.LAYOUT_TYPE_EVEN_VERTICAL););传入根节点(根节点属性中包含了所有子孙节点),生成树形图functioninit(rootNode)/建立一个数组用于存放主流程节点varnodeL1Arr=;/在本demo中,rootNode根节点不展示,根节点下的第一级节点作为主流程节点if(rootNode.children)rootNode.children.forEach(function(nodeL1)varnewNode=createSte
5、p(nodeL1.nodeName);nodeL1Arr.push(newNode);if(nodeL1.children)loadDatas(nodeL1.children,newNode,Q.Consts.LAYOUT_TYPE_EVEN_VERTICAL););elsevarnewNode=createNode(没有流程信息,,);设置树形图布局setLayout(nodeL1Arr);创建单个流程节点functioncreateNode(name,from,layoutType)varnode=graph.createText(name);node.setStyle(Q.Styles.
6、LABEL_BORDER,1);node.setStyle(Q.Styles.LABEL_BORDER_STYLE,#1D4876);node.setStyle(Q.Styles.LABEL_FONT_SIZE,16);node.setStyle(Q.Styles.LABEL_PADDING,5);node.setStyle(Q.Styles.LABEL_SIZE,newQ.Size(70,35);node.setStyle(Q.Styles.LABEL_BACKGROUND_COLOR,#FFF);节点是否可见node.visible=true;节点是否能用鼠标拖动false为不能拖动nod
7、e.movable=falsenode.movable=falsenode.1ayoutType=layoutType;if(from)node.parent=from;node.host=from;if(frominstanceofQ.Node)创建连线varnodeEdge=graph.createEdge(from,node);if(from.layoutType=Q.Consts.LAYOUT_TYPE_EVEN_VERTICAL)nodeEdge.edgeType=Q.Consts.EDGE_TYPE_VERTICAL_HORIZONTAL;elsenodeEdge.edgeType
8、=Q.Consts.EDGE_TYPE_ORTHOGONAL;returnnode;创建主流程节点functioncreateStep(label)varnode=graph.createText(label);node.setStyle(Q.Styles.LABEL_BORDER,1);node.setStyle(Q.Styles.LABEL_BACKGROUND_COLOR,#FFF);node.setStyle(Q.Styles.LABEL_BORDER_STYLE,#1D4876);node.setStyle(Q.Styles.LABEL_FONT_SIZE,20);node.setS
9、tyle(Q.Styles.LABEL_SIZE,newQ.Size(120,50);node.visible=true;/节点是否能用鼠标拖动,false为不能拖动node.movable=falsenode.layoutType=Q.Consts.LAYOUT_TYPE_EVEN_VERTICAL;/node.vGap=30;/设置孩子布局的垂直间距,hGap为水平间距returnnode;创建连线functioncreateEdge(from,to,lineWidth,dash)varedge=graph.createEdge(from,to);edge.setStyle(Q.Style
10、s.EDGE_WIDTH,lineWidth|3);edge.setStyle(Q.Styles.EDGE_COLOR,#1D4876);if(dash)edge.setStyle(Q.Styles.EDGE_LINE_DASH,10,10);returnedge;调整树状图各分支的位置,形成美观的对称结构functionmoveNodes()varrightBound=0;/节点右边界varrightX=0/用于记录最右侧节点的横坐标varrightElementName;/边界节点的名称varprevElement;/前主流程vardx=20*maxLevel;/移动基数20乘以获取的最大
11、层级graph.graphModel.forEachByTopoBreadthFirstSearch(function(element)if(elementinstanceofQ.Node)每次移动,整个父子节点链的线条都会移动graph.moveElements(element,dx,0);if(!element.parent)如果节点横坐标小于上一节点的右边界,则移动节点,避免重合if(element.x=rightX)更新最右侧节点横坐标的值rightX=element.x;/rightX为最右侧节点的横坐标,加上该节点边框的宽度,得到最右侧边界的位置rightBound=rightX+
12、graph.getUIBounds(element).width;获取最右侧节点的名称,用于打印测试rightElementName=;);graph.visibleFilter=function(node)returnnode.visible!=false;varnodeClicked;/设置点击事件graph.onclick=function(evt)nodeClicked=evt.getData();if(!nodeClicked)Q.forEach(allChildren,function(p)p.visible=true;p.invalidateVisibility();)graph
13、.invalidate();return;点击主流程节点,只显示子孙节点,隐藏其他节点/*if(!nodeClicked.parent&!nodeClicked.from)Q.log(nodeClicked);Q.forEach(allChildren,function(p)varvisible=p.isDescendantOf(nodeClicked);p.visible=visible;p.invalidateVisibility();)graph.invalidate();*/点击主流程节点,显示或隐藏其子孙节点if(!nodeClicked.parent&!nodeClicked.fr
14、om&nodeClicked.hasChildren()setAllChildren(nodeClicked);graph.invalidate();显示或隐藏子孙节点的函数functionsetAllChildren(parent)Q.forEach(parent.children,function(p)p.visible=!p.visible;p.invalidateVisibility();if(p.hasChildren()setAllChildren(p);)设置树形图布局varlayouter=newQ.TreeLayouter(graph);functionsetLayout(nodeLIArr)layouter.layoutType=Q.Consts.LAYOUT_TYPE_EVEN_HORIZONTAL;/qunee新特性,节点连线能够等长排列layouter.parentChildrenDirection=Q.Consts.DIRECTION_BOTTOM_RIGHT;layouter
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 从现在到未来商业和新闻媒体中的AI自动化案例研究
- 电路试题及答案
- 从理论到实践企业安全生产管理手册
- 从想法到实现创新管理流程研究
- 创新教学方法与教师专业发展
- 从教育心理学角度看家庭亲子教育
- 利用大数据技术提升实验数据的存储与保护效率
- 企业级安全产品销售的供应链管理与创新
- 从家教看传统与现代教育的结合
- 企业制度汇编汇编【职员管理篇】
- 《综合实践一-用多媒体介绍湖北名人课件》小学信息技术华中科大课标版五年级下册课件2919
- 《养成良好的行为习惯》主题班会课件
- 焊接设备的新技术革新与应用规范
- 公民科学素质调查问卷
- 土壤采样方案
- 110kV升压站构支架组立施工方案
- 何以中国:公元前的中原图景
- 【中药贮藏与养护问题及解决对策4000字(论文)】
- 自然环境对聚落的影响
- 2023-2024学年天津市部分地区六年级数学第一学期期末综合测试试题含答案
- 河南省洛阳市偃师区2023-2024学年四年级数学第一学期期末经典模拟试题含答案
评论
0/150
提交评论