Blame view

src/components/select/select.vue 34.5 KB
e355dd49   梁灏   add Select Component
1
  <template>
2fbe636b   梁灏   Select support a ...
2
      <div
2fbe636b   梁灏   Select support a ...
3
          :class="classes"
c9b86944   Sergio Crisostomo   Refactor Select!
4
          v-click-outside.capture="onClickOutside"
4a9974f6   Graham Fairweather   Normalise v-ckick...
5
          v-click-outside:mousedown.capture="onClickOutside"
69c2de7a   Роман Ковжогин   iOS click-outside...
6
          v-click-outside:touchstart.capture="onClickOutside"
c9b86944   Sergio Crisostomo   Refactor Select!
7
      >
e355dd49   梁灏   add Select Component
8
          <div
4aec6a66   梁灏   support Select
9
              ref="reference"
c9b86944   Sergio Crisostomo   Refactor Select!
10
11
12
13
14
15
16
17
18
19
  
              :class="selectionCls"
              :tabindex="selectTabindex"
  
              @blur="toggleHeaderFocus"
              @focus="toggleHeaderFocus"
  
              @click="toggleMenu"
              @keydown.esc="handleKeydown"
              @keydown.enter="handleKeydown"
66f807ed   梁灏   update Select
20
21
              @keydown.up.prevent="handleKeydown"
              @keydown.down.prevent="handleKeydown"
c9b86944   Sergio Crisostomo   Refactor Select!
22
23
24
25
26
27
28
29
              @keydown.tab="handleKeydown"
              @keydown.delete="handleKeydown"
  
  
              @mouseenter="hasMouseHoverHead = true"
              @mouseleave="hasMouseHoverHead = false"
  
          >
fed3e09d   梁灏   add AutoComplete ...
30
              <slot name="input">
c9b86944   Sergio Crisostomo   Refactor Select!
31
32
33
34
35
36
                  <input type="hidden" :name="name" :value="publicValue">
                  <select-head
                      :filterable="filterable"
                      :multiple="multiple"
                      :values="values"
                      :clearable="canBeCleared"
2739fc29   梁灏   Select add prefix...
37
                      :prefix="prefix"
fed3e09d   梁灏   add AutoComplete ...
38
                      :disabled="disabled"
c9b86944   Sergio Crisostomo   Refactor Select!
39
40
41
42
43
                      :remote="remote"
                      :input-element-id="elementId"
                      :initial-label="initialLabel"
                      :placeholder="placeholder"
                      :query-prop="query"
90399f84   梁灏   fix #5568 ,close ...
44
45
                      :max-tag-count="maxTagCount"
                      :max-tag-placeholder="maxTagPlaceholder"
c9b86944   Sergio Crisostomo   Refactor Select!
46
47
48
49
  
                      @on-query-change="onQueryChange"
                      @on-input-focus="isFocused = true"
                      @on-input-blur="isFocused = false"
7dbde804   Sergio Crisostomo   add on-clear event
50
                      @on-clear="clearSingleSelect"
2739fc29   梁灏   Select add prefix...
51
52
53
                  >
                      <slot name="prefix" slot="prefix"></slot>
                  </select-head>
fed3e09d   梁灏   add AutoComplete ...
54
              </slot>
e355dd49   梁灏   add Select Component
55
          </div>
e09b07b7   huanghong   解决drop弹出动画异常
56
          <transition name="transition-drop">
595cfa72   梁灏   fixed #1187 #844 ...
57
              <Drop
ecaf8d51   梁灏   Date add transfer...
58
                  :class="dropdownCls"
595cfa72   梁灏   fixed #1187 #844 ...
59
60
61
62
                  v-show="dropVisible"
                  :placement="placement"
                  ref="dropdown"
                  :data-transfer="transfer"
7bafe9d9   梁灏   fixes #4453 #4480...
63
                  :transfer="transfer"
c9b86944   Sergio Crisostomo   Refactor Select!
64
65
66
67
                  v-transfer-dom
              >
                  <ul v-show="showNotFoundLabel" :class="[prefixCls + '-not-found']"><li>{{ localeNotFoundText }}</li></ul>
                  <ul :class="prefixCls + '-dropdown-list'">
220161f5   Sergio Crisostomo   Clean up empty/nu...
68
69
70
71
72
73
                      <functional-options
                          v-if="(!remote) || (remote && !loading)"
                          :options="selectOptions"
                          :slot-update-hook="updateSlotOptions"
                          :slot-options="slotOptions"
                      ></functional-options>
c9b86944   Sergio Crisostomo   Refactor Select!
74
                  </ul>
01b54e30   梁灏   Select support re...
75
                  <ul v-show="loading" :class="[prefixCls + '-loading']">{{ localeLoadingText }}</ul>
4aec6a66   梁灏   support Select
76
77
              </Drop>
          </transition>
e355dd49   梁灏   add Select Component
78
79
80
      </div>
  </template>
  <script>
4aec6a66   梁灏   support Select
81
      import Drop from './dropdown.vue';
26369639   Graham Fairweather   Update v-click-ou...
82
      import {directive as clickOutside} from 'v-click-outside-x';
595cfa72   梁灏   fixed #1187 #844 ...
83
      import TransferDom from '../../directives/transfer-dom';
c9b86944   Sergio Crisostomo   Refactor Select!
84
      import { oneOf } from '../../utils/assist';
4aec6a66   梁灏   support Select
85
      import Emitter from '../../mixins/emitter';
e5337c81   梁灏   fixed some compon...
86
      import Locale from '../../mixins/locale';
c9b86944   Sergio Crisostomo   Refactor Select!
87
88
      import SelectHead from './select-head.vue';
      import FunctionalOptions from './functional-options.vue';
e355dd49   梁灏   add Select Component
89
90
  
      const prefixCls = 'ivu-select';
9366c9a7   Sergio Crisostomo   Select improvemen...
91
      const optionRegexp = /^i-option$|^Option$/i;
523e2c81   Sergio Crisostomo   correct match log...
92
      const optionGroupRegexp = /option-?group/i;
c9b86944   Sergio Crisostomo   Refactor Select!
93
94
95
96
97
98
99
100
101
102
  
      const findChild = (instance, checkFn) => {
          let match = checkFn(instance);
          if (match) return instance;
          for (let i = 0, l = instance.$children.length; i < l; i++){
              const child = instance.$children[i];
              match = findChild(child, checkFn);
              if (match) return match;
          }
      };
e355dd49   梁灏   add Select Component
103
  
06a74f9e   Sergio Crisostomo   Allow select to n...
104
105
      const findOptionsInVNode = (node) => {
          const opts = node.componentOptions;
523e2c81   Sergio Crisostomo   correct match log...
106
          if (opts && opts.tag.match(optionRegexp)) return [node];
7d14e70c   Sergio Crisostomo   Include both node...
107
          if (!node.children && (!opts || !opts.children)) return [];
9366c9a7   Sergio Crisostomo   Select improvemen...
108
          const children = [...(node.children || []), ...(opts && opts.children || [])];
7d14e70c   Sergio Crisostomo   Include both node...
109
          const options = children.reduce(
06a74f9e   Sergio Crisostomo   Allow select to n...
110
111
112
113
114
115
116
117
118
              (arr, el) => [...arr, ...findOptionsInVNode(el)], []
          ).filter(Boolean);
          return options.length > 0 ? options : [];
      };
  
      const extractOptions = (options) => options.reduce((options, slotEntry) => {
          return options.concat(findOptionsInVNode(slotEntry));
      }, []);
  
aa21cdf9   Sergio Crisostomo   Process also shal...
119
120
121
122
123
124
125
126
127
128
129
130
131
      const applyProp = (node, propName, value) => {
          return {
              ...node,
              componentOptions: {
                  ...node.componentOptions,
                  propsData: {
                      ...node.componentOptions.propsData,
                      [propName]: value,
                  }
              }
          };
      };
  
9366c9a7   Sergio Crisostomo   Select improvemen...
132
133
134
135
136
137
      const getNestedProperty = (obj, path) => {
          const keys = path.split('.');
          return keys.reduce((o, key) => o && o[key] || null, obj);
      };
  
      const getOptionLabel = option => {
1b39f569   Sergio Crisostomo   Use label first i...
138
          if (option.componentOptions.propsData.label) return option.componentOptions.propsData.label;
9366c9a7   Sergio Crisostomo   Select improvemen...
139
140
          const textContent = (option.componentOptions.children || []).reduce((str, child) => str + (child.text || ''), '');
          const innerHTML = getNestedProperty(option, 'data.domProps.innerHTML');
1b39f569   Sergio Crisostomo   Use label first i...
141
          return textContent || (typeof innerHTML === 'string' ? innerHTML : '');
9366c9a7   Sergio Crisostomo   Select improvemen...
142
143
      };
  
cd8f1be8   任珽   fixed bug #4466 #...
144
145
146
147
148
149
150
151
152
      const checkValuesNotEqual = (value,publicValue,values) => {
          const strValue = JSON.stringify(value);
          const strPublic = JSON.stringify(publicValue);
          const strValues = JSON.stringify(values.map( item => {
              return item.value;
          }));
          return strValue !== strPublic || strValue !== strValues || strValues !== strPublic;
      };
  
9366c9a7   Sergio Crisostomo   Select improvemen...
153
  
31788df3   Sergio Crisostomo   Normalise behavio...
154
155
      const ANIMATION_TIMEOUT = 300;
  
e355dd49   梁灏   add Select Component
156
      export default {
8f5b1686   梁灏   fixed #196
157
          name: 'iSelect',
e5337c81   梁灏   fixed some compon...
158
          mixins: [ Emitter, Locale ],
9eba26fe   梁灏   update Select Icons
159
          components: { FunctionalOptions, Drop, SelectHead },
26369639   Graham Fairweather   Update v-click-ou...
160
          directives: { clickOutside, TransferDom },
e355dd49   梁灏   add Select Component
161
          props: {
4aec6a66   梁灏   support Select
162
              value: {
e355dd49   梁灏   add Select Component
163
164
165
                  type: [String, Number, Array],
                  default: ''
              },
98bf25b3   梁灏   fixed #1286
166
              // 使用时,也得设置 value 才行
ddc35c9a   梁灏   fixed #952
167
168
169
170
              label: {
                  type: [String, Number, Array],
                  default: ''
              },
e355dd49   梁灏   add Select Component
171
172
173
174
175
176
177
178
179
180
181
182
183
              multiple: {
                  type: Boolean,
                  default: false
              },
              disabled: {
                  type: Boolean,
                  default: false
              },
              clearable: {
                  type: Boolean,
                  default: false
              },
              placeholder: {
e5337c81   梁灏   fixed some compon...
184
                  type: String
e355dd49   梁灏   add Select Component
185
186
187
188
189
190
191
192
              },
              filterable: {
                  type: Boolean,
                  default: false
              },
              filterMethod: {
                  type: Function
              },
01b54e30   梁灏   Select support re...
193
194
195
196
197
198
199
200
201
202
              remoteMethod: {
                  type: Function
              },
              loading: {
                  type: Boolean,
                  default: false
              },
              loadingText: {
                  type: String
              },
e355dd49   梁灏   add Select Component
203
204
              size: {
                  validator (value) {
6932b4d7   梁灏   update Page compo...
205
                      return oneOf(value, ['small', 'large', 'default']);
be2c3198   梁灏   Select support gl...
206
207
                  },
                  default () {
fe5ffd7f   梁灏   fixed #4196 #4165
208
                      return !this.$IVIEW || this.$IVIEW.size === '' ? 'default' : this.$IVIEW.size;
e355dd49   梁灏   add Select Component
209
210
211
212
213
                  }
              },
              labelInValue: {
                  type: Boolean,
                  default: false
294e2412   梁灏   update Select com...
214
215
              },
              notFoundText: {
e5337c81   梁灏   fixed some compon...
216
                  type: String
f89dd9c2   梁灏   Paeg、Select add p...
217
218
219
              },
              placement: {
                  validator (value) {
74ef0a6a   梁灏   fixed #4194
220
                      return oneOf(value, ['top', 'bottom', 'top-start', 'bottom-start', 'top-end', 'bottom-end']);
f89dd9c2   梁灏   Paeg、Select add p...
221
                  },
74ef0a6a   梁灏   fixed #4194
222
                  default: 'bottom-start'
595cfa72   梁灏   fixed #1187 #844 ...
223
224
225
              },
              transfer: {
                  type: Boolean,
517917a2   梁灏   add global settin...
226
                  default () {
fe5ffd7f   梁灏   fixed #4196 #4165
227
                      return !this.$IVIEW || this.$IVIEW.transfer === '' ? false : this.$IVIEW.transfer;
517917a2   梁灏   add global settin...
228
                  }
fed3e09d   梁灏   add AutoComplete ...
229
230
231
232
233
              },
              // Use for AutoComplete
              autoComplete: {
                  type: Boolean,
                  default: false
0460a1e8   梁灏   fixed #812
234
235
236
              },
              name: {
                  type: String
acb79ba3   梁灏   fixed #433
237
238
239
              },
              elementId: {
                  type: String
202c2cf3   梁灏   Select add prop t...
240
241
242
243
              },
              transferClassName: {
                  type: String
              },
90399f84   梁灏   fix #5568 ,close ...
244
              // 3.4.0
2739fc29   梁灏   Select add prefix...
245
246
247
              prefix: {
                  type: String
              },
90399f84   梁灏   fix #5568 ,close ...
248
249
250
251
252
253
              // 3.4.0
              maxTagCount: {
                  type: Number
              },
              // 3.4.0
              maxTagPlaceholder: {
38b5b760   梁灏   update Select max...
254
                  type: Function
90399f84   梁灏   fix #5568 ,close ...
255
              }
e355dd49   梁灏   add Select Component
256
          },
c9b86944   Sergio Crisostomo   Refactor Select!
257
258
259
260
          mounted(){
              this.$on('on-select-selected', this.onOptionClick);
  
              // set the initial values if there are any
9366c9a7   Sergio Crisostomo   Select improvemen...
261
262
263
264
265
              if (!this.remote && this.selectOptions.length > 0){
                  this.values = this.getInitialValue().map(value => {
                      if (typeof value !== 'number' && !value) return null;
                      return this.getOptionData(value);
                  }).filter(Boolean);
c9b86944   Sergio Crisostomo   Refactor Select!
266
              }
7f63e58c   Sergio Crisostomo   Make possible for...
267
  
73b01ee0   郑敏   fixed #3722 that ...
268
              this.checkUpdateStatus();
30c1b9d3   FEI   select
269
  
c9b86944   Sergio Crisostomo   Refactor Select!
270
          },
e355dd49   梁灏   add Select Component
271
          data () {
c9b86944   Sergio Crisostomo   Refactor Select!
272
  
e355dd49   梁灏   add Select Component
273
274
              return {
                  prefixCls: prefixCls,
9366c9a7   Sergio Crisostomo   Select improvemen...
275
                  values: [],
c9b86944   Sergio Crisostomo   Refactor Select!
276
                  dropDownWidth: 0,
e355dd49   梁灏   add Select Component
277
                  visible: false,
c9b86944   Sergio Crisostomo   Refactor Select!
278
279
                  focusIndex: -1,
                  isFocused: false,
e355dd49   梁灏   add Select Component
280
                  query: '',
c9b86944   Sergio Crisostomo   Refactor Select!
281
282
283
284
285
                  initialLabel: this.label,
                  hasMouseHoverHead: false,
                  slotOptions: this.$slots.default,
                  caretPosition: -1,
                  lastRemoteQuery: '',
31788df3   Sergio Crisostomo   Normalise behavio...
286
                  unchangedQuery: true,
7f63e58c   Sergio Crisostomo   Make possible for...
287
                  hasExpectedValue: false,
45bcc14d   Sergio Crisostomo   prevent calling r...
288
                  preventRemoteCall: false,
e7327532   vincentfintend   fix select
289
                  filterQueryChange: false,  // #4273
b0893113   jingsam   :art: add eslint
290
              };
e355dd49   梁灏   add Select Component
291
292
293
294
          },
          computed: {
              classes () {
                  return [
4b7138b9   梁灏   fixed some bugs
295
                      `${prefixCls}`,
e355dd49   梁灏   add Select Component
296
                      {
4b7138b9   梁灏   fixed some bugs
297
298
299
300
301
302
                          [`${prefixCls}-visible`]: this.visible,
                          [`${prefixCls}-disabled`]: this.disabled,
                          [`${prefixCls}-multiple`]: this.multiple,
                          [`${prefixCls}-single`]: !this.multiple,
                          [`${prefixCls}-show-clear`]: this.showCloseIcon,
                          [`${prefixCls}-${this.size}`]: !!this.size
e355dd49   梁灏   add Select Component
303
                      }
b0893113   jingsam   :art: add eslint
304
                  ];
e355dd49   梁灏   add Select Component
305
              },
ecaf8d51   梁灏   Date add transfer...
306
307
308
              dropdownCls () {
                  return {
                      [prefixCls + '-dropdown-transfer']: this.transfer,
fed3e09d   梁灏   add AutoComplete ...
309
310
                      [prefixCls + '-multiple']: this.multiple && this.transfer,
                      ['ivu-auto-complete']: this.autoComplete,
202c2cf3   梁灏   Select add prop t...
311
                      [this.transferClassName]: this.transferClassName
fed3e09d   梁灏   add AutoComplete ...
312
313
314
315
                  };
              },
              selectionCls () {
                  return {
c9b86944   Sergio Crisostomo   Refactor Select!
316
317
                      [`${prefixCls}-selection`]: !this.autoComplete,
                      [`${prefixCls}-selection-focused`]: this.isFocused
ecaf8d51   梁灏   Date add transfer...
318
319
                  };
              },
e5337c81   梁灏   fixed some compon...
320
              localeNotFoundText () {
c9b86944   Sergio Crisostomo   Refactor Select!
321
                  if (typeof this.notFoundText === 'undefined') {
e5337c81   梁灏   fixed some compon...
322
323
324
325
                      return this.t('i.select.noMatch');
                  } else {
                      return this.notFoundText;
                  }
f89dd9c2   梁灏   Paeg、Select add p...
326
              },
01b54e30   梁灏   Select support re...
327
              localeLoadingText () {
c9b86944   Sergio Crisostomo   Refactor Select!
328
                  if (typeof this.loadingText === 'undefined') {
01b54e30   梁灏   Select support re...
329
330
331
332
333
                      return this.t('i.select.loading');
                  } else {
                      return this.loadingText;
                  }
              },
f89dd9c2   梁灏   Paeg、Select add p...
334
335
              transitionName () {
                  return this.placement === 'bottom' ? 'slide-up' : 'slide-down';
ec98f3c3   梁灏   update Select
336
337
338
              },
              dropVisible () {
                  let status = true;
bc348e7e   Sergio Crisostomo   adapt to auto-com...
339
340
                  const noOptions = !this.selectOptions || this.selectOptions.length === 0;
                  if (!this.loading && this.remote && this.query === '' && noOptions) status = false;
fed3e09d   梁灏   add AutoComplete ...
341
  
bc348e7e   Sergio Crisostomo   adapt to auto-com...
342
                  if (this.autoComplete && noOptions) status = false;
fed3e09d   梁灏   add AutoComplete ...
343
  
ec98f3c3   梁灏   update Select
344
                  return this.visible && status;
29264399   梁灏   update Select
345
              },
c9b86944   Sergio Crisostomo   Refactor Select!
346
347
              showNotFoundLabel () {
                  const {loading, remote, selectOptions} = this;
bc348e7e   Sergio Crisostomo   adapt to auto-com...
348
                  return selectOptions && selectOptions.length === 0 && (!remote || (remote && !loading));
e355dd49   梁灏   add Select Component
349
              },
c9b86944   Sergio Crisostomo   Refactor Select!
350
              publicValue(){
b953cb71   FEI   bug fix
351
352
353
354
355
356
                  // 改变 labelInValue 实现,解决 bug:Select,label-in-value时,搜索、多选,先选一个,再选第二个,会替代第一个
                  // if (this.labelInValue){
                  //     return this.multiple ? this.values : this.values[0];
                  // } else {
                  //     return this.multiple ? this.values.map(option => option.value) : (this.values[0] || {}).value;
                  // }
c9b86944   Sergio Crisostomo   Refactor Select!
357
                      return this.multiple ? this.values.map(option => option.value) : (this.values[0] || {}).value;
e355dd49   梁灏   add Select Component
358
              },
c9b86944   Sergio Crisostomo   Refactor Select!
359
360
              canBeCleared(){
                  const uiStateMatch = this.hasMouseHoverHead || this.active;
9050e61c   Emilio Losada   fix(select): don'...
361
                  const qualifiesForClear = !this.multiple && !this.disabled && this.clearable;
c9b86944   Sergio Crisostomo   Refactor Select!
362
363
364
365
                  return uiStateMatch && qualifiesForClear && this.reset; // we return a function
              },
              selectOptions() {
                  const selectOptions = [];
06a74f9e   Sergio Crisostomo   Allow select to n...
366
                  const slotOptions = (this.slotOptions || []);
c9b86944   Sergio Crisostomo   Refactor Select!
367
368
                  let optionCounter = -1;
                  const currentIndex = this.focusIndex;
220161f5   Sergio Crisostomo   Clean up empty/nu...
369
                  const selectedValues = this.values.filter(Boolean).map(({value}) => value);
06a74f9e   Sergio Crisostomo   Allow select to n...
370
371
372
373
374
375
376
377
378
379
                  if (this.autoComplete) {
                      const copyChildren = (node, fn) => {
                          return {
                              ...node,
                              children: (node.children || []).map(fn).map(child => copyChildren(child, fn))
                          };
                      };
                      const autoCompleteOptions = extractOptions(slotOptions);
                      const selectedSlotOption = autoCompleteOptions[currentIndex];
  
aa21cdf9   Sergio Crisostomo   Process also shal...
380
                      return slotOptions.map(node => {
f8620d9a   Sergio Crisostomo   Fix autocomplete ...
381
                          if (node === selectedSlotOption || getNestedProperty(node, 'componentOptions.propsData.value') === this.value) return applyProp(node, 'isFocused', true);
aa21cdf9   Sergio Crisostomo   Process also shal...
382
383
384
385
386
                          return copyChildren(node, (child) => {
                              if (child !== selectedSlotOption) return child;
                              return applyProp(child, 'isFocused', true);
                          });
                      });
06a74f9e   Sergio Crisostomo   Allow select to n...
387
                  }
06a74f9e   Sergio Crisostomo   Allow select to n...
388
                  for (let option of slotOptions) {
e355dd49   梁灏   add Select Component
389
  
b6c069ca   Sergio Crisostomo   reset query if op...
390
391
                      const cOptions = option.componentOptions;
                      if (!cOptions) continue;
b6c069ca   Sergio Crisostomo   reset query if op...
392
393
                      if (cOptions.tag.match(optionGroupRegexp)){
                          let children = cOptions.children;
20719945   Aresn   Revert "Fix select"
394
  
c9b86944   Sergio Crisostomo   Refactor Select!
395
396
397
398
399
400
                          // remove filtered children
                          if (this.filterable){
                              children = children.filter(
                                  ({componentOptions}) => this.validateOption(componentOptions)
                              );
                          }
e355dd49   梁灏   add Select Component
401
  
1d8b4d13   梁灏   fix #4371 close #...
402
403
                          // fix #4371
                          children = children.map(opt => {
c9b86944   Sergio Crisostomo   Refactor Select!
404
405
406
                              optionCounter = optionCounter + 1;
                              return this.processOption(opt, selectedValues, optionCounter === currentIndex);
                          });
3e855e34   梁灏   fixed #46
407
  
1d8b4d13   梁灏   fix #4371 close #...
408
409
                          // keep the group if it still has children  // fix #4371
                          if (children.length > 0) selectOptions.push({...option,componentOptions:{...cOptions,children:children}});
c9b86944   Sergio Crisostomo   Refactor Select!
410
411
                      } else {
                          // ignore option if not passing filter
e7327532   vincentfintend   fix select
412
                          if (this.filterQueryChange) {
bef01c91   梁灏   it will make a ne...
413
414
415
                              const optionPassesFilter = this.filterable ? this.validateOption(cOptions) : option;
                              if (!optionPassesFilter) continue;
                          }
20719945   Aresn   Revert "Fix select"
416
  
c9b86944   Sergio Crisostomo   Refactor Select!
417
                          optionCounter = optionCounter + 1;
fdc71ffe   郑敏   reset the focus i...
418
                          selectOptions.push(this.processOption(option, selectedValues, optionCounter === currentIndex));
3e855e34   梁灏   fixed #46
419
                      }
e355dd49   梁灏   add Select Component
420
421
                  }
  
c9b86944   Sergio Crisostomo   Refactor Select!
422
                  return selectOptions;
e355dd49   梁灏   add Select Component
423
              },
c9b86944   Sergio Crisostomo   Refactor Select!
424
              flatOptions(){
06a74f9e   Sergio Crisostomo   Allow select to n...
425
                  return extractOptions(this.selectOptions);
c9b86944   Sergio Crisostomo   Refactor Select!
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
              },
              selectTabindex(){
                  return this.disabled || this.filterable ? -1 : 0;
              },
              remote(){
                  return typeof this.remoteMethod === 'function';
              }
          },
          methods: {
              setQuery(query){ // PUBLIC API
                  if (query) {
                      this.onQueryChange(query);
                      return;
                  }
                  if (query === null) {
                      this.onQueryChange('');
                      this.values = [];
0ffbd067   Aresn   Update select.vue
443
444
                      // #5620,修复清空搜索关键词后,重新搜索相同的关键词没有触发远程搜索
                      this.lastRemoteQuery = '';
e355dd49   梁灏   add Select Component
445
446
                  }
              },
c9b86944   Sergio Crisostomo   Refactor Select!
447
              clearSingleSelect(){ // PUBLIC API
b953cb71   FEI   bug fix
448
449
                  // fix #446
                  if (!this.multiple) this.$emit('input', '');
7dbde804   Sergio Crisostomo   add on-clear event
450
                  this.$emit('on-clear');
c3304bce   Sergio Crisostomo   correct unchanged...
451
                  this.hideMenu();
743f6e06   Sergio Crisostomo   Be more hard on t...
452
                  if (this.clearable) this.reset();
c9b86944   Sergio Crisostomo   Refactor Select!
453
454
455
              },
              getOptionData(value){
                  const option = this.flatOptions.find(({componentOptions}) => componentOptions.propsData.value === value);
7f63e58c   Sergio Crisostomo   Make possible for...
456
                  if (!option) return null;
9366c9a7   Sergio Crisostomo   Select improvemen...
457
                  const label = getOptionLabel(option);
b953cb71   FEI   bug fix
458
459
                  // 修复多选时,选项有disabled属性,选中项仍然能删除的 bug
                  const disabled = option.componentOptions.propsData.disabled;
c9b86944   Sergio Crisostomo   Refactor Select!
460
461
462
                  return {
                      value: value,
                      label: label,
b953cb71   FEI   bug fix
463
                      disabled: disabled
c9b86944   Sergio Crisostomo   Refactor Select!
464
465
466
                  };
              },
              getInitialValue(){
c741fa2f   Sergio Crisostomo   Use label as query
467
                  const {multiple, remote, value} = this;
c9b86944   Sergio Crisostomo   Refactor Select!
468
                  let initialValue = Array.isArray(value) ? value : [value];
31e4380d   luffyzhao   还是要保留multiple判断
469
                  if (!multiple && (typeof initialValue[0] === 'undefined' || (String(initialValue[0]).trim() === '' && !Number.isFinite(initialValue[0])))) initialValue = [];
c741fa2f   Sergio Crisostomo   Use label as query
470
471
472
473
                  if (remote && !multiple && value) {
                      const data = this.getOptionData(value);
                      this.query = data ? data.label : String(value);
                  }
b4138675   luffyzhao   select-binding-0
474
                  return initialValue.filter((item) => {
5c846d28   Sergio Crisostomo   Correct event pro...
475
                      return Boolean(item) || item === 0;
b4138675   luffyzhao   select-binding-0
476
                  });
c9b86944   Sergio Crisostomo   Refactor Select!
477
478
479
480
481
482
483
484
485
486
487
488
489
              },
              processOption(option, values, isFocused){
                  if (!option.componentOptions) return option;
                  const optionValue = option.componentOptions.propsData.value;
                  const disabled = option.componentOptions.propsData.disabled;
                  const isSelected = values.includes(optionValue);
  
                  const propsData = {
                      ...option.componentOptions.propsData,
                      selected: isSelected,
                      isFocused: isFocused,
                      disabled: typeof disabled === 'undefined' ? false : disabled !== false,
                  };
e355dd49   梁灏   add Select Component
490
  
c9b86944   Sergio Crisostomo   Refactor Select!
491
492
493
494
495
                  return {
                      ...option,
                      componentOptions: {
                          ...option.componentOptions,
                          propsData: propsData
e355dd49   梁灏   add Select Component
496
                      }
c9b86944   Sergio Crisostomo   Refactor Select!
497
498
                  };
              },
e355dd49   梁灏   add Select Component
499
  
db5110c2   Sergio Crisostomo   Allow wider searc...
500
              validateOption({children, elm, propsData}){
c9b86944   Sergio Crisostomo   Refactor Select!
501
502
                  const value = propsData.value;
                  const label = propsData.label || '';
db5110c2   Sergio Crisostomo   Allow wider searc...
503
504
505
506
                  const textContent = (elm && elm.textContent) || (children || []).reduce((str, node) => {
                      const nodeText = node.elm ? node.elm.textContent : node.text;
                      return `${str} ${nodeText}`;
                  }, '') || '';
c9b86944   Sergio Crisostomo   Refactor Select!
507
                  const stringValues = JSON.stringify([value, label, textContent]);
5266c905   Sergio Crisostomo   Trim label so we ...
508
                  const query = this.query.toLowerCase().trim();
c3304bce   Sergio Crisostomo   correct unchanged...
509
                  return stringValues.toLowerCase().includes(query);
e355dd49   梁灏   add Select Component
510
              },
d87ce40a   梁灏   update Select
511
  
c9b86944   Sergio Crisostomo   Refactor Select!
512
              toggleMenu (e, force) {
f8620d9a   Sergio Crisostomo   Fix autocomplete ...
513
                  if (this.disabled) {
c9b86944   Sergio Crisostomo   Refactor Select!
514
                      return false;
d87ce40a   梁灏   update Select
515
                  }
d87ce40a   梁灏   update Select
516
  
c9b86944   Sergio Crisostomo   Refactor Select!
517
518
519
                  this.visible = typeof force !== 'undefined' ? force : !this.visible;
                  if (this.visible){
                      this.dropDownWidth = this.$el.getBoundingClientRect().width;
cf753854   Sergio Crisostomo   Corrections after...
520
                      this.broadcast('Drop', 'on-update-popper');
e4ce9917   梁灏   update Select com...
521
                  }
e355dd49   梁灏   add Select Component
522
              },
c9b86944   Sergio Crisostomo   Refactor Select!
523
524
              hideMenu () {
                  this.toggleMenu(null, false);
31788df3   Sergio Crisostomo   Normalise behavio...
525
                  setTimeout(() => this.unchangedQuery = true, ANIMATION_TIMEOUT);
e355dd49   梁灏   add Select Component
526
              },
c9b86944   Sergio Crisostomo   Refactor Select!
527
528
              onClickOutside(event){
                  if (this.visible) {
4a9974f6   Graham Fairweather   Normalise v-ckick...
529
530
531
532
                      if (event.type === 'mousedown') {
                          event.preventDefault();
                          return;
                      }
c9b86944   Sergio Crisostomo   Refactor Select!
533
  
5c846d28   Sergio Crisostomo   Correct event pro...
534
535
536
537
538
539
540
541
                      if (this.transfer) {
                          const {$el} = this.$refs.dropdown;
                          if ($el === event.target || $el.contains(event.target)) {
                              return;
                          }
                      }
  
  
c9b86944   Sergio Crisostomo   Refactor Select!
542
                      if (this.filterable) {
ae7579e9   Sergio Crisostomo   Fix input getters...
543
                          const input = this.$el.querySelector('input[type="text"]');
c9b86944   Sergio Crisostomo   Refactor Select!
544
545
546
547
                          this.caretPosition = input.selectionStart;
                          this.$nextTick(() => {
                              const caretPosition = this.caretPosition === -1 ? input.value.length : this.caretPosition;
                              input.setSelectionRange(caretPosition, caretPosition);
e355dd49   梁灏   add Select Component
548
549
550
                          });
                      }
  
ae7579e9   Sergio Crisostomo   Fix input getters...
551
                      if (!this.autoComplete) event.stopPropagation();
c9b86944   Sergio Crisostomo   Refactor Select!
552
553
554
555
556
557
                      event.preventDefault();
                      this.hideMenu();
                      this.isFocused = true;
                  } else {
                      this.caretPosition = -1;
                      this.isFocused = false;
e355dd49   梁灏   add Select Component
558
559
                  }
              },
c9b86944   Sergio Crisostomo   Refactor Select!
560
              reset(){
743f6e06   Sergio Crisostomo   Be more hard on t...
561
562
                  this.query = '';
                  this.focusIndex = -1;
31788df3   Sergio Crisostomo   Normalise behavio...
563
                  this.unchangedQuery = true;
c9b86944   Sergio Crisostomo   Refactor Select!
564
                  this.values = [];
e7327532   vincentfintend   fix select
565
                  this.filterQueryChange = false;
e355dd49   梁灏   add Select Component
566
567
              },
              handleKeydown (e) {
c9b86944   Sergio Crisostomo   Refactor Select!
568
569
570
571
                  if (e.key === 'Backspace'){
                      return; // so we don't call preventDefault
                  }
  
e355dd49   梁灏   add Select Component
572
                  if (this.visible) {
c9b86944   Sergio Crisostomo   Refactor Select!
573
574
575
576
577
                      e.preventDefault();
                      if (e.key === 'Tab'){
                          e.stopPropagation();
                      }
  
e355dd49   梁灏   add Select Component
578
                      // Esc slide-up
c9b86944   Sergio Crisostomo   Refactor Select!
579
                      if (e.key === 'Escape') {
16fc6361   Sergio Crisostomo   stop propagation ...
580
                          e.stopPropagation();
e355dd49   梁灏   add Select Component
581
582
583
                          this.hideMenu();
                      }
                      // next
c9b86944   Sergio Crisostomo   Refactor Select!
584
585
                      if (e.key === 'ArrowUp') {
                          this.navigateOptions(-1);
e355dd49   梁灏   add Select Component
586
587
                      }
                      // prev
c9b86944   Sergio Crisostomo   Refactor Select!
588
589
                      if (e.key === 'ArrowDown') {
                          this.navigateOptions(1);
e355dd49   梁灏   add Select Component
590
591
                      }
                      // enter
7e3fc4a5   Sergio Crisostomo   close the menu if...
592
593
                      if (e.key === 'Enter') {
                          if (this.focusIndex === -1) return this.hideMenu();
c9b86944   Sergio Crisostomo   Refactor Select!
594
                          const optionComponent = this.flatOptions[this.focusIndex];
c87d7efb   Rookie_Zoe   fix a script erro...
595
596
597
598
599
600
601
602
  
                          // fix a script error when searching
                          if (optionComponent) {
                              const option = this.getOptionData(optionComponent.componentOptions.propsData.value);
                              this.onOptionClick(option);
                          } else {
                              this.hideMenu();
                          }
e355dd49   梁灏   add Select Component
603
                      }
c9b86944   Sergio Crisostomo   Refactor Select!
604
605
606
                  } else {
                      const keysThatCanOpenSelect = ['ArrowUp', 'ArrowDown'];
                      if (keysThatCanOpenSelect.includes(e.key)) this.toggleMenu(null, true);
e355dd49   梁灏   add Select Component
607
608
                  }
  
e355dd49   梁灏   add Select Component
609
  
c9b86944   Sergio Crisostomo   Refactor Select!
610
611
612
              },
              navigateOptions(direction){
                  const optionsLength = this.flatOptions.length - 1;
e4ebd304   梁灏   update Select com...
613
  
c9b86944   Sergio Crisostomo   Refactor Select!
614
615
616
                  let index = this.focusIndex + direction;
                  if (index < 0) index = optionsLength;
                  if (index > optionsLength) index = 0;
e355dd49   梁灏   add Select Component
617
  
c9b86944   Sergio Crisostomo   Refactor Select!
618
619
620
621
622
623
624
                  // find nearest option in case of disabled options in between
                  if (direction > 0){
                      let nearestActiveOption = -1;
                      for (let i = 0; i < this.flatOptions.length; i++){
                          const optionIsActive = !this.flatOptions[i].componentOptions.propsData.disabled;
                          if (optionIsActive) nearestActiveOption = i;
                          if (nearestActiveOption >= index) break;
e355dd49   梁灏   add Select Component
625
                      }
c9b86944   Sergio Crisostomo   Refactor Select!
626
627
628
629
630
631
632
                      index = nearestActiveOption;
                  } else {
                      let nearestActiveOption = this.flatOptions.length;
                      for (let i = optionsLength; i >= 0; i--){
                          const optionIsActive = !this.flatOptions[i].componentOptions.propsData.disabled;
                          if (optionIsActive) nearestActiveOption = i;
                          if (nearestActiveOption <= index) break;
e4ebd304   梁灏   update Select com...
633
                      }
c9b86944   Sergio Crisostomo   Refactor Select!
634
                      index = nearestActiveOption;
e355dd49   梁灏   add Select Component
635
                  }
e355dd49   梁灏   add Select Component
636
  
c9b86944   Sergio Crisostomo   Refactor Select!
637
                  this.focusIndex = index;
e4ebd304   梁灏   update Select com...
638
              },
c9b86944   Sergio Crisostomo   Refactor Select!
639
640
641
642
643
644
              onOptionClick(option) {
                  if (this.multiple){
  
                      // keep the query for remote select
                      if (this.remote) this.lastRemoteQuery = this.lastRemoteQuery || this.query;
                      else this.lastRemoteQuery = '';
e4ebd304   梁灏   update Select com...
645
  
c9b86944   Sergio Crisostomo   Refactor Select!
646
647
648
                      const valueIsSelected = this.values.find(({value}) => value === option.value);
                      if (valueIsSelected){
                          this.values = this.values.filter(({value}) => value !== option.value);
e4ebd304   梁灏   update Select com...
649
                      } else {
c9b86944   Sergio Crisostomo   Refactor Select!
650
                          this.values = this.values.concat(option);
e4ebd304   梁灏   update Select com...
651
                      }
c9b86944   Sergio Crisostomo   Refactor Select!
652
653
654
  
                      this.isFocused = true; // so we put back focus after clicking with mouse on option elements
                  } else {
5266c905   Sergio Crisostomo   Trim label so we ...
655
                      this.query = String(option.label).trim();
c9b86944   Sergio Crisostomo   Refactor Select!
656
657
658
659
660
                      this.values = [option];
                      this.lastRemoteQuery = '';
                      this.hideMenu();
                  }
  
52cfcd66   Sergio Crisostomo   Keep last selecte...
661
662
663
664
665
                  this.focusIndex = this.flatOptions.findIndex((opt) => {
                      if (!opt || !opt.componentOptions) return false;
                      return opt.componentOptions.propsData.value === option.value;
                  });
  
c9b86944   Sergio Crisostomo   Refactor Select!
666
                  if (this.filterable){
ae7579e9   Sergio Crisostomo   Fix input getters...
667
668
                      const inputField = this.$el.querySelector('input[type="text"]');
                      if (!this.autoComplete) this.$nextTick(() => inputField.focus());
e4ce9917   梁灏   update Select com...
669
                  }
88ef37f5   Aresn   fixed in multiple...
670
                  this.broadcast('Drop', 'on-update-popper');
ee5a8bcc   vincentfintend   change time
671
                  setTimeout(() => {
2bdeea65   梁灏   fix #4626 , close...
672
673
                      this.filterQueryChange = false;
                  }, ANIMATION_TIMEOUT);
3e855e34   梁灏   fixed #46
674
              },
c9b86944   Sergio Crisostomo   Refactor Select!
675
              onQueryChange(query) {
33c826ec   Rookie_Zoe   fix #5150
676
677
678
679
                  if (query.length > 0 && query !== this.query) {
                    // in 'AutoComplete', when set an initial value asynchronously,
                    // the 'dropdown list' should be stay hidden.
                    // [issue #5150]
5f25feca   Aresn   Update select.vue
680
681
682
683
684
685
686
687
688
                      if (this.autoComplete) {
                          let isInputFocused =
                              document.hasFocus &&
                              document.hasFocus() &&
                              document.activeElement === this.$el.querySelector('input');
                          this.visible = isInputFocused;
                      } else {
                          this.visible = true;
                      }
33c826ec   Rookie_Zoe   fix #5150
689
690
                  }
  
2f0b086d   梁灏   fixed #116
691
                  this.query = query;
c3304bce   Sergio Crisostomo   correct unchanged...
692
                  this.unchangedQuery = this.visible;
e7327532   vincentfintend   fix select
693
                  this.filterQueryChange = true;
9c3a3e7d   YikaJ   更新 Select 组件
694
              },
c9b86944   Sergio Crisostomo   Refactor Select!
695
696
697
              toggleHeaderFocus({type}){
                  if (this.disabled) {
                      return;
15b72d31   梁灏   fixed #566
698
                  }
c9b86944   Sergio Crisostomo   Refactor Select!
699
                  this.isFocused = type === 'focus';
98bf25b3   梁灏   fixed #1286
700
              },
c9b86944   Sergio Crisostomo   Refactor Select!
701
702
              updateSlotOptions(){
                  this.slotOptions = this.$slots.default;
73b01ee0   郑敏   fixed #3722 that ...
703
704
705
706
707
              },
              checkUpdateStatus() {
                  if (this.getInitialValue().length > 0 && this.selectOptions.length === 0) {
                      this.hasExpectedValue = true;
                  }
47f03c54   梁灏   fix #4273
708
              },
e355dd49   梁灏   add Select Component
709
          },
e355dd49   梁灏   add Select Component
710
          watch: {
c9b86944   Sergio Crisostomo   Refactor Select!
711
              value(value){
cd8f1be8   任珽   fixed bug #4466 #...
712
                  const {getInitialValue, getOptionData, publicValue, values} = this;
c9b86944   Sergio Crisostomo   Refactor Select!
713
  
73b01ee0   郑敏   fixed #3722 that ...
714
                  this.checkUpdateStatus();
9ccd8196   郑敏   fixed #3722
715
  
c9b86944   Sergio Crisostomo   Refactor Select!
716
                  if (value === '') this.values = [];
cd8f1be8   任珽   fixed bug #4466 #...
717
                  else if (checkValuesNotEqual(value,publicValue,values)) {
220161f5   Sergio Crisostomo   Clean up empty/nu...
718
                      this.$nextTick(() => this.values = getInitialValue().map(getOptionData).filter(Boolean));
b953cb71   FEI   bug fix
719
                      if (!this.multiple) this.dispatch('FormItem', 'on-form-change', this.publicValue);
e355dd49   梁灏   add Select Component
720
                  }
c9b86944   Sergio Crisostomo   Refactor Select!
721
722
723
724
              },
              values(now, before){
                  const newValue = JSON.stringify(now);
                  const oldValue = JSON.stringify(before);
9366c9a7   Sergio Crisostomo   Select improvemen...
725
                  // v-model is always just the value, event with labelInValue === true
b953cb71   FEI   bug fix
726
727
728
729
730
                  // const vModelValue = (this.publicValue && this.labelInValue === false) ?
                  //     (this.multiple ? this.publicValue.map(({value}) => value) : this.publicValue.value) :
                  //     this.publicValue;
                  // 改变 labelInValue 的实现:直接在 emit 时改数据
                  let vModelValue = this.publicValue;
9366c9a7   Sergio Crisostomo   Select improvemen...
731
                  const shouldEmitInput = newValue !== oldValue && vModelValue !== this.value;
c9b86944   Sergio Crisostomo   Refactor Select!
732
                  if (shouldEmitInput) {
b953cb71   FEI   bug fix
733
734
735
736
737
738
739
740
741
742
743
744
745
                      let emitValue = this.publicValue;
                      if (this.labelInValue) {
                          if (this.multiple) {
                              emitValue = this.values;
                          } else {
                              emitValue = this.values[0];
                          }
                      }
  
                      // Form 重置时,如果初始值是 null,也置为 null,而不是 []
                      if (Array.isArray(vModelValue) && !vModelValue.length && this.value === null) vModelValue = null;
                      else if (vModelValue === undefined && this.value === null) vModelValue = null;
  
c9b86944   Sergio Crisostomo   Refactor Select!
746
                      this.$emit('input', vModelValue); // to update v-model
b953cb71   FEI   bug fix
747
748
                      this.$emit('on-change', emitValue);
                      this.dispatch('FormItem', 'on-form-change', emitValue);
219e5c92   梁灏   fixed #957
749
                  }
e355dd49   梁灏   add Select Component
750
              },
c9b86944   Sergio Crisostomo   Refactor Select!
751
752
753
754
              query (query) {
                  this.$emit('on-query-change', query);
                  const {remoteMethod, lastRemoteQuery} = this;
                  const hasValidQuery = query !== '' && (query !== lastRemoteQuery || !lastRemoteQuery);
45bcc14d   Sergio Crisostomo   prevent calling r...
755
756
                  const shouldCallRemoteMethod = remoteMethod && hasValidQuery && !this.preventRemoteCall;
                  this.preventRemoteCall = false; // remove the flag
c9b86944   Sergio Crisostomo   Refactor Select!
757
758
759
760
761
762
763
764
765
  
                  if (shouldCallRemoteMethod){
                      this.focusIndex = -1;
                      const promise = this.remoteMethod(query);
                      this.initialLabel = '';
                      if (promise && promise.then){
                          promise.then(options => {
                              if (options) this.options = options;
                          });
b7cf983e   梁灏   update Select com...
766
                      }
e355dd49   梁灏   add Select Component
767
                  }
c9b86944   Sergio Crisostomo   Refactor Select!
768
                  if (query !== '' && this.remote) this.lastRemoteQuery = query;
e4ebd304   梁灏   update Select com...
769
              },
c9b86944   Sergio Crisostomo   Refactor Select!
770
771
772
773
774
775
              loading(state){
                  if (state === false){
                      this.updateSlotOptions();
                  }
              },
              isFocused(focused){
ae7579e9   Sergio Crisostomo   Fix input getters...
776
                  const el = this.filterable ? this.$el.querySelector('input[type="text"]') : this.$el;
c9b86944   Sergio Crisostomo   Refactor Select!
777
                  el[this.isFocused ? 'focus' : 'blur']();
d8bb1771   windywany   let select compon...
778
  
c9b86944   Sergio Crisostomo   Refactor Select!
779
780
781
                  // restore query value in filterable single selects
                  const [selectedOption] = this.values;
                  if (selectedOption && this.filterable && !this.multiple && !focused){
5266c905   Sergio Crisostomo   Trim label so we ...
782
                      const selectedLabel = String(selectedOption.label || selectedOption.value).trim();
9ca6671c   Sergio Crisostomo   Check for selecte...
783
                      if (selectedLabel && this.query !== selectedLabel) {
45bcc14d   Sergio Crisostomo   prevent calling r...
784
785
786
                          this.preventRemoteCall = true;
                          this.query = selectedLabel;
                      }
c9b86944   Sergio Crisostomo   Refactor Select!
787
788
789
                  }
              },
              focusIndex(index){
06a74f9e   Sergio Crisostomo   Allow select to n...
790
                  if (index < 0 || this.autoComplete) return;
c9b86944   Sergio Crisostomo   Refactor Select!
791
792
793
794
795
                  // update scroll
                  const optionValue = this.flatOptions[index].componentOptions.propsData.value;
                  const optionInstance = findChild(this, ({$options}) => {
                      return $options.componentName === 'select-item' && $options.propsData.value === optionValue;
                  });
e4ce9917   梁灏   update Select com...
796
  
c9b86944   Sergio Crisostomo   Refactor Select!
797
798
799
800
801
802
803
                  let bottomOverflowDistance = optionInstance.$el.getBoundingClientRect().bottom - this.$refs.dropdown.$el.getBoundingClientRect().bottom;
                  let topOverflowDistance = optionInstance.$el.getBoundingClientRect().top - this.$refs.dropdown.$el.getBoundingClientRect().top;
                  if (bottomOverflowDistance > 0) {
                      this.$refs.dropdown.$el.scrollTop += bottomOverflowDistance;
                  }
                  if (topOverflowDistance < 0) {
                      this.$refs.dropdown.$el.scrollTop += topOverflowDistance;
01b54e30   梁灏   Select support re...
804
                  }
cf753854   Sergio Crisostomo   Corrections after...
805
806
807
              },
              dropVisible(open){
                  this.broadcast('Drop', open ? 'on-update-popper' : 'on-destroy-popper');
7f63e58c   Sergio Crisostomo   Make possible for...
808
              },
f7f65c84   Sergio Crisostomo   reset query only ...
809
              selectOptions(){
0fb9d645   郑敏   fix bug #3795
810
811
812
813
                  if (this.hasExpectedValue && this.selectOptions.length > 0){
                      if (this.values.length === 0) {
                          this.values = this.getInitialValue();
                      }
220161f5   Sergio Crisostomo   Clean up empty/nu...
814
                      this.values = this.values.map(this.getOptionData).filter(Boolean);
7f63e58c   Sergio Crisostomo   Make possible for...
815
816
                      this.hasExpectedValue = false;
                  }
b6c069ca   Sergio Crisostomo   reset query if op...
817
  
f7f65c84   Sergio Crisostomo   reset query only ...
818
                  if (this.slotOptions && this.slotOptions.length === 0){
b6c069ca   Sergio Crisostomo   reset query if op...
819
820
                      this.query = '';
                  }
c87d7efb   Rookie_Zoe   fix a script erro...
821
  
2fa83db1   yJs   fix: dropdown位置自动...
822
823
                   // 当 dropdown 一开始在控件下部显示,而滚动页面后变成在上部显示,如果选项列表的长度由内部动态变更了(搜索情况)
                   // dropdown 的位置不会重新计算,需要重新计算
2bdeea65   梁灏   fix #4626 , close...
824
                  this.broadcast('Drop', 'on-update-popper');
1376a01a   Sergio Crisostomo   Emit on-open-chan...
825
826
827
              },
              visible(state){
                  this.$emit('on-open-change', state);
0f58570a   Rookie_Zoe   [Select, AutoComp...
828
829
              },
              slotOptions(options, old){
2bdeea65   梁灏   fix #4626 , close...
830
                  // #4626,当 Options 的 label 更新时,v-model 的值未更新
07201151   梁灏   fix #5090
831
832
833
834
835
836
                  // remote 下,调用 getInitialValue 有 bug
                  if (!this.remote) {
                      const values = this.getInitialValue();
                      if (this.flatOptions && this.flatOptions.length && values.length && !this.multiple) {
                          this.values = values.map(this.getOptionData).filter(Boolean);
                      }
2bdeea65   梁灏   fix #4626 , close...
837
838
                  }
  
0f58570a   Rookie_Zoe   [Select, AutoComp...
839
840
841
842
843
844
                  // 当 dropdown 在控件上部显示时,如果选项列表的长度由外部动态变更了,
                  // dropdown 的位置会有点问题,需要重新计算
                  if (options && old && options.length !== old.length) {
                      this.broadcast('Drop', 'on-update-popper');
                  }
              },
e355dd49   梁灏   add Select Component
845
          }
b0893113   jingsam   :art: add eslint
846
      };
d6342fe1   jingsam   fixed ie bug
847
  </script>