diff --git a/render-process/Editor/index.tsx b/render-process/Editor/index.tsx index 819203a..b130768 100644 --- a/render-process/Editor/index.tsx +++ b/render-process/Editor/index.tsx @@ -22,7 +22,8 @@ export default class Editor extends React.Component { curNode: null } - graph: TreeGraph; + private graph: TreeGraph; + private dragNode: INode; constructor(props: EditorProps) { super(props); @@ -58,29 +59,33 @@ export default class Editor extends React.Component { stroke: '#A3B1BF' } }, + // defaultNode: { + // type: 'rect', + // labelCfg: { + // style: { + // fill: 'blue', + // fontSize: 10 + // } + // }, + // style: { + // stroke: '#72CC4A', + // width: 150 + // } + // }, + // nodeStateStyles: { + // hover: { + // fill: '#d3adf7', + // }, + // selected: { + // stroke: '#000', + // lineWidth: 3, + // }, + // dragSrc: { + // fill: 'gray', + // } + // }, defaultNode: { - type: 'rect', - labelCfg: { - style: { - fill: 'blue', - fontSize: 10 - } - }, - style: { - stroke: '#72CC4A', - width: 150 - } - }, - nodeStateStyles: { - // 鼠标 hover 上节点,即 hover 状态为 true 时的样式 - hover: { - fill: '#d3adf7', - }, - // 鼠标点击节点,即 click 状态为 true 时的样式 - selected: { - stroke: '#000', - lineWidth: 3, - }, + type: "TreeNode", }, layout: { type: 'dendrogram', // 布局类型 @@ -101,19 +106,34 @@ export default class Editor extends React.Component { }); graph.on('nodeselectchange', (e: G6GraphEvent) => { - // 当前操作的 item - if(this.state.curNode) { + if (this.state.curNode) { graph.setItemState(this.state.curNode, 'selected', false); } const curNode = e.target as INode; this.setState({ curNode }); - if(this.state.curNode) { + if (this.state.curNode) { graph.setItemState(this.state.curNode, 'selected', true); } }); - graph.on('dragenter', (e: any) => { - console.log("dragenter", e); + graph.on('node:dragstart', (e: G6GraphEvent) => { + this.dragNode = e.item as INode; + graph.setItemState(e.item, 'dragSrc', true); + }); + graph.on('node:dragend', (e: G6GraphEvent) => { + graph.setItemState(e.item, 'dragSrc', false); + }); + + graph.on('node:dragover', (e: G6GraphEvent) => { + + }); + + graph.on('node:drop', (e: G6GraphEvent) => { + const srcNode = this.dragNode; + const dstNode = e.item as INode; + if (srcNode != dstNode) { + + } }); const data: TreeGraphData = { diff --git a/render-process/index.tsx b/render-process/index.tsx index aaaf1b8..728e49b 100644 --- a/render-process/index.tsx +++ b/render-process/index.tsx @@ -32,53 +32,40 @@ export default class Main extends Component { componentWillMount() { G6.registerNode( - 'tree-node', + 'TreeNode', { - drawShape: function drawShape(cfg: any, group) { - const rect = group.addShape('rect', { - attrs: { - fill: '#fff', - stroke: '#666', + options: { + type: 'rect', + labelCfg: { + style: { + fill: 'blue', + fontSize: 10 + } + }, + style: { + fill: "white", + stroke: '#72CC4A', + width: 150 + }, + stateStyles: { + hover: { + fill: '#d3adf7', }, - name: 'rect-shape', - }); - const content = cfg.name.replace(/(.{19})/g, '$1\n'); - const text = group.addShape('text', { - attrs: { - text: content, - x: 0, - y: 0, - textAlign: 'left', - textBaseline: 'middle', - fill: '#666', + selected: { + stroke: '#000', + lineWidth: 3, }, - name: 'rect-shape', - }); - const bbox = text.getBBox(); - const hasChildren = cfg.children && cfg.children.length > 0; - if (hasChildren) { - group.addShape('marker', { - attrs: { - x: bbox.maxX + 12, - y: 0, - r: 6, - symbol: cfg.collapsed ? G6.Marker.expand : G6.Marker.collapse, - stroke: '#666', - lineWidth: 2, - }, - name: 'collapse-icon', - }); - } - rect.attr({ - x: bbox.minX - 4, - y: bbox.minY - 6, - width: bbox.width + (hasChildren ? 26 : 8), - height: bbox.height + 12, - }); - return rect; + dragSrc: { + fill: 'gray', + } + }, }, + // draw(cfg, group) { }, + }, - 'single-node', + // 继承内置节点类型的名字,例如基类 'single-node',或 'circle', 'rect' 等 + // 当不指定该参数则代表不继承任何内置节点类型 + 'rect', ); }