Blame view

node_modules/mpvue-zanui/src/components/zan/stepper.vue 2.59 KB
ce4c83ff   wxy   初始提交
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
  <template >
    <div class="zan-stepper"
     :class="{'zan-stepper--small': size === 'small'}">
      <div
        class="zan-stepper__minus"
        :class="{'zan-stepper--disabled': stepper <= min }"
        :data-component-id="componentId"
        :data-stepper="stepper"
        :data-disabled="stepper <= min"
        @click="_handleZanStepperMinus"
      >-</div>
      <input
        class="zan-stepper__text"
        :class="{ 'zan-stepper--disabled' : min >= max }"
        type="number"
        :data-component-id="componentId"
        :data-min="min"
        :data-max="max"
        :value="stepper"
        :disabled="min >= max"
        @blur="_handleZanStepperBlur"
      />
      <div
        class="zan-stepper__plus"
        :class="{ 'zan-stepper--disabled' : stepper >= max }"
        :data-component-id="componentId"
        :data-stepper="stepper"
        :data-disabled="stepper >= max"
        @click="_handleZanStepperPlus"
      >+</div>
    </div>
  </template>
  
  <script>
    export default {
      props: {
        componentId: {
          type: String,
          default: ''
        },
        size: {
          type: String,
          default: ''
        },
        stepper: {
          type: Number,
          default: 0
        },
        min: {
          type: Number,
          default: 0
        },
        max: {
          type: Number,
          default: 10
        }
      },
      methods: {
        _handleZanStepperMinus (e) {
          this.handle(e, -1)
        },
  
        _handleZanStepperPlus (e) {
          this.handle(e, +1)
        },
  
        _handleZanStepperBlur: function (e) {
          var dataset = e.currentTarget.dataset
          var componentId = dataset.componentId
          var max = +dataset.max
          var min = +dataset.min
          var value = e.target.value
  
          if (!value) {
            setTimeout(() => {
              this.callback(componentId, min)
            }, 16)
            this.callback(componentId, value)
            return '' + value
          }
  
          value = +value
          if (value > max) {
            value = max
          } else if (value < min) {
            value = min
          }
  
          this.callback(componentId, value)
  
          return '' + value
        },
        handle (e, num) {
          var dataset = e.currentTarget.dataset
          var componentId = dataset.componentId
          var disabled = dataset.disabled
          var stepper = +dataset.stepper
  
          if (disabled) return null
  
          this.callback(componentId, stepper + num)
        },
  
        callback (componentId, stepper) {
          stepper = +stepper
          var e = {componentId, stepper}
          console.info('[zan:stepper:change]', e)
          this.$emit('handleZanStepperChange', e)
        }
      }
    }
  </script>
  
  <style scoped>
  
  </style>