效果大概如下,可以自己拿代码试试,这个现在是只能拿到选中的添加到右边,并且会覆盖右边的数据,再研究下追加到右边,有需要的可以自己再封装成通用组件
import React, {
Component } from 'react';
import {
Tree, Input, Button } from 'antd';
// import requset from '@/utils/request';
import {
NuCard } from '@cbay/cbay-ui';
import {
cloneDeep } from 'lodash';
const {
Search } = Input;
//扁平后数据
let arr = [];
class TransferTree extends Component {
state = {
treeData: [],
expandedKeys: [],
searchValue: '',
autoExpandParent: true,
loading: false,
rightTree: [],
rightTreeCopy: [],
checkedKeysLeft: [],
leftBtnDisabled: true,
rightBtnDisabled: true
};
componentDidMount() {
//请求树结构
//如果没有给父节点key,那就给每个子节点设置父节点key
const newDATA = cloneDeep(DATA);
this.setParent(newDATA);
// console.log(DATA);
//扁平数据
this.setnode(newDATA);
// console.log(arr);
}
//1设置父节点id
setParent = treeData => {
treeData.map(t => {
if (t.children && t.children.length) {
t.children.map(c => {
c.parentKey = t.key;
});
this.setParent(t.children);
} else {
return;
}
});
};
//2扁平数据
setnode = c => {
c.map(item => {
arr.push(item);
item.children && this.setnode(item.children);
});
};
onSelect = (selectedKeys, info) => {
console.log(info);
const {
type, eventKey } = info.node.props;
this.setState({
selected: {
type,
id: eventKey
}
});
};
checked = (checkedkeys, node) => {
const {
halfCheckedKeys } = node || {
};
//设置左边复选框选中的key
this.setState({
checkedKeysLeft: {
checked: checkedkeys,
halfChecked: halfCheckedKeys
}
});
//
let checkedAllLeftKey = checkedkeys.concat(halfCheckedKeys);
// const rightTreeCopy = this.ListToTree(selectValue);
const rightTreeCopy = this.ListToTree(checkedAllLeftKey);
this.setState({
rightTreeCopy,
checkedAllLeftKey,
leftBtnDisabled: !checkedkeys.length
});
// console.log(rightTreeCopy);
};
checkedRight = checkedkeys => {
const {
checkedAllLeftKey } = this.state;
let checkAllCopy =</