当前位置:   article > 正文

vue2项目中使用 Graph F6 绘制 Dagre 流程图?_antv f6 vue

antv f6 vue

【官网地址:快速上手 | F6

1、安装:

npm install --save @antv/f6

 2、引入:

import F6 from '@antv/f6';

3、 使用:

①创建关系图的容器;

②数据准备;

③创建关系图;

④配置数据源、渲染。

示例:

首先,准备一个id为mountNode的容器用来放置流程图

  1. <template>
  2. <div>
  3. <div id="mountNode"></div>
  4. </div>
  5. </template>

在js中引入要用到的插件及布局:

  1. // 引入插件配置
  2. import F6 from '@antv/f6';
  3. // 引入层次布局
  4. import dagreLayout from '@antv/f6/dist/extends/layout/dagreLayout.js';

在这里,我用到的是自定义布局和节点,在created生命周期中绘制好自定义布局、自定义节点.我这里用到的例子是流程图,需要使用层次布局,与引入的布局相关联:

  1. created() {
  2. // 自定义一个层次布局
  3. F6.registerLayout('dagre', dagreLayout);
  4. // 自定义node节点
  5. this.customNode()
  6. }

自定义节点是该示例是通过使用svg标签重新绘制的节点样式 ,以免混淆,在这里需要声明一下:(箭头函数内部的svg标签是我这个例子使用到的节点样式,若要修改节点样式,在箭头函数后面根据自己的需求绘制即可),重点是绘制自定义节点要使用 F6.registerNode:

  1. customNode () {
  2. F6.registerNode(
  3. 'dom-node',
  4. (cfg) => `
  5. <group>
  6. <rect style={{
  7. width: 50,
  8. height: 50,
  9. stroke: ${ cfg.isAlarm ? '#f76e6f' : '#4f55e7' },
  10. fill: ${ cfg.isAlarm ? '#f76e6f66' : '#4f55e766' },
  11. radius: 25
  12. }}>
  13. <image style={{
  14. img: '${this.iconsFun(cfg)}',
  15. width: 30,
  16. height: 30,
  17. marginTop: 8,
  18. marginLeft: 10
  19. }} />
  20. </rect>
  21. <text style={{ fill: #000, fontSize: 12, textAlign: 'center', marginLeft: 14, marginTop: 2 }}>${cfg.name || '暂无'}</text>
  22. <rect style={{
  23. width: 100,
  24. height: 25,
  25. marginLeft: -30,
  26. marginTop: 5,
  27. stroke: ${ cfg.isAlarm ? '#f76e6f' : '#4f55e7' },
  28. fill: ${ cfg.isAlarm ? '#f76e6f66' : '#4f55e766' }
  29. }}>
  30. <text style={{ fill: ${ cfg.isAlarm ? '#f76e6f' : '#4f55e7' }, fontSize: 12, textAlign: 'center', marginLeft: 20, marginTop: 2 }}>${cfg.systemName || '暂无'}</text>
  31. </rect>
  32. </group>
  33. `,
  34. );
  35. }

准备好了容器、自定义的布局和节点,下面需要做的就是拿到数据源,我这里使用的是流程图,数据是由两个数组组成,第一个数组由每项节点组成的node数组,第二个数组由每对节点之间的关系组成的edge数组(若要绘制的是其他种类的拓扑图,可以到官网寻找自己需要的示例),流程图的数据源大致为以下结构:

  1. // 节点
  2. nodes: [
  3. {
  4. id: '1',
  5. dataType: 'alps',
  6. name: 'alps_file1',
  7. conf: [
  8. {
  9. label: 'conf',
  10. value: 'pai_graph.conf',
  11. },
  12. {
  13. label: 'dot',
  14. value: 'pai_graph.dot',
  15. },
  16. {
  17. label: 'init',
  18. value: 'init.rc',
  19. },
  20. ],
  21. },
  22. {
  23. id: '2',
  24. dataType: 'alps',
  25. name: 'alps_file2',
  26. conf: [
  27. {
  28. label: 'conf',
  29. value: 'pai_graph.conf',
  30. },
  31. {
  32. label: 'dot',
  33. value: 'pai_graph.dot',
  34. },
  35. {
  36. label: 'init',
  37. value: 'init.rc',
  38. },
  39. ],
  40. },
  41. {
  42. id: '3',
  43. dataType: 'alps',
  44. name: 'alps_file3',
  45. conf: [
  46. {
  47. label: 'conf',
  48. value: 'pai_graph.conf',
  49. },
  50. {
  51. label: 'dot',
  52. value: 'pai_graph.dot',
  53. },
  54. {
  55. label: 'init',
  56. value: 'init.rc',
  57. },
  58. ],
  59. },
  60. {
  61. id: '4',
  62. dataType: 'sql',
  63. name: 'sql_file1',
  64. conf: [
  65. {
  66. label: 'conf',
  67. value: 'pai_graph.conf',
  68. },
  69. {
  70. label: 'dot',
  71. value: 'pai_graph.dot',
  72. },
  73. {
  74. label: 'init',
  75. value: 'init.rc',
  76. },
  77. ],
  78. },
  79. {
  80. id: '5',
  81. dataType: 'sql',
  82. name: 'sql_file2',
  83. conf: [
  84. {
  85. label: 'conf',
  86. value: 'pai_graph.conf',
  87. },
  88. {
  89. label: 'dot',
  90. value: 'pai_graph.dot',
  91. },
  92. {
  93. label: 'init',
  94. value: 'init.rc',
  95. },
  96. ],
  97. },
  98. {
  99. id: '6',
  100. dataType: 'feature_etl',
  101. name: 'feature_etl_1',
  102. conf: [
  103. {
  104. label: 'conf',
  105. value: 'pai_graph.conf',
  106. },
  107. {
  108. label: 'dot',
  109. value: 'pai_graph.dot',
  110. },
  111. {
  112. label: 'init',
  113. value: 'init.rc',
  114. },
  115. ],
  116. },
  117. {
  118. id: '7',
  119. dataType: 'feature_etl',
  120. name: 'feature_etl_1',
  121. conf: [
  122. {
  123. label: 'conf',
  124. value: 'pai_graph.conf',
  125. },
  126. {
  127. label: 'dot',
  128. value: 'pai_graph.dot',
  129. },
  130. {
  131. label: 'init',
  132. value: 'init.rc',
  133. },
  134. ],
  135. },
  136. {
  137. id: '8',
  138. dataType: 'feature_extractor',
  139. name: 'feature_extractor',
  140. conf: [
  141. {
  142. label: 'conf',
  143. value: 'pai_graph.conf',
  144. },
  145. {
  146. label: 'dot',
  147. value: 'pai_graph.dot',
  148. },
  149. {
  150. label: 'init',
  151. value: 'init.rc',
  152. },
  153. ],
  154. },
  155. ],
  156. // 边
  157. edges: [
  158. {
  159. source: '1',
  160. target: '2',
  161. },
  162. {
  163. source: '1',
  164. target: '3',
  165. },
  166. {
  167. source: '2',
  168. target: '4',
  169. },
  170. {
  171. source: '3',
  172. target: '4',
  173. },
  174. {
  175. source: '4',
  176. target: '5',
  177. },
  178. {
  179. source: '5',
  180. target: '6',
  181. },
  182. {
  183. source: '6',
  184. target: '7',
  185. },
  186. {
  187. source: '6',
  188. target: '8',
  189. },
  190. ]

数据源准备好后,就要开始配置图层、渲染实例啦,该步骤包含三部分:创建图层实例、实例关联数据、渲染实例。关于实例的配置,可以查看F6官网:图配置 F6.Graph(cfg) | F6,根据自己的需求进行使用:

  1. // 创建图层实例、实例关联数据、渲染实例
  2. init(data) {
  3. let node = document.getElementById('mountNode')
  4. // 创建一个图层实例
  5. const graph = new F6.Graph({
  6. container: node, // 图的 DOM 容器,可以传入该 DOM 的 id 或者直接传入容器的 HTML 节点对象。
  7. width: screen.width, // Number,必须,指定画布宽度,单位为 'px',默认为画布容器宽度。
  8. height: screen.height, // Number,必须,指定画布高度,单位为 'px',默认为画布容器高度。
  9. fitView: true, //是否开启画布自适应。开启后图自动适配画布大小
  10. // fitViewPadding: 20, // fitView 为 true 时生效,图适应画布时,指定四周的留白。
  11. minZoom: 0.1, // 最小缩放比例。
  12. maxZoom: 3, // 最大缩放比例。
  13. // 布局配置项
  14. layout: {
  15. type: 'dagre',
  16. controlPoints: true,
  17. },
  18. // 设置画布的交互模式。
  19. modes: {
  20. default: ['drag-canvas', 'zoom-canvas', 'click-select'],
  21. },
  22. // 默认状态下节点的配置,会被写入的 data 覆盖。
  23. defaultNode: {
  24. type: 'dom-node'
  25. },
  26. });
  27. // 修改边的配置
  28. graph.edge(edge => {
  29. if (edge.bothAlarm) {
  30. return {
  31. style: {
  32. stroke: '#f87c7d'
  33. }
  34. }
  35. } else {
  36. return {
  37. style: {
  38. stroke: '#4f55e7'
  39. }
  40. }
  41. }
  42. });
  43. graph.data(data); // 读取数据源到图上
  44. graph.render(); // 渲染图
  45. }

至此, 绘制流程图(拓扑图)的工作已经结束,下面是我写的示例的效果图,看到本篇博客的友友们,可以根据自己的需求到官网上寻找示例进行模仿修改:

前端小白积累经验篇~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/816677
推荐阅读
相关标签
  

闽ICP备14008679号