Commit 934078bf1801f74f98a79c25c832b2792b316c89

Authored by 刘汉宸
1 parent 3c1de253

fix: 修复Select组件逻辑异常

Showing 1 changed file with 37 additions and 26 deletions   Show diff stats
packages/select/index.vue
@@ -104,6 +104,10 @@ export default { @@ -104,6 +104,10 @@ export default {
104 }, 104 },
105 update: Boolean, 105 update: Boolean,
106 updateOnce: Boolean, 106 updateOnce: Boolean,
  107 + beforeQuery: {
  108 + type: Function,
  109 + default: () => true,
  110 + },
107 }, 111 },
108 data() { 112 data() {
109 return { 113 return {
@@ -127,7 +131,7 @@ export default { @@ -127,7 +131,7 @@ export default {
127 }, 131 },
128 options(val) { 132 options(val) {
129 if (val) { 133 if (val) {
130 - this.optionsCurrent = this.fixOptions([]); 134 + this.optionsCurrent = this.fixOptions(this.optionsDataSource);
131 } 135 }
132 }, 136 },
133 }, 137 },
@@ -207,35 +211,42 @@ export default { @@ -207,35 +211,42 @@ export default {
207 // 远程加载 211 // 远程加载
208 remoteMethod(val = '') { 212 remoteMethod(val = '') {
209 const searchText = val.trim(); 213 const searchText = val.trim();
210 - if (searchText.length >= this.triggerSize) {  
211 - this.loading = true;  
212 - let requestPrimise;  
213 - if (this.queryApi) {  
214 - requestPrimise = this.queryApi(searchText); 214 + const isQueryValid = this.beforeQuery(searchText);
  215 + if (isQueryValid) {
  216 + if (searchText.length >= this.triggerSize) {
  217 + this.loading = true;
  218 + let requestPrimise;
  219 + if (this.queryApi) {
  220 + requestPrimise = this.queryApi(searchText);
  221 + } else {
  222 + requestPrimise = this.request({
  223 + url: this.url,
  224 + method: 'get',
  225 + params: searchText ? { [this.searchKey]: searchText, ...this.params } : this.params,
  226 + ...this.config,
  227 + });
  228 + }
  229 + requestPrimise
  230 + .then(res => {
  231 + const response = res || {};
  232 + const options = this.fixOptions(response.result);
  233 + this.optionsDataSource = options;
  234 + this.optionsCurrent = options;
  235 + })
  236 + .finally(() => {
  237 + this.loading = false;
  238 + this.initing = false;
  239 + this.loaded = true;
  240 + });
215 } else { 241 } else {
216 - requestPrimise = this.request({  
217 - url: this.url,  
218 - method: 'get',  
219 - params: searchText ? { [this.searchKey]: searchText, ...this.params } : this.params,  
220 - ...this.config, 242 + this.optionsCurrent = this.optionsDataSource.filter(item => {
  243 + return item[this.labelKey].includes(val);
221 }); 244 });
222 } 245 }
223 - requestPrimise  
224 - .then(res => {  
225 - const response = res || {};  
226 - const options = this.fixOptions(response.result);  
227 - this.optionsDataSource = options;  
228 - this.optionsCurrent = options;  
229 - })  
230 - .finally(() => {  
231 - this.loading = false;  
232 - this.initing = false;  
233 - this.loaded = true;  
234 - });  
235 } else { 246 } else {
236 - this.optionsCurrent = this.optionsDataSource.filter(item => {  
237 - return item[this.labelKey].includes(val);  
238 - }); 247 + this.loading = false;
  248 + this.initing = false;
  249 + this.loaded = true;
239 } 250 }
240 }, 251 },
241 }, 252 },