@arim-aisdc/public-components 2.3.87 → 2.3.88
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/dist/components/BaseInfo/BaseInfo.d.ts +1 -1
- package/dist/components/ConfigProvider/context.d.ts +2 -1
- package/dist/components/TableMax/TableHeader/Cell.d.ts +2 -1
- package/dist/components/TableMax/TableHeader/Cell.js +4 -2
- package/dist/components/TableMax/TableHeader/OriginalTableHeader.d.ts +2 -1
- package/dist/components/TableMax/TableHeader/OriginalTableHeader.js +4 -2
- package/dist/components/TableMax/TableMax.js +27 -2
- package/dist/components/TableMax/components/ColumnFilterV2/Filter.d.ts +1 -0
- package/dist/components/TableMax/components/ColumnFilterV2/Filter.js +60 -36
- package/dist/components/TableMax/components/ColumnFilterV2/TextFilter/index.d.ts +19 -0
- package/dist/components/TableMax/components/ColumnFilterV2/TextFilter/index.js +339 -0
- package/dist/components/TableMax/components/ColumnFilterV2/TextFilter/index.less +89 -0
- package/dist/components/TableMax/components/ColumnFilterV2/customFilterFns.d.ts +1 -0
- package/dist/components/TableMax/components/ColumnFilterV2/customFilterFns.js +97 -5
- package/dist/components/TableMax/components/ColumnFilterV2/index.d.ts +2 -1
- package/dist/components/TableMax/components/ColumnFilterV2/index.js +5 -3
- package/dist/components/TableMax/components/ColumnFilterV2/index.less +2 -3
- package/dist/components/TableMax/components/ColumnSort/customSortFns.d.ts +8 -8
- package/dist/components/TableMax/hooks/useVirtualCalculations copy.d.ts +4 -4
- package/dist/components/TableMax/hooks/useVirtualCalculations.d.ts +1 -1
- package/dist/components/TableMax/type.d.ts +2 -0
- package/dist/components/TableMax/utils.d.ts +1 -0
- package/dist/components/TableMax/utils.js +36 -16
- package/dist/locales/zh_CN.js +4 -1
- package/package.json +1 -1
|
@@ -17,7 +17,7 @@ export declare const foramtBaseInfoField: (data: any, dataField: BaseInfoFieldTy
|
|
|
17
17
|
value: any;
|
|
18
18
|
field: string;
|
|
19
19
|
label?: string;
|
|
20
|
-
text: string | Element |
|
|
20
|
+
text: string | JSX.Element | Element;
|
|
21
21
|
units?: string;
|
|
22
22
|
width?: string;
|
|
23
23
|
labelWidth?: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { ThemeType } from "../../../node_modules
|
|
2
|
+
import { ThemeType } from "../../../node_modules/@arim-aisdc/public-components";
|
|
3
3
|
import type { VariablesJsonType } from './type';
|
|
4
4
|
import { Locale } from '../../locales';
|
|
5
5
|
export interface ConfigConsumerProps {
|
|
@@ -34,6 +34,7 @@ export interface ConfigConsumerProps {
|
|
|
34
34
|
canSelectionUseShift?: boolean;
|
|
35
35
|
openNullValueFilter?: boolean;
|
|
36
36
|
openIndexColumn?: boolean;
|
|
37
|
+
useTextFilter?: boolean;
|
|
37
38
|
};
|
|
38
39
|
keepAliveActivateKey?: number;
|
|
39
40
|
keepAliveUnactivateKey?: number;
|
|
@@ -16,6 +16,7 @@ type ICellType = {
|
|
|
16
16
|
manualFiltering: boolean;
|
|
17
17
|
getDynamicFilterOptionsFn?: Function;
|
|
18
18
|
openNullValueFilter?: boolean;
|
|
19
|
+
useTextFilter?: boolean;
|
|
19
20
|
};
|
|
20
|
-
declare const Cell: ({ tableContentRef, header, table, hasGroup, canSorting, getHeaderCellProps, disableColumnDrag, headerRowNum, canFilter, manualFiltering, getDynamicFilterOptionsFn, openNullValueFilter }: ICellType) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare const Cell: ({ tableContentRef, header, table, hasGroup, canSorting, getHeaderCellProps, disableColumnDrag, headerRowNum, canFilter, manualFiltering, getDynamicFilterOptionsFn, openNullValueFilter, useTextFilter }: ICellType) => import("react/jsx-runtime").JSX.Element;
|
|
21
22
|
export default Cell;
|
|
@@ -43,7 +43,8 @@ var Cell = function Cell(_ref) {
|
|
|
43
43
|
canFilter = _ref.canFilter,
|
|
44
44
|
manualFiltering = _ref.manualFiltering,
|
|
45
45
|
getDynamicFilterOptionsFn = _ref.getDynamicFilterOptionsFn,
|
|
46
|
-
openNullValueFilter = _ref.openNullValueFilter
|
|
46
|
+
openNullValueFilter = _ref.openNullValueFilter,
|
|
47
|
+
useTextFilter = _ref.useTextFilter;
|
|
47
48
|
var _useConfig = useConfig(),
|
|
48
49
|
root = _useConfig.root;
|
|
49
50
|
var cannotDragColumn = [ColumnType.Darg, ColumnType.Selection, ColumnType.Expander, ColumnType.PlaceHolder];
|
|
@@ -135,7 +136,8 @@ var Cell = function Cell(_ref) {
|
|
|
135
136
|
column: header.column,
|
|
136
137
|
manualFiltering: manualFiltering,
|
|
137
138
|
getDynamicFilterOptionsFn: getDynamicFilterOptionsFn,
|
|
138
|
-
openNullValueFilter: openNullValueFilter
|
|
139
|
+
openNullValueFilter: openNullValueFilter,
|
|
140
|
+
useTextFilter: useTextFilter
|
|
139
141
|
}) : null]
|
|
140
142
|
}) : null, /*#__PURE__*/_jsx("div", {
|
|
141
143
|
className: "cell-resize-handler ".concat(header.column.getIsResizing() ? 'column-is-resizing' : ''),
|
|
@@ -17,6 +17,7 @@ export type TableHeaderProps = {
|
|
|
17
17
|
manualFiltering: boolean;
|
|
18
18
|
getDynamicFilterOptionsFn?: Function;
|
|
19
19
|
openNullValueFilter?: boolean;
|
|
20
|
+
useTextFilter?: boolean;
|
|
20
21
|
};
|
|
21
|
-
declare const OriginalTableHeader: ({ tableContentRef, table, canFilter, enableFilters, canSorting, hasGroup, getHeaderCellProps, columnResizeMode, disableColumnDrag, rowHeight, headerRowNum, manualFiltering, getDynamicFilterOptionsFn, openNullValueFilter }: TableHeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare const OriginalTableHeader: ({ tableContentRef, table, canFilter, enableFilters, canSorting, hasGroup, getHeaderCellProps, columnResizeMode, disableColumnDrag, rowHeight, headerRowNum, manualFiltering, getDynamicFilterOptionsFn, openNullValueFilter, useTextFilter }: TableHeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
23
|
export { OriginalTableHeader };
|
|
@@ -23,7 +23,8 @@ var OriginalTableHeader = function OriginalTableHeader(_ref) {
|
|
|
23
23
|
headerRowNum = _ref.headerRowNum,
|
|
24
24
|
manualFiltering = _ref.manualFiltering,
|
|
25
25
|
getDynamicFilterOptionsFn = _ref.getDynamicFilterOptionsFn,
|
|
26
|
-
openNullValueFilter = _ref.openNullValueFilter
|
|
26
|
+
openNullValueFilter = _ref.openNullValueFilter,
|
|
27
|
+
useTextFilter = _ref.useTextFilter;
|
|
27
28
|
var headerGroups = table.getHeaderGroups();
|
|
28
29
|
var headers = (headerGroups === null || headerGroups === void 0 || (_headerGroups = headerGroups[headerGroups.length - 1]) === null || _headerGroups === void 0 ? void 0 : _headerGroups.headers) || [];
|
|
29
30
|
return (
|
|
@@ -60,7 +61,8 @@ var OriginalTableHeader = function OriginalTableHeader(_ref) {
|
|
|
60
61
|
canFilter: canFilter,
|
|
61
62
|
manualFiltering: manualFiltering,
|
|
62
63
|
getDynamicFilterOptionsFn: getDynamicFilterOptionsFn,
|
|
63
|
-
openNullValueFilter: openNullValueFilter
|
|
64
|
+
openNullValueFilter: openNullValueFilter,
|
|
65
|
+
useTextFilter: useTextFilter
|
|
64
66
|
}, header.id)
|
|
65
67
|
}, header.id);
|
|
66
68
|
})
|
|
@@ -213,6 +213,7 @@ var TableMax = function TableMax(_ref) {
|
|
|
213
213
|
_ref$openVirtualRows = _ref.openVirtualRows,
|
|
214
214
|
openVirtualRows = _ref$openVirtualRows === void 0 ? false : _ref$openVirtualRows,
|
|
215
215
|
openNullValueFilter = _ref.openNullValueFilter,
|
|
216
|
+
useTextFilter = _ref.useTextFilter,
|
|
216
217
|
openIndexColumn = _ref.openIndexColumn,
|
|
217
218
|
version = _ref.version;
|
|
218
219
|
var tableMaxRef = useRef(null);
|
|
@@ -241,6 +242,7 @@ var TableMax = function TableMax(_ref) {
|
|
|
241
242
|
globalCanExport = _ref2.canExport,
|
|
242
243
|
canSelectionUseShift = _ref2.canSelectionUseShift,
|
|
243
244
|
openNullValueFilter = _ref2.openNullValueFilter,
|
|
245
|
+
useTextFilter = _ref2.useTextFilter,
|
|
244
246
|
openIndexColumn = _ref2.openIndexColumn;
|
|
245
247
|
return {
|
|
246
248
|
globalCanExport: globalCanExport,
|
|
@@ -249,6 +251,7 @@ var TableMax = function TableMax(_ref) {
|
|
|
249
251
|
cacheMaxAge: cacheMaxAge,
|
|
250
252
|
openMemo: openMemo,
|
|
251
253
|
openNullValueFilter: openNullValueFilter,
|
|
254
|
+
useTextFilter: useTextFilter,
|
|
252
255
|
openIndexColumn: openIndexColumn
|
|
253
256
|
};
|
|
254
257
|
}, [JSON.stringify(tableMax)]);
|
|
@@ -530,18 +533,22 @@ var TableMax = function TableMax(_ref) {
|
|
|
530
533
|
var arr = newColumnOrder;
|
|
531
534
|
if (!tableId) {
|
|
532
535
|
setColumnOrder(arr);
|
|
536
|
+
console.log(arr, '表格列顺序1');
|
|
533
537
|
return;
|
|
534
538
|
}
|
|
535
539
|
var cache = JSON.parse((_localStorage$getItem = localStorage.getItem(tableKey)) !== null && _localStorage$getItem !== void 0 ? _localStorage$getItem : '{}');
|
|
536
540
|
if (version && version !== (cache === null || cache === void 0 ? void 0 : cache.version)) {
|
|
537
541
|
setColumnOrder(arr);
|
|
542
|
+
console.log(arr, '表格列顺序2');
|
|
538
543
|
return;
|
|
539
544
|
}
|
|
540
545
|
;
|
|
541
546
|
if (cache && tableMaxConfig.cacheMaxAge && cache !== null && cache !== void 0 && cache.editTime && +new Date() - cache.editTime > ((_tableMaxConfig$cache = tableMaxConfig.cacheMaxAge) !== null && _tableMaxConfig$cache !== void 0 ? _tableMaxConfig$cache : CACHE_MAX_AGE)) {
|
|
542
547
|
setColumnOrder(arr);
|
|
548
|
+
console.log(arr, '表格列顺序3');
|
|
543
549
|
return;
|
|
544
550
|
}
|
|
551
|
+
console.log(tableKey, cache, '表格缓存数据');
|
|
545
552
|
var columnsIdSet = new Set(tableColumns.map(function (column) {
|
|
546
553
|
return column.id;
|
|
547
554
|
}));
|
|
@@ -609,7 +616,9 @@ var TableMax = function TableMax(_ref) {
|
|
|
609
616
|
return !newColumnOrder.includes(columnId);
|
|
610
617
|
}).length === 0) {
|
|
611
618
|
arr = cacheColumnOrder;
|
|
619
|
+
console.log(arr, '表格列顺序4');
|
|
612
620
|
}
|
|
621
|
+
console.log(arr, cacheColumnOrder, '表格列顺序5');
|
|
613
622
|
setColumnOrder(arr);
|
|
614
623
|
};
|
|
615
624
|
var recentlyCheckedRow = useRef(null);
|
|
@@ -756,6 +765,7 @@ var TableMax = function TableMax(_ref) {
|
|
|
756
765
|
|
|
757
766
|
// 初始化列
|
|
758
767
|
useEffect(function () {
|
|
768
|
+
console.log("tableId", tableId, !tableMaxRef.current || !tableContentRef.current || !tableId);
|
|
759
769
|
if (!tableMaxRef.current || !tableContentRef.current || !tableId) return;
|
|
760
770
|
if (!Array.isArray(columns) || columns.length === 0) return;
|
|
761
771
|
// 根据props,自动增加勾选列/展开列
|
|
@@ -846,6 +856,20 @@ var TableMax = function TableMax(_ref) {
|
|
|
846
856
|
if (!tableId) return;
|
|
847
857
|
cacheTimer.current = setTimeout(function () {
|
|
848
858
|
var tableState = table.getState();
|
|
859
|
+
console.log('缓存表格状态:', {
|
|
860
|
+
enableFilters: enableFilters,
|
|
861
|
+
headerRowNum: headerRowNum,
|
|
862
|
+
compactMode: compactMode,
|
|
863
|
+
columnVisibility: tableState.columnVisibility,
|
|
864
|
+
columnPinning: tableState.columnPinning,
|
|
865
|
+
columnOrder: tableState.columnOrder,
|
|
866
|
+
columnFilters: tableState.columnFilters,
|
|
867
|
+
columnSorting: tableState.sorting,
|
|
868
|
+
columnSizing: columnSizing,
|
|
869
|
+
editTime: +new Date(),
|
|
870
|
+
editTimeCh: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
|
871
|
+
version: version
|
|
872
|
+
});
|
|
849
873
|
localStorage.setItem(tableKey, JSON.stringify({
|
|
850
874
|
enableFilters: enableFilters,
|
|
851
875
|
headerRowNum: headerRowNum,
|
|
@@ -864,7 +888,7 @@ var TableMax = function TableMax(_ref) {
|
|
|
864
888
|
return function () {
|
|
865
889
|
clearTimeout(cacheTimer.current);
|
|
866
890
|
};
|
|
867
|
-
}, [table.getState().columnVisibility, table.getState().columnPinning, table.getState().columnOrder, table.getState().columnFilters, table.getState().sorting, enableFilters, headerRowNum, compactMode, columnSizing, tableId]);
|
|
891
|
+
}, [JSON.stringify(table.getState().columnVisibility), JSON.stringify(table.getState().columnPinning), JSON.stringify(table.getState().columnOrder), JSON.stringify(table.getState().columnFilters), JSON.stringify(table.getState().sorting), enableFilters, headerRowNum, compactMode, columnSizing, tableId]);
|
|
868
892
|
var reorderRow = useCallback(function (fromDatas, toDatas) {
|
|
869
893
|
var draggedRow = fromDatas.draggedRow,
|
|
870
894
|
isMultipleDrag = fromDatas.isMultipleDrag,
|
|
@@ -1105,7 +1129,8 @@ var TableMax = function TableMax(_ref) {
|
|
|
1105
1129
|
manualFiltering: manualFiltering,
|
|
1106
1130
|
getDynamicFilterOptionsFn: getDynamicFilterOptionsFn,
|
|
1107
1131
|
tableHeaderRef: tableHeaderRef,
|
|
1108
|
-
openNullValueFilter: openNullValueFilter !== null && openNullValueFilter !== void 0 ? openNullValueFilter : tableMaxConfig === null || tableMaxConfig === void 0 ? void 0 : tableMaxConfig.openNullValueFilter
|
|
1132
|
+
openNullValueFilter: openNullValueFilter !== null && openNullValueFilter !== void 0 ? openNullValueFilter : tableMaxConfig === null || tableMaxConfig === void 0 ? void 0 : tableMaxConfig.openNullValueFilter,
|
|
1133
|
+
useTextFilter: useTextFilter !== null && useTextFilter !== void 0 ? useTextFilter : tableMaxConfig === null || tableMaxConfig === void 0 ? void 0 : tableMaxConfig.useTextFilter
|
|
1109
1134
|
};
|
|
1110
1135
|
var tableBodyProps = {
|
|
1111
1136
|
tableContentRef: tableContentRef,
|
|
@@ -19,14 +19,17 @@ import { DateRange } from "./DateRange";
|
|
|
19
19
|
import MultipleSelect from "./MultipleSelect";
|
|
20
20
|
import NumberRange from "./NumberRange";
|
|
21
21
|
import SingleSelect from "./SingleSelect";
|
|
22
|
+
import TextFilter from "./TextFilter";
|
|
22
23
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
24
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
24
26
|
var Filter = function Filter(_ref) {
|
|
25
27
|
var getDynamicFilterOptionsFn = _ref.getDynamicFilterOptionsFn,
|
|
26
28
|
column = _ref.column,
|
|
27
29
|
onCloseFilterPanel = _ref.onCloseFilterPanel,
|
|
28
30
|
manualFiltering = _ref.manualFiltering,
|
|
29
|
-
openNullValueFilter = _ref.openNullValueFilter
|
|
31
|
+
openNullValueFilter = _ref.openNullValueFilter,
|
|
32
|
+
useTextFilter = _ref.useTextFilter;
|
|
30
33
|
var columnDef = column === null || column === void 0 ? void 0 : column.columnDef;
|
|
31
34
|
// 筛选组件类型
|
|
32
35
|
var id = columnDef.id,
|
|
@@ -72,7 +75,6 @@ var Filter = function Filter(_ref) {
|
|
|
72
75
|
// 值为null或空数组时,清除过滤条件。
|
|
73
76
|
newValue = undefined;
|
|
74
77
|
}
|
|
75
|
-
// console.log('handleChangeFilterValue :>> ', newValue);
|
|
76
78
|
setColumnFilterValue(newValue);
|
|
77
79
|
column.setFilterValue(newValue);
|
|
78
80
|
};
|
|
@@ -83,7 +85,6 @@ var Filter = function Filter(_ref) {
|
|
|
83
85
|
// 值为null或空数组时,清除过滤条件。
|
|
84
86
|
newValue = undefined;
|
|
85
87
|
}
|
|
86
|
-
// console.log('handleChangeFilterValue :>> ', newValue);
|
|
87
88
|
setColumnFilterValue(isEmpty(newValue) ? undefined : {
|
|
88
89
|
filterValue: newValue,
|
|
89
90
|
optionsParam: inputSearchValue
|
|
@@ -94,6 +95,18 @@ var Filter = function Filter(_ref) {
|
|
|
94
95
|
});
|
|
95
96
|
};
|
|
96
97
|
|
|
98
|
+
// 修改表格TextFilter筛选参数
|
|
99
|
+
var changeTextFilterValue = useCallback(function (value) {
|
|
100
|
+
if (value === null) {
|
|
101
|
+
// 值为null或空数组时,清除过滤条件。
|
|
102
|
+
column.setFilterValue(undefined);
|
|
103
|
+
setColumnFilterValue(undefined);
|
|
104
|
+
} else {
|
|
105
|
+
column.setFilterValue(value);
|
|
106
|
+
setColumnFilterValue(value);
|
|
107
|
+
}
|
|
108
|
+
}, [column]);
|
|
109
|
+
|
|
97
110
|
// 修改表格筛选参数(防抖)
|
|
98
111
|
var changeFilterValueWithDebounce = useCallback(debounce(function (value) {
|
|
99
112
|
var newValue = value;
|
|
@@ -101,7 +114,6 @@ var Filter = function Filter(_ref) {
|
|
|
101
114
|
// 值为null或空数组时,清除过滤条件。
|
|
102
115
|
newValue = undefined;
|
|
103
116
|
}
|
|
104
|
-
// console.log('handleChangeFilterValue with debounce :>> ', newValue);
|
|
105
117
|
column.setFilterValue(newValue);
|
|
106
118
|
}, 500), [column]);
|
|
107
119
|
|
|
@@ -316,41 +328,53 @@ var Filter = function Filter(_ref) {
|
|
|
316
328
|
})
|
|
317
329
|
});
|
|
318
330
|
case FilterType.AutoComplete:
|
|
319
|
-
return /*#__PURE__*/
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
331
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
332
|
+
children: useTextFilter ? /*#__PURE__*/_jsx(TextFilter, {
|
|
333
|
+
value: columnFilterValue,
|
|
334
|
+
onChange: changeTextFilterValue,
|
|
335
|
+
openNullValueFilter: openNullValueFilter
|
|
336
|
+
}) : /*#__PURE__*/_jsxs("div", {
|
|
337
|
+
className: "single-com-wrapper",
|
|
338
|
+
children: [/*#__PURE__*/_jsx(AutoComplete, {
|
|
339
|
+
options: options,
|
|
340
|
+
placeholder: "",
|
|
341
|
+
filterOption: !!getFilterOptionsFn ? false : function (inputValue, option) {
|
|
342
|
+
var _option$label, _optionStringValue$to;
|
|
343
|
+
var optionStringValue = ((_option$label = option === null || option === void 0 ? void 0 : option.label) !== null && _option$label !== void 0 ? _option$label : '') + '';
|
|
344
|
+
var inputStringValue = (inputValue !== null && inputValue !== void 0 ? inputValue : '') + '';
|
|
345
|
+
// console.log('object', optionStringValue, inputStringValue);
|
|
346
|
+
return ((_optionStringValue$to = optionStringValue.toUpperCase()) === null || _optionStringValue$to === void 0 ? void 0 : _optionStringValue$to.indexOf(inputStringValue.toUpperCase().trim())) !== -1;
|
|
347
|
+
},
|
|
348
|
+
onSearch: onSearch,
|
|
349
|
+
onChange: handleChangeFilterValueWithDebounce,
|
|
350
|
+
style: {
|
|
351
|
+
width: 188
|
|
352
|
+
},
|
|
353
|
+
allowClear: true,
|
|
354
|
+
value: columnFilterValue
|
|
355
|
+
}), quickInput]
|
|
356
|
+
})
|
|
339
357
|
});
|
|
340
358
|
case FilterType.Input:
|
|
341
|
-
return /*#__PURE__*/
|
|
342
|
-
|
|
343
|
-
children: [/*#__PURE__*/_jsx(Input, {
|
|
344
|
-
onChange: function onChange(e) {
|
|
345
|
-
return handleChangeFilterValueWithDebounce(e.target.value);
|
|
346
|
-
},
|
|
347
|
-
style: {
|
|
348
|
-
width: 188
|
|
349
|
-
},
|
|
350
|
-
allowClear: true,
|
|
359
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
360
|
+
children: useTextFilter ? /*#__PURE__*/_jsx(TextFilter, {
|
|
351
361
|
value: columnFilterValue,
|
|
352
|
-
|
|
353
|
-
|
|
362
|
+
onChange: changeTextFilterValue,
|
|
363
|
+
openNullValueFilter: openNullValueFilter
|
|
364
|
+
}) : /*#__PURE__*/_jsxs("div", {
|
|
365
|
+
className: "single-com-wrapper",
|
|
366
|
+
children: [/*#__PURE__*/_jsx(Input, {
|
|
367
|
+
onChange: function onChange(e) {
|
|
368
|
+
return handleChangeFilterValueWithDebounce(e.target.value);
|
|
369
|
+
},
|
|
370
|
+
style: {
|
|
371
|
+
width: 188
|
|
372
|
+
},
|
|
373
|
+
allowClear: true,
|
|
374
|
+
value: columnFilterValue,
|
|
375
|
+
placeholder: t('global.placeholder.input')
|
|
376
|
+
}), quickInput]
|
|
377
|
+
})
|
|
354
378
|
});
|
|
355
379
|
case FilterType.SingleSelect:
|
|
356
380
|
return /*#__PURE__*/_jsx(SingleSelect, {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
import { FilterOperator } from '../../../type';
|
|
4
|
+
/** Text filter operator types */
|
|
5
|
+
export type TextFilterOperator = FilterOperator.Contains | FilterOperator.In | FilterOperator.Between | FilterOperator.IsNull | FilterOperator.IsNotNull;
|
|
6
|
+
/** Text filter value structure - new format */
|
|
7
|
+
export interface TextFilterValue {
|
|
8
|
+
filterValue?: string | string[];
|
|
9
|
+
operator: TextFilterOperator;
|
|
10
|
+
}
|
|
11
|
+
/** Text filter value - old format (backward compatible) */
|
|
12
|
+
export type TextFilterLegacyValue = string;
|
|
13
|
+
interface IProps {
|
|
14
|
+
value: TextFilterValue | TextFilterLegacyValue | undefined;
|
|
15
|
+
onChange: (value: TextFilterValue | TextFilterLegacyValue | undefined) => void;
|
|
16
|
+
openNullValueFilter?: boolean;
|
|
17
|
+
}
|
|
18
|
+
declare const TextFilter: React.FC<IProps>;
|
|
19
|
+
export default TextFilter;
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
3
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
4
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
5
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
9
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
+
import { useTranslation } from "../../../../../hooks/useTranslation";
|
|
12
|
+
import { Button, Input, Select } from 'antd';
|
|
13
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
14
|
+
import "./index.less";
|
|
15
|
+
import { FilterOperator } from "../../../type";
|
|
16
|
+
|
|
17
|
+
/** Text filter operator types */
|
|
18
|
+
|
|
19
|
+
/** Text filter value structure - new format */
|
|
20
|
+
|
|
21
|
+
/** Text filter value - old format (backward compatible) */
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
|
+
var TextFilter = function TextFilter(_ref) {
|
|
25
|
+
var value = _ref.value,
|
|
26
|
+
onChange = _ref.onChange,
|
|
27
|
+
openNullValueFilter = _ref.openNullValueFilter;
|
|
28
|
+
var _useTranslation = useTranslation(),
|
|
29
|
+
_useTranslation2 = _slicedToArray(_useTranslation, 1),
|
|
30
|
+
t = _useTranslation2[0];
|
|
31
|
+
|
|
32
|
+
// Operator options
|
|
33
|
+
var operatorOptions = useMemo(function () {
|
|
34
|
+
return [{
|
|
35
|
+
label: '包含',
|
|
36
|
+
value: FilterOperator.Contains
|
|
37
|
+
},
|
|
38
|
+
// { label: '属于', value: FilterOperator.In },
|
|
39
|
+
{
|
|
40
|
+
label: '介于',
|
|
41
|
+
value: FilterOperator.Between
|
|
42
|
+
}, {
|
|
43
|
+
label: '空值',
|
|
44
|
+
value: FilterOperator.IsNull
|
|
45
|
+
}, {
|
|
46
|
+
label: '非空值',
|
|
47
|
+
value: FilterOperator.IsNotNull
|
|
48
|
+
}];
|
|
49
|
+
}, [t]);
|
|
50
|
+
|
|
51
|
+
// Parse initial value
|
|
52
|
+
var parseInitialValue = useCallback(function () {
|
|
53
|
+
var _value$filterValue;
|
|
54
|
+
if (value === undefined || value === null || value === '') {
|
|
55
|
+
return {
|
|
56
|
+
operator: FilterOperator.Contains,
|
|
57
|
+
filterValue: ''
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Old format: string
|
|
62
|
+
if (typeof value === 'string') {
|
|
63
|
+
return {
|
|
64
|
+
operator: FilterOperator.Contains,
|
|
65
|
+
filterValue: value
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// New format: { filterValue, operator }
|
|
70
|
+
return {
|
|
71
|
+
operator: value.operator || FilterOperator.Contains,
|
|
72
|
+
filterValue: (_value$filterValue = value.filterValue) !== null && _value$filterValue !== void 0 ? _value$filterValue : ''
|
|
73
|
+
};
|
|
74
|
+
}, [value]);
|
|
75
|
+
var _useState = useState(parseInitialValue().operator),
|
|
76
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
77
|
+
operator = _useState2[0],
|
|
78
|
+
setOperator = _useState2[1];
|
|
79
|
+
var _useState3 = useState(parseInitialValue().filterValue),
|
|
80
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
81
|
+
filterValue = _useState4[0],
|
|
82
|
+
setFilterValue = _useState4[1];
|
|
83
|
+
|
|
84
|
+
// For between operator - two input values
|
|
85
|
+
var _useState5 = useState(''),
|
|
86
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
87
|
+
betweenValue1 = _useState6[0],
|
|
88
|
+
setBetweenValue1 = _useState6[1];
|
|
89
|
+
var _useState7 = useState(''),
|
|
90
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
91
|
+
betweenValue2 = _useState8[0],
|
|
92
|
+
setBetweenValue2 = _useState8[1];
|
|
93
|
+
|
|
94
|
+
// 记录上一次的 filterValue,用于判断空值切换
|
|
95
|
+
var _useState9 = useState(parseInitialValue().filterValue),
|
|
96
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
97
|
+
prevFilterValue = _useState10[0],
|
|
98
|
+
setPrevFilterValue = _useState10[1];
|
|
99
|
+
|
|
100
|
+
// 防抖定时器引用
|
|
101
|
+
var debounceTimerRef = useRef(null);
|
|
102
|
+
|
|
103
|
+
// 工具函数:判断值是否为空
|
|
104
|
+
var isValueEmpty = useCallback(function (val) {
|
|
105
|
+
if (val === undefined || val === null || val === '') return true;
|
|
106
|
+
if (Array.isArray(val)) return val.every(function (v) {
|
|
107
|
+
return !v || v.trim() === '';
|
|
108
|
+
});
|
|
109
|
+
return !val || val.trim() === '';
|
|
110
|
+
}, []);
|
|
111
|
+
|
|
112
|
+
// Sync with external value changes
|
|
113
|
+
useEffect(function () {
|
|
114
|
+
var parsed = parseInitialValue();
|
|
115
|
+
setOperator(parsed.operator);
|
|
116
|
+
setFilterValue(parsed.filterValue);
|
|
117
|
+
setPrevFilterValue(parsed.filterValue);
|
|
118
|
+
if (parsed.operator === FilterOperator.Between && Array.isArray(parsed.filterValue)) {
|
|
119
|
+
setBetweenValue1(parsed.filterValue[0] || '');
|
|
120
|
+
setBetweenValue2(parsed.filterValue[1] || '');
|
|
121
|
+
}
|
|
122
|
+
}, [parseInitialValue]);
|
|
123
|
+
|
|
124
|
+
// 构建最终的 filterValue
|
|
125
|
+
var buildResult = useCallback(function (finalFilterValue, finalOperator) {
|
|
126
|
+
var _map$finalOperator;
|
|
127
|
+
var map = _defineProperty(_defineProperty({}, FilterOperator.IsNotNull, 'NOT NULL'), FilterOperator.IsNull, 'NULL');
|
|
128
|
+
var result = {
|
|
129
|
+
filterValue: (_map$finalOperator = map[finalOperator]) !== null && _map$finalOperator !== void 0 ? _map$finalOperator : finalFilterValue,
|
|
130
|
+
operator: finalOperator
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// // Backward compatibility: if operator is FilterOperator.Contains and value is simple string, also support old format
|
|
134
|
+
// if (finalOperator === FilterOperator.Contains && typeof finalFilterValue === 'string' && !finalFilterValue.includes(',')) {
|
|
135
|
+
// return finalFilterValue;
|
|
136
|
+
// }
|
|
137
|
+
|
|
138
|
+
return result;
|
|
139
|
+
}, []);
|
|
140
|
+
|
|
141
|
+
// 处理空值切换判断和触发回调
|
|
142
|
+
var handleValueChange = useCallback(function (newFilterValue, newOperator) {
|
|
143
|
+
var isFromBetween = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
144
|
+
// 判断是否空值切换
|
|
145
|
+
var isOldEmpty = isValueEmpty(prevFilterValue);
|
|
146
|
+
var isNewEmpty = isValueEmpty(newFilterValue);
|
|
147
|
+
var isEmptyToggle = isOldEmpty !== isNewEmpty;
|
|
148
|
+
|
|
149
|
+
// between 模式下一个有值触发
|
|
150
|
+
if (newOperator === FilterOperator.Between) {
|
|
151
|
+
var _arr$, _arr$2;
|
|
152
|
+
var arr = newFilterValue;
|
|
153
|
+
var hasValues = ((_arr$ = arr[0]) === null || _arr$ === void 0 ? void 0 : _arr$.trim()) || ((_arr$2 = arr[1]) === null || _arr$2 === void 0 ? void 0 : _arr$2.trim());
|
|
154
|
+
// if (!hasValues) {
|
|
155
|
+
// setPrevFilterValue(newFilterValue);
|
|
156
|
+
// return;
|
|
157
|
+
// }
|
|
158
|
+
setPrevFilterValue(newFilterValue);
|
|
159
|
+
}
|
|
160
|
+
var result = buildResult(newFilterValue, newOperator);
|
|
161
|
+
if (isEmptyToggle) {
|
|
162
|
+
// 空值切换:立即触发
|
|
163
|
+
onChange(result);
|
|
164
|
+
setPrevFilterValue(newFilterValue);
|
|
165
|
+
} else {
|
|
166
|
+
// 正常输入:延迟 500ms 触发
|
|
167
|
+
if (debounceTimerRef.current) {
|
|
168
|
+
clearTimeout(debounceTimerRef.current);
|
|
169
|
+
}
|
|
170
|
+
debounceTimerRef.current = setTimeout(function () {
|
|
171
|
+
onChange(result);
|
|
172
|
+
setPrevFilterValue(newFilterValue);
|
|
173
|
+
}, 500);
|
|
174
|
+
}
|
|
175
|
+
}, [prevFilterValue, isValueEmpty, buildResult, onChange]);
|
|
176
|
+
|
|
177
|
+
// Handle operator change
|
|
178
|
+
var handleOperatorChange = useCallback(function (newOperator) {
|
|
179
|
+
// 清除之前的定时器
|
|
180
|
+
if (debounceTimerRef.current) {
|
|
181
|
+
clearTimeout(debounceTimerRef.current);
|
|
182
|
+
}
|
|
183
|
+
setOperator(newOperator);
|
|
184
|
+
if (newOperator === FilterOperator.Between) {
|
|
185
|
+
setBetweenValue1('');
|
|
186
|
+
setBetweenValue2('');
|
|
187
|
+
setPrevFilterValue(['', '']);
|
|
188
|
+
} else if (newOperator === FilterOperator.In) {
|
|
189
|
+
setFilterValue('');
|
|
190
|
+
setPrevFilterValue('');
|
|
191
|
+
} else if (newOperator === FilterOperator.IsNull || newOperator === FilterOperator.IsNotNull) {
|
|
192
|
+
setFilterValue('');
|
|
193
|
+
setPrevFilterValue('');
|
|
194
|
+
var result = buildResult(filterValue, newOperator);
|
|
195
|
+
onChange(result);
|
|
196
|
+
} else {
|
|
197
|
+
setFilterValue('');
|
|
198
|
+
setPrevFilterValue('');
|
|
199
|
+
}
|
|
200
|
+
}, []);
|
|
201
|
+
|
|
202
|
+
// Handle filter value change for contain/in
|
|
203
|
+
var handleInputChange = useCallback(function (e) {
|
|
204
|
+
var newValue = e.target.value;
|
|
205
|
+
setFilterValue(newValue);
|
|
206
|
+
handleValueChange(newValue, operator);
|
|
207
|
+
}, [operator, handleValueChange]);
|
|
208
|
+
|
|
209
|
+
// Handle between value changes
|
|
210
|
+
var handleBetweenValue1Change = useCallback(function (e) {
|
|
211
|
+
var newValue1 = e.target.value;
|
|
212
|
+
setBetweenValue1(newValue1);
|
|
213
|
+
handleValueChange([newValue1, betweenValue2], FilterOperator.Between, true);
|
|
214
|
+
}, [betweenValue2, handleValueChange]);
|
|
215
|
+
var handleBetweenValue2Change = useCallback(function (e) {
|
|
216
|
+
var newValue2 = e.target.value;
|
|
217
|
+
setBetweenValue2(newValue2);
|
|
218
|
+
handleValueChange([betweenValue1, newValue2], FilterOperator.Between, true);
|
|
219
|
+
}, [betweenValue1, handleValueChange]);
|
|
220
|
+
|
|
221
|
+
// 组件卸载时清理定时器
|
|
222
|
+
useEffect(function () {
|
|
223
|
+
return function () {
|
|
224
|
+
if (debounceTimerRef.current) {
|
|
225
|
+
clearTimeout(debounceTimerRef.current);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}, []);
|
|
229
|
+
|
|
230
|
+
// Quick input for NULL/NOT NULL
|
|
231
|
+
var renderQuickInput = useCallback(function () {
|
|
232
|
+
if (!openNullValueFilter) return null;
|
|
233
|
+
var isNullSelected = typeof value === 'string' && value.toUpperCase().trim() === 'NULL';
|
|
234
|
+
var isNotNullSelected = typeof value === 'string' && (value.toUpperCase().trim() === 'NOT NULL' || value.toUpperCase().trim() === 'NOTNULL');
|
|
235
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
236
|
+
className: "quickly-input",
|
|
237
|
+
children: [/*#__PURE__*/_jsx("p", {
|
|
238
|
+
className: "quickly-input-title",
|
|
239
|
+
children: "\u5FEB\u6377\u8F93\u5165"
|
|
240
|
+
}), /*#__PURE__*/_jsx("p", {
|
|
241
|
+
className: "quickly-input-item ".concat(isNullSelected ? 'quickly-input-item-selected' : ''),
|
|
242
|
+
onClick: function onClick() {
|
|
243
|
+
return onChange({
|
|
244
|
+
operator: FilterOperator.IsNull,
|
|
245
|
+
filterValue: 'NULL'
|
|
246
|
+
});
|
|
247
|
+
},
|
|
248
|
+
children: "\u7A7A\u503C(NULL)"
|
|
249
|
+
}), /*#__PURE__*/_jsx("p", {
|
|
250
|
+
className: "quickly-input-item ".concat(isNotNullSelected ? 'quickly-input-item-selected' : ''),
|
|
251
|
+
onClick: function onClick() {
|
|
252
|
+
return onChange({
|
|
253
|
+
operator: FilterOperator.IsNotNull,
|
|
254
|
+
filterValue: 'NOT NULL'
|
|
255
|
+
});
|
|
256
|
+
},
|
|
257
|
+
children: "\u975E\u7A7A\u503C(NOT NULL)"
|
|
258
|
+
})]
|
|
259
|
+
});
|
|
260
|
+
}, [openNullValueFilter, value, onChange]);
|
|
261
|
+
|
|
262
|
+
// Render single input for contain/in operators
|
|
263
|
+
var renderSingleInput = useCallback(function () {
|
|
264
|
+
var inputValue = typeof filterValue === 'string' ? filterValue : '';
|
|
265
|
+
if (operator === FilterOperator.In) {
|
|
266
|
+
return /*#__PURE__*/_jsx(Input, {
|
|
267
|
+
className: "text-filter-input",
|
|
268
|
+
value: inputValue,
|
|
269
|
+
onChange: handleInputChange,
|
|
270
|
+
placeholder: '输入多个值,空格分隔',
|
|
271
|
+
allowClear: true
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
return /*#__PURE__*/_jsx(Input, {
|
|
275
|
+
className: "text-filter-input",
|
|
276
|
+
value: inputValue,
|
|
277
|
+
onChange: handleInputChange,
|
|
278
|
+
placeholder: '请输入',
|
|
279
|
+
allowClear: true
|
|
280
|
+
});
|
|
281
|
+
}, [operator, filterValue, handleInputChange, t]);
|
|
282
|
+
|
|
283
|
+
// Render two inputs for between operator
|
|
284
|
+
var renderBetweenInputs = useCallback(function () {
|
|
285
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
286
|
+
className: "text-filter-between-wrapper",
|
|
287
|
+
children: [/*#__PURE__*/_jsx(Input, {
|
|
288
|
+
className: "text-filter-input",
|
|
289
|
+
value: betweenValue1,
|
|
290
|
+
onChange: handleBetweenValue1Change,
|
|
291
|
+
placeholder: '起始值',
|
|
292
|
+
allowClear: true
|
|
293
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
294
|
+
className: "text-filter-between-separator",
|
|
295
|
+
children: "-"
|
|
296
|
+
}), /*#__PURE__*/_jsx(Input, {
|
|
297
|
+
className: "text-filter-input",
|
|
298
|
+
value: betweenValue2,
|
|
299
|
+
onChange: handleBetweenValue2Change,
|
|
300
|
+
placeholder: '结束值',
|
|
301
|
+
allowClear: true
|
|
302
|
+
})]
|
|
303
|
+
});
|
|
304
|
+
}, [betweenValue1, betweenValue2, handleBetweenValue1Change, handleBetweenValue2Change, t]);
|
|
305
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
306
|
+
className: "tableMax-filter-textFilter",
|
|
307
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
308
|
+
className: "text-filter-operator",
|
|
309
|
+
children: /*#__PURE__*/_jsx(Select, {
|
|
310
|
+
value: operator,
|
|
311
|
+
onChange: handleOperatorChange,
|
|
312
|
+
options: operatorOptions,
|
|
313
|
+
style: {
|
|
314
|
+
width: "100%",
|
|
315
|
+
height: '32px'
|
|
316
|
+
},
|
|
317
|
+
size: "small",
|
|
318
|
+
dropdownMatchSelectWidth: false,
|
|
319
|
+
getPopupContainer: function getPopupContainer(trigger) {
|
|
320
|
+
return trigger.parentElement || document.body;
|
|
321
|
+
}
|
|
322
|
+
})
|
|
323
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
324
|
+
className: "text-filter-input-wrapper",
|
|
325
|
+
children: operator === FilterOperator.Between ? renderBetweenInputs() : renderSingleInput()
|
|
326
|
+
}), renderQuickInput(), /*#__PURE__*/_jsx(Button, {
|
|
327
|
+
color: "default",
|
|
328
|
+
type: "link",
|
|
329
|
+
onClick: function onClick() {
|
|
330
|
+
return onChange(null);
|
|
331
|
+
},
|
|
332
|
+
style: {
|
|
333
|
+
marginLeft: '140px'
|
|
334
|
+
},
|
|
335
|
+
children: "\u91CD\u7F6E"
|
|
336
|
+
})]
|
|
337
|
+
});
|
|
338
|
+
};
|
|
339
|
+
export default TextFilter;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
.tableMax-filter-textFilter {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
padding: 8px 12px;
|
|
4
|
+
width: 212px;
|
|
5
|
+
position: relative;
|
|
6
|
+
z-index: 1;
|
|
7
|
+
|
|
8
|
+
.text-filter-operator {
|
|
9
|
+
margin-bottom: 8px;
|
|
10
|
+
:global {
|
|
11
|
+
.ant-select {
|
|
12
|
+
width: 100% !important;
|
|
13
|
+
height: 32px !important;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.text-filter-input-wrapper {
|
|
19
|
+
.text-filter-input {
|
|
20
|
+
width: 100%;
|
|
21
|
+
height: 32px;
|
|
22
|
+
padding: 4px 11px;
|
|
23
|
+
border: 1px solid #d9d9d9;
|
|
24
|
+
border-radius: 2px;
|
|
25
|
+
font-size: 14px;
|
|
26
|
+
line-height: 1.5715;
|
|
27
|
+
outline: none;
|
|
28
|
+
transition: border-color 0.3s;
|
|
29
|
+
|
|
30
|
+
&:focus {
|
|
31
|
+
border-color: #40a9ff;
|
|
32
|
+
border-right-width: 1px !important;
|
|
33
|
+
box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
border-color: #40a9ff;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.text-filter-between-wrapper {
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: column;
|
|
44
|
+
align-items: center;
|
|
45
|
+
justify-content: center;
|
|
46
|
+
// gap: 4px;
|
|
47
|
+
|
|
48
|
+
.text-filter-input {
|
|
49
|
+
width: 100%
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.text-filter-between-separator {
|
|
53
|
+
color: #666;
|
|
54
|
+
flex-shrink: 0;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.quickly-input {
|
|
60
|
+
margin-top: 8px;
|
|
61
|
+
padding-top: 8px;
|
|
62
|
+
border-top: 1px solid #f0f0f0;
|
|
63
|
+
|
|
64
|
+
.quickly-input-title {
|
|
65
|
+
font-size: 12px;
|
|
66
|
+
color: #666;
|
|
67
|
+
margin: 0 0 4px 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.quickly-input-item {
|
|
71
|
+
font-size: 13px;
|
|
72
|
+
color: #333;
|
|
73
|
+
padding: 4px 8px;
|
|
74
|
+
margin: 2px 0;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
border-radius: 2px;
|
|
77
|
+
transition: background-color 0.2s;
|
|
78
|
+
|
|
79
|
+
&:hover {
|
|
80
|
+
background-color: #f5f5f5;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&.quickly-input-item-selected {
|
|
84
|
+
background-color: #e6f7ff;
|
|
85
|
+
color: #1890ff;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -4,5 +4,6 @@ declare const customFilterFns: {
|
|
|
4
4
|
multiSelectFilter: (row: any, columnId: any, filterValue: any) => any;
|
|
5
5
|
numberRangeFilter: (row: any, columnId: any, filterValue: any) => boolean;
|
|
6
6
|
singleSelectFilter: (row: any, columnId: any, filterValue: any) => boolean;
|
|
7
|
+
textFilter: (row: any, columnId: any, filterValue: any) => boolean;
|
|
7
8
|
};
|
|
8
9
|
export default customFilterFns;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
1
2
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
3
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
4
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
5
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
6
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
7
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
+
import { FilterOperator } from "../../type";
|
|
7
9
|
import { timeRangeFilter } from "./DateRange/index";
|
|
8
10
|
|
|
9
11
|
// AutoComplete使用的模糊筛选
|
|
@@ -11,7 +13,6 @@ var fuzzyFilter = function fuzzyFilter(row, columnId, filterValue) {
|
|
|
11
13
|
var _row$getValue;
|
|
12
14
|
var filterStringValue = (filterValue !== null && filterValue !== void 0 ? filterValue : '') + '';
|
|
13
15
|
var rowStringValue = ((_row$getValue = row.getValue(columnId)) !== null && _row$getValue !== void 0 ? _row$getValue : '') + '';
|
|
14
|
-
// console.log('object :>> ', rowStringValue, filterStringValue);
|
|
15
16
|
// 处理 null 搜索
|
|
16
17
|
var filterUpper = filterStringValue.toUpperCase().trim();
|
|
17
18
|
if (filterUpper === 'NULL') {
|
|
@@ -31,15 +32,14 @@ var singleSelectFilter = function singleSelectFilter(row, columnId, filterValue)
|
|
|
31
32
|
var value = filterValue.filterValue;
|
|
32
33
|
var filterStringValue = (value !== null && value !== void 0 ? value : '') + '';
|
|
33
34
|
var rowStringValue = ((_row$getValue2 = row.getValue(columnId)) !== null && _row$getValue2 !== void 0 ? _row$getValue2 : '') + '';
|
|
34
|
-
// console.log('object :>> ', rowStringValue, filterStringValue);
|
|
35
35
|
var filterUpper = filterStringValue.toUpperCase().trim();
|
|
36
36
|
if (filterUpper === 'NULL') {
|
|
37
|
-
return rowStringValue === '';
|
|
37
|
+
return rowStringValue === '';
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// 处理 not null 搜索
|
|
41
41
|
if (filterUpper === 'NOT NULL') {
|
|
42
|
-
return rowStringValue !== '';
|
|
42
|
+
return rowStringValue !== '';
|
|
43
43
|
}
|
|
44
44
|
return rowStringValue.toUpperCase().indexOf(filterStringValue.toUpperCase().trim()) !== -1;
|
|
45
45
|
};
|
|
@@ -78,12 +78,104 @@ var numberRangeFilter = function numberRangeFilter(row, columnId, filterValue) {
|
|
|
78
78
|
}
|
|
79
79
|
};
|
|
80
80
|
|
|
81
|
+
// TextFilter 使用的筛选函数,支持 contain、in、between 操作符
|
|
82
|
+
var textFilter = function textFilter(row, columnId, filterValue) {
|
|
83
|
+
var _row$getValue4;
|
|
84
|
+
var rowStringValue = ((_row$getValue4 = row.getValue(columnId)) !== null && _row$getValue4 !== void 0 ? _row$getValue4 : '') + '';
|
|
85
|
+
var rowUpper = rowStringValue.toUpperCase().trim();
|
|
86
|
+
|
|
87
|
+
// 处理 null 搜索
|
|
88
|
+
if (filterValue === 'NULL') {
|
|
89
|
+
return rowStringValue === '';
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 处理 not null 搜索
|
|
93
|
+
if (filterValue === 'NOT NULL' || filterValue === 'NOTNULL') {
|
|
94
|
+
return rowStringValue !== '';
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// 新格式: { filterValue: string | string[], operator: FilterOperator.Contains | FilterOperator.In | FilterOperator.Between }
|
|
98
|
+
if (filterValue && _typeof(filterValue) === 'object' && 'operator' in filterValue) {
|
|
99
|
+
var value = filterValue.filterValue,
|
|
100
|
+
operator = filterValue.operator;
|
|
101
|
+
|
|
102
|
+
// 处理 NULL/NOT NULL
|
|
103
|
+
if (value === 'NULL') {
|
|
104
|
+
return rowStringValue === '';
|
|
105
|
+
}
|
|
106
|
+
if (value === 'NOT NULL' || value === 'NOTNULL') {
|
|
107
|
+
return rowStringValue !== '';
|
|
108
|
+
}
|
|
109
|
+
switch (operator) {
|
|
110
|
+
case FilterOperator.IsNotNull:
|
|
111
|
+
return rowStringValue !== '';
|
|
112
|
+
case FilterOperator.IsNull:
|
|
113
|
+
return rowStringValue === '';
|
|
114
|
+
case FilterOperator.Contains:
|
|
115
|
+
{
|
|
116
|
+
// 包含筛选
|
|
117
|
+
var filterString = (value !== null && value !== void 0 ? value : '') + '';
|
|
118
|
+
return rowUpper.indexOf(filterString.toUpperCase().trim()) !== -1;
|
|
119
|
+
}
|
|
120
|
+
case FilterOperator.Contains:
|
|
121
|
+
{
|
|
122
|
+
// 包含筛选
|
|
123
|
+
var _filterString = (value !== null && value !== void 0 ? value : '') + '';
|
|
124
|
+
return rowUpper.indexOf(_filterString.toUpperCase().trim()) !== -1;
|
|
125
|
+
}
|
|
126
|
+
case FilterOperator.In:
|
|
127
|
+
{
|
|
128
|
+
// 属于筛选 - 检查值是否在列表中
|
|
129
|
+
if (Array.isArray(value)) {
|
|
130
|
+
return value.some(function (v) {
|
|
131
|
+
var vStr = (v !== null && v !== void 0 ? v : '') + '';
|
|
132
|
+
return vStr.toUpperCase().trim() === rowUpper;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// 如果是字符串,尝试按逗号分隔
|
|
136
|
+
var values = ((value !== null && value !== void 0 ? value : '') + '').split(',').map(function (v) {
|
|
137
|
+
return v.trim().toUpperCase();
|
|
138
|
+
});
|
|
139
|
+
return values.includes(rowUpper);
|
|
140
|
+
}
|
|
141
|
+
case FilterOperator.Between:
|
|
142
|
+
{
|
|
143
|
+
// 介于筛选 - 对字符串进行范围比较
|
|
144
|
+
if (Array.isArray(value) && value.length === 2) {
|
|
145
|
+
var _value = _slicedToArray(value, 2),
|
|
146
|
+
min = _value[0],
|
|
147
|
+
max = _value[1];
|
|
148
|
+
var minUpper = (min !== null && min !== void 0 ? min : '').toUpperCase().trim();
|
|
149
|
+
var maxUpper = (max !== null && max !== void 0 ? max : '').toUpperCase().trim();
|
|
150
|
+
|
|
151
|
+
// 如果两者都为空,返回 true(不筛选)
|
|
152
|
+
if (!minUpper && !maxUpper) return true;
|
|
153
|
+
// 只有最小值
|
|
154
|
+
if (minUpper && !maxUpper) return rowUpper >= minUpper;
|
|
155
|
+
// 只有最大值
|
|
156
|
+
if (!minUpper && maxUpper) return rowUpper <= maxUpper;
|
|
157
|
+
// 两者都有
|
|
158
|
+
return rowUpper >= minUpper && rowUpper <= maxUpper;
|
|
159
|
+
}
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
default:
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 旧格式兼容: 直接字符串
|
|
168
|
+
var filterStringValue = (filterValue !== null && filterValue !== void 0 ? filterValue : '') + '';
|
|
169
|
+
return rowUpper.indexOf(filterStringValue.toUpperCase().trim()) !== -1;
|
|
170
|
+
};
|
|
171
|
+
|
|
81
172
|
// 自定义的筛选函数,后续都加在这里
|
|
82
173
|
var customFilterFns = {
|
|
83
174
|
timeRangeFilter: timeRangeFilter,
|
|
84
175
|
fuzzyFilter: fuzzyFilter,
|
|
85
176
|
multiSelectFilter: multiSelectFilter,
|
|
86
177
|
numberRangeFilter: numberRangeFilter,
|
|
87
|
-
singleSelectFilter: singleSelectFilter
|
|
178
|
+
singleSelectFilter: singleSelectFilter,
|
|
179
|
+
textFilter: textFilter
|
|
88
180
|
};
|
|
89
181
|
export default customFilterFns;
|
|
@@ -30,11 +30,12 @@ export type IFilterFnEnum = {
|
|
|
30
30
|
[key in FilterType]: FilterFnType;
|
|
31
31
|
};
|
|
32
32
|
export declare function setDefaultFilterFn(columns: TableMaxColumnType[]): TableMaxColumnType[];
|
|
33
|
-
export declare function ColumnFilter({ column, manualFiltering, getDynamicFilterOptionsFn, openNullValueFilter }: {
|
|
33
|
+
export declare function ColumnFilter({ column, manualFiltering, getDynamicFilterOptionsFn, openNullValueFilter, useTextFilter }: {
|
|
34
34
|
column: Column<any, unknown>;
|
|
35
35
|
manualFiltering: boolean;
|
|
36
36
|
getDynamicFilterOptionsFn: Function;
|
|
37
37
|
openNullValueFilter?: boolean;
|
|
38
|
+
useTextFilter?: boolean;
|
|
38
39
|
}): import("react/jsx-runtime").JSX.Element;
|
|
39
40
|
export declare function isEmpty(value: any): boolean;
|
|
40
41
|
export declare function uniqueByField(arr: any, field: any): any;
|
|
@@ -36,7 +36,7 @@ export var FilterType = /*#__PURE__*/function (FilterType) {
|
|
|
36
36
|
return FilterType;
|
|
37
37
|
}({}); // 输入框
|
|
38
38
|
// 不同筛选类型需要特定的过滤函数
|
|
39
|
-
var FILTER_FN_ENUM = (_FILTER_FN_ENUM = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FILTER_FN_ENUM, FilterType.Date, 'timeRangeFilter'), FilterType.DateRange, 'timeRangeFilter'), FilterType.SingleDate, 'fuzzyFilter'), FilterType.MultiSelect, 'multiSelectFilter'), FilterType.Integer, 'numberRangeFilter'), FilterType.NumberRange, 'numberRangeFilter'), FilterType.SingleInteger, 'fuzzyFilter'), FilterType.SingleNumber, 'fuzzyFilter'), FilterType.SingleSelect, 'singleSelectFilter'), FilterType.AutoComplete, '
|
|
39
|
+
var FILTER_FN_ENUM = (_FILTER_FN_ENUM = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_FILTER_FN_ENUM, FilterType.Date, 'timeRangeFilter'), FilterType.DateRange, 'timeRangeFilter'), FilterType.SingleDate, 'fuzzyFilter'), FilterType.MultiSelect, 'multiSelectFilter'), FilterType.Integer, 'numberRangeFilter'), FilterType.NumberRange, 'numberRangeFilter'), FilterType.SingleInteger, 'fuzzyFilter'), FilterType.SingleNumber, 'fuzzyFilter'), FilterType.SingleSelect, 'singleSelectFilter'), FilterType.AutoComplete, 'textFilter'), _defineProperty(_FILTER_FN_ENUM, FilterType.Input, 'textFilter'));
|
|
40
40
|
|
|
41
41
|
// 给columns配置填充默认的过滤函数
|
|
42
42
|
export function setDefaultFilterFn(columns) {
|
|
@@ -66,7 +66,8 @@ export function ColumnFilter(_ref) {
|
|
|
66
66
|
var column = _ref.column,
|
|
67
67
|
manualFiltering = _ref.manualFiltering,
|
|
68
68
|
getDynamicFilterOptionsFn = _ref.getDynamicFilterOptionsFn,
|
|
69
|
-
openNullValueFilter = _ref.openNullValueFilter
|
|
69
|
+
openNullValueFilter = _ref.openNullValueFilter,
|
|
70
|
+
useTextFilter = _ref.useTextFilter;
|
|
70
71
|
var _useConfig = useConfig(),
|
|
71
72
|
root = _useConfig.root;
|
|
72
73
|
var _useState = useState(false),
|
|
@@ -158,7 +159,8 @@ export function ColumnFilter(_ref) {
|
|
|
158
159
|
column: column,
|
|
159
160
|
onCloseFilterPanel: handleClosePanel,
|
|
160
161
|
manualFiltering: manualFiltering,
|
|
161
|
-
openNullValueFilter: openNullValueFilter
|
|
162
|
+
openNullValueFilter: openNullValueFilter,
|
|
163
|
+
useTextFilter: useTextFilter
|
|
162
164
|
})
|
|
163
165
|
}), root ? document.querySelector(root) : document.body) : null]
|
|
164
166
|
});
|
|
@@ -16,14 +16,13 @@
|
|
|
16
16
|
height: fit-content;
|
|
17
17
|
box-shadow: 0px 5px 12px 4px rgba(3, 6, 33, 0.15);
|
|
18
18
|
background: @tableSettingModalBgc;
|
|
19
|
-
// border: 1px solid #d9d9d9;
|
|
20
19
|
transform: translateX(-100%);
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
:global {
|
|
24
23
|
.ant-select-dropdown {
|
|
25
|
-
position:
|
|
26
|
-
z-index:
|
|
24
|
+
position: fixed;
|
|
25
|
+
z-index: 3000;
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
28
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { TableMaxColumnType } from "../../type";
|
|
2
|
-
export declare const numberSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
3
|
-
export declare const stringSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
4
|
-
export declare const numberOrStringSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
5
|
-
export declare const timeSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
2
|
+
export declare const numberSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
3
|
+
export declare const stringSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
4
|
+
export declare const numberOrStringSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
5
|
+
export declare const timeSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
6
6
|
declare const customSortFns: {
|
|
7
|
-
numberSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
8
|
-
stringSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
9
|
-
timeSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
10
|
-
numberOrStringSortFn: (rowA: any, rowB: any, columnId: string) =>
|
|
7
|
+
numberSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
8
|
+
stringSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
9
|
+
timeSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
10
|
+
numberOrStringSortFn: (rowA: any, rowB: any, columnId: string) => 1 | 0 | -1;
|
|
11
11
|
};
|
|
12
12
|
export default customSortFns;
|
|
13
13
|
export type SortFnType = keyof typeof customSortFns | undefined;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { VirtualScrollConfig } from '../contexts';
|
|
2
2
|
export declare const useVirtualCalculations: (table: any, config: VirtualScrollConfig, tableHeaderRef: React.RefObject<HTMLDivElement>, tableBodyRef: React.RefObject<HTMLDivElement>) => {
|
|
3
3
|
state: {
|
|
4
|
-
columnVirtualizer: import("@tanstack/
|
|
5
|
-
virtualColumns: import("@tanstack/
|
|
4
|
+
columnVirtualizer: import("@tanstack/virtual-core").Virtualizer<HTMLDivElement, Element>;
|
|
5
|
+
virtualColumns: import("@tanstack/virtual-core").VirtualItem[];
|
|
6
6
|
virtualPaddingLeft: any;
|
|
7
7
|
virtualPaddingRight: number;
|
|
8
|
-
rowVirtualizer: import("@tanstack/
|
|
9
|
-
virtualRows: import("@tanstack/
|
|
8
|
+
rowVirtualizer: import("@tanstack/virtual-core").Virtualizer<HTMLDivElement, Element>;
|
|
9
|
+
virtualRows: import("@tanstack/virtual-core").VirtualItem[];
|
|
10
10
|
leftPinnedColumns: any;
|
|
11
11
|
rightPinnedColumns: any;
|
|
12
12
|
scrollableColumns: any;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VirtualScrollConfig } from '../contexts';
|
|
2
2
|
export declare const useVirtualCalculations: (table: any, tableKey: string, config: VirtualScrollConfig, tableBodyRef: React.RefObject<HTMLDivElement>) => {
|
|
3
3
|
state: {
|
|
4
|
-
rowVirtualizer: import("@tanstack/
|
|
4
|
+
rowVirtualizer: import("@tanstack/virtual-core").Virtualizer<HTMLDivElement, Element>;
|
|
5
5
|
virtualRows: any[];
|
|
6
6
|
};
|
|
7
7
|
isVirtualEnabled: boolean;
|
|
@@ -45,3 +45,4 @@ export declare const downloadExcel: ({ url, data, title, setDownLoading, method,
|
|
|
45
45
|
}) => void;
|
|
46
46
|
export declare const filterOptions: (inputValue: any, option: any) => boolean;
|
|
47
47
|
export declare const supportsPassive: boolean;
|
|
48
|
+
export declare function splitString(str: any): string | string[];
|
|
@@ -200,17 +200,37 @@ export var getFormatFiltersV2 = function getFormatFiltersV2(columns, originFilte
|
|
|
200
200
|
res.value = value.filterValue;
|
|
201
201
|
res.operator = JSON.stringify(res.value) === '["NULL"]' ? FilterOperator.IsNull : FilterOperator.In;
|
|
202
202
|
} else if (filterType === FilterType.Input || filterType === FilterType.AutoComplete) {
|
|
203
|
-
var _value$toUpperCase;
|
|
204
203
|
// Input组件
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
204
|
+
if (res.value === 'string') {
|
|
205
|
+
var _value$toUpperCase;
|
|
206
|
+
var upperValue = value === null || value === void 0 || (_value$toUpperCase = value.toUpperCase()) === null || _value$toUpperCase === void 0 ? void 0 : _value$toUpperCase.trim();
|
|
207
|
+
res.value = splitString(value + '');
|
|
208
|
+
res.operator = upperValue === 'NULL' ? FilterOperator.IsNull : upperValue === 'NOT NULL' || upperValue === 'NOTNULL' ? FilterOperator.IsNotNull : typeof res.value === 'string' ? FilterOperator.Contains : FilterOperator.In;
|
|
209
|
+
} else {
|
|
210
|
+
var _operatorMap$_upperVa;
|
|
211
|
+
// 1. 简化变量处理:合并空值判断 + 类型转换
|
|
212
|
+
var _upperValue = (value === null || value === void 0 ? void 0 : value.toString().toUpperCase().trim()) || '';
|
|
213
|
+
var _ref7 = value || {},
|
|
214
|
+
filterValue = _ref7.filterValue,
|
|
215
|
+
operator = _ref7.operator;
|
|
216
|
+
|
|
217
|
+
// 2. 拆分 operator 逻辑:用对象映射替代多层三元,更易维护
|
|
218
|
+
var operatorMap = {
|
|
219
|
+
NULL: FilterOperator.IsNull,
|
|
220
|
+
'NOT NULL': FilterOperator.IsNotNull,
|
|
221
|
+
NOTNULL: FilterOperator.IsNotNull
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
// 3. 核心逻辑简化:先匹配特殊值 → 再处理默认逻辑
|
|
225
|
+
res.value = typeof filterValue === 'string' ? splitString((filterValue !== null && filterValue !== void 0 ? filterValue : '') + '') : filterValue; // 空值合并替代 +'' 更严谨
|
|
226
|
+
res.operator = (_operatorMap$_upperVa = operatorMap[_upperValue]) !== null && _operatorMap$_upperVa !== void 0 ? _operatorMap$_upperVa : operator === FilterOperator.Contains ? typeof res.value === 'string' ? FilterOperator.Contains : FilterOperator.In : operator;
|
|
227
|
+
}
|
|
208
228
|
} else if (filterType === FilterType.SingleSelect) {
|
|
209
229
|
var _res$value;
|
|
210
230
|
// 单选组件
|
|
211
231
|
res.value = value.filterValue;
|
|
212
|
-
var
|
|
213
|
-
res.operator =
|
|
232
|
+
var _upperValue2 = typeof res.value === 'string' ? (_res$value = res.value) === null || _res$value === void 0 ? void 0 : _res$value.toUpperCase() : res.value;
|
|
233
|
+
res.operator = _upperValue2 === 'NULL' ? FilterOperator.IsNull : _upperValue2 === 'NOT NULL' ? FilterOperator.IsNotNull : FilterOperator.Eq;
|
|
214
234
|
} else {
|
|
215
235
|
// 其他组件: SingleDate/SingleNumber
|
|
216
236
|
res.operator = FilterOperator.Eq;
|
|
@@ -225,8 +245,8 @@ export var getFormatSorting = function getFormatSorting(columns, originSorting)
|
|
|
225
245
|
var curColumn = columns.find(function (item) {
|
|
226
246
|
return item.id === sort.id;
|
|
227
247
|
});
|
|
228
|
-
var
|
|
229
|
-
sortingKey =
|
|
248
|
+
var _ref8 = curColumn || {},
|
|
249
|
+
sortingKey = _ref8.sortingKey;
|
|
230
250
|
// 优先取formattedFilterKey作为key
|
|
231
251
|
var formatKey = sortingKey || sort.id;
|
|
232
252
|
return _objectSpread(_objectSpread({}, sort), {}, {
|
|
@@ -251,13 +271,13 @@ export var operationColumnNoTooltips = function operationColumnNoTooltips(column
|
|
|
251
271
|
};
|
|
252
272
|
|
|
253
273
|
//下载
|
|
254
|
-
export var downloadExcel = function downloadExcel(
|
|
255
|
-
var url =
|
|
256
|
-
data =
|
|
257
|
-
title =
|
|
258
|
-
setDownLoading =
|
|
259
|
-
method =
|
|
260
|
-
request =
|
|
274
|
+
export var downloadExcel = function downloadExcel(_ref9) {
|
|
275
|
+
var url = _ref9.url,
|
|
276
|
+
data = _ref9.data,
|
|
277
|
+
title = _ref9.title,
|
|
278
|
+
setDownLoading = _ref9.setDownLoading,
|
|
279
|
+
method = _ref9.method,
|
|
280
|
+
request = _ref9.request;
|
|
261
281
|
setDownLoading(true);
|
|
262
282
|
request(url, {
|
|
263
283
|
method: method || 'post',
|
|
@@ -295,7 +315,7 @@ export var supportsPassive = function () {
|
|
|
295
315
|
} catch (e) {}
|
|
296
316
|
return supports;
|
|
297
317
|
}();
|
|
298
|
-
function splitString(str) {
|
|
318
|
+
export function splitString(str) {
|
|
299
319
|
var text = String(str || '').trim();
|
|
300
320
|
if (text === '') return '';
|
|
301
321
|
return /\s+/.test(text) ? text.split(/\s+/) : text;
|
package/dist/locales/zh_CN.js
CHANGED