index.jsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import React,{Component} from 'react';
  2. import classNames from 'classnames';
  3. import ScrollArea from 'react-scrollbar';
  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. this.state={
  23. data:props.data||[]
  24. }
  25. }
  26. getClass(){
  27. let name = style['text-list'];
  28. let isHide = this.props.show?'':style['hide'];
  29. switch (this.props.type){
  30. case 'text':
  31. name = style['text-list'];
  32. break;
  33. case 'label':
  34. name = style['label-list'];
  35. break;
  36. default:
  37. name = style['text-list'];
  38. }
  39. return classNames(style['list'],name,isHide);
  40. }
  41. getStyle(){
  42. const {left,top} = this.props;
  43. return {
  44. left:left?left+'px':'',
  45. top:top?top+'px':''
  46. }
  47. }
  48. handleSelect(e,item){
  49. // onClick事件换成onmouseup--点击清除后谷歌下搜索结果点击不上去的情况
  50. e.stopPropagation();
  51. const {onSelect,onShow} = this.props;
  52. onSelect&&onSelect(item);
  53. // onShow&&onShow(e,false);
  54. }
  55. render(){
  56. const {mainEmpty,data} = this.props;
  57. let litext = '';
  58. const contStyle={
  59. opacity:'0.4',
  60. right:'0',
  61. top:'1px',
  62. zIndex:'15',
  63. width:'14px',
  64. background:'#f1f1f1'};
  65. const barStyle={background:'#777',width:'100%'};
  66. if(mainEmpty){
  67. return <div className={this.getClass()} id="searchBox" style={this.getStyle()}>
  68. <ScrollArea speed={0.8}
  69. horizontal={false}
  70. stopScrollPropagation={data.length>6?true:false}
  71. style={{maxHeight:'225px'}}
  72. className={style["area"]}
  73. verticalContainerStyle={contStyle}
  74. verticalScrollbarStyle={barStyle}
  75. contentClassName="content">
  76. <ul>
  77. {data&&data.map((it)=>{
  78. litext = it.showType==1?it.name:it.name+'('+it.retrievalName+')';
  79. return <li onClick={(e)=>this.handleSelect(e,it)} title={litext}>{litext}</li>
  80. })}
  81. </ul>
  82. </ScrollArea>
  83. </div>
  84. }else{
  85. return <div className={this.getClass()} id="searchBox" style={this.getStyle()}>
  86. <ScrollArea speed={0.8}
  87. horizontal={false}
  88. stopScrollPropagation={data.length>6?true:false}
  89. style={{maxHeight:'225px'}}
  90. className={style["area"]}
  91. verticalContainerStyle={contStyle}
  92. verticalScrollbarStyle={barStyle}
  93. contentClassName="content">
  94. <ul>
  95. {data&&data.map((it)=>{
  96. litext = it.showType==1?it.name:it.name+'('+it.retrievalName+')';
  97. return <li onClick={(e)=>this.handleSelect(e,it)} title={litext}>{litext}</li>
  98. })}
  99. </ul>
  100. </ScrollArea>
  101. </div>;
  102. }
  103. }
  104. }
  105. export default SearchDrop;