index.jsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import React,{Component} from 'react';
  2. import style from './index.less';
  3. import ReactDom from "react-dom";
  4. import backspace from '../../images/backspace.png'
  5. class NumberPan 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 || e.target.innerHTML;
  16. const value = this.props.toClear?'':this.state.value; //键盘输入替换已有的值
  17. const onSelect = this.props.handleSelect;
  18. this.setState({
  19. value: value+text
  20. });
  21. onSelect&&onSelect(value+text);
  22. }
  23. handleClear(e){
  24. e&&e.stopPropagation();
  25. const onSelect = this.props.handleSelect;
  26. this.setState({
  27. value: ''
  28. });
  29. onSelect&&onSelect('');
  30. }
  31. handleClose(e){
  32. e.stopPropagation();
  33. //关闭弹窗
  34. const {onClose} = this.props;
  35. onClose&&onClose();
  36. }
  37. handleBack(e){
  38. e.stopPropagation();
  39. const value = this.state.value;
  40. const len = value.length-1;
  41. if(len<0){
  42. return;
  43. }
  44. const onSelect = this.props.handleSelect;
  45. const text = value.substring(0,len);
  46. this.setState({
  47. value:text
  48. });
  49. onSelect&&onSelect(text);
  50. }
  51. getStyle(){
  52. const {left,top,show} = this.props;
  53. return {
  54. /*left:left?left+'px':'0',
  55. top:top?top+'px':'0',*/
  56. display:show?'table':'none' //table onBlur阻止冒泡是为了修复multSpread中数字键盘点击触发最外层数字组件onBlur事件
  57. }
  58. }
  59. componentWillReceiveProps(next){
  60. //超过范围后重新打开下拉点删除,显示原值bug修改
  61. if(next.toClear&&!this.props.toClear){
  62. this.setState({
  63. value: this.props.value
  64. });
  65. }
  66. }
  67. render(){
  68. const select = this.handleSelect;
  69. const noString=this.props.noString;
  70. const domNode = document.getElementById('root');
  71. return <div className={style['panBox']}
  72. style={this.getStyle()}
  73. onBlur={(e)=>e.stopPropagation()}
  74. onDoubleClick={(e)=>e.stopPropagation()}
  75. onClick={(e)=>e.stopPropagation()}>
  76. <table className={style['pan']} >
  77. <tr>
  78. <td><button onMouseUp={select}>1</button></td>
  79. <td><button onMouseUp={select}>2</button></td>
  80. <td><button onMouseUp={select}>3</button></td>
  81. <td><button className={noString?style['disabled']:''} onMouseUp={noString?null:select}>/</button></td>
  82. </tr>
  83. <tr>
  84. <td><button onMouseUp={select}>4</button></td>
  85. <td><button onMouseUp={select}>5</button></td>
  86. <td><button onMouseUp={select}>6</button></td>
  87. <td><button onMouseUp={this.handleBack.bind(this)}><img src={backspace} /></button></td>
  88. </tr>
  89. <tr>
  90. <td><button onMouseUp={select}>7</button></td>
  91. <td><button onMouseUp={select}>8</button></td>
  92. <td><button onMouseUp={select}>9</button></td>
  93. <td><button onMouseUp={this.handleClear.bind(this)} className={style['clearN']}>清空</button></td>
  94. </tr>
  95. <tr>
  96. <td><button onMouseUp={select}>.</button></td>
  97. <td><button onMouseUp={select}>0</button></td>
  98. <td><button className={noString?style['disabled']:''} onMouseUp={noString?null:select}>~</button></td>
  99. <td><button onMouseUp={this.handleClose.bind(this)} className={style['confirm']}>确定</button></td>
  100. </tr>
  101. </table>
  102. </div>
  103. }
  104. }
  105. export default NumberPan;