antd tree组件,搜索并定位,实现已被其他数据关联的情况不允许被再次关联

实现的效果如下图:在这里插入图片描述

实现搜索定位:
搜索用的官方提供的代码,在搜索框监听到数据变化的时候,找到相关数据并高亮
因为该页面有两个tree,所以我写在了一个方法里面,根据传参不同来区别
写法应该是根据传参来设置state,但是由于需求更改频繁所以没做改动

应该正确的写法是:
获取数据:const list = this.state[${str}Datalist];
设置数据:this.setState({
[${str}expandedKeys]: expandedKeys,
[${str}autoExpandParent]: true,
[${str}searchValue] : value,
});

  // ---------------------------------监听搜索框输入值,把需要展开的放入列表,存储搜索的值
  onChangeTab = (e, tree, str) => {
    const { value } = e.target;
    const { dataList, dataListExtend } = this.state;
    // const list = this.state[`${str}Datalist`];
    // console.log(list);
    const list = str === 'extend' ? dataListExtend : dataList;
    const expandedKeys = list
      .map(item => {
        if (item.name.indexOf(value) > -1) {
          // && str === "researcher"
          return this.getParentKey(item.key, tree);
        }
        return null;
      })
      .filter((item, i, self) => item && self.indexOf(item) === i);
    if (str === 'extend') {
      this.setState({
        expandedKeys,
        autoExpandParent: true,
        asearchValue: value,
      });
    } else
      this.setState({
        [`${str}expandedKeys`]: expandedKeys,
        [`${str}autoExpandParent`]: true,
        searchValue: value,
      });
  };

定位代码:
onchange的时候已经展开所有找到的数据,定位就是需要把scrollTop的值 修改到该数据所在的位置,可能找到多个数据,这里我设置了一个count,找到第一个就不再做定位了
(这里应该可以做递归方法去实现,我这里的树最多都只有二级就没去琢磨了)

  // ---------------------------------左侧树 ,回车搜索定位功能
  onSearchTab = (e, tree, str, id) => {
    const { searchValue, asearchValue, expandedKeys } = this.state;
    const searchValueCur = str === 'extend' ? asearchValue : searchValue;
    const expandedKeysCur =
      str === 'extend' ? expandedKeys : this.state[`${str}expandedKeys`];
    let count = 1;
    tree.map((item, i) => {
      if (expandedKeysCur.indexOf(item.key) > -1) {
        if (item.children) {
          item.children.map((subitem, n) => {
            if (subitem.name.indexOf(searchValueCur) > -1) {
              // console.log(i,n);
              document.getElementById(id).scrollTop = (i + n + 1) * 32;
              return false;
            }
          });
        } else if (count === 1) {
          document.getElementById(id).scrollTop = i * 32;
          count = 2;
          return false;
        }
      } else if (item.name.indexOf(searchValueCur) > -1) {
        if (count === 1) {
          document.getElementById(id).scrollTop = i * 32;
          count = 2;
        }
      }
    });
  };

实现已被其他数据关联的情况不允许被再次关联:
1、拿到后台数据之后处理好,哪些数据是已被内部行业关联了,
a:不是当前内部行业关联的,设置他的disableCheckbox为true
b:是当前内部行业关联的,则把这个key放入checkedKeys数组中,则可以默认选择
2、在渲染树的时候做限制,如果当前节点disableCheckbox为true时, disableCheckbox={item.disableCheckbox}

代码:
处理数据:

	dispatch({
      type: url,
      payload: param,
      callback: res => {
        if (res && res.data && res.resultCode === '200') {
          // console.log("外部行业树数据", res);
          res.data.map(item => {
            item.name = item.industriesname;
            item.children = item.childs;
            item.key = item.industriescode;
            item.isChild = false;
            if (item.childs) {
              item.childs.map(subitem => {
                subitem.name = subitem.industriesname;
                subitem.key = subitem.industriescode;
                // 如果当前已经被关联过,则放入选中的key
                if (subitem.relateStatus === 'Y') {
                  if (!expandedKeys.find(a => a === item.key)) {
                    expandedKeys.push(item.key);
                  }
                  checkedKeys.push(subitem.industriescode);
                  // 如果没有当前被关联过,并且被别的行业关联过,则放入不可用中
                } else if (subitem.hasUsedStatus === 'Y') {
                  subitem.disableCheckbox = true;
                }
              });
            }
            const ishasDisabledItem = item.childs.find(
              ssItem => ssItem.disableCheckbox === undefined,
            );
            // 如果没有一个可用的,那就设置父节点也是不可用---因为后台并没有很好的处理父元素的选中和不选中
            if (!ishasDisabledItem) {
              item.disableCheckbox = true;
            }
            extendIndustry.push(item);
          });
          // console.log(checkedKeys);
          this.putAllKeyArr(extendIndustry || [], 'extend');
          this.setState({ extendIndustry, checkedKeys, expandedKeys }, () => {
            document.getElementById('scrollTree11').scrollTop = 0;
          });
        }
      },
    });

全部代码:
// 注释太多了,需求改版也频繁就不删里面的代码了

/* eslint-disable no-lonely-if */
/* eslint-disable react/no-did-update-set-state */
/* eslint-disable no-nested-ternary */
/* eslint-disable consistent-return */
/* eslint-disable no-param-reassign */
/* eslint-disable @typescript-eslint/no-unused-expressions */
/* eslint-disable semi */
/* eslint-disable array-callback-return */
//  Modal, Transfer,Button
import React, { Component } from 'react';
import { connect } from 'dva';
import {
  Tree,
  Form,
  Layout,
  Row,
  Col,
  Input,
  Icon,
  Button,
  message,
  Popconfirm,
} from 'antd';
import { deleteIcon } from '@/utils/SvgIcon';

import style from '../IndexDetailManagement/index.less';

const { Search } = Input;
const { Content } = Layout;
const { TreeNode } = Tree;

@connect(({ user }) => ({
  user,
}))
@Form.create()
class MappingRelate extends Component {
  constructor(props) {
    super(props);
    this.state = {
      dataList: [],
      dataListShare: [],
      searchValue: '',
      chooseResearcher: '',
      sharesData: [],
      researcherData: [],
      currentHasShares: [],
      btnText: '新增',
      dataSource: [],
      account: '',
      total: 0,
      current: 1,
      pageSize: 40,
      innervalue: '',
      extendIndustry: [],
      saveExtendArr: [],
    };
  }

  // 生命周期 数据加载--------------------获取左侧数据
  componentDidMount() {
    this.getLeftData();
  }

  // 生命周期 数据更新--------------------当弹框变化时,重新获取左侧数据,并刷新input框中的数据
  componentDidUpdate(prevProps) {
    const { industryRadio } = this.props;
    const { industryRadio: previndustryRadio } = prevProps;
    if (industryRadio !== previndustryRadio) {
      this.getLeftData();
      document.getElementById('scrollTree11').scrollTop = 0;
      this.setState({ searchValue: '', asearchValue: '' });
    }
  }

  // ---------------------------------获取左侧列表数据
  getLeftData = () => {
    const { dispatch, industryRadio } = this.props;
    const { current } = this.state;
    let url = 'newsinfo/getResearherAll';
    let param = {};
    let defaultObj = {};
    let phIndusCode = '';
    const selectedKeys = [];
    url = 'newsinfo/insdustryPage';
    param = {
      market: industryRadio,
      researcher: '',
      pageSize: 1000,
      pageNum: current,
    };
    dispatch({
      type: url,
      payload: param,
      callback: res => {
        if (res && res.data && res.resultCode === '200') {
          // console.log("treedata", res.data);  存储内部行业的indusCode,获取外部行业和股票
          if (res.data.list) {
            const { list } = res.data;
            if (list.length) {
              defaultObj = list[0];
              selectedKeys.push(defaultObj.id ? defaultObj.id.toString() : '');
              phIndusCode = defaultObj.indusCode;
            }
            list.map(item => {
              item.name = item.indusName;
              item.key = item.indusCode;
            });
          }
          // console.log(defaultObj);
          this.setState(
            {
              researcherData: res.data.list || [],
              selectedKeys,
              phIndusCode,
            },
            () => {
              this.putAllKeyArr(res.data.list || [], '');
              this.getRightData();
            },
          );
        }
      },
    });
  };

  // ---------------------------------获取右侧列表数据
  getRightData = () => {
    const { dispatch, industryRadio } = this.props;
    let url = 'newsinfo/insdustryPage';
    let param = {};
    const checkedKeys = [];
    const { phIndusCode } = this.state;
    // type === 3时,内部行业与外部行业的映射关系 获取外部行业表格
    url = 'newsinfo/getExternalindustry';
    param = {
      market: industryRadio,
      phIndusCode,
    };
    const expandedKeys = [];
    const extendIndustry = [];
    dispatch({
      type: url,
      payload: param,
      callback: res => {
        if (res && res.data && res.resultCode === '200') {
          // console.log("外部行业树数据", res);
          res.data.map(item => {
            item.name = item.industriesname;
            item.children = item.childs;
            item.key = item.industriescode;
            item.isChild = false;
            // 当前内部行业是否关联了该外部行业  第三个版本不需要判断父节点
            // if (item.relateStatus === "Y") {
            // checkedKeys.push(item.industriescode);
            // 该外部行业是否被关联过,并且不是当前内部行业关联的,应该设置为不可用
            // } else if (item.hasUsedStatus === "Y") {
            // item.disableCheckbox = true;
            // }
            if (item.childs) {
              item.childs.map(subitem => {
                subitem.name = subitem.industriesname;
                subitem.key = subitem.industriescode;
                // 如果当前已经被关联过,则放入选中的key
                if (subitem.relateStatus === 'Y') {
                  if (!expandedKeys.find(a => a === item.key)) {
                    expandedKeys.push(item.key);
                  }
                  checkedKeys.push(subitem.industriescode);
                  // 如果没有当前被关联过,并且被别的行业关联过,则放入不可用中
                } else if (subitem.hasUsedStatus === 'Y') {
                  subitem.disableCheckbox = true;
                }
              });
            }
            const ishasDisabledItem = item.childs.find(
              ssItem => ssItem.disableCheckbox === undefined,
            );
            // 如果没有一个可用的,那就设置父节点也是不可用
            if (!ishasDisabledItem) {
              item.disableCheckbox = true;
            }
            extendIndustry.push(item);
          });
          // console.log(checkedKeys);
          this.putAllKeyArr(extendIndustry || [], 'extend');
          this.setState({ extendIndustry, checkedKeys, expandedKeys }, () => {
            document.getElementById('scrollTree11').scrollTop = 0;
          });
        }
      },
    });
  };

  /** ********************************树型方法与属性 start************************** */
  // ---------------------------------将所有数据保存到数组,方便搜索功能
  putAllKeyArr = (data, str) => {
    const dataList = [];
    data &&
      data.map(item => {
        dataList.push({ name: item.name, key: item.account || item.key });
        item.children &&
          item.children.map(subItem => {
            dataList.push({
              name: subItem.name,
              key: subItem.account || subItem.key,
            });
            subItem.children &&
              subItem.children.map(ssubItem => {
                dataList.push({
                  name: ssubItem.name,
                  key: ssubItem.account || ssubItem.key,
                });
              });
          });
      });
    str === 'extend'
      ? this.setState({ dataListExtend: dataList })
      : this.setState({ dataList });
  };

  // ---------------------------------获取需要展开的父级key
  getParentKey = (key, tree) => {
    let parentKey;
    for (let i = 0; i < tree.length; i++) {
      const node = tree[i];
      if (node.children) {
        if (node.children.some(item => item.key === key)) {
          parentKey = node.key;
        } else if (this.getParentKey(key, node.children)) {
          parentKey = this.getParentKey(key, node.children);
        }
      }
    }
    return parentKey;
  };

  // ---------------------------------渲染树 ,搜索关键字高亮
  renderTreeNodes = (data, str) => {
    const { types } = this.props;
    const { searchValue, asearchValue } = this.state;
    const svalue = str === 'extend' ? asearchValue : searchValue;
    return (
      data &&
      data.map(item => {
        const uname = item.name;
        // 研究员则获取该研究员的accout为key,内部行业则获取id为key
        let key = types === '1' ? item.account : item.id;
        if (str === 'extend') {
          key = item.industriescode;
        }
        const index = uname.indexOf(svalue);
        const beforeStr = uname.substr(0, index);
        const afterStr = svalue
          ? uname.substr(index + svalue.length)
          : item.name;
        const name =
          index > -1 ? (
            <span>
              {beforeStr}
              <span style={{ color: '#ff6600' }}>{svalue}</span>
              {afterStr}
            </span>
          ) : (
            <span>{uname}</span>
          );
        if (item.children) {
          return (
            <TreeNode
              key={key}
              icon={types === '1' ? <Icon type="user" /> : <Icon type="file" />}
              dataRef={item}
              title={name}
              disableCheckbox={item.disableCheckbox}
            >
              {this.renderTreeNodes(item.children, str)}
            </TreeNode>
          );
        }
        return (
          <TreeNode
            key={key}
            icon={types === '1' ? <Icon type="user" /> : <Icon type="file" />}
            dataRef={item}
            title={name}
            disableCheckbox={item.disableCheckbox}
          />
        );
      })
    );
  };

  // ---------------------------------选中树 右侧
  onCheck = (checkedKeys, info) => {
    const saveExtendArr = [];
    const deleteExtendArr = [];
    // const lastItem = [];
    const {
      node: { props: nodePorps },
    } = info;
    // console.log(nodePorps);
    const { checked } = info;
    // 判断选中的节点中,有无父节点
    // checkedNodesPositions.map(item => {
    //   const { props:subProps } = item.node;
    if (nodePorps.pos.split('-').length >= 3) {
      if (checked) {
        saveExtendArr.push({
          key: nodePorps.dataRef.key,
          name: nodePorps.dataRef.industriesname,
        });
      } else {
        deleteExtendArr.push(nodePorps.dataRef.key);
      }
    } else if (nodePorps.pos.split('-').length <= 2) {
      // 有父节点 在判断其子节点是否有不可用的 禁用的项
      // const isHasDisabledItem = nodePorps.children && nodePorps.children.filter(subitem => subitem.props.disableCheckbox === true);
      // console.log(isHasDisabledItem);
      // 如果没有禁用的项,即全部要传过去  改成不需要传父节点过去  20210315
      // if (checked){
      //   saveExtendArr.push(nodePorps.dataRef && nodePorps.dataRef.key);
      // }
      // else {
      //   deleteExtendArr.push(nodePorps.dataRef && nodePorps.dataRef.key);
      // }
      nodePorps.dataRef &&
        nodePorps.dataRef.childs.map(item => {
          // 如果当前是没有被别的行业关联,并且没有被当前行业关联
          if (
            item.relateStatus !== 'Y' &&
            item.hasUsedStatus !== 'Y' &&
            checked
          ) {
            // saveExtendArr.push(item.key);
            saveExtendArr.push({ key: item.key, name: item.industriesname });
          } else if (item.relateStatus === 'Y' && !checked) {
            deleteExtendArr.push(item.key);
          }
          // if (isHasDisabledItem) {
          //   // 如果有禁用的项,需要把禁用的项剔除
          //   if (checked) {
          //     lastItem = isHasDisabledItem.filter((subitem) => {
          //       return saveExtendArr.indexOf(subitem.key) === -1;
          //     });
          //   }
          //   else {
          //     lastItem = isHasDisabledItem.filter((subitem) => {
          //       return deleteExtendArr.indexOf(subitem.key) === -1;
          //     });
          //   }
          // }
        });
    }
    // console.log(saveExtendArr,deleteExtendArr,);
    // })
    this.setState(
      { checkedKeys, saveExtendArr, checked, deleteExtendArr },
      () => {
        this.onSave();
      },
    );
  };

  // ---------------------------------展开树 左右侧公用
  onExpand = (expandedKeys, str) => {
    // console.log(expandedKeys);
    if (str === 'researcher') {
      this.setState({
        [`${str}expandedKeys`]: expandedKeys,
        [`${str}autoExpandParent`]: false,
      });
    } else {
      this.setState({ expandedKeys, autoExpandParent: false });
    }
  };

  // ---------------------------------左侧树选中(判断是否是子节点),并刷新右侧数据
  onSelect = (selectedKeys, info) => {
    const { props } = info.node;
    // const { target } = info.nativeEvent;
    this.setState({ selectedKeys });
    // console.log("选中的selectkey",);
    const { name, indusCode } = props.dataRef;
    // 如果没有选中值或者 当前不是内部行业与外部行业面板
    if (selectedKeys.length) {
      if (!props.children) {
        document.getElementById('scrollTree11').scrollTop = 0;
        // 是末端节点
        // 当前弹框是内部行业与外部行业 选中了内部行业,可以修改其值,加载右侧外部行业数据列表
        this.setState(
          {
            innervalue: name,
            btnText: '修改',
            isShowInput: true,
            phIndusCode: indusCode,
            asearchValue: '',
          },
          () => {
            this.getRightData();
          },
        );
      }
    } else {
      this.setState({ innervalue: '', btnText: '新增', isShowInput: false });
    }
  };

  // ---------------------------------左侧监听搜索框输入值,把需要展开的放入列表,存储搜索的值
  onChangeTab = (e, tree, str) => {
    const { value } = e.target;
    const { dataList, dataListExtend } = this.state;
    // const list = this.state[`${str}Datalist`];
    // console.log(list);
    const list = str === 'extend' ? dataListExtend : dataList;
    const expandedKeys = list
      .map(item => {
        if (item.name.indexOf(value) > -1) {
          // && str === "researcher"
          return this.getParentKey(item.key, tree);
        }
        return null;
      })
      .filter((item, i, self) => item && self.indexOf(item) === i);
    if (str === 'extend') {
      this.setState({
        expandedKeys,
        autoExpandParent: true,
        asearchValue: value,
      });
    } else
      this.setState({
        [`${str}expandedKeys`]: expandedKeys,
        [`${str}autoExpandParent`]: true,
        searchValue: value,
      });
  };

  // ---------------------------------左侧树 ,回车搜索定位功能
  onSearchTab = (e, tree, str, id) => {
    const { searchValue, asearchValue, expandedKeys } = this.state;
    const searchValueCur = str === 'extend' ? asearchValue : searchValue;
    const expandedKeysCur =
      str === 'extend' ? expandedKeys : this.state[`${str}expandedKeys`];
    let count = 1;
    tree.map((item, i) => {
      if (expandedKeysCur.indexOf(item.key) > -1) {
        if (item.children) {
          item.children.map((subitem, n) => {
            if (subitem.name.indexOf(searchValueCur) > -1) {
              // console.log(i,n);
              document.getElementById(id).scrollTop = (i + n + 1) * 32;
              return false;
            }
          });
        } else if (count === 1) {
          document.getElementById(id).scrollTop = i * 32;
          count = 2;
          return false;
        }
      } else if (item.name.indexOf(searchValueCur) > -1) {
        if (count === 1) {
          document.getElementById(id).scrollTop = i * 32;
          count = 2;
        }
      }
    });
  };
  /** ********************************树型方法与属性 end************************** */

  // ---------------------------------左侧,types为3时添加或者修改内部行业
  onClickAdd = () => {
    this.setState({
      innervalue: '',
      isShowInput: true,
      btnText: '新增',
      selectedKeys: undefined,
    });
  };

  // ---------------------------------左侧,types为3时添加或者修改内部行业 调接口
  onClickSure = () => {
    const { dispatch, industryRadio } = this.props;
    const { innervalue, selectedKeys, researcherData } = this.state;
    const isHasCurrent = researcherData.find(item => item.name === innervalue);
    // console.log(innervalue, selectedKeys, researcherData);
    if (isHasCurrent) {
      message.warning('该行业名称已经存在,请知悉');
      return false;
    }
    if (innervalue.trim() === '') {
      message.warning(
        '请点击左侧加号输入行业名称 或者选择一个内部行业进行操作',
      );
      return false;
    }
    let url = '';
    const param = [];
    // 如果选中了值,再次确认便是修改
    if (selectedKeys && selectedKeys.length) {
      // 修改
      url = 'newsinfo/insdustryUpdate';
      param.push({
        indusName: innervalue,
        id: selectedKeys[0],
      });
    } else {
      // 添加
      url = 'newsinfo/insdustryAdd';
      param.push({
        indusName: innervalue,
        market: industryRadio,
      });
    }
    dispatch({
      type: url,
      payload: param,
      callback: res => {
        if (res && res.resultCode === '200') {
          message.success(res.resultMsg);
          this.getLeftData();
        } else {
          message.error(res.resultMsg);
        }
      },
    });
  };

  // ---------------------------------左侧,types为3时,删除内部行业
  delete = () => {
    const { selectedKeys } = this.state;
    const {
      dispatch,
      // user: { currentUser },
    } = this.props;
    if (!selectedKeys || !selectedKeys.length) {
      message.warning('请选中一个行业后进行删除操作');
      return false;
    }
    // const param = {
    //   updateBy: currentUser.username,
    //   ids: selectedKeys,
    // };
    dispatch({
      type: 'newsinfo/insdustryDelete',
      payload: selectedKeys,
      callback: res => {
        if (res && res.resultCode === '200') {
          message.success(res.resultMsg);
          this.getLeftData();
        } else {
          message.error(res.resultMsg);
        }
      },
    });
  };

  // ---------------------------------左侧types为3时,内部行业输入值
  innerChange = e => {
    this.setState({ innervalue: e.target.value });
  };

  // ---------------------------------右侧 按钮保存映射关系  ------- 新增内外部行业的名称加上记得
  onSave = () => {
    const {
      dispatch,
      industryRadio,
      // user: { currentUser },
    } = this.props; // checkedKeys handleOk
    const { phIndusCode, saveExtendArr, checked, deleteExtendArr } = this.state;
    const param = [];
    let url = '';
    let arr = '';
    // console.log(saveExtendArr);
    if (checked) {
      arr = saveExtendArr;
      url = 'newsinfo/saveExtendInner';
      arr.map(item => {
        param.push({
          market: industryRadio,
          phIndusCode,
          // updateBy: currentUser.username,
          // createBy: currentUser.username,
          outIndusCode: item.key,
          outIndusName: item.name,
        });
      });
    } else {
      url = 'newsinfo/deleteExtendInner';
      arr = deleteExtendArr;
      arr.map(item => {
        param.push({
          market: industryRadio,
          phIndusCode,
          // updateBy: currentUser.username,
          outIndusCode: item,
        });
      });
    }
    dispatch({
      type: url,
      payload: param,
      callback: res => {
        if (res && res.resultCode === '200') {
          this.getRightData();
          message.success(res.resultMsg);
        } else {
          message.error(res.resultMsg);
        }
      },
    });
  };

  onKeyUp = e => {
    if (e.keyCode === 13) {
      this.onClickSure();
    }
  };

  render() {
    const {
      researcherexpandedKeys,
      researcherautoExpandParent,
      researcherData,
      innervalue,
      isShowInput,
      btnText,
      selectedKeys,
      searchValue,
      checkedKeys,
      expandedKeys,
      autoExpandParent,
      extendIndustry,
      asearchValue,
    } = this.state;
    const { titleLeft, titleRight } = this.props;
    // const height = 'calc(100vh - 340x)';
    const classnameStr = btnText === '添加' ? '' : 'buleButton';
    const signText = '* 禁用表示该内部行业已与其他外部行业关联,请知悉';
    // console.log(expandedKeys);
    return (
      <Content className={style.IndexManagement}>
        <div className="tabTop notabelTextIndex">
          <Row>
            <Col span={24} style={{ padding: 20 }}>
              <Row>
                <Col
                  span={8}
                  className="colspan  tablebg"
                  style={{
                    height: 'calc(100vh - 180px)',
                    padding: '20px',
                    borderRadius: 4,
                  }}
                >
                  <div>
                    <h2>
                      {titleLeft}
                      {/* <span
                        style={{
                          display: "inline-block", textAlign: "center", border: "1px solid #3D4A63", width: "32px", height: "32px",
                          lineHeight:"32px",float:"right",marginLeft:"10px"
                        }}
                        onClick={this.onClickSure} >
                        <Icon
                          className="collapse"
                          component={deleteIcon}
                        />
                      </span> */}
                      <Popconfirm
                        title="确定删除该行业?"
                        onConfirm={this.delete}
                        // onCancel={cancel}
                        okText="确定"
                        cancelText="取消"
                      >
                        {/* <Button
                          // onClick={this.delete}
                          style={{ marginLeft: 15, padding: '0 10px' }}
                          className="greyButton"
                        >
                          删除
                        </Button> */}
                        <span
                          style={{
                            display: 'inline-block',
                            textAlign: 'center',
                            border: '1px solid #3D4A63',
                            width: '32px',
                            height: '32px',
                            lineHeight: '32px',
                            float: 'right',
                            marginLeft: '10px',
                            marginBottom: 10,
                          }}
                        >
                          <Icon
                            className="collapse"
                            component={deleteIcon}
                            // onClick={this.handleMenuCollapse}
                          />
                        </span>
                      </Popconfirm>
                    </h2>
                    <Search
                      placeholder="回车搜索内部行业"
                      value={searchValue}
                      onSearch={e =>
                        this.onSearchTab(
                          e,
                          researcherData,
                          'researcher',
                          'scrollTree11',
                        )
                      }
                      onChange={e =>
                        this.onChangeTab(e, researcherData, 'researcher')
                      }
                    />
                    <div style={{ marginTop: 10 }}>
                      <span
                        style={{
                          fontSize: 30,
                          marginRight: 10,
                          color: '#3D4D66',
                          verticalAlign: 'middle',
                        }}
                        onClick={this.onClickAdd}
                      >
                        <Icon type="plus-square" />
                      </span>
                      {isShowInput && (
                        <Input
                          size="default"
                          style={{ width: 195, marginRight: 15 }}
                          value={innervalue}
                          onKeyUp={this.onKeyUp}
                          onChange={this.innerChange}
                        />
                      )}
                      <Button
                        className={classnameStr}
                        type="default"
                        style={{ padding: '0 10px' }}
                        onClick={this.onClickSure}
                      >
                        {btnText}
                      </Button>
                    </div>

                    <div
                      className="tablebgTree"
                      id="scrollTree11"
                      style={{ height: 'calc(100vh - 340px)' }}
                    >
                      <Tree
                        // showLine
                        showIcon
                        onExpand={e => this.onExpand(e, 'researcher')}
                        expandedKeys={researcherexpandedKeys}
                        autoExpandParent={researcherautoExpandParent}
                        onSelect={this.onSelect}
                        selectedKeys={selectedKeys}
                        // switcherIcon={types === "1"?<Icon type="user" />:<Icon type="file" />}
                        style={{ marginLeft: -23 }}
                      >
                        {this.renderTreeNodes(researcherData, 'researcher')}
                      </Tree>
                    </div>
                  </div>
                </Col>

                <Col
                  span={16}
                  style={{
                    height: 'calc(100vh - 180px)',
                    padding: '20px',
                    width: 'calc(66% - 20px)',
                    marginLeft: 20,
                    borderRadius: 4,
                  }}
                  className="colspan tablebg"
                >
                  <h2 style={{ marginBottom: 22 }}>{titleRight}</h2>
                  <Search
                    placeholder="回车搜索外部行业"
                    value={asearchValue}
                    onSearch={e =>
                      this.onSearchTab(
                        e,
                        extendIndustry,
                        'extend',
                        'scrollTree2',
                      )
                    }
                    onChange={e =>
                      this.onChangeTab(e, extendIndustry, 'extend')
                    }
                  />

                  <div
                    style={{
                      marginBottom: 10,
                      marginTop: 10,
                      color: '#D5783C',
                    }}
                  >
                    {signText}
                  </div>
                  <div
                    className="tablebgTree"
                    id="scrollTree2"
                    style={{ height: 'calc(100vh - 330px)' }}
                  >
                    <Tree
                      checkable
                      onExpand={this.onExpand}
                      expandedKeys={expandedKeys}
                      autoExpandParent={autoExpandParent}
                      onCheck={this.onCheck}
                      checkedKeys={checkedKeys}
                      // onSelect={onSelect}
                      // selectedKeys={selectedKeys}
                    >
                      {this.renderTreeNodes(extendIndustry, 'extend')}
                    </Tree>
                  </div>
                </Col>
              </Row>
              <div>
                {/* <Button className="buleButton" style={{float:"right",marginRight:20,marginTop:65}} onClick = {this.onSave}>确定</Button> */}
              </div>
            </Col>
          </Row>
        </div>
      </Content>
    );
  }
}

export default MappingRelate;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值