代码拉取完成,页面将自动刷新
$ npm i butterfly-vue butterfly-dag -S
//mockData.js
const endpoints = [
{
id: 'right',
orientation: [1, 0],
pos: [0, 0.5]
},
{
id: 'left',
orientation: [-1, 0],
pos: [0, 0.5]
}
];
export default {
groups: [
{
id: '1',
left: 10,
top: 20,
},
],
nodes: [
{
id: '1',
group: '1',
top: 40,
left: 20,
endpoints: endpoints,
},
{
id: '2',
top: 50,
left: 300,
endpoints: endpoints,
},
],
edges: [{
id: '1-2',
sourceNode: '1',
targetNode: '2',
source: 'right',
target: 'left',
}],
};
// component.vue
<template>
<div id="app">
<butterfly-vue
:canvasData="mockData"
/>
</div>
</template>
<script>
import {ButterflyVue} from 'butterfly-vue';
import mockData from "./mockData.js";
export default {
name: 'App',
components: {
ButterflyVue
},
data(){
return{
mockData
}
},
}
</script>
Prop | 类型 | 说明 | 默认值 | required |
---|---|---|---|---|
canvasConf | Object | 参考官网定义 | 见下文 | false |
baseCanvas | Function | 参考官网定义 | import { Canvas } from "butterfly-dag"; | false |
canvasData | Object | 见下文 | true | |
className | String | 追加在最外层div 上的class 直接替换掉butterfly-vue 样式 |
butterfly-vue |
false |
onChangeEdges | (data) => void; | 线改变触发(system.link.reconnect) | false | |
onCreateEdge | (data) => void; | 线创造触发(system.link.connect) | false | |
onDeleteEdge | (data) => void; | 线删除触发(system.links.delete) | false | |
onOtherEvent | (data) => void; | butterfly-dag中api 中除上述3种 | false | |
onLoaded | (VueCom) => void; | 画布加载完毕后返回ButterflyVue 实例(VueCom.canvas就是原生的canvas) |
false |
// canvasConf默认值:
const defaultOptions = {
disLinkable: true, // 可删除连线
linkable: true, // 可连线
draggable: true, // 可拖动
zoomable: true, // 可放大
moveable: true, // 可平移
theme: {
edge: {
arrow: true,
type: 'Straight',
}
}
};
render
参数后文会详细说明 // canvasData说明:
let canvasData = {
groups: [
id: String; //必填
left: Number //必填
top: Number //必填
render: String|Object; //选填(若为Sring类型需要符合vue的template规则)
//(若为Object类型需要符合.vue文件编译后的类型,此处即为直接传入.vue文件)
//其他属性参考官方https://github.com/alibaba/butterfly/blob/master/docs/zh-CN/group.md
],
nodes: [
id: String; //必填
render: String|Object; //选填(若为Sring类型需要符合vue的template规则)
//(若为Object类型需要符合.vue文件编译后的类型,此处即为直接传入.vue文件)
//其他属性参考官网https://github.com/alibaba/butterfly/blob/master/docs/zh-CN/node.md#node-attr
],
edges: [
id: String; //必填
render: String|Object; //选填(若为Sring类型需要符合vue的template规则)
//(若为Object类型需要符合.vue文件编译后的类型,此处即为直接传入.vue文件)
//其他属性参考官方https://github.com/alibaba/butterfly/blob/master/docs/zh-CN/edge.md
]
}
canvasData.render
渲染方式(两种)String|Object
// grid-node.vue
<template>
<div class="grid-node">
{{itemData.label}}
</div>
</template>
<script>
export default {
name: "grid-node",
props: {
// 这里可以拿到mockdata里的当前节点的数据
itemData: {
type: Object,
},
// 原生的节点数据(不推荐使用这个)
canvasNode: {
type: Object
}
},
methods: {
},
created() {
}
};
</script>
<style scoped>
.grid-node {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
border-radius: 50%;
border: 1px solid #aaa;
color: #FFF;
background-color: #F66902;
}
</style>
// component.js
<template>
<div id="app">
<butterfly-vue
:canvasData="graphData"
/>
</div>
</template>
<script>
import {ButterflyVue} from 'butterfly-vue';
import gridNode from './node/drag-node.vue';
export default {
name: 'App',
components: {
ButterflyVue
},
data(){
return{
graphData: {
groups: [],
nodes: [
{
id: '0',
left: 10,
top: 10,
label: '0',
render: gridNode,
}
],
edges: [],
},
}
},
}
</script>
// component.js
<template>
<div id="app">
<butterfly-vue
:canvasData="graphData"
/>
</div>
</template>
<script>
import {ButterflyVue} from 'butterfly-vue';
export default {
name: 'App',
components: {
ButterflyVue
},
data(){
return{
graphData: {
groups: [],
nodes: [
{
id: '0',
left: 10,
top: 10,
render: `<div>测试节点0</div>`,
}
],
edges: [],
},
}
},
}
</script>
String
类型使用了运行时编译,所以需要启用以下配置//vue.config.js
module.exports = {
runtimeCompiler: true
}
方法名 | 说明 | 参数 |
---|---|---|
redraw | 重新绘制画布 | - |
<template>
<div>
<button @click="redraw">重绘画布</button>
<butterfly-vue
ref="butterflyVue"
/>
</div>
</template>
<script>
import {ButterflyVue} from 'butterfly-vue';
export default {
name: 'Drag',
components: {
ButterflyVue,
},
methods:{
redraw() {
this.$refs.butterflyVue.redraw();
},
}
}
</script>
// endpoint-node.vue
<template>
<div class="endpoint-node">
<butterfly-vue-endpoint id="1" :param="{scope:'endpoint-1', limitNum: 2}"/>
<butterfly-vue-endpoint id="2" className="endpoint-2">
content
</butterfly-vue-endpoint>
</div>
</template>
<script>
import {ButterflyVueEndpoint} from 'butterfly-vue';
export default {
name: "endpoint-node",
components: {
ButterflyVueEndpoint
},
};
</script>
<style scoped>
.endpoint-node {
width: 200px;
height: 100px;
border-radius: 5px;
border: 1px solid #aaa;
padding: 10px;
box-shadow: 3px 4px 16px #888888;
}
.endpoint-node .endpoint-2 {
position: absolute;
bottom: 10px;
right: 10px;
}
</style>
// component.vue
<template>
<div>
<butterfly-vue :canvasData="graphData" />
</div>
</template>
<script>
import {ButterflyVue} from 'butterfly-vue';
import 'butterfly-vue/dist/index.css';
import endpointNode from "./endpoint-node.vue";
export default {
name: 'User-Endpoint',
components: {
ButterflyVue,
},
data(){
return{
graphData: {
groups: [],
nodes: [
{
id: '0',
left: 10,
top: 10,
render: endpointNode,
}
],
edges: [],
},
}
},
}
</script>
Prop | 类型 | 说明 | 默认值 | required |
---|---|---|---|---|
id | String | 自定义endpoint的唯一标示 | true | |
className | String | 自定义endpoint的样式 | vue-bf-endpoint-default | false |
param | Object | endponit的其他参数 | false |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。