Skip to content

Commit c2e6dbc

Browse files
committed
feat: base nodes
1 parent ee06690 commit c2e6dbc

File tree

14 files changed

+280
-167
lines changed

14 files changed

+280
-167
lines changed

public/images/fetch.svg

Lines changed: 1 addition & 0 deletions
Loading

public/images/start.svg

Lines changed: 1 addition & 0 deletions
Loading

src/components/FlowChart.vue

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import LogicFlow from '@logicflow/core'
44
import '@logicflow/core/dist/style/index.css'
55
import NodeRedExtension from './node-red/index'
66
import './node-red/style.css'
7-
import Palette from './Palette.vue'
87
98
export default {
109
setup() {
@@ -23,47 +22,30 @@ export default {
2322
color: '#eeeeee'
2423
}
2524
},
25+
keyboard: {
26+
enabled: true,
27+
},
28+
// keyboard: true,
2629
plugins: [
2730
NodeRedExtension
2831
]
2932
})
3033
this.lf.render({
3134
nodes: [
3235
{
33-
id: 'id1',
34-
type: 'function-node',
35-
x: 350,
36-
y: 150,
37-
text: '开始节点啊啊撒'
36+
type: 'start-node',
37+
x: 220,
38+
y: 200,
39+
text: '开始'
3840
},
39-
{
40-
id: 'id2',
41-
type: 'switch-node',
42-
x: 550,
43-
y: 150,
44-
text: 'switch'
45-
}
4641
]
4742
})
48-
},
49-
methods: {
50-
setProperties () {
51-
this.lf.setProperties('id1', {
52-
color: 'green',
53-
})
54-
}
55-
},
56-
components: {
57-
Palette
5843
}
5944
}
6045
</script>
6146

6247
<template>
6348
<div class="flow-chart">
64-
<Palette class="flow-chart-palette">
65-
<button @click="setProperties">11</button>
66-
</Palette>
6749
<div ref="container" class="container"></div>
6850
</div>
6951
</template>

src/components/Palette.vue

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { BezierEdge, BezierEdgeModel } from "@logicflow/core";
2+
3+
class FlowLinkModel extends BezierEdgeModel {
4+
getEdgeStyle() {
5+
const style = super.getEdgeStyle();
6+
style.strokeWidth = 3;
7+
style.stroke = this.isSelected ? '#ff7f0e' : '#999';
8+
return style;
9+
}
10+
}
11+
class FlowLink extends BezierEdge {}
12+
13+
export default {
14+
type: 'flow-link',
15+
view: FlowLink,
16+
model: FlowLinkModel
17+
}
18+

src/components/node-red/index.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,31 @@
1-
import FunctionNode from "./nodes/FunctionNode"
2-
import SwitchNode from "./nodes/SwitchNode"
3-
// import ConditionNode from "./nodes/ConditionNode"
1+
import { createApp } from 'vue';
2+
import FunctionNode from "./nodes/FunctionNode";
3+
import SwitchNode from "./nodes/SwitchNode";
4+
import StartNode from "./nodes/StartNode";
5+
import FetchNode from "./nodes/FetchNode";
6+
import FlowLink from "./FlowLink";
7+
import Palette from './tools/Palette.vue';
48

59
class NodeRedExtension {
610
static pluginName = 'NodeRedExtension'
711
constructor ({ lf }) {
8-
lf.register(FunctionNode)
9-
lf.register(SwitchNode)
10-
// lf.register(ConditionNode)
12+
lf.register(FunctionNode);
13+
lf.register(SwitchNode);
14+
lf.register(StartNode);
15+
lf.register(FetchNode);
16+
lf.register(FlowLink);
17+
lf.setDefaultEdgeType('flow-link');
18+
this.app = createApp(Palette, {
19+
lf
20+
})
21+
}
22+
render(lf, domOverlay) {
23+
const node = document.createElement('div')
24+
node.className = 'node-red-palette'
25+
domOverlay.appendChild(node)
26+
setTimeout(() => {
27+
this.app.mount(node)
28+
})
1129
}
1230
}
1331

src/components/node-red/nodes/BaseNode.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ class RedNodeModel extends RectNodeModel {
2020
*/
2121
setAttributes() {
2222
if (this.text.value) {
23-
this.width = 30 + getBytesLength(this.text.value) * 9;
23+
let width = 30 + getBytesLength(this.text.value) * 9;
24+
width = Math.ceil(width / 20) * 20;
25+
if (width < 100) {
26+
width = 100;
27+
}
28+
this.width = width;
2429
}
2530
}
2631
/**

src/components/node-red/nodes/ConditionNode.js

Lines changed: 0 additions & 98 deletions
This file was deleted.

src/components/node-red/nodes/ConditionNode.vue

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { h } from '@logicflow/core'
2+
import BaseNode from "./BaseNode"
3+
4+
class FetchNode extends BaseNode.view {
5+
getIcon () {
6+
const {
7+
width,
8+
height,
9+
} = this.props.model;
10+
return h('image', {
11+
width: 30,
12+
height: 30,
13+
x: - width / 2,
14+
y: - height / 2,
15+
href: 'images/fetch.svg'
16+
})
17+
}
18+
}
19+
20+
class FetchNodeModel extends BaseNode.model {
21+
getNodeStyle() {
22+
const style = super.getNodeStyle()
23+
style.fill = 'rgb(231, 231, 174)';
24+
return style
25+
}
26+
}
27+
28+
export default {
29+
type: 'fetch-node',
30+
model: FetchNodeModel,
31+
view: FetchNode
32+
}

0 commit comments

Comments
 (0)