index.jsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import React,{Component} from 'react';
  2. import style from './index.less';
  3. class NumberPan extends Component{
  4. constructor(props){
  5. super(props);
  6. this.state = {
  7. value:''
  8. }
  9. }
  10. handleSelect(e){
  11. e.stopPropagation();
  12. const text = e.target.innerText;
  13. const value = this.props.toClear?'':this.state.value; //键盘输入替换已有的值
  14. const onSelect = this.props.handleSelect;
  15. this.setState({
  16. value: value+text
  17. });
  18. onSelect&&onSelect(value+text);
  19. }
  20. handleClear(e){
  21. e.stopPropagation();
  22. const onSelect = this.props.handleSelect;
  23. this.setState({
  24. value: ''
  25. });
  26. onSelect&&onSelect('');
  27. }
  28. handleClose(e){
  29. e.stopPropagation();
  30. //关闭弹窗
  31. const {onClose} = this.props;
  32. onClose&&onClose();
  33. }
  34. handleBack(e){
  35. e.stopPropagation();
  36. const value = this.state.value;
  37. const len = value.length-1;
  38. if(len<0){
  39. return;
  40. }
  41. const onSelect = this.props.handleSelect;
  42. const text = value.substring(0,len);
  43. this.setState({
  44. value:text
  45. });
  46. onSelect&&onSelect(text);
  47. }
  48. render(){
  49. const select = this.handleSelect.bind(this);
  50. const {show} = this.props; //table onBlur阻止冒泡是为了修复multSpread中数字键盘点击触发最外层数字组件onBlur事件
  51. return <div className={style['panBox']}
  52. onBlur={(e)=>e.stopPropagation()} style={{display:show?'table':'none'}}
  53. onDoubleClick={(e)=>e.stopPropagation()}>
  54. <table className={style['pan']} >
  55. <tr>
  56. <td><button onClick={select}>1</button></td>
  57. <td><button onClick={select}>2</button></td>
  58. <td><button onClick={select}>3</button></td>
  59. <td><button onClick={select}>/</button></td>
  60. </tr>
  61. <tr>
  62. <td><button onClick={select}>4</button></td>
  63. <td><button onClick={select}>5</button></td>
  64. <td><button onClick={select}>6</button></td>
  65. <td><button onClick={this.handleBack.bind(this)}>回退</button></td>
  66. </tr>
  67. <tr>
  68. <td><button onClick={select}>7</button></td>
  69. <td><button onClick={select}>8</button></td>
  70. <td><button onClick={select}>9</button></td>
  71. <td><button onClick={this.handleClear.bind(this)}>清空</button></td>
  72. </tr>
  73. <tr>
  74. <td><button onClick={select}>.</button></td>
  75. <td><button onClick={select}>0</button></td>
  76. <td><button onClick={select}>~</button></td>
  77. <td><button onClick={this.handleClose.bind(this)}>确定</button></td>
  78. </tr>
  79. </table>
  80. </div>
  81. }
  82. }
  83. export default NumberPan;