1、完整代码
搜索
{
onLeftChecked(_, props, [...selectedKeys, ...targetKeys], itemSelect);
}
"
>
{{ item.title+'('+item.level+')' }}
{{ item.levelText}}{{ item.title}}
搜索
handleRightChange(e, [...selectedKeys], itemSelect, item.key)">
{{ item.levelText}}{{ item.title}}
2、utils.js文件
function handleChooseArr(arr, keywords) {
let newArr = [];
arr.forEach(item => {
if (item.title.includes(keywords)) {
newArr.push(item);
} else {
if (item.children && item.children != null) {
const childrenArr = [];
item.children.forEach(it => {
if (it.title.includes(keywords)) {
childrenArr.push(it);
}
})
if(childrenArr.length) {
newArr.push({
...item,
children: childrenArr
});
}
}
}
})
return newArr;
}
function handleTreeData(data, targetKeys = []) {
data.forEach(item => {
item['disabled'] = true;
if (item.children && item.children != null) {
item.children.forEach(it => {
if(targetKeys.includes(it.key)) {
it.disabled = true;
} else {
it.disabled = false
}
})
}
});
return data;
};
function handleOriginalData(data) {
let newArr = [];
data.forEach(item => {
newArr.push({title: item.title, key: item.key});
if(item.children && item.children !== null) {
item.children.forEach(it => {
newArr.push({
title: it.title,
key: it.key,
});
})
}
})
return newArr;
};
export {
handleChooseArr,
handleTreeData,
handleOriginalData
}
3、以上需要注意的点:
dataSource做为穿梭框的数据源需要是一维数组,并且里面的属性title和key都要为string类型,不然就会报错(dataSource类型不正确)

4、最终实现的效果
