df5d2edb4aa614b3e63d583dd1c51856e0f9603e.svn-base 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <a-input
  3. ref="input"
  4. :value="innerValue"
  5. v-bind="cellProps"
  6. @blur="handleBlur"
  7. @change="handleChange"
  8. />
  9. </template>
  10. <script>
  11. import { JVXETypes } from '@/components/jeecg/JVxeTable'
  12. import JVxeCellMixins from '@/components/jeecg/JVxeTable/mixins/JVxeCellMixins'
  13. const NumberRegExp = /^-?\d+\.?\d*$/
  14. export default {
  15. name: 'JVxeInputCell',
  16. mixins: [JVxeCellMixins],
  17. methods: {
  18. /** 处理change事件 */
  19. handleChange(event) {
  20. let {$type} = this
  21. let {target} = event
  22. let {value, selectionStart} = target
  23. let change = true
  24. if ($type === JVXETypes.inputNumber) {
  25. // 判断输入的值是否匹配数字正则表达式,不匹配就还原
  26. if (!NumberRegExp.test(value) && (value !== '' && value !== '-')) {
  27. change = false
  28. value = this.innerValue
  29. target.value = value || ''
  30. if (typeof selectionStart === 'number') {
  31. target.selectionStart = selectionStart - 1
  32. target.selectionEnd = selectionStart - 1
  33. }
  34. }
  35. }
  36. // 触发事件,存储输入的值
  37. if (change) {
  38. this.handleChangeCommon(value)
  39. }
  40. if ($type === JVXETypes.inputNumber) {
  41. // this.recalcOneStatisticsColumn(col.key)
  42. }
  43. },
  44. /** 处理blur失去焦点事件 */
  45. handleBlur(event) {
  46. let {$type} = this
  47. let {target} = event
  48. // 判断输入的值是否匹配数字正则表达式,不匹配就置空
  49. if ($type === JVXETypes.inputNumber) {
  50. if (!NumberRegExp.test(target.value)) {
  51. target.value = ''
  52. } else {
  53. target.value = Number.parseFloat(target.value)
  54. }
  55. this.handleChangeCommon(target.value)
  56. }
  57. this.handleBlurCommon(target.value)
  58. },
  59. },
  60. // 【组件增强】注释详见:JVxeCellMixins.js
  61. enhanced: {
  62. installOptions: {
  63. // 自动聚焦的 class 类名
  64. autofocus: '.ant-input',
  65. },
  66. getValue(value) {
  67. if (this.$type === JVXETypes.inputNumber && typeof value === 'string') {
  68. if (NumberRegExp.test(value)) {
  69. return Number.parseFloat(value)
  70. }
  71. }
  72. return value
  73. },
  74. }
  75. }
  76. </script>
  77. <style scoped>
  78. </style>