树形穿梭框的代码实现

树形穿梭框的代码实现

效果如下图

在这里插入图片描述

代码来一波

  • js
import React, {
    Component } from 'react';
import {
   
  Tree,
  Checkbox,
  Button,
  Input,
  Icon
} from 'antd'

import styles from "./TreeSelectTransfer.less"

const {
    TreeNode } = Tree;

const splitSymbol = "-";

const dataAddKey = (data) => {
   
  return data.map((item, index) => {
   
    item.key = index + "";
    item.children = item.children.map((childItem, childIndex) => {
   
      let nowKey = `${
     index}${
     splitSymbol}${
     childIndex}`;
      childItem.key = nowKey;
      return childItem;
    })
    return item;
  })
}

const getLeftAndRightKey = (data, rightDataKey = {
   }) => {
   
  let len = data.length;
  let leftData = new Array(len).fill("").map(() => {
   
    return {
    children: [] }
  });
  let rightData = new Array(len).fill("").map(() => {
   
    return {
    children: [] }
  });
  let leftTotalCount = 0;
  let rightTotalCount = 0;
  data.map((item, index) => {
   
    item.children.map((childItem, childIndex) => {
   
      let nowKey = `${
     index}${
     splitSymbol}${
     childIndex}`;
      if(nowKey in rightDataKey) {
   
        rightData[index].name = item.name;
        rightData[index].key = index + "";
        rightData[index].children.push(childItem);
        rightTotalCount += 1;
      } else {
   
        leftTotalCount += 1;
        leftData[index].name = item.name;
        leftData[index].key = index + "";
        leftData[index].children.push(childItem);
      }

    })
  });
  leftData = leftData.filter(item => {
   
    return item.children.length
  })
  rightData = rightData.filter(item => {
   
    return item.children.length
  })
  return {
   
    leftData,
    rightData,
    leftTotalCount,
    rightTotalCount
  }
}

const filterData = (data, filterValue) => {
   
  let filterTrimV = filterValue.trim();
  if(!filterTrimV) {
   
    return data;
  }
  data = data.filter(item => {
   
    if(item.name.includes(filterTrimV)) {
   
      return true;
    } else if(item.children && item.children.length) {
   
      item.children = item.children.filter(childItem => {
   
        if(childItem.name.includes(filterTrimV)) {
   
          return true;
        } else {
   
          return false;
        }
      });
      return item.children.length > 0
    }
    return true;
  })
  return data;
}

class TreeSelectTransfer extends Component {
   
  constructor
  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
Element Plus 是一个基于 Vue.js 的 UI 组件库,它提供了丰富的组件来帮助开发者构建 Web 应用。要实现树形穿梭框,你可以使用 Element Plus 提供的 Transfer 组件,并结合 Tree 组件来实现。 首先,你需要在 Vue 项目中安装 Element Plus: ```bash npm install element-plus ``` 然后,在你的 Vue 组件中导入所需的组件和样式: ```javascript import { Transfer, Tree } from 'element-plus'; import 'element-plus/lib/theme-chalk/transfer.css'; import 'element-plus/lib/theme-chalk/tree.css'; ``` 接下来,你可以在模板中使用 Transfer 和 Tree 组件来实现树形穿梭框: ```html <template> <div> <transfer :data="data" :titles="['Source', 'Target']" filterable :props="treeProps" ></transfer> </div> </template> <script> export default { data() { return { data: [ { key: 1, label: 'Node 1', children: [ { key: 11, label: 'Node 1-1' }, { key: 12, label: 'Node 1-2' } ] }, { key: 2, label: 'Node 2', children: [ { key: 21, label: 'Node 2-1' }, { key: 22, label: 'Node 2-2' } ] } ], treeProps: { children: 'children', label: 'label' } }; } }; </script> ``` 以上代码中,`data` 数组定义了树形结构的数据,`treeProps` 对象指定了树组件的数据结构。在 Transfer 组件中,你可以通过 `data` 属性传递树形数据,通过 `titles` 属性设置穿梭框的标题,通过 `filterable` 属性开启可搜索功能,通过 `props` 属性设置树组件的参数。 这样,你就可以使用 Element Plus 的 Transfer 和 Tree 组件来实现树形穿梭框了。希望对你有帮助!
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值