Blame view

src/components/auto-complete/auto-complete.vue 4.79 KB
fed3e09d   梁灏   add AutoComplete ...
1
2
3
4
5
6
7
8
9
  <template>
      <i-select
          ref="select"
          class="ivu-auto-complete"
          :label="label"
          :disabled="disabled"
          :clearable="clearable"
          :placeholder="placeholder"
          :size="size"
96c0c8ae   梁灏   fixed #2803
10
          :placement="placement"
f8620d9a   Sergio Crisostomo   Fix autocomplete ...
11
          :value="currentValue"
fed3e09d   梁灏   add AutoComplete ...
12
13
14
15
16
17
18
19
          filterable
          remote
          auto-complete
          :remote-method="remoteMethod"
          @on-change="handleChange"
          :transfer="transfer">
          <slot name="input">
              <i-input
acb79ba3   梁灏   fixed #433
20
                  :element-id="elementId"
fed3e09d   梁灏   add AutoComplete ...
21
22
23
                  ref="input"
                  slot="input"
                  v-model="currentValue"
0460a1e8   梁灏   fixed #812
24
                  :name="name"
fed3e09d   梁灏   add AutoComplete ...
25
26
27
                  :placeholder="placeholder"
                  :disabled="disabled"
                  :size="size"
9cc6213c   梁灏   update AutoComplete
28
                  :icon="inputIcon"
fed3e09d   梁灏   add AutoComplete ...
29
30
31
32
33
34
35
36
37
38
39
40
41
42
                  @on-click="handleClear"
                  @on-focus="handleFocus"
                  @on-blur="handleBlur"></i-input>
          </slot>
          <slot>
              <i-option v-for="item in filteredData" :value="item" :key="item">{{ item }}</i-option>
          </slot>
      </i-select>
  </template>
  <script>
      import iSelect from '../select/select.vue';
      import iOption from '../select/option.vue';
      import iInput from '../input/input.vue';
      import { oneOf } from '../../utils/assist';
7af00356   梁灏   update AutoComplete
43
      import Emitter from '../../mixins/emitter';
fed3e09d   梁灏   add AutoComplete ...
44
45
46
  
      export default {
          name: 'AutoComplete',
7af00356   梁灏   update AutoComplete
47
          mixins: [ Emitter ],
fed3e09d   梁灏   add AutoComplete ...
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
          components: { iSelect, iOption, iInput },
          props: {
              value: {
                  type: [String, Number],
                  default: ''
              },
              label: {
                  type: [String, Number],
                  default: ''
              },
              data: {
                  type: Array,
                  default: () => []
              },
              disabled: {
                  type: Boolean,
                  default: false
              },
              clearable: {
                  type: Boolean,
                  default: false
              },
              placeholder: {
                  type: String
              },
              size: {
                  validator (value) {
                      return oneOf(value, ['small', 'large', 'default']);
                  }
              },
9cc6213c   梁灏   update AutoComplete
78
79
80
              icon: {
                  type: String
              },
fed3e09d   梁灏   add AutoComplete ...
81
82
83
84
              filterMethod: {
                  type: [Function, Boolean],
                  default: false
              },
96c0c8ae   梁灏   fixed #2803
85
86
87
88
89
90
              placement: {
                  validator (value) {
                      return oneOf(value, ['top', 'bottom']);
                  },
                  default: 'bottom'
              },
fed3e09d   梁灏   add AutoComplete ...
91
92
93
              transfer: {
                  type: Boolean,
                  default: false
0460a1e8   梁灏   fixed #812
94
95
96
              },
              name: {
                  type: String
acb79ba3   梁灏   fixed #433
97
98
99
              },
              elementId: {
                  type: String
fed3e09d   梁灏   add AutoComplete ...
100
101
102
103
              }
          },
          data () {
              return {
b904fd87   梁灏   update AutoComplete
104
105
                  currentValue: this.value,
                  disableEmitChange: false    // for Form reset
fed3e09d   梁灏   add AutoComplete ...
106
107
108
              };
          },
          computed: {
9cc6213c   梁灏   update AutoComplete
109
110
111
112
113
114
115
116
              inputIcon () {
                  let icon = '';
                  if (this.clearable && this.currentValue) {
                      icon = 'ios-close';
                  } else if (this.icon) {
                      icon = this.icon;
                  }
                  return icon;
fed3e09d   梁灏   add AutoComplete ...
117
118
119
120
121
122
123
124
125
126
127
              },
              filteredData () {
                  if (this.filterMethod) {
                      return this.data.filter(item => this.filterMethod(this.currentValue, item));
                  } else {
                      return this.data;
                  }
              }
          },
          watch: {
              value (val) {
f32d1f41   Wu-K'ung   修复autoComplete的on...
128
129
130
                  if(this.currentValue !== val){
                      this.disableEmitChange = true;
                  }
fed3e09d   梁灏   add AutoComplete ...
131
132
133
134
135
                  this.currentValue = val;
              },
              currentValue (val) {
                  this.$refs.select.query = val;
                  this.$emit('input', val);
b904fd87   梁灏   update AutoComplete
136
137
138
139
                  if (this.disableEmitChange) {
                      this.disableEmitChange = false;
                      return;
                  }
fed3e09d   梁灏   add AutoComplete ...
140
                  this.$emit('on-change', val);
7af00356   梁灏   update AutoComplete
141
                  this.dispatch('FormItem', 'on-form-change', val);
fed3e09d   梁灏   add AutoComplete ...
142
143
144
145
146
147
148
149
              }
          },
          methods: {
              remoteMethod (query) {
                  this.$emit('on-search', query);
              },
              handleChange (val) {
                  this.currentValue = val;
fed3e09d   梁灏   add AutoComplete ...
150
151
152
                  this.$refs.input.blur();
                  this.$emit('on-select', val);
              },
11ab6519   blackcater   feat: exposure `o...
153
              handleFocus (event) {
11ab6519   blackcater   feat: exposure `o...
154
                  this.$emit('on-focus', event);
fed3e09d   梁灏   add AutoComplete ...
155
              },
11ab6519   blackcater   feat: exposure `o...
156
              handleBlur (event) {
11ab6519   blackcater   feat: exposure `o...
157
                  this.$emit('on-blur', event);
fed3e09d   梁灏   add AutoComplete ...
158
159
              },
              handleClear () {
b9541c05   梁灏   update AutoComplete
160
                  if (!this.clearable) return;
fed3e09d   梁灏   add AutoComplete ...
161
                  this.currentValue = '';
f8620d9a   Sergio Crisostomo   Fix autocomplete ...
162
                  this.$refs.select.reset();
fed3e09d   梁灏   add AutoComplete ...
163
164
165
              }
          }
      };
f32d1f41   Wu-K'ung   修复autoComplete的on...
166
  </script>