cnhis-design-vue 2.2.1 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/CHANGELOG.md +40 -25
  2. package/es/affix/index.js +8 -8
  3. package/es/age/index.js +10 -10
  4. package/es/alert/index.js +8 -8
  5. package/es/anchor/index.js +8 -8
  6. package/es/auto-complete/index.js +8 -8
  7. package/es/avatar/index.js +8 -8
  8. package/es/back-top/index.js +8 -8
  9. package/es/badge/index.js +8 -8
  10. package/es/base/index.js +8 -8
  11. package/es/big-table/index.js +1227 -363
  12. package/es/big-table/style.css +1 -1
  13. package/es/breadcrumb/index.js +8 -8
  14. package/es/button/index.js +33 -33
  15. package/es/calendar/index.js +8 -8
  16. package/es/captcha/index.js +3 -3
  17. package/es/card/index.js +8 -8
  18. package/es/card-reader-sdk/index.js +1 -1
  19. package/es/carousel/index.js +8 -8
  20. package/es/cascader/index.js +8 -8
  21. package/es/checkbox/index.js +9 -9
  22. package/es/col/index.js +8 -8
  23. package/es/collapse/index.js +8 -8
  24. package/es/color-picker/index.js +1 -1
  25. package/es/comment/index.js +8 -8
  26. package/es/config-provider/index.js +8 -8
  27. package/es/date-picker/index.js +8 -8
  28. package/es/descriptions/index.js +8 -8
  29. package/es/direct/index.js +16 -16
  30. package/es/divider/index.js +8 -8
  31. package/es/drag-layout/index.js +3 -3
  32. package/es/drawer/index.js +8 -8
  33. package/es/dropdown/index.js +8 -8
  34. package/es/editor/index.js +1 -1
  35. package/es/ellipsis/index.js +1 -1
  36. package/es/empty/index.js +8 -8
  37. package/es/fabric-chart/index.js +9 -9
  38. package/es/form/index.js +8 -8
  39. package/es/form-model/index.js +8 -8
  40. package/es/form-table/index.js +74 -74
  41. package/es/full-calendar/index.js +4 -4
  42. package/es/index/index.js +1718 -942
  43. package/es/index/style.css +1 -1
  44. package/es/input/index.js +9 -9
  45. package/es/input-number/index.js +8 -8
  46. package/es/layout/index.js +8 -8
  47. package/es/list/index.js +8 -8
  48. package/es/locale-provider/index.js +8 -8
  49. package/es/map/index.js +9 -9
  50. package/es/mentions/index.js +8 -8
  51. package/es/menu/index.js +8 -8
  52. package/es/message/index.js +8 -8
  53. package/es/multi-chat/index.js +76 -76
  54. package/es/multi-chat-client/index.js +70 -70
  55. package/es/multi-chat-history/index.js +4 -4
  56. package/es/multi-chat-record/index.js +14 -14
  57. package/es/multi-chat-setting/index.js +22 -22
  58. package/es/multi-chat-sip/index.js +1 -1
  59. package/es/notification/index.js +8 -8
  60. package/es/page-header/index.js +8 -8
  61. package/es/pagination/index.js +8 -8
  62. package/es/popconfirm/index.js +8 -8
  63. package/es/popover/index.js +8 -8
  64. package/es/progress/index.js +8 -8
  65. package/es/radio/index.js +9 -9
  66. package/es/rate/index.js +8 -8
  67. package/es/result/index.js +8 -8
  68. package/es/row/index.js +8 -8
  69. package/es/scale-container/index.js +9 -9
  70. package/es/scale-view/index.js +27 -27
  71. package/es/select/index.js +190 -13
  72. package/es/select-label/index.js +11 -11
  73. package/es/select-person/index.js +100 -94
  74. package/es/select-person/style.css +1 -1
  75. package/es/select-tag/index.js +4 -4
  76. package/es/shortcut-setter/index.js +10 -10
  77. package/es/skeleton/index.js +8 -8
  78. package/es/slider/index.js +8 -8
  79. package/es/slider-tree/index.js +9 -9
  80. package/es/space/index.js +8 -8
  81. package/es/spin/index.js +8 -8
  82. package/es/statistic/index.js +8 -8
  83. package/es/steps/index.js +8 -8
  84. package/es/switch/index.js +8 -8
  85. package/es/table-filter/index.js +281 -236
  86. package/es/table-filter/style.css +1 -1
  87. package/es/tabs/index.js +8 -8
  88. package/es/tag/index.js +9 -9
  89. package/es/time-picker/index.js +8 -8
  90. package/es/timeline/index.js +8 -8
  91. package/es/tooltip/index.js +8 -8
  92. package/es/transfer/index.js +8 -8
  93. package/es/tree/index.js +8 -8
  94. package/es/tree-select/index.js +8 -8
  95. package/es/upload/index.js +8 -8
  96. package/es/verification-code/index.js +2 -2
  97. package/lib/cui.common.js +1702 -943
  98. package/lib/cui.umd.js +1702 -943
  99. package/lib/cui.umd.min.js +26 -26
  100. package/package.json +1 -1
  101. package/packages/big-table/src/BigTable.vue +28 -83
  102. package/packages/big-table/src/assets/style/table-global.less +1 -155
  103. package/packages/big-table/src/components/HeaderFilter.vue +371 -0
  104. package/packages/big-table/src/utils/bigTableProps.js +2 -1
  105. package/packages/big-table/src/utils/headerFilter.js +183 -29
  106. package/packages/select/index.js +4 -1
  107. package/packages/select/src/PagerSelect/index.vue +92 -0
  108. package/packages/select-person/select-person.vue +12 -6
  109. package/packages/table-filter/src/mixins/wordBookutils.js +21 -4
  110. package/packages/table-filter/src/quick-search/QuickSearch.vue +4 -3
@@ -1,4 +1,6 @@
1
1
  import vexutils from '@/utils/vexutils';
2
+ import { pick } from 'xe-utils';
3
+ import wordBookutils from '~/table-filter/src/mixins/wordBookutils';
2
4
  let beforeSearchConvert = [];
3
5
  const filterTopOffsetMap = {
4
6
  large: 28,
@@ -22,18 +24,41 @@ export default {
22
24
  props: {},
23
25
  data() {
24
26
  return {
25
- apiFilterMap: {}
27
+ apiFilterMap: {},
28
+ wordbookSearchDef: {
29
+ fetchingWordbook: false,
30
+ noData: false,
31
+ result: '',
32
+ resultMsg: '',
33
+ hasFieldList: false,
34
+ page: 1,
35
+ hasNextPage: false,
36
+ isRequest: false,
37
+ keyword: '',
38
+ total: 0,
39
+ asyncCount: 1
40
+ },
41
+ // 字典搜索的item保存, 同步给筛选外显, 不然可能没有下拉, 显示为value
42
+ filterCheckedOptionMap: {}
26
43
  };
27
44
  },
28
45
  computed: {
29
46
  isApiTable() {
30
47
  return this.tableDataType === 'API';
48
+ },
49
+ isLowCode() {
50
+ return this.libSource == 'lowCode';
31
51
  }
32
52
  },
33
53
  created() {
34
54
  this.handleFilterSeachDebounce = vexutils.debounce(this.handleFilterSeach, 100);
35
55
  },
36
56
  methods: {
57
+ isSingleItem(field) {
58
+ const { multiple } = field?.filterSettingMap || {};
59
+ let isSingle = (this.isApiTable && !multiple) || (!this.isApiTable && field.advanceOptionSetting == '0');
60
+ return isSingle;
61
+ },
37
62
  getOffsetLocation(element, cls, offsetKey) {
38
63
  let actualTop = element[offsetKey];
39
64
  let current = element.offsetParent;
@@ -50,6 +75,63 @@ export default {
50
75
  let resHeight = target.offsetHeight;
51
76
  return { resTop, resLeft, resWidth, resHeight };
52
77
  },
78
+ wordbookDataParams(wordbook) {
79
+ const { params, autograph, id, filterKeys, wordbookType = 'WORDBOOK' } = wordbook || {};
80
+ let resFieldKeys = Array.isArray(filterKeys) ? JSON.stringify(filterKeys) : filterKeys;
81
+ let obj = {
82
+ wordbookId: id,
83
+ fieldKeys: resFieldKeys,
84
+ wordbookType,
85
+ asyncCount: 1 // 开启性能模式
86
+ };
87
+ if (params) {
88
+ params.forEach(item => {
89
+ obj[item.p_name] = item.p_value;
90
+ });
91
+ }
92
+ if (autograph) {
93
+ obj.autograph = autograph;
94
+ }
95
+ return obj;
96
+ },
97
+ async getWordbookData(field, config) {
98
+ const { wordbookSearch = {} } = field || {};
99
+ Object.assign(wordbookSearch, { fetchingWordbook: true, noData: false, result: '', resultMsg: '', hasFieldList: false });
100
+ try {
101
+ const wordbook = field.settingObj?.wordbook;
102
+ let params = this.wordbookDataParams(wordbook);
103
+ if (config) {
104
+ Object.assign(params, config);
105
+ }
106
+ let { data } = (await this.requestGetWordbookData(params)) || {};
107
+ let { result, resultMsg, map } = data || {};
108
+ Object.assign(wordbookSearch, { fetchingWordbook: false, result, resultMsg });
109
+ if (!data || result !== 'SUCCESS') {
110
+ Object.assign(wordbookSearch, { result: 'ERROR', isRequest: true });
111
+ return;
112
+ }
113
+ data.reqParams = params;
114
+ if (!map?.rows?.length) {
115
+ Object.assign(wordbookSearch, { result: 'ERROR', isRequest: true, noData: true, resultMsg: '暂无数据' });
116
+ return;
117
+ }
118
+ let configObj = {
119
+ isHeader: true,
120
+ headerSearchPageConfig: pick(wordbookSearch, ['page', 'hasNextPage', 'isRequest', 'keyword', 'asyncCount'])
121
+ };
122
+ const { rows, rowsMap, hasFieldList, searchPageConfig } = wordBookutils.handleWordbookData(field, data, params, configObj);
123
+ field.filterSettingMap.filterOptions = rows;
124
+ field.filterSettingMap.filterOptionsMap = rowsMap;
125
+ Object.assign(wordbookSearch, { hasFieldList, ...searchPageConfig });
126
+ } catch (e) {
127
+ console.log(e, '----e');
128
+ Object.assign(wordbookSearch, { fetchingWordbook: false, isRequest: true, result: 'ERROR' });
129
+ }
130
+ },
131
+ handleStaticOptions(field, columnName) {
132
+ this.handleShowFilterOptions(field);
133
+ this.handleShowFilterCheck(field, columnName);
134
+ },
53
135
  handleShowFilterOptions(field) {
54
136
  const { filterSettingMap = {}, setting } = field || {};
55
137
  let originOptions = setting?.showSetting || [];
@@ -60,7 +142,7 @@ export default {
60
142
  filterSettingMap.filterOptions = originOptions;
61
143
  },
62
144
  handleShowFilterCheck(field, columnName) {
63
- let { filterOptions } = field?.filterSettingMap || {};
145
+ let { filterOptions, filterType } = field?.filterSettingMap || {};
64
146
  let len = this.filterFields[columnName]?.CONVERT?.length;
65
147
  let allLen = filterOptions?.length || field.setting?.showSetting?.length;
66
148
  field.checkAll = len === allLen;
@@ -121,9 +203,13 @@ export default {
121
203
  field.visible = !field.visible;
122
204
  field.searchFilterText = '';
123
205
 
124
- // field.filterSettingMap.filterOptions =field.setting?.showSetting || [];
125
- this.handleShowFilterOptions(field);
126
- this.handleShowFilterCheck(field, columnName);
206
+ let isWordbook = field.filterSettingMap?.isVaildWordbook;
207
+ this.filterCheckedOptionMap[columnName] = {};
208
+ if (isWordbook) {
209
+ this.getWordbookData(field);
210
+ } else {
211
+ this.handleStaticOptions(field, columnName);
212
+ }
127
213
  },
128
214
  handlefilterBoxClickSort(sort, field) {
129
215
  if (field.filterSort === sort) {
@@ -136,9 +222,7 @@ export default {
136
222
  field.visible = false;
137
223
  this.$emit('sortChange', { prop: field.columnName, order: sort });
138
224
  },
139
- handleFilterSeach(val, item) {
140
- let field = this.filterFields[item.columnName];
141
- if (!field) return;
225
+ handleFilterSeachStatic(val, field) {
142
226
  field.searchFilterText = val;
143
227
  let { filterOptions } = field?.filterSettingMap || {};
144
228
  let options = filterOptions || field.setting?.showSetting;
@@ -150,10 +234,7 @@ export default {
150
234
  field.checkAll = cLen === allLen;
151
235
  field.indeterminate = !!cLen && cLen !== allLen;
152
236
 
153
- field.filterSettingMap &&
154
- Object.assign(field.filterSettingMap, {
155
- filterOptions: originOptions
156
- });
237
+ field.filterSettingMap && Object.assign(field.filterSettingMap, { filterOptions: originOptions });
157
238
  return;
158
239
  }
159
240
 
@@ -167,13 +248,24 @@ export default {
167
248
 
168
249
  field.searchFilterCONVERT = curFilterOptions.filter(item => field.CONVERT.includes(item.value)).map(item => item.value);
169
250
 
170
- field.filterSettingMap &&
171
- Object.assign(field.filterSettingMap, {
172
- filterOptions: curFilterOptions
173
- });
251
+ field.filterSettingMap && Object.assign(field.filterSettingMap, { filterOptions: curFilterOptions });
174
252
 
175
253
  beforeSearchConvert = field.searchFilterCONVERT;
176
254
  },
255
+ handleFilterSeachWordbook(val, field, config = {}) {
256
+ let otherParmas = { keyword: val, ...config };
257
+ this.getWordbookData(field, otherParmas);
258
+ },
259
+ handleFilterSeach(val, item, config) {
260
+ let field = this.filterFields[item.columnName];
261
+ if (!field) return;
262
+ let isWordbook = field.filterSettingMap?.isVaildWordbook;
263
+ if (isWordbook) {
264
+ this.handleFilterSeachWordbook(val, field, config);
265
+ } else {
266
+ this.handleFilterSeachStatic(val, field);
267
+ }
268
+ },
177
269
  handleFilterChangeAll(e, field) {
178
270
  this.reScrollFilterWrap();
179
271
  let checked = e.target.checked;
@@ -192,7 +284,7 @@ export default {
192
284
 
193
285
  handleFilterChange(newValue, name, field) {
194
286
  this.reScrollFilterWrap();
195
- let value = newValue;
287
+ let value = newValue || [];
196
288
  value = this.getSingleConvert(value, this.filterFields[name].CONVERT, field);
197
289
  let { filterOptions } = field?.filterSettingMap || {};
198
290
  let allLen = filterOptions?.length || field.setting?.showSetting?.length;
@@ -201,8 +293,7 @@ export default {
201
293
  field.checkAll = value.length === allLen;
202
294
  field.indeterminate = !!value.length && value.length !== allLen;
203
295
  },
204
- handleFilterSearchChange(value, columnName, field) {
205
- this.reScrollFilterWrap();
296
+ handleFilterSearchChangeStatic(value, columnName, field) {
206
297
  /* filter-check-group value更新 触发 主check-group value同步更新 */
207
298
  let curField = this.filterFields[columnName];
208
299
  let isAdd = beforeSearchConvert.length < value.length;
@@ -231,21 +322,29 @@ export default {
231
322
  field.searchFilterCONVERT = newValue;
232
323
  beforeSearchConvert = vexutils.clone(newValue, true);
233
324
  },
325
+ handleFilterSearchChange(value, columnName, field) {
326
+ this.reScrollFilterWrap();
327
+ this.handleFilterSearchChangeStatic(value, columnName, field);
328
+ },
234
329
  handleFilterClearAll(field) {
235
330
  field.indeterminate = false;
236
331
  field.checkAll = false;
237
332
  this.filterFields[field.columnName].CONVERT = [];
238
333
  if (field.searchFilterCONVERT) {
239
334
  this.filterFields[field.columnName].searchFilterCONVERT = [];
335
+ this.filterFields[field.columnName].wordbookSearch = { ...this.wordbookSearchDef };
240
336
  }
241
337
  this.handleFilter(field);
242
338
  },
243
- handleCancelFilter() {
339
+ handleCancelFilter(field) {
244
340
  this.hideFilterWrap();
245
341
  },
246
342
  handleFilter(field) {
247
343
  let conObj = this.mergeConObjFn();
248
- this.$emit('onSave', conObj, false, [], [], { isBigTable: true });
344
+ let checkedOptionObj = this.filterCheckedOptionMap[field.columnName] || {};
345
+ let config = { isBigTable: true, checkedOptionObj };
346
+
347
+ this.$emit('onSave', conObj, false, [], [], config);
249
348
  field.visible = false;
250
349
  },
251
350
  handleFilterEmpty(field, columnName) {
@@ -261,7 +360,7 @@ export default {
261
360
  let conObj = this.getConObj(fields);
262
361
  let mergeConObj = [...conObj];
263
362
  // 兼容二次开发平台逻辑
264
- if (this.libSource != 'lowCode') {
363
+ if (!this.isLowCode) {
265
364
  let qqConObj = this.tableParams.qqConObj ? JSON.parse(this.tableParams.qqConObj) : [];
266
365
 
267
366
  qqConObj.forEach(i => {
@@ -282,9 +381,20 @@ export default {
282
381
  let conObj = [];
283
382
  for (let i = 0; i < arr.length; i++) {
284
383
  let item = arr[i];
384
+ const { isVaildWordbook } = item.filterSettingMap || {};
285
385
  let value = '';
286
386
  let limit_date = '';
287
- if (item.EQ || item.CL) {
387
+ if (isVaildWordbook && item.CONVERT) {
388
+ if (this.isApiTable) {
389
+ value = item.CONVERT;
390
+ } else {
391
+ let cVal = item.CONVERT;
392
+ if (!Array.isArray(cVal)) {
393
+ cVal = [cVal];
394
+ }
395
+ value = cVal.join('|#|');
396
+ }
397
+ } else if (item.EQ || item.CL) {
288
398
  value = item.EQ || item.CL;
289
399
  if (item.settingObj?.attr === 'PERCENTAGE') {
290
400
  value = Number(value) / 100;
@@ -379,22 +489,66 @@ export default {
379
489
  checkboxWrapEl.scrollTop = tableScrollTop;
380
490
  });
381
491
  },
492
+ handleWordbookCheckedOptions(field, value, config) {
493
+ const { isVaildWordbook, filterOptionsMap } = field.filterSettingMap || {};
494
+ if (!isVaildWordbook) return;
495
+ let fieldChecked = this.filterCheckedOptionMap[field.columnName];
496
+ if (!fieldChecked) return;
497
+ const { isSingle, curPageOldVal } = config || {};
498
+ if (isSingle) {
499
+ if (!value?.length) {
500
+ this.filterCheckedOptionMap[field.columnName] = {};
501
+ return;
502
+ }
503
+ let fKey = value[0];
504
+ let fOp = filterOptionsMap[fKey];
505
+ fOp && (this.filterCheckedOptionMap[field.columnName][fKey] = fOp);
506
+ return;
507
+ }
508
+ // 无curPageOldVal 有value 代表新增了
509
+ if (!curPageOldVal.length && value.length) {
510
+ value.forEach(v => filterOptionsMap[v] && (this.filterCheckedOptionMap[field.columnName][v] = filterOptionsMap[v]));
511
+ return;
512
+ }
513
+ // 有curPageOldVal 无value 代表删除了
514
+ if (curPageOldVal.length && !value.length) {
515
+ curPageOldVal.forEach(v => delete this.filterCheckedOptionMap[field.columnName][v]);
516
+ return;
517
+ }
518
+ // 有curPageOldVal中有, value中无, 删除curPageOldVal 设置value;
519
+ let delVal = curPageOldVal.filter(v => !value.includes?.(v));
520
+ if (delVal.length) {
521
+ delVal.forEach(v => delete this.filterCheckedOptionMap[field.columnName][v]);
522
+ }
523
+ if (value.length) {
524
+ value.forEach(v => filterOptionsMap[v] && (this.filterCheckedOptionMap[field.columnName][v] = filterOptionsMap[v]));
525
+ }
526
+ },
382
527
 
383
528
  /**
384
529
  * 映射值如果配置了单选,限制只能选一个
385
530
  */
386
- getSingleConvert(value, old, field) {
531
+ getSingleConvert(value, old = [], field) {
387
532
  let cValue = value;
533
+ const { isVaildWordbook, filterOptions } = field.filterSettingMap || {};
388
534
  if (!Array.isArray(old) || !Array.isArray(value)) return cValue;
389
535
  // 单选
390
- const { multiple } = field?.filterSettingMap || {};
391
- let isSingle = (this.isApiTable && !multiple) || (!this.isApiTable && field.advanceOptionSetting == '0');
392
- if (isSingle && (value?.length || 0) > 1) {
536
+ let isSingle = this.isSingleItem(field);
537
+ if (isSingle && value?.length > 1) {
393
538
  cValue = cValue.filter(v => !old?.includes?.(v));
394
539
  if (cValue.length > 1) {
395
- return [cValue[0]];
540
+ cValue = [cValue[0]];
396
541
  }
397
542
  }
543
+ // wordbook 可能分页选择了
544
+ let curPageOldVal = [];
545
+ if (isVaildWordbook && !isSingle) {
546
+ curPageOldVal = old.filter(v => filterOptions.find(f => f.value === v));
547
+ let noCurPageOldVal = old.filter(v => !filterOptions.find(f => f.value === v));
548
+ // 有可能是合并另一页, 有可能是取消选中 把当前页的过滤出来, 其它都是需要合并的, 当前页的留下value, merge filter old
549
+ cValue = [...new Set([...noCurPageOldVal, ...value])];
550
+ }
551
+ this.handleWordbookCheckedOptions(field, cValue, { isSingle, curPageOldVal });
398
552
  return cValue;
399
553
  },
400
554
  onmousedownFunc(e) {
@@ -466,7 +620,7 @@ export default {
466
620
  this.$set(el, 'setting', setting);
467
621
  }
468
622
  const { showSetting, attr, labelType, wordbook } = setting || {};
469
- const { filterField, headerFilterKey } = filterSettingMap || {};
623
+ const { filterField, headerFilterKey, isWordbook } = filterSettingMap || {};
470
624
  // 处理api表头筛选映射
471
625
  if (this.isApiTable && filterField && headerFilterKey) {
472
626
  this.apiFilterMap[headerFilterKey] = columnName;
@@ -5,6 +5,7 @@ import Option from './src/Option';
5
5
  import OptGroup from './src/OptGroup';
6
6
  import CustomSelect from './src/CustomSelect/index';
7
7
  import TableSelect from './src/TableSelect/index';
8
+ import PagerSelect from './src/PagerSelect/index';
8
9
 
9
10
  // 为组件提供 install 安装方法,供按需引入
10
11
  Select.install = function(Vue) {
@@ -14,13 +15,15 @@ Select.install = function(Vue) {
14
15
  Vue.component(OptGroup.name, OptGroup);
15
16
  Vue.component(CustomSelect.name, CustomSelect);
16
17
  Vue.component(TableSelect.name, TableSelect);
18
+ Vue.component(PagerSelect.name, PagerSelect);
17
19
  };
18
20
 
19
21
  Object.assign(Select, {
20
22
  Option,
21
23
  OptGroup,
22
24
  CustomSelect,
23
- TableSelect
25
+ TableSelect,
26
+ PagerSelect
24
27
  });
25
28
 
26
29
  // 默认导出组件
@@ -0,0 +1,92 @@
1
+ <template>
2
+ <a-select v-on="$listeners" v-bind="$attrs" :filter-option="false" show-search @search="debounceSearch" @dropdownVisibleChange="dropdownVisibleChange">
3
+ <div slot="dropdownRender" slot-scope="menu" @change="handleChange">
4
+ <a-spin style="width: 100%;margin: 100px 0 100px" v-if="fetching" />
5
+ <template v-else>
6
+ <v-nodes :vnodes="menu" />
7
+ <select-pages v-if="pagerInfo.total > 1" :searchPageConfig="pagerInfo" :handleSearchChangePage="handlePager" />
8
+ </template>
9
+ </div>
10
+
11
+ <a-select-option v-for="item in option" :key="item.value" :value="item.value" :disabled="item.disabled">{{ item.title }}</a-select-option>
12
+ </a-select>
13
+ </template>
14
+ <script>
15
+ /**
16
+ * @author ruanlin
17
+ * @desc 根据reuseapp项目功能定制
18
+ * @time 2021-06-17
19
+ */
20
+ import Vue from 'vue';
21
+ import { Select, Spin } from 'ant-design-vue';
22
+ import create from '@/core/create';
23
+ import selectPages from '@/component/select-pages';
24
+ import vexutils from '@/utils/vexutils';
25
+
26
+ export default create({
27
+ name: 'pager-select',
28
+ props: {
29
+ queryOption: {
30
+ type: Function,
31
+ require: true
32
+ }
33
+ },
34
+ beforeCreate() {
35
+ Vue.use(Select).use(Spin);
36
+ },
37
+ components: {
38
+ VNodes: {
39
+ functional: true,
40
+ render: (h, ctx) => {
41
+ return ctx.props.vnodes;
42
+ }
43
+ },
44
+ selectPages
45
+ },
46
+ data() {
47
+ this.debounceSearch = vexutils.debounce(this.debounceSearch, 800);
48
+ this.keyword = '';
49
+ return {
50
+ fetching: false,
51
+ option: [],
52
+ pagerInfo: { page: 1, total: 1 }
53
+ };
54
+ },
55
+ mounted() {},
56
+ methods: {
57
+ async debounceSearch(value) {
58
+ this.keyword = value;
59
+ this.pagerInfo.page = 1;
60
+ this.handleQuery();
61
+ },
62
+ handlePager(type) {
63
+ type == 'prev' ? this.pagerInfo.page-- : this.pagerInfo.page++;
64
+ this.handleQuery();
65
+ },
66
+ dropdownVisibleChange(open) {
67
+ if (open) {
68
+ this.keyword = '';
69
+ Object.assign(this.pagerInfo, {
70
+ page: 1,
71
+ total: 1
72
+ });
73
+ this.handleQuery();
74
+ }
75
+ },
76
+ async handleQuery() {
77
+ this.fetching = true;
78
+ try {
79
+ const _data = await this.queryOption({ page: this.pagerInfo.page, keyword: this.keyword });
80
+ const { data = [], total } = _data || {};
81
+ this.option = data;
82
+ this.pagerInfo.total = total;
83
+ } catch (error) {
84
+ console.log(error);
85
+ } finally {
86
+ this.fetching = false;
87
+ }
88
+ }
89
+ }
90
+ });
91
+ </script>
92
+ <style lang="less" scoped></style>
@@ -849,16 +849,22 @@ export default create({
849
849
 
850
850
  // 暂存实际可选节点arr
851
851
  generateDataList(data, dataList) {
852
- for (let i = 0; i < data.length; i++) {
853
- const node = data[i];
852
+ vexutils.eachTree(data, node => {
854
853
  dataList.push({
855
854
  parentId: this.getParentId(node),
856
855
  ...node
857
856
  });
858
- if (node.children) {
859
- this.generateDataList(node.children, dataList);
860
- }
861
- }
857
+ });
858
+ // for (let i = 0; i < data.length; i++) {
859
+ // const node = data[i];
860
+ // dataList.push({
861
+ // parentId: this.getParentId(node),
862
+ // ...node
863
+ // });
864
+ // if (node.children) {
865
+ // this.generateDataList(node.children, dataList);
866
+ // }
867
+ // }
862
868
  },
863
869
 
864
870
  // 获取匹配搜索节点arr
@@ -6,7 +6,7 @@ const SYMBOL = '<&=&>';
6
6
  */
7
7
  const formatWordbookDataUtils = {
8
8
  hasArray: arr => Array.isArray(arr) && arr.length > 0,
9
- handleWordbookData(item, data, params) {
9
+ handleWordbookData(item, data, params, configObj) {
10
10
  // this.$set(item, "hasFieldList", false);
11
11
  let { setting = {} } = item;
12
12
  let { showKeys = [], defaultValue, defaultValueTitle } = setting.wordbook || {};
@@ -15,6 +15,7 @@ const formatWordbookDataUtils = {
15
15
  let resArr = [];
16
16
  let hasFieldList = false;
17
17
  let searchPageConfig = {};
18
+ const { isHeader, headerSearchPageConfig } = configObj || {};
18
19
 
19
20
  if (defaultValue && defaultValueTitle) {
20
21
  // 保存的时候值会变成字符串, 如果是数字的话回显会出问题, 这里全部处理成字符串
@@ -25,12 +26,16 @@ const formatWordbookDataUtils = {
25
26
  myName: defaultValue,
26
27
  showKeys: defaultValueTitle
27
28
  };
29
+ if (isHeader) {
30
+ Object.assign(defaultItem, { _show_title: defaultValueTitle, value: defaultValue });
31
+ }
28
32
  }
29
33
  if (data && data.result) {
30
34
  let reqParams = data?.reqParams || {};
31
35
 
32
36
  let { page, hasNextPage, fieldList } = data.map;
33
- searchPageConfig = Object.assign(item.searchPageConfig, {
37
+ let oldSearchPageConfig = isHeader ? headerSearchPageConfig : item.searchPageConfig;
38
+ searchPageConfig = Object.assign(oldSearchPageConfig, {
34
39
  page,
35
40
  hasNextPage,
36
41
  isRequest: true,
@@ -49,10 +54,16 @@ const formatWordbookDataUtils = {
49
54
  if (typeof name === 'number') {
50
55
  name = String(name);
51
56
  }
57
+ const _show_title = showKeysStr.join(' ');
58
+
59
+ if (isHeader) {
60
+ delete row.label;
61
+ Object.assign(row, { value: name });
62
+ }
52
63
  return Object.assign(row, {
53
64
  myName: name,
54
65
  showKeys: showKeysStr.join(SYMBOL),
55
- _show_title: showKeysStr.join(' ')
66
+ _show_title
56
67
  });
57
68
  });
58
69
  // 数组对象去重
@@ -64,7 +75,7 @@ const formatWordbookDataUtils = {
64
75
  if (defaultItem) {
65
76
  resArr.unshift(defaultItem);
66
77
  }
67
- if (formatWordbookDataUtils.hasArray(fieldList) && formatWordbookDataUtils.hasArray(showKeys) && showKeys.length > 1) {
78
+ if (!isHeader && formatWordbookDataUtils.hasArray(fieldList) && formatWordbookDataUtils.hasArray(showKeys) && showKeys.length > 1) {
68
79
  let t = formatWordbookDataUtils.getTitleHeader(fieldList, showKeys);
69
80
  // 保存的时候值会变成字符串, 如果是数字的话回显会出问题, 这里全部处理成字符串
70
81
  if (typeof t === 'number') {
@@ -81,8 +92,14 @@ const formatWordbookDataUtils = {
81
92
  // this.$set(item, "dataSource", resArr);
82
93
  }
83
94
 
95
+ let rowsMap = {};
96
+ resArr.map(row => {
97
+ rowsMap[row.myName] = row;
98
+ });
99
+
84
100
  return {
85
101
  rows: resArr,
102
+ rowsMap,
86
103
  hasFieldList,
87
104
  searchPageConfig
88
105
  };
@@ -1111,8 +1111,8 @@ export default create({
1111
1111
  /**
1112
1112
  * 映射方式的单选模式
1113
1113
  */
1114
- let isCheck = optionSetting0 && showSetting.length && showSetting.length < 10
1115
- if(optionSetting0 && !isCheck){
1114
+ let isCheck = optionSetting0 && showSetting.length
1115
+ if(optionSetting0 && isCheck){
1116
1116
  this.$set(el, "com", "SelectMui");
1117
1117
  this.$set(el, "comType", "SelectMui");
1118
1118
  const labelList = el.setting.showSetting.map(i => {
@@ -1462,7 +1462,8 @@ export default create({
1462
1462
  return item;
1463
1463
  });
1464
1464
  value = tempConvert
1465
- if (optionSetting0) {
1465
+ if (optionSetting0 && item.con === 'CONVERT') {
1466
+ // CONVERT 类型 值都是数据类型 => 付名城 2024.8.13
1466
1467
  value = tempConvert[0]
1467
1468
  }
1468
1469
  } else if (item.DATE && !item.AGEAttr) {