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