index.jsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import react from "react";
  2. import style from "./index.less";
  3. import classNames from 'classnames';
  4. import {deepClone} from '@utils/tools.js';
  5. import LiItem from '@common/components/LiItem';
  6. /**
  7. 单列多选组件下拉 2019-2-20 By_liucf
  8. 接收参数:
  9. show:是否展示下拉
  10. data:下拉数据
  11. handleConfirm: 确定事件
  12. seleData、seleId:选中的数据和id,回读标识选中状态用
  13. **/
  14. class SlideItem extends react.Component{
  15. constructor(props){
  16. super(props);
  17. const seleData = deepClone(props.seleData||[]);
  18. const seleId = deepClone(props.seleId||[]);
  19. this.state={
  20. seleData:seleData||"",
  21. seleId:seleId||[]
  22. }
  23. this.handleSelect = this.handleSelect.bind(this);
  24. this.handleClear = this.handleClear.bind(this);
  25. this.handleClick = this.handleClick.bind(this);
  26. }
  27. getListClass(){
  28. let isHide = this.props.show?'':style['hide'];
  29. return classNames(style['list'],isHide);
  30. }
  31. /*getSeleStyle(id){
  32. const {seleId} = this.state;
  33. if(seleId.includes(id)){
  34. return style['selected'];
  35. }
  36. return '';
  37. }*/
  38. handleSelect(e,item){
  39. e&&e.stopPropagation();
  40. let {seleData,seleId} = this.state;
  41. const {name,id} = item;
  42. if(seleId.includes(id)){
  43. seleId.splice(seleId.indexOf(id),1);
  44. seleData = seleData.replace(name,'');
  45. }else{
  46. seleId.push(id);
  47. seleData += name;
  48. }
  49. this.setState({
  50. seleData,
  51. seleId
  52. })
  53. }
  54. handleClear(e){
  55. e&&e.stopPropagation();
  56. this.setState({
  57. seleData:"",
  58. seleId:[]
  59. })
  60. }
  61. getStyle(){
  62. const {show} = this.props;
  63. return {
  64. display:show?'table':'none'
  65. }
  66. }
  67. handleClick(e){//确定
  68. e&&e.stopPropagation();
  69. const {handleConfirm} = this.props;
  70. const params = this.state;
  71. handleConfirm&&handleConfirm(params);
  72. }
  73. render(){
  74. const {data} = this.props;
  75. const {seleId} = this.state;
  76. return <div className={this.getListClass()} style={this.getStyle()} contentEditable="false">
  77. <ul>
  78. {data&&data.map((it)=>{
  79. return <LiItem handleClick={(e)=>this.handleSelect(e,it)}
  80. selected={seleId.includes(it.id)}
  81. title={it.name.length>8?it.name:''}>{it.name&&it.name.length>8?it.name.slice(0,8)+'...':it.name}</LiItem>
  82. })}
  83. <li onClick={this.handleClear} className={style['mClear']}>清空选项</li>
  84. <li onClick={this.handleClick} className={style['mConfirm']}>确定</li>
  85. </ul>
  86. </div>
  87. }
  88. }
  89. export default SlideItem;