Blame view

src/components/input/input.vue 5.58 KB
7fa943eb   梁灏   init
1
  <template>
7d5431d8   梁灏   update some style
2
      <div :class="wrapClasses">
0f822c9b   梁灏   add Input component
3
          <template v-if="type !== 'textarea'">
6ff31952   梁灏   optimize Input sh...
4
              <div :class="[prefixCls + '-group-prepend']" v-if="prepend" v-show="slotReady" v-el:prepend><slot name="prepend"></slot></div>
0f822c9b   梁灏   add Input component
5
6
              <i class="ivu-icon" :class="['ivu-icon-' + icon, prefixCls + '-icon']" v-if="icon" @click="handleIconClick"></i>
              <input
6c145a04   梁灏   fixed #77
7
                  :type="type"
0f822c9b   梁灏   add Input component
8
9
10
11
                  :class="inputClasses"
                  :placeholder="placeholder"
                  :disabled="disabled"
                  :maxlength="maxlength"
0a48ac45   梁灏   Input add readonl...
12
                  :readonly="readonly"
731d69a2   梁灏   fixed #101
13
                  :name="name"
0f822c9b   梁灏   add Input component
14
                  v-model="value"
0a48ac45   梁灏   Input add readonl...
15
16
                  @keyup.enter="handleEnter"
                  @focus="handleFocus"
c46f385a   梁灏   update DatePicker
17
18
                  @blur="handleBlur"
                  @change="handleChange">
6ff31952   梁灏   optimize Input sh...
19
              <div :class="[prefixCls + '-group-append']" v-if="append" v-show="slotReady" v-el:append><slot name="append"></slot></div>
0f822c9b   梁灏   add Input component
20
21
22
23
24
25
          </template>
          <textarea
              v-else
              v-el:textarea
              :class="textareaClasses"
              :style="textareaStyles"
7d5431d8   梁灏   update some style
26
              :placeholder="placeholder"
0f822c9b   梁灏   add Input component
27
28
29
              :disabled="disabled"
              :rows="rows"
              :maxlength="maxlength"
0a48ac45   梁灏   Input add readonl...
30
              :readonly="readonly"
731d69a2   梁灏   fixed #101
31
              :name="name"
0f822c9b   梁灏   add Input component
32
              v-model="value"
0a48ac45   梁灏   Input add readonl...
33
34
              @keyup.enter="handleEnter"
              @focus="handleFocus"
c46f385a   梁灏   update DatePicker
35
36
              @blur="handleBlur"
              @change="handleChange">
0f822c9b   梁灏   add Input component
37
          </textarea>
7d5431d8   梁灏   update some style
38
      </div>
7fa943eb   梁灏   init
39
40
41
  </template>
  <script>
      import { oneOf } from '../../utils/assist';
0f822c9b   梁灏   add Input component
42
      import calcTextareaHeight from '../../utils/calcTextareaHeight';
7fa943eb   梁灏   init
43
44
45
46
47
48
  
      const prefixCls = 'ivu-input';
  
      export default {
          props: {
              type: {
0f822c9b   梁灏   add Input component
49
                  validator (value) {
6c145a04   梁灏   fixed #77
50
                      return oneOf(value, ['text', 'textarea', 'password']);
0f822c9b   梁灏   add Input component
51
                  },
7fa943eb   梁灏   init
52
53
54
55
56
                  default: 'text'
              },
              value: {
                  type: [String, Number],
                  default: '',
c46f385a   梁灏   update DatePicker
57
  //                twoWay: true
7fa943eb   梁灏   init
58
              },
7fa943eb   梁灏   init
59
60
61
62
              size: {
                  validator (value) {
                      return oneOf(value, ['small', 'large']);
                  }
0f822c9b   梁灏   add Input component
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
              },
              placeholder: {
                  type: String,
                  default: ''
              },
              maxlength: {
                  type: Number
              },
              disabled: {
                  type: Boolean,
                  default: false
              },
              icon: String,
              autosize: {
                  type: [Boolean, Object],
                  default: false
              },
              rows: {
                  type: Number,
                  default: 2
0a48ac45   梁灏   Input add readonl...
83
84
85
86
              },
              readonly: {
                  type: Boolean,
                  default: false
731d69a2   梁灏   fixed #101
87
88
89
              },
              name: {
                  type: String
7fa943eb   梁灏   init
90
91
92
93
              }
          },
          data () {
              return {
0f822c9b   梁灏   add Input component
94
95
96
                  prefixCls: prefixCls,
                  prepend: true,
                  append: true,
6ff31952   梁灏   optimize Input sh...
97
                  slotReady: false,
0f822c9b   梁灏   add Input component
98
                  textareaStyles: {}
b0893113   jingsam   :art: add eslint
99
              };
7fa943eb   梁灏   init
100
101
          },
          computed: {
7d5431d8   梁灏   update some style
102
              wrapClasses () {
0f822c9b   梁灏   add Input component
103
104
105
                  return [
                      `${prefixCls}-wrapper`,
                      {
12418c6a   梁灏   fixed #74
106
                          [`${prefixCls}-wrapper-${this.size}`]: !!this.size,
0f822c9b   梁灏   add Input component
107
108
109
110
                          [`${prefixCls}-type`]: this.type,
                          [`${prefixCls}-group`]: this.prepend || this.append,
                          [`${prefixCls}-group-${this.size}`]: (this.prepend || this.append) && !!this.size
                      }
b0893113   jingsam   :art: add eslint
111
                  ];
0f822c9b   梁灏   add Input component
112
113
114
115
116
117
118
119
              },
              inputClasses () {
                  return [
                      `${prefixCls}`,
                      {
                          [`${prefixCls}-${this.size}`]: !!this.size,
                          [`${prefixCls}-disabled`]: this.disabled
                      }
b0893113   jingsam   :art: add eslint
120
                  ];
7d5431d8   梁灏   update some style
121
              },
0f822c9b   梁灏   add Input component
122
              textareaClasses () {
7fa943eb   梁灏   init
123
124
125
                  return [
                      `${prefixCls}`,
                      {
0f822c9b   梁灏   add Input component
126
                          [`${prefixCls}-disabled`]: this.disabled
7fa943eb   梁灏   init
127
                      }
b0893113   jingsam   :art: add eslint
128
                  ];
7fa943eb   梁灏   init
129
              }
0f822c9b   梁灏   add Input component
130
131
132
133
134
135
136
137
          },
          methods: {
              handleEnter () {
                  this.$emit('on-enter');
              },
              handleIconClick () {
                  this.$emit('on-click');
              },
0a48ac45   梁灏   Input add readonl...
138
139
140
141
142
              handleFocus () {
                  this.$emit('on-focus');
              },
              handleBlur () {
                  this.$emit('on-blur');
578ca325   梁灏   fixed Radio bug
143
                  this.$dispatch('on-form-blur', this.value);
0a48ac45   梁灏   Input add readonl...
144
              },
e1874103   梁灏   update DatePicker
145
146
              handleChange (event) {
                  this.$emit('on-change', event);
578ca325   梁灏   fixed Radio bug
147
                  this.$dispatch('on-form-change', this.value);
c46f385a   梁灏   update DatePicker
148
              },
0f822c9b   梁灏   add Input component
149
150
151
152
153
154
155
156
157
158
159
160
161
              resizeTextarea () {
                  const autosize = this.autosize;
                  if (!autosize || this.type !== 'textarea') {
                      return false;
                  }
  
                  const minRows = autosize.minRows;
                  const maxRows = autosize.maxRows;
  
                  this.textareaStyles = calcTextareaHeight(this.$els.textarea, minRows, maxRows);
              }
          },
          watch: {
c46f385a   梁灏   update DatePicker
162
              value () {
0f822c9b   梁灏   add Input component
163
164
165
                  this.$nextTick(() => {
                      this.resizeTextarea();
                  });
0f822c9b   梁灏   add Input component
166
167
168
              }
          },
          ready () {
d3eee3f4   梁灏   fixed #123
169
              if (this.type !== 'textarea') {
0f822c9b   梁灏   add Input component
170
171
172
173
174
175
                  this.prepend = this.$els.prepend.innerHTML !== '';
                  this.append = this.$els.append.innerHTML !== '';
              } else {
                  this.prepend = false;
                  this.append = false;
              }
6ff31952   梁灏   optimize Input sh...
176
              this.slotReady = true;
0f822c9b   梁灏   add Input component
177
              this.resizeTextarea();
7fa943eb   梁灏   init
178
          }
b0893113   jingsam   :art: add eslint
179
180
      };
  </script>