<script> /* eslint no-console:0 */ import './draggable.less'; import Tree, { TreeNode } from '../index'; import '../assets/index.less'; import { gData } from './util'; import BaseMixin from '../../_util/BaseMixin'; export default { mixins: [BaseMixin], data () { return { gData, autoExpandParent: true, expandedKeys: ['0-0-key', '0-0-0-key', '0-0-0-0-key'], }; }, methods: { onDragStart (info) { console.log('start', info); }, onDragEnter (info) { console.log('enter', info); this.setState({ expandedKeys: info.expandedKeys, }); }, onDrop (info) { console.log('drop', info); const dropKey = info.node.eventKey; const dragKey = info.dragNode.eventKey; const dropPos = info.node.pos.split('-'); const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]); // const dragNodesKeys = info.dragNodesKeys; const loop = (data, key, callback) => { data.forEach((item, index, arr) => { if (item.key === key) { return callback(item, index, arr); } if (item.children) { return loop(item.children, key, callback); } }); }; const data = [...this.gData]; let dragObj; loop(data, dragKey, (item, index, arr) => { arr.splice(index, 1); dragObj = item; }); if (info.dropToGap) { let ar; let i; loop(data, dropKey, (item, index, arr) => { ar = arr; i = index; }); if (dropPosition === -1) { ar.splice(i, 0, dragObj); } else { ar.splice(i + 1, 0, dragObj); } } else { loop(data, dropKey, (item) => { item.children = item.children || []; // where to insert 示例添加到尾部,可以是随意位置 item.children.push(dragObj); }); } this.setState({ gData: data, }); }, onExpand (expandedKeys) { console.log('onExpand', arguments); this.setState({ expandedKeys, autoExpandParent: false, }); }, }, render () { const loop = data => { return data.map((item) => { if (item.children && item.children.length) { return <TreeNode key={item.key} title={item.title}>{loop(item.children)}</TreeNode>; } return <TreeNode key={item.key} title={item.title} />; }); }; return (<div class='draggable-demo'> <h2>draggable</h2> <p>drag a node into another node</p> <div class='draggable-container'> <Tree expandedKeys={this.expandedKeys} onExpand={this.onExpand} autoExpandParent={this.autoExpandParent} draggable onDragstart={this.onDragStart} onDragenter={this.onDragEnter} onDrop={this.onDrop} > {loop(this.gData)} </Tree> </div> </div>); }, }; </script>