index.jsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React,{Component} from 'react';
  2. import classNames from 'classnames';
  3. import ReactDom from "react-dom";
  4. import style from "./index.less";
  5. /****
  6. * 搜索结果下拉
  7. * 接收参数:
  8. * data: json数组
  9. * show:true/false
  10. * textKey: 选项文字字段名
  11. * idKey: 选项id字段名
  12. * type: text选项为纯文本,label选项为标签
  13. * onSelect: 选中事件
  14. * showType:1-本体,2-同义词,3-子项,同义词展示在括号内
  15. * retrievalName:同义词
  16. * name:本体
  17. **/
  18. class SearchDrop extends Component{
  19. constructor(props){
  20. super(props);
  21. this.handleSelect = this.handleSelect.bind(this);
  22. }
  23. getClass(){
  24. let name = style['text-list'];
  25. let isHide = this.props.show?'':style['hide'];
  26. switch (this.props.type){
  27. case 'text':
  28. name = style['text-list'];
  29. break;
  30. case 'label':
  31. name = style['label-list'];
  32. break;
  33. default:
  34. name = style['text-list'];
  35. }
  36. return classNames(style['list'],name,isHide);
  37. }
  38. getStyle(){
  39. const {left,top} = this.props;
  40. return {
  41. left:left?left+'px':'',
  42. top:top?top+'px':''
  43. }
  44. }
  45. handleSelect(e,item){
  46. // onClick事件换成onmouseup--点击清除后谷歌下搜索结果点击不上去的情况
  47. e.stopPropagation();
  48. const {onSelect,onShow} = this.props;
  49. onSelect&&onSelect(item);
  50. // onShow&&onShow(e,false);
  51. }
  52. render(){
  53. let litext = '';
  54. const domNode = document.getElementById('root');
  55. return ReactDom.createPortal(
  56. <div className={this.getClass()} contenteditable="false" id="searchBox" style={this.getStyle()}>
  57. <ul>
  58. {this.props.data&&this.props.data.map((it)=>{
  59. litext = it.showType==1?it.name:it.name+'('+it.retrievalName+')';
  60. return <li onmouseup={(e)=>this.handleSelect(e,it)} title={litext}>{litext}</li>
  61. })}
  62. </ul>
  63. </div>
  64. ,domNode)
  65. }
  66. }
  67. export default SearchDrop;