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.
- package/CHANGELOG.md +40 -25
- package/es/affix/index.js +8 -8
- package/es/age/index.js +10 -10
- package/es/alert/index.js +8 -8
- package/es/anchor/index.js +8 -8
- package/es/auto-complete/index.js +8 -8
- package/es/avatar/index.js +8 -8
- package/es/back-top/index.js +8 -8
- package/es/badge/index.js +8 -8
- package/es/base/index.js +8 -8
- package/es/big-table/index.js +1227 -363
- package/es/big-table/style.css +1 -1
- package/es/breadcrumb/index.js +8 -8
- package/es/button/index.js +33 -33
- package/es/calendar/index.js +8 -8
- package/es/captcha/index.js +3 -3
- package/es/card/index.js +8 -8
- package/es/card-reader-sdk/index.js +1 -1
- package/es/carousel/index.js +8 -8
- package/es/cascader/index.js +8 -8
- package/es/checkbox/index.js +9 -9
- package/es/col/index.js +8 -8
- package/es/collapse/index.js +8 -8
- package/es/color-picker/index.js +1 -1
- package/es/comment/index.js +8 -8
- package/es/config-provider/index.js +8 -8
- package/es/date-picker/index.js +8 -8
- package/es/descriptions/index.js +8 -8
- package/es/direct/index.js +16 -16
- package/es/divider/index.js +8 -8
- package/es/drag-layout/index.js +3 -3
- package/es/drawer/index.js +8 -8
- package/es/dropdown/index.js +8 -8
- package/es/editor/index.js +1 -1
- package/es/ellipsis/index.js +1 -1
- package/es/empty/index.js +8 -8
- package/es/fabric-chart/index.js +9 -9
- package/es/form/index.js +8 -8
- package/es/form-model/index.js +8 -8
- package/es/form-table/index.js +74 -74
- package/es/full-calendar/index.js +4 -4
- package/es/index/index.js +1718 -942
- package/es/index/style.css +1 -1
- package/es/input/index.js +9 -9
- package/es/input-number/index.js +8 -8
- package/es/layout/index.js +8 -8
- package/es/list/index.js +8 -8
- package/es/locale-provider/index.js +8 -8
- package/es/map/index.js +9 -9
- package/es/mentions/index.js +8 -8
- package/es/menu/index.js +8 -8
- package/es/message/index.js +8 -8
- package/es/multi-chat/index.js +76 -76
- package/es/multi-chat-client/index.js +70 -70
- package/es/multi-chat-history/index.js +4 -4
- package/es/multi-chat-record/index.js +14 -14
- package/es/multi-chat-setting/index.js +22 -22
- package/es/multi-chat-sip/index.js +1 -1
- package/es/notification/index.js +8 -8
- package/es/page-header/index.js +8 -8
- package/es/pagination/index.js +8 -8
- package/es/popconfirm/index.js +8 -8
- package/es/popover/index.js +8 -8
- package/es/progress/index.js +8 -8
- package/es/radio/index.js +9 -9
- package/es/rate/index.js +8 -8
- package/es/result/index.js +8 -8
- package/es/row/index.js +8 -8
- package/es/scale-container/index.js +9 -9
- package/es/scale-view/index.js +27 -27
- package/es/select/index.js +190 -13
- package/es/select-label/index.js +11 -11
- package/es/select-person/index.js +100 -94
- package/es/select-person/style.css +1 -1
- package/es/select-tag/index.js +4 -4
- package/es/shortcut-setter/index.js +10 -10
- package/es/skeleton/index.js +8 -8
- package/es/slider/index.js +8 -8
- package/es/slider-tree/index.js +9 -9
- package/es/space/index.js +8 -8
- package/es/spin/index.js +8 -8
- package/es/statistic/index.js +8 -8
- package/es/steps/index.js +8 -8
- package/es/switch/index.js +8 -8
- package/es/table-filter/index.js +281 -236
- package/es/table-filter/style.css +1 -1
- package/es/tabs/index.js +8 -8
- package/es/tag/index.js +9 -9
- package/es/time-picker/index.js +8 -8
- package/es/timeline/index.js +8 -8
- package/es/tooltip/index.js +8 -8
- package/es/transfer/index.js +8 -8
- package/es/tree/index.js +8 -8
- package/es/tree-select/index.js +8 -8
- package/es/upload/index.js +8 -8
- package/es/verification-code/index.js +2 -2
- package/lib/cui.common.js +1702 -943
- package/lib/cui.umd.js +1702 -943
- package/lib/cui.umd.min.js +26 -26
- package/package.json +1 -1
- package/packages/big-table/src/BigTable.vue +28 -83
- package/packages/big-table/src/assets/style/table-global.less +1 -155
- package/packages/big-table/src/components/HeaderFilter.vue +371 -0
- package/packages/big-table/src/utils/bigTableProps.js +2 -1
- package/packages/big-table/src/utils/headerFilter.js +183 -29
- package/packages/select/index.js +4 -1
- package/packages/select/src/PagerSelect/index.vue +92 -0
- package/packages/select-person/select-person.vue +12 -6
- package/packages/table-filter/src/mixins/wordBookutils.js +21 -4
- 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
|
-
|
|
125
|
-
this.
|
|
126
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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 (
|
|
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
|
-
|
|
391
|
-
|
|
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
|
-
|
|
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;
|
package/packages/select/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
859
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
1115
|
-
if(optionSetting0 &&
|
|
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) {
|