vxe-table 4.16.19 → 4.17.0-beta.0
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/es/grid/src/grid.js +8 -0
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/filter/hook.js +108 -58
- package/es/table/module/filter/panel.js +45 -25
- package/es/table/render/index.js +93 -9
- package/es/table/src/cell.js +9 -3
- package/es/table/src/column.js +2 -0
- package/es/table/src/columnInfo.js +14 -6
- package/es/table/src/header.js +118 -3
- package/es/table/src/props.js +2 -0
- package/es/table/src/table.js +29 -26
- package/es/table/src/util.js +8 -5
- package/es/table/style.css +2 -1
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +4 -1
- package/es/ui/src/log.js +1 -1
- package/es/ui/src/vn.js +11 -0
- package/es/vxe-table/style.css +2 -1
- package/es/vxe-table/style.min.css +1 -1
- package/lib/grid/src/grid.js +12 -0
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +525 -137
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/filter/hook.js +123 -66
- package/lib/table/module/filter/hook.min.js +1 -1
- package/lib/table/module/filter/panel.js +59 -26
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/render/index.js +109 -8
- package/lib/table/render/index.min.js +1 -1
- package/lib/table/src/cell.js +15 -3
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/column.js +2 -0
- package/lib/table/src/column.min.js +1 -1
- package/lib/table/src/columnInfo.js +18 -5
- package/lib/table/src/columnInfo.min.js +1 -1
- package/lib/table/src/header.js +133 -3
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/props.js +2 -0
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +10 -10
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +18 -14
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +2 -1
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +4 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/ui/src/vn.js +12 -0
- package/lib/ui/src/vn.min.js +1 -1
- package/lib/vxe-table/style/style.css +2 -1
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/grid/src/grid.ts +8 -0
- package/packages/table/module/filter/hook.ts +110 -64
- package/packages/table/module/filter/panel.ts +56 -28
- package/packages/table/render/index.ts +110 -15
- package/packages/table/src/cell.ts +9 -3
- package/packages/table/src/column.ts +2 -0
- package/packages/table/src/columnInfo.ts +19 -7
- package/packages/table/src/header.ts +137 -8
- package/packages/table/src/props.ts +2 -0
- package/packages/table/src/table.ts +30 -26
- package/packages/table/src/util.ts +8 -5
- package/packages/ui/index.ts +3 -0
- package/packages/ui/src/vn.ts +12 -0
- package/styles/components/table-module/filter.scss +4 -1
- /package/es/{iconfont.1758609514163.ttf → iconfont.1759031444881.ttf} +0 -0
- /package/es/{iconfont.1758609514163.woff → iconfont.1759031444881.woff} +0 -0
- /package/es/{iconfont.1758609514163.woff2 → iconfont.1759031444881.woff2} +0 -0
- /package/lib/{iconfont.1758609514163.ttf → iconfont.1759031444881.ttf} +0 -0
- /package/lib/{iconfont.1758609514163.woff → iconfont.1759031444881.woff} +0 -0
- /package/lib/{iconfont.1758609514163.woff2 → iconfont.1759031444881.woff2} +0 -0
|
@@ -30,57 +30,19 @@ hooks.add('tableFilterModule', {
|
|
|
30
30
|
computeFilterOpts,
|
|
31
31
|
computeMouseOpts
|
|
32
32
|
} = $xeTable.getComputeMaps();
|
|
33
|
-
// 确认筛选
|
|
34
|
-
const handleFilterConfirmFilter = evnt => {
|
|
35
|
-
const {
|
|
36
|
-
filterStore
|
|
37
|
-
} = reactData;
|
|
38
|
-
filterStore.options.forEach(option => {
|
|
39
|
-
option.checked = option._checked;
|
|
40
|
-
});
|
|
41
|
-
$xeTable.confirmFilterEvent(evnt);
|
|
42
|
-
};
|
|
43
|
-
// (单选)筛选发生改变
|
|
44
|
-
const changeRadioOption = (evnt, checked, item) => {
|
|
45
|
-
const {
|
|
46
|
-
filterStore
|
|
47
|
-
} = reactData;
|
|
48
|
-
filterStore.options.forEach(option => {
|
|
49
|
-
option._checked = false;
|
|
50
|
-
});
|
|
51
|
-
item._checked = checked;
|
|
52
|
-
$xeTable.checkFilterOptions();
|
|
53
|
-
handleFilterConfirmFilter(evnt);
|
|
54
|
-
};
|
|
55
|
-
// (多选)筛选发生改变
|
|
56
|
-
const changeMultipleOption = (evnt, checked, item) => {
|
|
57
|
-
item._checked = checked;
|
|
58
|
-
$xeTable.checkFilterOptions();
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* 重置筛选
|
|
62
|
-
* 当筛选面板中的重置按钮被按下时触发
|
|
63
|
-
* @param {Event} evnt 事件
|
|
64
|
-
*/
|
|
65
|
-
const handleFilterResetFilter = evnt => {
|
|
66
|
-
const {
|
|
67
|
-
filterStore
|
|
68
|
-
} = reactData;
|
|
69
|
-
$xeTable.handleClearFilter(filterStore.column);
|
|
70
|
-
$xeTable.confirmFilterEvent(evnt);
|
|
71
|
-
if (evnt) {
|
|
72
|
-
$xeTable.dispatchEvent('clear-filter', {
|
|
73
|
-
filterList: []
|
|
74
|
-
}, evnt);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
33
|
const filterPrivateMethods = {
|
|
78
34
|
checkFilterOptions() {
|
|
79
35
|
const {
|
|
80
36
|
filterStore
|
|
81
37
|
} = reactData;
|
|
82
|
-
|
|
83
|
-
|
|
38
|
+
const {
|
|
39
|
+
column
|
|
40
|
+
} = filterStore;
|
|
41
|
+
if (column) {
|
|
42
|
+
const filterOptions = column.filters || [];
|
|
43
|
+
filterStore.isAllSelected = filterOptions.every(item => item._checked);
|
|
44
|
+
filterStore.isIndeterminate = !filterStore.isAllSelected && filterOptions.some(item => item._checked);
|
|
45
|
+
}
|
|
84
46
|
},
|
|
85
47
|
/**
|
|
86
48
|
* 点击筛选事件
|
|
@@ -223,11 +185,13 @@ hooks.add('tableFilterModule', {
|
|
|
223
185
|
const filterOpts = computeFilterOpts.value;
|
|
224
186
|
const mouseOpts = computeMouseOpts.value;
|
|
225
187
|
const {
|
|
226
|
-
field
|
|
188
|
+
field,
|
|
189
|
+
filters
|
|
227
190
|
} = column;
|
|
191
|
+
const filterOptions = filters || [];
|
|
228
192
|
const values = [];
|
|
229
193
|
const datas = [];
|
|
230
|
-
|
|
194
|
+
filterOptions.forEach(item => {
|
|
231
195
|
if (item.checked) {
|
|
232
196
|
values.push(item.value);
|
|
233
197
|
datas.push(item.data);
|
|
@@ -282,32 +246,84 @@ hooks.add('tableFilterModule', {
|
|
|
282
246
|
/**
|
|
283
247
|
* 确认筛选
|
|
284
248
|
* 当筛选面板中的确定按钮被按下时触发
|
|
285
|
-
* @param {Event} evnt 事件
|
|
286
249
|
*/
|
|
287
|
-
confirmFilterEvent(evnt) {
|
|
250
|
+
confirmFilterEvent(evnt, column) {
|
|
251
|
+
if (column) {
|
|
252
|
+
$xeTable.handleColumnConfirmFilter(column, evnt);
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
// (单选)筛选发生改变
|
|
256
|
+
handleFilterChangeRadioOption(evnt, checked, item) {
|
|
288
257
|
const {
|
|
289
258
|
filterStore
|
|
290
259
|
} = reactData;
|
|
291
260
|
const {
|
|
292
261
|
column
|
|
293
262
|
} = filterStore;
|
|
294
|
-
|
|
263
|
+
if (column) {
|
|
264
|
+
const filterOptions = column.filters || [];
|
|
265
|
+
filterOptions.forEach(option => {
|
|
266
|
+
option._checked = false;
|
|
267
|
+
});
|
|
268
|
+
item._checked = checked;
|
|
269
|
+
$xeTable.checkFilterOptions();
|
|
270
|
+
$xeTable.handleFilterConfirmFilter(evnt, column);
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
// (多选)筛选发生改变
|
|
274
|
+
handleFilterChangeMultipleOption(evnt, checked, item) {
|
|
275
|
+
item._checked = checked;
|
|
276
|
+
$xeTable.checkFilterOptions();
|
|
295
277
|
},
|
|
296
|
-
handleFilterChangeRadioOption: changeRadioOption,
|
|
297
|
-
handleFilterChangeMultipleOption: changeMultipleOption,
|
|
298
278
|
// 筛选发生改变
|
|
299
279
|
handleFilterChangeOption(evnt, checked, item) {
|
|
300
280
|
const {
|
|
301
281
|
filterStore
|
|
302
282
|
} = reactData;
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
|
|
283
|
+
const {
|
|
284
|
+
fullColumnIdData
|
|
285
|
+
} = internalData;
|
|
286
|
+
let column = filterStore.column;
|
|
287
|
+
if (!column) {
|
|
288
|
+
const colRest = fullColumnIdData[item._colId];
|
|
289
|
+
if (colRest) {
|
|
290
|
+
column = colRest.column;
|
|
291
|
+
filterStore.column = column;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
if (column) {
|
|
295
|
+
if (column.filterMultiple) {
|
|
296
|
+
$xeTable.handleFilterChangeMultipleOption(evnt, checked, item);
|
|
297
|
+
} else {
|
|
298
|
+
$xeTable.handleFilterChangeRadioOption(evnt, checked, item);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
// 确认筛选
|
|
303
|
+
handleFilterConfirmFilter(evnt, column) {
|
|
304
|
+
if (column) {
|
|
305
|
+
const filterOptions = column.filters || [];
|
|
306
|
+
filterOptions.forEach(option => {
|
|
307
|
+
option.checked = option._checked;
|
|
308
|
+
});
|
|
309
|
+
$xeTable.confirmFilterEvent(evnt, column);
|
|
307
310
|
}
|
|
308
311
|
},
|
|
309
|
-
|
|
310
|
-
|
|
312
|
+
/**
|
|
313
|
+
* 重置筛选
|
|
314
|
+
* 当筛选面板中的重置按钮被按下时触发
|
|
315
|
+
*/
|
|
316
|
+
handleFilterResetFilter(evnt, column) {
|
|
317
|
+
if (column) {
|
|
318
|
+
$xeTable.handleClearFilter(column);
|
|
319
|
+
$xeTable.confirmFilterEvent(evnt, column);
|
|
320
|
+
if (evnt) {
|
|
321
|
+
$xeTable.dispatchEvent('clear-filter', {
|
|
322
|
+
filterList: []
|
|
323
|
+
}, evnt);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
311
327
|
};
|
|
312
328
|
const filterMethods = {
|
|
313
329
|
/**
|
|
@@ -344,7 +360,7 @@ hooks.add('tableFilterModule', {
|
|
|
344
360
|
} = reactData;
|
|
345
361
|
const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
|
|
346
362
|
if (column && column.filters) {
|
|
347
|
-
column.filters = (0, _util.toFilters)(options || []);
|
|
363
|
+
column.filters = (0, _util.toFilters)(options || [], column.id);
|
|
348
364
|
if (isUpdate) {
|
|
349
365
|
return $xeTable.handleColumnConfirmFilter(column, null);
|
|
350
366
|
} else {
|
|
@@ -393,20 +409,60 @@ hooks.add('tableFilterModule', {
|
|
|
393
409
|
}
|
|
394
410
|
return (0, _vue.nextTick)();
|
|
395
411
|
},
|
|
412
|
+
saveFilter(fieldOrColumn) {
|
|
413
|
+
if (fieldOrColumn) {
|
|
414
|
+
const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
|
|
415
|
+
$xeTable.handleFilterConfirmFilter(null, column);
|
|
416
|
+
}
|
|
417
|
+
return (0, _vue.nextTick)();
|
|
418
|
+
},
|
|
419
|
+
saveFilterByEvent(evnt, fieldOrColumn) {
|
|
420
|
+
if (fieldOrColumn) {
|
|
421
|
+
const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
|
|
422
|
+
$xeTable.handleFilterConfirmFilter(evnt, column);
|
|
423
|
+
}
|
|
424
|
+
return (0, _vue.nextTick)();
|
|
425
|
+
},
|
|
426
|
+
resetFilter(fieldOrColumn) {
|
|
427
|
+
if (fieldOrColumn) {
|
|
428
|
+
const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
|
|
429
|
+
$xeTable.handleFilterResetFilter(null, column);
|
|
430
|
+
}
|
|
431
|
+
return (0, _vue.nextTick)();
|
|
432
|
+
},
|
|
433
|
+
resetFilterByEvent(evnt, fieldOrColumn) {
|
|
434
|
+
if (fieldOrColumn) {
|
|
435
|
+
const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
|
|
436
|
+
$xeTable.handleFilterResetFilter(evnt, column);
|
|
437
|
+
}
|
|
438
|
+
return (0, _vue.nextTick)();
|
|
439
|
+
},
|
|
396
440
|
saveFilterPanel() {
|
|
397
|
-
|
|
441
|
+
const {
|
|
442
|
+
filterStore
|
|
443
|
+
} = reactData;
|
|
444
|
+
$xeTable.handleFilterConfirmFilter(null, filterStore.column || null);
|
|
398
445
|
return (0, _vue.nextTick)();
|
|
399
446
|
},
|
|
400
447
|
saveFilterPanelByEvent(evnt) {
|
|
401
|
-
|
|
448
|
+
const {
|
|
449
|
+
filterStore
|
|
450
|
+
} = reactData;
|
|
451
|
+
$xeTable.handleFilterConfirmFilter(evnt, filterStore.column || null);
|
|
402
452
|
return (0, _vue.nextTick)();
|
|
403
453
|
},
|
|
404
454
|
resetFilterPanel() {
|
|
405
|
-
|
|
455
|
+
const {
|
|
456
|
+
filterStore
|
|
457
|
+
} = reactData;
|
|
458
|
+
$xeTable.handleFilterResetFilter(null, filterStore.column || null);
|
|
406
459
|
return (0, _vue.nextTick)();
|
|
407
460
|
},
|
|
408
461
|
resetFilterPanelByEvent(evnt) {
|
|
409
|
-
|
|
462
|
+
const {
|
|
463
|
+
filterStore
|
|
464
|
+
} = reactData;
|
|
465
|
+
$xeTable.handleFilterResetFilter(evnt, filterStore.column || null);
|
|
410
466
|
return (0, _vue.nextTick)();
|
|
411
467
|
},
|
|
412
468
|
getCheckedFilters() {
|
|
@@ -419,10 +475,11 @@ hooks.add('tableFilterModule', {
|
|
|
419
475
|
field,
|
|
420
476
|
filters
|
|
421
477
|
} = column;
|
|
478
|
+
const filterOptions = filters || [];
|
|
422
479
|
const valueList = [];
|
|
423
480
|
const dataList = [];
|
|
424
|
-
if (
|
|
425
|
-
|
|
481
|
+
if (filterOptions) {
|
|
482
|
+
filterOptions.forEach(item => {
|
|
426
483
|
if (item.checked) {
|
|
427
484
|
valueList.push(item.value);
|
|
428
485
|
dataList.push(item.data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom"),_utils=require("../../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{renderer,hooks}=_ui.VxeUI,tableFilterMethodKeys=["openFilter","setFilter","clearFilter","saveFilterPanel","saveFilterPanelByEvent","resetFilterPanel","resetFilterPanelByEvent","getCheckedFilters","updateFilterOptionStatus"];hooks.add("tableFilterModule",{setupTable(
|
|
1
|
+
var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom"),_utils=require("../../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{renderer,hooks}=_ui.VxeUI,tableFilterMethodKeys=["openFilter","setFilter","clearFilter","saveFilterPanel","saveFilterPanelByEvent","resetFilterPanel","resetFilterPanelByEvent","getCheckedFilters","updateFilterOptionStatus"];hooks.add("tableFilterModule",{setupTable(g){let C=g.xeGrid||g.xeGantt,{props:d,reactData:h,internalData:a}=g,{refElem:n,refTableFilter:k}=g.getRefMaps(),{computeFilterOpts:b,computeMouseOpts:f}=g.getComputeMaps();var e={checkFilterOptions(){var e=h.filterStore,t=e.column;t&&(t=t.filters||[],e.isAllSelected=t.every(e=>e._checked),e.isIndeterminate=!e.isAllSelected&&t.some(e=>e._checked))},triggerFilterEvent(e,t,l){let{initStore:r,filterStore:p}=h,_=a.elemStore;if(p.column===t&&p.visible)p.visible=!1;else{let o=n.value,{scrollTop:s,scrollLeft:c,visibleHeight:d,visibleWidth:h}=(0,_dom.getDomNode)();let f=b.value.transfer,F=o.getBoundingClientRect(),v=e.currentTarget;var i=t?t.filterRender:null;let m=i&&(0,_utils.isEnableConf)(i)?renderer.get(i.name):null;g.handleFilterOptions(t),a._currFilterParams=l,p.style=null,p.visible=!0,r.filter=!0,(0,_vue.nextTick)(()=>{if((0,_util.getRefElem)(_["main-header-scroll"])){var r=k.value,r=r?r.getRefMaps().refElem.value:null;if(r){var i=v.getBoundingClientRect(),n=r.querySelector(".vxe-table--filter-header"),a=r.querySelector(".vxe-table--filter-footer"),r=r.offsetWidth,u=r/2;let e=0,t=0,l=0;f?(e=i.left-u+c,t=i.top+v.clientHeight+s,l=Math.min(Math.max(F.height,Math.floor(d/2)),Math.max(80,d-t-(n?n.clientHeight:0)-(a?a.clientHeight:0)-28)),e<16?e=16:e>h-r-16&&(e=h-r-16)):(e=i.left-F.left-u,t=i.top-F.top+v.clientHeight,l=Math.max(40,o.clientHeight-t-(n?n.clientHeight:0)-(a?a.clientHeight:0)-14),e<1?e=1:e>o.clientWidth-r-1&&(e=o.clientWidth-r-1),C&&(u=C.getRefMaps().refElem.value)&&(i=u.getBoundingClientRect(),t+=F.top-i.top)),p.style={top:(0,_dom.toCssUnit)(t),left:(0,_dom.toCssUnit)(e)},m&&!m.tableFilterAutoHeight&&(l=0),p.maxHeight=l}}})}g.dispatchEvent("filter-visible",{column:t,field:t.field,property:t.field,filterList:g.getCheckedFilters(),visible:p.visible},e)},handleClearFilter(e){if(e){var{filters:l,filterRender:r}=e;if(l){r=(0,_utils.isEnableConf)(r)?renderer.get(r.name):null;let t=e.filterResetMethod||(r?r.tableFilterResetMethod||r.filterResetMethod:null);l.forEach(e=>{e._checked=!1,e.checked=!1,t||(e.data=_xeUtils.default.clone(e.resetValue,!0))}),t&&t({options:l,column:e,$table:g})}}},handleColumnConfirmFilter(e,t){var l=d.mouseConfig;let{scrollXLoad:r,scrollYLoad:i}=h;var n=b.value,a=f.value,{field:u,filters:o}=e;let s=[],c=[];(o||[]).forEach(e=>{e.checked&&(s.push(e.value),c.push(e.data))});o=g.getCheckedFilters(),e={$table:g,$event:t,column:e,field:u,property:u,values:s,datas:c,filters:o,filterList:o};return n.remote||(g.handleTableData(!0),g.checkSelectionStatus()),l&&a.area&&g.handleFilterEvent&&g.handleFilterEvent(t,e),t&&g.dispatchEvent("filter-change",e,t),g.closeFilter(),g.updateFooter().then(()=>{var{scrollXLoad:e,scrollYLoad:t}=h;if(r||e||i||t)return(r||e)&&g.updateScrollXSpace(),(i||t)&&g.updateScrollYSpace(),g.refreshScroll()}).then(()=>(g.updateCellAreas(),g.recalculate(!0))).then(()=>{setTimeout(()=>g.recalculate(),50)})},confirmFilterEvent(e,t){t&&g.handleColumnConfirmFilter(t,e)},handleFilterChangeRadioOption(e,t,l){var r=h.filterStore,r=r.column;r&&((r.filters||[]).forEach(e=>{e._checked=!1}),l._checked=t,g.checkFilterOptions(),g.handleFilterConfirmFilter(e,r))},handleFilterChangeMultipleOption(e,t,l){l._checked=t,g.checkFilterOptions()},handleFilterChangeOption(e,t,l){var r=h.filterStore,i=a.fullColumnIdData;let n=r.column;n||(i=i[l._colId])&&(n=i.column,r.column=n),n&&(n.filterMultiple?g.handleFilterChangeMultipleOption(e,t,l):g.handleFilterChangeRadioOption(e,t,l))},handleFilterConfirmFilter(e,t){t&&((t.filters||[]).forEach(e=>{e.checked=e._checked}),g.confirmFilterEvent(e,t))},handleFilterResetFilter(e,t){t&&(g.handleClearFilter(t),g.confirmFilterEvent(e,t),e)&&g.dispatchEvent("clear-filter",{filterList:[]},e)}};return Object.assign(Object.assign({},{openFilter(e){let r=(0,_util.handleFieldOrColumn)(g,e);if(r&&r.filters){let t=a.elemStore,l=r.fixed;return g.scrollToColumn(r).then(()=>{var e=(0,_util.getRefElem)(t[`${l||"main"}-header-wrapper`]||t["main-header-wrapper"]);e&&(e=e.querySelector(`.vxe-header--column.${r.id} .vxe-cell--filter`),(0,_dom.triggerEvent)(e,"click"))})}return(0,_vue.nextTick)()},setFilter(e,t,l){var r=h.filterStore,e=(0,_util.handleFieldOrColumn)(g,e);if(e&&e.filters){if(e.filters=(0,_util.toFilters)(t||[],e.id),l)return g.handleColumnConfirmFilter(e,null);r.visible&&g.handleFilterOptions(e)}return(0,_vue.nextTick)()},clearFilter(e){var t=h.filterStore,l=a.tableFullColumn,r=b.value;let i;return e?(i=(0,_util.handleFieldOrColumn)(g,e))&&g.handleClearFilter(i):l.forEach(g.handleClearFilter),e&&i===t.column||Object.assign(t,{isAllSelected:!1,isIndeterminate:!1,style:null,options:[],column:null,multiple:!1,visible:!1}),r.remote?(0,_vue.nextTick)():g.updateData()},saveFilter(e){return e&&(e=(0,_util.handleFieldOrColumn)(g,e),g.handleFilterConfirmFilter(null,e)),(0,_vue.nextTick)()},saveFilterByEvent(e,t){return t&&(t=(0,_util.handleFieldOrColumn)(g,t),g.handleFilterConfirmFilter(e,t)),(0,_vue.nextTick)()},resetFilter(e){return e&&(e=(0,_util.handleFieldOrColumn)(g,e),g.handleFilterResetFilter(null,e)),(0,_vue.nextTick)()},resetFilterByEvent(e,t){return t&&(t=(0,_util.handleFieldOrColumn)(g,t),g.handleFilterResetFilter(e,t)),(0,_vue.nextTick)()},saveFilterPanel(){var e=h.filterStore;return g.handleFilterConfirmFilter(null,e.column||null),(0,_vue.nextTick)()},saveFilterPanelByEvent(e){var t=h.filterStore;return g.handleFilterConfirmFilter(e,t.column||null),(0,_vue.nextTick)()},resetFilterPanel(){var e=h.filterStore;return g.handleFilterResetFilter(null,e.column||null),(0,_vue.nextTick)()},resetFilterPanelByEvent(e){var t=h.filterStore;return g.handleFilterResetFilter(e,t.column||null),(0,_vue.nextTick)()},getCheckedFilters(){var e=a.tableFullColumn;let n=[];return e.forEach(e=>{var{field:t,filters:l}=e,l=l||[];let r=[],i=[];l&&(l.forEach(e=>{e.checked&&(r.push(e.value),i.push(e.data))}),r.length)&&n.push({column:e,field:t,property:t,values:r,datas:i})}),n},updateFilterOptionStatus(e,t){return e._checked=t,e.checked=t,(0,_vue.nextTick)()}}),e)},setupGrid(e){return e.extendTableMethods(tableFilterMethodKeys)},setupGantt(e){return e.extendTableMethods(tableFilterMethodKeys)}});
|
|
@@ -16,12 +16,16 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
16
16
|
const {
|
|
17
17
|
getI18n,
|
|
18
18
|
getIcon,
|
|
19
|
-
renderer
|
|
19
|
+
renderer,
|
|
20
|
+
renderEmptyElement
|
|
20
21
|
} = _ui.VxeUI;
|
|
21
22
|
var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
22
23
|
name: 'VxeTableFilterPanel',
|
|
23
24
|
props: {
|
|
24
|
-
filterStore:
|
|
25
|
+
filterStore: {
|
|
26
|
+
type: Object,
|
|
27
|
+
default: () => ({})
|
|
28
|
+
}
|
|
25
29
|
},
|
|
26
30
|
setup(props, context) {
|
|
27
31
|
const xID = _xeUtils.default.uniqueId();
|
|
@@ -48,17 +52,25 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
48
52
|
const {
|
|
49
53
|
filterStore
|
|
50
54
|
} = props;
|
|
51
|
-
|
|
55
|
+
const {
|
|
56
|
+
column
|
|
57
|
+
} = filterStore;
|
|
58
|
+
return column && column.filters && column.filters.some(option => option.checked);
|
|
52
59
|
});
|
|
53
60
|
// 全部筛选事件
|
|
54
61
|
const filterCheckAllEvent = (evnt, value) => {
|
|
55
62
|
const {
|
|
56
63
|
filterStore
|
|
57
64
|
} = props;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
const {
|
|
66
|
+
column
|
|
67
|
+
} = filterStore;
|
|
68
|
+
if (column && column.filters) {
|
|
69
|
+
column.filters.forEach(option => {
|
|
70
|
+
option._checked = value;
|
|
71
|
+
option.checked = value;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
62
74
|
filterStore.isAllSelected = value;
|
|
63
75
|
filterStore.isIndeterminate = false;
|
|
64
76
|
};
|
|
@@ -67,10 +79,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
67
79
|
*************************/
|
|
68
80
|
// 确认筛选
|
|
69
81
|
const confirmFilter = evnt => {
|
|
82
|
+
const {
|
|
83
|
+
filterStore
|
|
84
|
+
} = props;
|
|
70
85
|
if (!evnt) {
|
|
71
86
|
(0, _log.warnLog)('vxe.error.delFunc', ['confirmFilter', 'saveFilterPanelByEvent']);
|
|
72
87
|
}
|
|
73
|
-
$xeTable.handleFilterConfirmFilter(evnt || new Event('click'));
|
|
88
|
+
$xeTable.handleFilterConfirmFilter(evnt || new Event('click'), filterStore.column || null);
|
|
74
89
|
};
|
|
75
90
|
// (单选)筛选发生改变
|
|
76
91
|
const changeRadioOption = (evnt, checked, item) => {
|
|
@@ -82,7 +97,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
82
97
|
* @param {Event} evnt 事件
|
|
83
98
|
*/
|
|
84
99
|
const resetFilter = evnt => {
|
|
85
|
-
|
|
100
|
+
const {
|
|
101
|
+
filterStore
|
|
102
|
+
} = props;
|
|
103
|
+
$xeTable.handleFilterResetFilter(evnt, filterStore.column || null);
|
|
86
104
|
};
|
|
87
105
|
// (多选)筛选发生改变
|
|
88
106
|
const changeMultipleOption = (evnt, checked, item) => {
|
|
@@ -96,7 +114,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
96
114
|
const {
|
|
97
115
|
filterStore
|
|
98
116
|
} = props;
|
|
99
|
-
|
|
117
|
+
const {
|
|
118
|
+
column
|
|
119
|
+
} = filterStore;
|
|
120
|
+
if (column && column.filterMultiple) {
|
|
100
121
|
filterCheckAllEvent(evnt, checked);
|
|
101
122
|
} else {
|
|
102
123
|
resetFilter(evnt);
|
|
@@ -120,10 +141,17 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
120
141
|
} = props;
|
|
121
142
|
const {
|
|
122
143
|
column,
|
|
123
|
-
multiple,
|
|
124
144
|
maxHeight
|
|
125
145
|
} = filterStore;
|
|
126
|
-
|
|
146
|
+
if (!column) {
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
149
|
+
const {
|
|
150
|
+
filterMultiple,
|
|
151
|
+
filters,
|
|
152
|
+
slots
|
|
153
|
+
} = column;
|
|
154
|
+
const filterOptions = filters || [];
|
|
127
155
|
const filterSlot = slots ? slots.filter : null;
|
|
128
156
|
const params = Object.assign({}, tableInternalData._currFilterParams, {
|
|
129
157
|
$panel: $xeFilterPanel,
|
|
@@ -137,7 +165,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
137
165
|
maxHeight: (0, _dom.toCssUnit)(maxHeight)
|
|
138
166
|
} : {}
|
|
139
167
|
}, $xeTable.callSlot(filterSlot, params))];
|
|
140
|
-
} else if (rtFilter) {
|
|
168
|
+
} else if (filterRender && rtFilter) {
|
|
141
169
|
return [(0, _vue.h)('div', {
|
|
142
170
|
class: 'vxe-table--filter-template',
|
|
143
171
|
style: maxHeight ? {
|
|
@@ -145,8 +173,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
145
173
|
} : {}
|
|
146
174
|
}, (0, _vn.getSlotVNs)(rtFilter(filterRender, params)))];
|
|
147
175
|
}
|
|
148
|
-
const isAllChecked =
|
|
149
|
-
const isAllIndeterminate =
|
|
176
|
+
const isAllChecked = filterMultiple ? filterStore.isAllSelected : !filterOptions.some(item => item._checked);
|
|
177
|
+
const isAllIndeterminate = filterMultiple && filterStore.isIndeterminate;
|
|
150
178
|
return [(0, _vue.h)('ul', {
|
|
151
179
|
class: 'vxe-table--filter-header'
|
|
152
180
|
}, [(0, _vue.h)('li', {
|
|
@@ -154,11 +182,11 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
154
182
|
'is--checked': isAllChecked,
|
|
155
183
|
'is--indeterminate': isAllIndeterminate
|
|
156
184
|
}],
|
|
157
|
-
title: getI18n(
|
|
185
|
+
title: getI18n(filterMultiple ? 'vxe.table.allTitle' : 'vxe.table.allFilter'),
|
|
158
186
|
onClick: evnt => {
|
|
159
187
|
changeAllOption(evnt, !filterStore.isAllSelected);
|
|
160
188
|
}
|
|
161
|
-
}, (
|
|
189
|
+
}, (filterMultiple ? [(0, _vue.h)('span', {
|
|
162
190
|
class: ['vxe-checkbox--icon', isAllIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : isAllChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED]
|
|
163
191
|
})] : []).concat([(0, _vue.h)('span', {
|
|
164
192
|
class: 'vxe-checkbox--label'
|
|
@@ -167,7 +195,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
167
195
|
style: maxHeight ? {
|
|
168
196
|
maxHeight: (0, _dom.toCssUnit)(maxHeight)
|
|
169
197
|
} : {}
|
|
170
|
-
},
|
|
198
|
+
}, filterOptions.map(item => {
|
|
171
199
|
const isChecked = item._checked;
|
|
172
200
|
const isIndeterminate = false;
|
|
173
201
|
return (0, _vue.h)('li', {
|
|
@@ -178,7 +206,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
178
206
|
onClick: evnt => {
|
|
179
207
|
changeOption(evnt, !item._checked, item);
|
|
180
208
|
}
|
|
181
|
-
}, (
|
|
209
|
+
}, (filterMultiple ? [(0, _vue.h)('span', {
|
|
182
210
|
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().TABLE_CHECKBOX_INDETERMINATE : isChecked ? getIcon().TABLE_CHECKBOX_CHECKED : getIcon().TABLE_CHECKBOX_UNCHECKED]
|
|
183
211
|
})] : []).concat([(0, _vue.h)('span', {
|
|
184
212
|
class: 'vxe-checkbox--label'
|
|
@@ -190,17 +218,20 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
190
218
|
filterStore
|
|
191
219
|
} = props;
|
|
192
220
|
const {
|
|
193
|
-
column
|
|
194
|
-
multiple
|
|
221
|
+
column
|
|
195
222
|
} = filterStore;
|
|
223
|
+
if (!column) {
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
196
226
|
const filterOpts = computeFilterOpts.value;
|
|
197
227
|
const hasCheckOption = computeHasCheckOption.value;
|
|
198
228
|
const {
|
|
199
|
-
filterRender
|
|
229
|
+
filterRender,
|
|
230
|
+
filterMultiple
|
|
200
231
|
} = column;
|
|
201
232
|
const compConf = (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
202
233
|
const isDisabled = !hasCheckOption && !filterStore.isAllSelected && !filterStore.isIndeterminate;
|
|
203
|
-
return
|
|
234
|
+
return (compConf ? !(compConf.showTableFilterFooter === false || compConf.showFilterFooter === false || compConf.isFooter === false) : filterMultiple) ? [(0, _vue.h)('div', {
|
|
204
235
|
class: 'vxe-table--filter-footer'
|
|
205
236
|
}, [(0, _vue.h)('button', {
|
|
206
237
|
class: {
|
|
@@ -221,11 +252,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
221
252
|
} = tableReactData;
|
|
222
253
|
const {
|
|
223
254
|
visible,
|
|
224
|
-
multiple,
|
|
225
255
|
column
|
|
226
256
|
} = filterStore;
|
|
257
|
+
if (!column) {
|
|
258
|
+
return renderEmptyElement($xeFilterPanel);
|
|
259
|
+
}
|
|
227
260
|
const filterRender = column ? column.filterRender : null;
|
|
228
|
-
const compConf = (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
261
|
+
const compConf = filterRender && (0, _utils.isEnableConf)(filterRender) ? renderer.get(filterRender.name) : null;
|
|
229
262
|
const filterClassName = compConf ? compConf.tableFilterClassName || compConf.filterClassName : '';
|
|
230
263
|
const params = Object.assign({}, tableInternalData._currFilterParams, {
|
|
231
264
|
$panel: $xeFilterPanel,
|
|
@@ -250,7 +283,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
250
283
|
class: ['vxe-table--filter-wrapper', 'filter--prevent-default', className, (0, _dom.getPropClass)(filterClassName, params), {
|
|
251
284
|
[`size--${vSize}`]: vSize,
|
|
252
285
|
'is--animat': tableProps.animat,
|
|
253
|
-
'is--multiple':
|
|
286
|
+
'is--multiple': column.filterMultiple,
|
|
254
287
|
'is--active': visible
|
|
255
288
|
}],
|
|
256
289
|
style: filterStore.style
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../../ui/src/comp"),_ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_dom=require("../../../ui/src/dom"),_vn=require("../../../ui/src/vn"),_log=require("../../../ui/src/log"),_xeUtils=_interopRequireDefault(require("xe-utils"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getI18n,getIcon,renderer}=_ui.VxeUI;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeTableFilterPanel",props:{filterStore:Object},setup(
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_comp=require("../../../ui/src/comp"),_ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_dom=require("../../../ui/src/dom"),_vn=require("../../../ui/src/vn"),_log=require("../../../ui/src/log"),_xeUtils=_interopRequireDefault(require("xe-utils"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getI18n,getIcon,renderer,renderEmptyElement}=_ui.VxeUI;var _default=exports.default=(0,_comp.defineVxeComponent)({name:"VxeTableFilterPanel",props:{filterStore:{type:Object,default:()=>({})}},setup(_,e){var t=_xeUtils.default.uniqueId();let f=(0,_vue.inject)("$xeTable",{}),{reactData:p,internalData:m,getComputeMaps:l}=f,h=l().computeFilterOpts,b=(0,_vue.ref)(),r={refElem:b},x={xID:t,props:_,context:e,getRefMaps:()=>r},C=(0,_vue.computed)(()=>{var e=_.filterStore,e=e.column;return e&&e.filters&&e.filters.some(e=>e.checked)}),i=(e,t)=>{var l=_.filterStore,r=l.column;r&&r.filters&&r.filters.forEach(e=>{e._checked=t,e.checked=t}),l.isAllSelected=t,l.isIndeterminate=!1},g=e=>{var t=_.filterStore;e||(0,_log.warnLog)("vxe.error.delFunc",["confirmFilter","saveFilterPanelByEvent"]),f.handleFilterConfirmFilter(e||new Event("click"),t.column||null)};let E=e=>{var t=_.filterStore;f.handleFilterResetFilter(e,t.column||null)};let F=(e,t,l)=>{f.handleFilterChangeOption(e,t,l)},I=(e,t)=>{var l=_.filterStore,l=l.column;l&&l.filterMultiple?i(0,t):E(e)};t={changeRadioOption:(e,t,l)=>{f.handleFilterChangeRadioOption(e,t,l)},changeMultipleOption:(e,t,l)=>{f.handleFilterChangeMultipleOption(e,t,l)},changeAllOption:I,changeOption:F,confirmFilter:g,resetFilter:E};Object.assign(x,t);return x.renderVN=()=>{var e,t,l,r,i,a,n,s,o,u=_.filterStore,c=p.initStore,{visible:d,column:v}=u;return v?(i=(t=(e=v?v.filterRender:null)&&(0,_utils.isEnableConf)(e)?renderer.get(e.name):null)?t.tableFilterClassName||t.filterClassName:"",n=Object.assign({},m._currFilterParams,{$panel:x,$table:f}),l=f.props,a=f.getComputeMaps().computeSize,a=a.value,{transfer:s,destroyOnClose:r,className:o}=h.value,(0,_vue.h)(_vue.Teleport,{to:"body",disabled:!s},[(0,_vue.h)("div",{ref:b,class:["vxe-table--filter-wrapper","filter--prevent-default",o,(0,_dom.getPropClass)(i,n),{["size--"+a]:a,"is--animat":l.animat,"is--multiple":v.filterMultiple,"is--active":d}],style:u.style},c.filter&&(!r||d)&&v?((e,t)=>{let l=_.filterStore;var{column:r,maxHeight:i}=l;if(!r)return[];let{filterMultiple:a,filters:n,slots:s}=r;var r=n||[],o=s?s.filter:null,u=Object.assign({},m._currFilterParams,{$panel:x,$table:f}),t=t?t.renderTableFilter||t.renderFilter:null;return o?[(0,_vue.h)("div",{class:"vxe-table--filter-template",style:i?{maxHeight:(0,_dom.toCssUnit)(i)}:{}},f.callSlot(o,u))]:e&&t?[(0,_vue.h)("div",{class:"vxe-table--filter-template",style:i?{maxHeight:(0,_dom.toCssUnit)(i)}:{}},(0,_vn.getSlotVNs)(t(e,u)))]:(o=a?l.isAllSelected:!r.some(e=>e._checked),t=a&&l.isIndeterminate,[(0,_vue.h)("ul",{class:"vxe-table--filter-header"},[(0,_vue.h)("li",{class:["vxe-table--filter-option",{"is--checked":o,"is--indeterminate":t}],title:getI18n(a?"vxe.table.allTitle":"vxe.table.allFilter"),onClick:e=>{I(e,!l.isAllSelected)}},(a?[(0,_vue.h)("span",{class:["vxe-checkbox--icon",t?getIcon().TABLE_CHECKBOX_INDETERMINATE:o?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([(0,_vue.h)("span",{class:"vxe-checkbox--label"},getI18n("vxe.table.allFilter"))]))]),(0,_vue.h)("ul",{class:"vxe-table--filter-body",style:i?{maxHeight:(0,_dom.toCssUnit)(i)}:{}},r.map(t=>{var e=t._checked;return(0,_vue.h)("li",{class:["vxe-table--filter-option",{"is--checked":t._checked}],title:t.label,onClick:e=>{F(e,!t._checked,t)}},(a?[(0,_vue.h)("span",{class:["vxe-checkbox--icon",e?getIcon().TABLE_CHECKBOX_CHECKED:getIcon().TABLE_CHECKBOX_UNCHECKED]})]:[]).concat([(0,_vue.h)("span",{class:"vxe-checkbox--label"},(0,_utils.formatText)(t.label,1))]))}))])})(e,t).concat((s=_.filterStore,(o=s.column)&&(i=h.value,n=C.value,{filterRender:o,filterMultiple:a}=o,o=(0,_utils.isEnableConf)(o)?renderer.get(o.name):null,n=!n&&!s.isAllSelected&&!s.isIndeterminate,o?!1!==o.showTableFilterFooter&&!1!==o.showFilterFooter&&!1!==o.isFooter:a)?[(0,_vue.h)("div",{class:"vxe-table--filter-footer"},[(0,_vue.h)("button",{class:{"is--disabled":n},disabled:n,onClick:g},i.confirmButtonText||getI18n("vxe.table.confirmFilter")),(0,_vue.h)("button",{onClick:E},i.resetButtonText||getI18n("vxe.table.resetFilter"))])]:[])):[])])):renderEmptyElement(x)},x},render(){return this.renderVN()}});
|