index.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import React,{Component} from 'react';
  2. import style from './index.less';
  3. import config from '@config/index.js';
  4. import Notify from '../Notify/index.js';
  5. class NumberUnitPan extends Component{
  6. constructor(props){
  7. super(props);
  8. this.state = {
  9. value:''
  10. }
  11. this.handleSelect = this.handleSelect.bind(this);
  12. }
  13. handleSelect(e){
  14. e.stopPropagation();
  15. const text = e.target.innerText;
  16. const preValue = this.state.value;
  17. if(+text==0 && !preValue){//第一位不能是0
  18. Notify.info("请输入正确时间");
  19. return false;
  20. }
  21. const value = this.props.toClear?'':this.state.value; //键盘输入替换已有的值
  22. const onSelect = this.props.handleSelect;
  23. this.setState({
  24. value: value+text
  25. });
  26. onSelect&&onSelect(value+text);
  27. }
  28. handleClear(e){
  29. e.stopPropagation();
  30. const onSelect = this.props.handleSelect;
  31. this.setState({
  32. value: ''
  33. });
  34. onSelect&&onSelect('');
  35. }
  36. handleClose(e){
  37. e.stopPropagation();
  38. //关闭弹窗
  39. const {onClose} = this.props;
  40. onClose&&onClose();
  41. }
  42. handleBack(e){
  43. e.stopPropagation();
  44. // const value = this.state.value;
  45. const value = this.props.value;
  46. const len = value.length-1;
  47. if(len<0){
  48. return;
  49. }
  50. const onSelect = this.props.handleSelect;
  51. const text = value.substring(0,len);
  52. this.setState({
  53. value:text
  54. });
  55. onSelect&&onSelect(text);
  56. }
  57. componentWillReceiveProps(nextProps){
  58. //重新选择的值替换 不追加
  59. if(!nextProps.show){
  60. this.setState({
  61. value:''
  62. });
  63. }
  64. }
  65. render(){
  66. // const select = this.handleSelect.bind(this);
  67. const {show} = this.props; //table onBlur阻止冒泡是为了修复multSpread中数字键盘点击触发最外层数字组件onBlur事件
  68. return <div className={style['panBox']} onBlur={(e)=>e.stopPropagation()} style={{display:show?'table':'none'}}>
  69. <table className={style['pan']} >
  70. <tr>
  71. <td><span onClick={this.handleSelect}>1</span></td>
  72. <td><span onClick={this.handleSelect}>2</span></td>
  73. <td><span onClick={this.handleSelect}>3</span></td>
  74. <td><span onClick={this.handleSelect}>/</span></td>
  75. </tr>
  76. <tr>
  77. <td><span onClick={this.handleSelect}>4</span></td>
  78. <td><span onClick={this.handleSelect}>5</span></td>
  79. <td><span onClick={this.handleSelect}>6</span></td>
  80. <td><span onClick={this.handleBack.bind(this)}>回退</span></td>
  81. </tr>
  82. <tr>
  83. <td><span onClick={this.handleSelect}>7</span></td>
  84. <td><span onClick={this.handleSelect}>8</span></td>
  85. <td><span onClick={this.handleSelect}>9</span></td>
  86. <td><span onClick={this.handleClear.bind(this)}>清空</span></td>
  87. </tr>
  88. <tr>
  89. <td><span onClick={this.handleSelect}>.</span></td>
  90. <td><span onClick={this.handleSelect}>0</span></td>
  91. <td><span onClick={this.handleSelect}>~</span></td>
  92. <td><span onClick={this.handleClose.bind(this)}>确定</span></td>
  93. </tr>
  94. <tr>
  95. <td><span onClick={this.handleSelect}>{config.timeUnit.minute}</span></td>
  96. <td><span onClick={this.handleSelect}>{config.timeUnit.hour}</span></td>
  97. <td><span onClick={this.handleSelect}>{config.timeUnit.day}</span></td>
  98. <td><span onClick={this.handleSelect}>{config.timeUnit.age}</span></td>
  99. </tr>
  100. <tr>
  101. <td><span onClick={this.handleSelect}>{config.timeUnit.week}</span></td>
  102. <td><span onClick={this.handleSelect}>{config.timeUnit.month}</span></td>
  103. <td><span onClick={this.handleSelect}>{config.timeUnit.year}</span></td>
  104. </tr>
  105. </table>
  106. </div>
  107. }
  108. }
  109. export default NumberUnitPan;