@creekjs/web-components 1.0.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/.fatherrc.ts +13 -0
- package/.turbo/daemon/deec863de02760ed-turbo.log.2024-11-20 +0 -0
- package/README.md +1026 -0
- package/dist/bg-center/index.js +28 -0
- package/dist/creek-config-provider/CreekConfigContext.js +2 -0
- package/dist/creek-config-provider/index.js +14 -0
- package/dist/creek-hooks/index.js +1 -0
- package/dist/creek-hooks/useViewportHeight.js +147 -0
- package/dist/creek-icon/index.js +37 -0
- package/dist/creek-keep-alive/index.js +20 -0
- package/dist/creek-layout/CollapseButton.js +59 -0
- package/dist/creek-layout/Exception/NotFound.js +13 -0
- package/dist/creek-layout/Exception/NotFoundPage.js +5 -0
- package/dist/creek-layout/Exception/index.js +8 -0
- package/dist/creek-layout/HeaderContent/FullScreen.js +50 -0
- package/dist/creek-layout/HeaderContent/UserInfo.js +58 -0
- package/dist/creek-layout/HeaderContent/index.js +33 -0
- package/dist/creek-layout/index.js +86 -0
- package/dist/creek-loading/index.js +52 -0
- package/dist/creek-search/CreekSearch.js +51 -0
- package/dist/creek-search/CreekSearchContext.js +546 -0
- package/dist/creek-search/CreekSearchFilterDisplay.js +97 -0
- package/dist/creek-search/CreekSearchInput.js +96 -0
- package/dist/creek-search/CreekSearchValueSelector.js +422 -0
- package/dist/creek-search/index.js +5 -0
- package/dist/creek-search/type.js +1 -0
- package/dist/creek-table/SearchTable.js +121 -0
- package/dist/creek-table/TableOptionRender.js +65 -0
- package/dist/creek-table/TableViewContent.js +45 -0
- package/dist/creek-table/hooks/index.js +3 -0
- package/dist/creek-table/hooks/useAdaptiveToolBar.js +48 -0
- package/dist/creek-table/hooks/useAutoAddFilterToColumns.js +93 -0
- package/dist/creek-table/hooks/useElementDistance.js +58 -0
- package/dist/creek-table/index.js +25 -0
- package/dist/creek-table/toolBarRender.js +36 -0
- package/dist/creek-table/type.js +1 -0
- package/dist/index.js +7 -0
- package/package.json +19 -0
- package/src/bg-center/index.tsx +26 -0
- package/src/creek-config-provider/CreekConfigContext.tsx +7 -0
- package/src/creek-config-provider/index.tsx +12 -0
- package/src/creek-hooks/index.ts +1 -0
- package/src/creek-hooks/useViewportHeight.tsx +154 -0
- package/src/creek-icon/index.tsx +34 -0
- package/src/creek-keep-alive/index.tsx +11 -0
- package/src/creek-layout/CollapseButton.tsx +66 -0
- package/src/creek-layout/Exception/NotFound.tsx +12 -0
- package/src/creek-layout/Exception/NotFoundPage.tsx +4 -0
- package/src/creek-layout/Exception/index.tsx +10 -0
- package/src/creek-layout/HeaderContent/FullScreen.tsx +46 -0
- package/src/creek-layout/HeaderContent/UserInfo.tsx +54 -0
- package/src/creek-layout/HeaderContent/index.tsx +27 -0
- package/src/creek-layout/index.tsx +98 -0
- package/src/creek-loading/index.tsx +35 -0
- package/src/creek-search/CreekSearch.tsx +59 -0
- package/src/creek-search/CreekSearchContext.tsx +593 -0
- package/src/creek-search/CreekSearchFilterDisplay.tsx +84 -0
- package/src/creek-search/CreekSearchInput.tsx +75 -0
- package/src/creek-search/CreekSearchValueSelector.tsx +324 -0
- package/src/creek-search/index.tsx +5 -0
- package/src/creek-search/type.ts +9 -0
- package/src/creek-table/SearchTable.tsx +115 -0
- package/src/creek-table/TableOptionRender.tsx +57 -0
- package/src/creek-table/TableViewContent.tsx +44 -0
- package/src/creek-table/hooks/index.ts +4 -0
- package/src/creek-table/hooks/useAdaptiveToolBar.tsx +45 -0
- package/src/creek-table/hooks/useAutoAddFilterToColumns.tsx +90 -0
- package/src/creek-table/hooks/useElementDistance.tsx +64 -0
- package/src/creek-table/index.tsx +16 -0
- package/src/creek-table/toolBarRender.tsx +28 -0
- package/src/creek-table/type.ts +21 -0
- package/src/index.tsx +8 -0
- package/tsconfig.json +12 -0
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
import { createStyles } from 'antd-style';
|
|
6
|
+
import classnames from 'classnames';
|
|
7
|
+
import { CreekSearchProvider } from "./CreekSearchContext";
|
|
8
|
+
import { CreekFilterDisplay } from "./CreekSearchFilterDisplay";
|
|
9
|
+
import { CreekSearchInput } from "./CreekSearchInput";
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
var useStyles = createStyles(function (_ref, props) {
|
|
13
|
+
var token = _ref.token,
|
|
14
|
+
prefixCls = _ref.prefixCls;
|
|
15
|
+
return {
|
|
16
|
+
creekSearchContainer: {
|
|
17
|
+
padding: '20px 20px 0 20px',
|
|
18
|
+
width: '100%',
|
|
19
|
+
display: 'flex',
|
|
20
|
+
flexDirection: 'column',
|
|
21
|
+
alignItems: props.justify === 'end' ? 'flex-end' : 'flex-start'
|
|
22
|
+
},
|
|
23
|
+
creekSearchContainerEnd: _defineProperty({}, "& .".concat(prefixCls, "-tag"), {
|
|
24
|
+
marginInlineEnd: 0
|
|
25
|
+
}),
|
|
26
|
+
creekSearchFilterDisplay: {
|
|
27
|
+
marginTop: '10px'
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
export var CreekSearch = function CreekSearch(props) {
|
|
32
|
+
var _props$columns = props.columns,
|
|
33
|
+
columns = _props$columns === void 0 ? [] : _props$columns,
|
|
34
|
+
onSubmit = props.onSubmit,
|
|
35
|
+
_props$justify = props.justify,
|
|
36
|
+
justify = _props$justify === void 0 ? 'start' : _props$justify;
|
|
37
|
+
var _useStyles = useStyles({
|
|
38
|
+
justify: justify
|
|
39
|
+
}),
|
|
40
|
+
styles = _useStyles.styles;
|
|
41
|
+
return /*#__PURE__*/_jsx(CreekSearchProvider, {
|
|
42
|
+
columns: columns,
|
|
43
|
+
onSubmit: onSubmit,
|
|
44
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
45
|
+
className: classnames(styles.creekSearchContainer, justify === 'end' && styles.creekSearchContainerEnd),
|
|
46
|
+
children: [/*#__PURE__*/_jsx(CreekSearchInput, {}), /*#__PURE__*/_jsx(CreekFilterDisplay, {
|
|
47
|
+
className: styles.creekSearchFilterDisplay
|
|
48
|
+
})]
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
};
|
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
4
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
5
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
|
+
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; }
|
|
8
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
|
+
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); }
|
|
10
|
+
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); }
|
|
11
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
12
|
+
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."); }
|
|
13
|
+
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); }
|
|
14
|
+
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; }
|
|
15
|
+
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; } }
|
|
16
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
17
|
+
import dayjs from 'dayjs';
|
|
18
|
+
import _ from 'lodash';
|
|
19
|
+
import React, { createContext, useContext, useRef, useState } from 'react';
|
|
20
|
+
|
|
21
|
+
// ValueType配置接口
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
// ValueType配置映射表
|
|
24
|
+
var VALUE_TYPE_CONFIG_MAP = {
|
|
25
|
+
// 文本输入类
|
|
26
|
+
text: {
|
|
27
|
+
showValueSelector: false,
|
|
28
|
+
displayName: '文本',
|
|
29
|
+
componentType: 'input'
|
|
30
|
+
},
|
|
31
|
+
textarea: {
|
|
32
|
+
showValueSelector: false,
|
|
33
|
+
displayName: '多行文本',
|
|
34
|
+
componentType: 'input'
|
|
35
|
+
},
|
|
36
|
+
password: {
|
|
37
|
+
showValueSelector: false,
|
|
38
|
+
displayName: '密码',
|
|
39
|
+
componentType: 'input'
|
|
40
|
+
},
|
|
41
|
+
// 数字类
|
|
42
|
+
digit: {
|
|
43
|
+
showValueSelector: true,
|
|
44
|
+
displayName: '数字',
|
|
45
|
+
componentType: 'number'
|
|
46
|
+
},
|
|
47
|
+
money: {
|
|
48
|
+
showValueSelector: true,
|
|
49
|
+
displayName: '金额',
|
|
50
|
+
componentType: 'number'
|
|
51
|
+
},
|
|
52
|
+
percent: {
|
|
53
|
+
showValueSelector: true,
|
|
54
|
+
displayName: '百分比',
|
|
55
|
+
componentType: 'number'
|
|
56
|
+
},
|
|
57
|
+
// 选择类
|
|
58
|
+
select: {
|
|
59
|
+
showValueSelector: true,
|
|
60
|
+
displayName: '选择器',
|
|
61
|
+
componentType: 'select'
|
|
62
|
+
},
|
|
63
|
+
radio: {
|
|
64
|
+
showValueSelector: true,
|
|
65
|
+
displayName: '单选',
|
|
66
|
+
componentType: 'radio'
|
|
67
|
+
},
|
|
68
|
+
radioButton: {
|
|
69
|
+
showValueSelector: true,
|
|
70
|
+
displayName: '单选按钮',
|
|
71
|
+
componentType: 'radio'
|
|
72
|
+
},
|
|
73
|
+
checkbox: {
|
|
74
|
+
showValueSelector: true,
|
|
75
|
+
displayName: '多选',
|
|
76
|
+
componentType: 'checkbox'
|
|
77
|
+
},
|
|
78
|
+
switch: {
|
|
79
|
+
showValueSelector: true,
|
|
80
|
+
displayName: '开关',
|
|
81
|
+
componentType: 'radio'
|
|
82
|
+
},
|
|
83
|
+
// 日期类 - 单选
|
|
84
|
+
date: {
|
|
85
|
+
showValueSelector: true,
|
|
86
|
+
dateFormat: 'YYYY-MM-DD',
|
|
87
|
+
isDateTime: true,
|
|
88
|
+
isRange: false,
|
|
89
|
+
displayName: '日期',
|
|
90
|
+
componentType: 'date'
|
|
91
|
+
},
|
|
92
|
+
dateWeek: {
|
|
93
|
+
showValueSelector: true,
|
|
94
|
+
dateFormat: 'YYYY-wo',
|
|
95
|
+
isDateTime: true,
|
|
96
|
+
isRange: false,
|
|
97
|
+
displayName: '周',
|
|
98
|
+
componentType: 'date'
|
|
99
|
+
},
|
|
100
|
+
dateMonth: {
|
|
101
|
+
showValueSelector: true,
|
|
102
|
+
dateFormat: 'YYYY-MM',
|
|
103
|
+
isDateTime: true,
|
|
104
|
+
isRange: false,
|
|
105
|
+
displayName: '月份',
|
|
106
|
+
componentType: 'date'
|
|
107
|
+
},
|
|
108
|
+
dateQuarter: {
|
|
109
|
+
showValueSelector: true,
|
|
110
|
+
dateFormat: 'YYYY-[Q]Q',
|
|
111
|
+
isDateTime: true,
|
|
112
|
+
isRange: false,
|
|
113
|
+
displayName: '季度',
|
|
114
|
+
componentType: 'date'
|
|
115
|
+
},
|
|
116
|
+
dateYear: {
|
|
117
|
+
showValueSelector: true,
|
|
118
|
+
dateFormat: 'YYYY',
|
|
119
|
+
isDateTime: true,
|
|
120
|
+
isRange: false,
|
|
121
|
+
displayName: '年份',
|
|
122
|
+
componentType: 'date'
|
|
123
|
+
},
|
|
124
|
+
dateTime: {
|
|
125
|
+
showValueSelector: true,
|
|
126
|
+
dateFormat: 'YYYY-MM-DD HH:mm:ss',
|
|
127
|
+
isDateTime: true,
|
|
128
|
+
isRange: false,
|
|
129
|
+
displayName: '日期时间',
|
|
130
|
+
componentType: 'date'
|
|
131
|
+
},
|
|
132
|
+
time: {
|
|
133
|
+
showValueSelector: true,
|
|
134
|
+
dateFormat: 'HH:mm:ss',
|
|
135
|
+
isDateTime: true,
|
|
136
|
+
isRange: false,
|
|
137
|
+
displayName: '时间',
|
|
138
|
+
componentType: 'time'
|
|
139
|
+
},
|
|
140
|
+
// 日期类 - 范围
|
|
141
|
+
dateRange: {
|
|
142
|
+
showValueSelector: true,
|
|
143
|
+
dateFormat: 'YYYY-MM-DD',
|
|
144
|
+
isDateTime: true,
|
|
145
|
+
isRange: true,
|
|
146
|
+
displayName: '日期范围',
|
|
147
|
+
componentType: 'dateRange'
|
|
148
|
+
},
|
|
149
|
+
dateTimeRange: {
|
|
150
|
+
showValueSelector: true,
|
|
151
|
+
dateFormat: 'YYYY-MM-DD HH:mm:ss',
|
|
152
|
+
isDateTime: true,
|
|
153
|
+
isRange: true,
|
|
154
|
+
displayName: '日期时间范围',
|
|
155
|
+
componentType: 'dateRange'
|
|
156
|
+
},
|
|
157
|
+
timeRange: {
|
|
158
|
+
showValueSelector: true,
|
|
159
|
+
dateFormat: 'HH:mm:ss',
|
|
160
|
+
isDateTime: true,
|
|
161
|
+
isRange: true,
|
|
162
|
+
displayName: '时间范围',
|
|
163
|
+
componentType: 'timeRange'
|
|
164
|
+
},
|
|
165
|
+
dateWeekRange: {
|
|
166
|
+
showValueSelector: true,
|
|
167
|
+
dateFormat: 'YYYY-wo',
|
|
168
|
+
isDateTime: true,
|
|
169
|
+
isRange: true,
|
|
170
|
+
displayName: '周范围',
|
|
171
|
+
componentType: 'dateRange'
|
|
172
|
+
},
|
|
173
|
+
dateMonthRange: {
|
|
174
|
+
showValueSelector: true,
|
|
175
|
+
dateFormat: 'YYYY-MM',
|
|
176
|
+
isDateTime: true,
|
|
177
|
+
isRange: true,
|
|
178
|
+
displayName: '月份范围',
|
|
179
|
+
componentType: 'dateRange'
|
|
180
|
+
},
|
|
181
|
+
dateQuarterRange: {
|
|
182
|
+
showValueSelector: true,
|
|
183
|
+
dateFormat: 'YYYY-[Q]Q',
|
|
184
|
+
isDateTime: true,
|
|
185
|
+
isRange: true,
|
|
186
|
+
displayName: '季度范围',
|
|
187
|
+
componentType: 'dateRange'
|
|
188
|
+
},
|
|
189
|
+
dateYearRange: {
|
|
190
|
+
showValueSelector: true,
|
|
191
|
+
dateFormat: 'YYYY',
|
|
192
|
+
isDateTime: true,
|
|
193
|
+
isRange: true,
|
|
194
|
+
displayName: '年份范围',
|
|
195
|
+
componentType: 'dateRange'
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
var SearchContext = /*#__PURE__*/createContext(null);
|
|
199
|
+
export var useSearchContext = function useSearchContext() {
|
|
200
|
+
var context = useContext(SearchContext);
|
|
201
|
+
if (!context) {
|
|
202
|
+
throw new Error('useSearchContext must be used within CreekSearchProvider');
|
|
203
|
+
}
|
|
204
|
+
return context;
|
|
205
|
+
};
|
|
206
|
+
export var CreekSearchProvider = function CreekSearchProvider(_ref) {
|
|
207
|
+
var _ref$columns = _ref.columns,
|
|
208
|
+
columns = _ref$columns === void 0 ? [] : _ref$columns,
|
|
209
|
+
onSubmit = _ref.onSubmit,
|
|
210
|
+
beforeSearchSubmit = _ref.beforeSearchSubmit,
|
|
211
|
+
children = _ref.children;
|
|
212
|
+
var _useState = useState(''),
|
|
213
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
214
|
+
searchValue = _useState2[0],
|
|
215
|
+
setSearchValue = _useState2[1];
|
|
216
|
+
var _useState3 = useState([]),
|
|
217
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
218
|
+
filters = _useState4[0],
|
|
219
|
+
setFilters = _useState4[1];
|
|
220
|
+
var _useState5 = useState(false),
|
|
221
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
222
|
+
showValueSelector = _useState6[0],
|
|
223
|
+
setShowValueSelector = _useState6[1];
|
|
224
|
+
var _useState7 = useState(null),
|
|
225
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
226
|
+
selectedColumn = _useState8[0],
|
|
227
|
+
setSelectedColumn = _useState8[1];
|
|
228
|
+
var _useState9 = useState(null),
|
|
229
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
230
|
+
tempValue = _useState10[0],
|
|
231
|
+
setTempValue = _useState10[1];
|
|
232
|
+
var inputRef = useRef(null);
|
|
233
|
+
|
|
234
|
+
// 筛选条件配置
|
|
235
|
+
var filterOptions = columns === null || columns === void 0 ? void 0 : columns.filter(function (item) {
|
|
236
|
+
return item.search !== false || item.hideInSearch !== false;
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// 获取valueType配置
|
|
240
|
+
var getValueTypeConfig = function getValueTypeConfig(valueType) {
|
|
241
|
+
// 如果valueType为undefined,使用默认的text类型
|
|
242
|
+
var validValueType = valueType || 'text';
|
|
243
|
+
return VALUE_TYPE_CONFIG_MAP[validValueType] || VALUE_TYPE_CONFIG_MAP['text'];
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// 判断是否需要显示值选择器
|
|
247
|
+
var shouldShowValueSelector = function shouldShowValueSelector(column) {
|
|
248
|
+
var config = getValueTypeConfig(column.valueType);
|
|
249
|
+
return config.showValueSelector || hasOptions(column);
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
// 格式化日期值
|
|
253
|
+
var formatDateValue = function formatDateValue(value, config) {
|
|
254
|
+
if (!value || !config.isDateTime) return value;
|
|
255
|
+
var formatValue = function formatValue(val) {
|
|
256
|
+
if (!val) return val;
|
|
257
|
+
var day = val.format ? val : dayjs(val);
|
|
258
|
+
return day.format(config.dateFormat);
|
|
259
|
+
};
|
|
260
|
+
if (config.isRange && Array.isArray(value)) {
|
|
261
|
+
var _value = _slicedToArray(value, 2),
|
|
262
|
+
start = _value[0],
|
|
263
|
+
end = _value[1];
|
|
264
|
+
return [formatValue(start), formatValue(end)];
|
|
265
|
+
}
|
|
266
|
+
return formatValue(value);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// 获取选项数据 - 兼容 valueEnum 和 fieldProps.options
|
|
270
|
+
var getColumnOptions = function getColumnOptions(column) {
|
|
271
|
+
var _column$fieldProps;
|
|
272
|
+
// 优先使用 valueEnum
|
|
273
|
+
if (column.valueEnum) {
|
|
274
|
+
if (_typeof(column.valueEnum) === 'object') {
|
|
275
|
+
return Object.entries(column.valueEnum).map(function (_ref2) {
|
|
276
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
277
|
+
key = _ref3[0],
|
|
278
|
+
value = _ref3[1];
|
|
279
|
+
return {
|
|
280
|
+
label: _typeof(value) === 'object' ? value.text || value.label || key : value,
|
|
281
|
+
value: key
|
|
282
|
+
};
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// 然后检查 fieldProps.options
|
|
288
|
+
if ((_column$fieldProps = column.fieldProps) !== null && _column$fieldProps !== void 0 && _column$fieldProps.options) {
|
|
289
|
+
return column.fieldProps.options.map(function (option) {
|
|
290
|
+
return {
|
|
291
|
+
label: option.label || option.text || option.value,
|
|
292
|
+
value: option.value
|
|
293
|
+
};
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
return [];
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
// 获取显示文本 - 兼容 valueEnum 和 fieldProps.options
|
|
300
|
+
var getDisplayText = function getDisplayText(column, value) {
|
|
301
|
+
var _column$fieldProps2;
|
|
302
|
+
// 处理空值
|
|
303
|
+
if (value === undefined || value === null || value === '') {
|
|
304
|
+
return value;
|
|
305
|
+
}
|
|
306
|
+
var config = getValueTypeConfig(column.valueType);
|
|
307
|
+
|
|
308
|
+
// 处理日期时间类型
|
|
309
|
+
if (config.isDateTime) {
|
|
310
|
+
var formattedValue = formatDateValue(value, config);
|
|
311
|
+
if (config.isRange && Array.isArray(formattedValue)) {
|
|
312
|
+
return "".concat(formattedValue[0], " ~ ").concat(formattedValue[1]);
|
|
313
|
+
}
|
|
314
|
+
return formattedValue;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// 处理数组类型(多选等)
|
|
318
|
+
if (Array.isArray(value)) {
|
|
319
|
+
return value.join(' | ');
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// 先尝试从 valueEnum 获取
|
|
323
|
+
if (column.valueEnum && column.valueEnum[value]) {
|
|
324
|
+
var enumItem = column.valueEnum[value];
|
|
325
|
+
return _typeof(enumItem) === 'object' ? enumItem.text || enumItem.label || value : enumItem;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// 再尝试从 fieldProps.options 获取
|
|
329
|
+
if ((_column$fieldProps2 = column.fieldProps) !== null && _column$fieldProps2 !== void 0 && _column$fieldProps2.options) {
|
|
330
|
+
var _option = column.fieldProps.options.find(function (opt) {
|
|
331
|
+
return opt.value === value;
|
|
332
|
+
});
|
|
333
|
+
if (_option) {
|
|
334
|
+
return _option.label || _option.text || _option.value;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (column.valueType === 'switch' && typeof value === 'boolean') {
|
|
338
|
+
return value ? '开启' : '关闭';
|
|
339
|
+
}
|
|
340
|
+
return value;
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
// 判断是否有选项配置
|
|
344
|
+
var hasOptions = function hasOptions(column) {
|
|
345
|
+
var _column$fieldProps3;
|
|
346
|
+
return !!(column.valueEnum || (_column$fieldProps3 = column.fieldProps) !== null && _column$fieldProps3 !== void 0 && _column$fieldProps3.options);
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
// 将 filters 转换成 params 对象
|
|
350
|
+
var filtersToParams = function filtersToParams(filters) {
|
|
351
|
+
var params = {};
|
|
352
|
+
|
|
353
|
+
// 将 filters 数组转换为 params 对象
|
|
354
|
+
filters.forEach(function (filter) {
|
|
355
|
+
if (filter.dataIndex && filter.value !== undefined && filter.value !== null) {
|
|
356
|
+
params[filter.dataIndex] = filter.value;
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
// 如果存在 beforeSearchSubmit 钩子,则调用它来修改 params
|
|
361
|
+
if (beforeSearchSubmit && _.isFunction(beforeSearchSubmit)) {
|
|
362
|
+
params = beforeSearchSubmit(params);
|
|
363
|
+
}
|
|
364
|
+
return params;
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
// 处理搜索输入
|
|
368
|
+
var handleSearch = function handleSearch(value) {
|
|
369
|
+
// 检测筛选条件格式 "条件名: 值"
|
|
370
|
+
var colonIndex = value.lastIndexOf(':');
|
|
371
|
+
if (colonIndex > 0) {
|
|
372
|
+
var filterType = value.substring(0, colonIndex).trim();
|
|
373
|
+
var filterValue = value.substring(colonIndex + 1).trim();
|
|
374
|
+
var matchingFilter = filterOptions.find(function (f) {
|
|
375
|
+
return f.title === filterType || f.key === filterType;
|
|
376
|
+
});
|
|
377
|
+
if (matchingFilter && filterValue) {
|
|
378
|
+
addFilter(matchingFilter.dataIndex, {
|
|
379
|
+
value: filterValue,
|
|
380
|
+
displayText: getDisplayText(matchingFilter, filterValue)
|
|
381
|
+
});
|
|
382
|
+
setSearchValue('');
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
setSearchValue(value);
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
// 处理选择列名
|
|
390
|
+
var handleSelectColumn = function handleSelectColumn(value) {
|
|
391
|
+
var selectedOption = filterOptions.find(function (option) {
|
|
392
|
+
return option.dataIndex === value;
|
|
393
|
+
});
|
|
394
|
+
if (selectedOption) {
|
|
395
|
+
var shouldShow = shouldShowValueSelector(selectedOption);
|
|
396
|
+
setSelectedColumn(selectedOption);
|
|
397
|
+
setShowValueSelector(shouldShow);
|
|
398
|
+
setSearchValue("".concat(selectedOption.title, ": "));
|
|
399
|
+
setTempValue(null);
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
// 添加筛选条件
|
|
404
|
+
var addFilter = function addFilter(key, options) {
|
|
405
|
+
var filterConfig = filterOptions.find(function (f) {
|
|
406
|
+
return f.dataIndex === key;
|
|
407
|
+
});
|
|
408
|
+
if (!filterConfig) return;
|
|
409
|
+
setFilters(function (prev) {
|
|
410
|
+
var _prev = prev || [];
|
|
411
|
+
var existingFilter = _prev.find(function (f) {
|
|
412
|
+
return f.dataIndex === key;
|
|
413
|
+
});
|
|
414
|
+
if (existingFilter) {
|
|
415
|
+
_prev = _prev.map(function (item) {
|
|
416
|
+
if (item.dataIndex === key) {
|
|
417
|
+
return _objectSpread(_objectSpread({}, item), {}, {
|
|
418
|
+
value: options.value,
|
|
419
|
+
displayText: getDisplayText(filterConfig, options.value)
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
return item;
|
|
423
|
+
});
|
|
424
|
+
} else {
|
|
425
|
+
_prev.push({
|
|
426
|
+
dataIndex: key,
|
|
427
|
+
title: filterConfig.title,
|
|
428
|
+
value: options.value,
|
|
429
|
+
displayText: getDisplayText(filterConfig, options.value)
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
var _filters = _toConsumableArray(_prev);
|
|
433
|
+
var params = filtersToParams(_filters);
|
|
434
|
+
if (onSubmit && _.isFunction(onSubmit)) {
|
|
435
|
+
onSubmit(params);
|
|
436
|
+
}
|
|
437
|
+
return _filters;
|
|
438
|
+
});
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
// 确认添加筛选条件
|
|
442
|
+
var confirmAddFilter = function confirmAddFilter() {
|
|
443
|
+
console.log(selectedColumn, '1111');
|
|
444
|
+
if (!selectedColumn || tempValue == null) return;
|
|
445
|
+
var valueType = selectedColumn.valueType,
|
|
446
|
+
dataIndex = selectedColumn.dataIndex;
|
|
447
|
+
var config = getValueTypeConfig(valueType);
|
|
448
|
+
var value = tempValue;
|
|
449
|
+
var displayValue = '';
|
|
450
|
+
if (config.isDateTime) {
|
|
451
|
+
var formattedValue = formatDateValue(tempValue, config);
|
|
452
|
+
value = formattedValue;
|
|
453
|
+
if (config.isRange && Array.isArray(formattedValue)) {
|
|
454
|
+
displayValue = "".concat(formattedValue[0], " ~ ").concat(formattedValue[1]);
|
|
455
|
+
} else {
|
|
456
|
+
displayValue = formattedValue;
|
|
457
|
+
}
|
|
458
|
+
} else {
|
|
459
|
+
displayValue = getDisplayText(selectedColumn, tempValue);
|
|
460
|
+
}
|
|
461
|
+
console.log(value, 'value');
|
|
462
|
+
addFilter(dataIndex, {
|
|
463
|
+
value: value,
|
|
464
|
+
displayText: displayValue
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
// 收尾
|
|
468
|
+
setSearchValue('');
|
|
469
|
+
setShowValueSelector(false);
|
|
470
|
+
setSelectedColumn(null);
|
|
471
|
+
setTempValue(null);
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
// 取消选择
|
|
475
|
+
var cancelValueSelector = function cancelValueSelector() {
|
|
476
|
+
setShowValueSelector(false);
|
|
477
|
+
setSelectedColumn(null);
|
|
478
|
+
setTempValue(null);
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
// 删除筛选条件
|
|
482
|
+
var removeFilter = function removeFilter(filterId) {
|
|
483
|
+
setFilters(function (prev) {
|
|
484
|
+
var _prev = prev === null || prev === void 0 ? void 0 : prev.filter(function (f) {
|
|
485
|
+
return f.dataIndex !== filterId;
|
|
486
|
+
});
|
|
487
|
+
var _filters = _toConsumableArray(_prev);
|
|
488
|
+
var params = filtersToParams(_filters);
|
|
489
|
+
if (onSubmit && _.isFunction(onSubmit)) {
|
|
490
|
+
onSubmit(params);
|
|
491
|
+
}
|
|
492
|
+
return _prev || [];
|
|
493
|
+
});
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
// 重置所有条件
|
|
497
|
+
var handelRest = function handelRest() {
|
|
498
|
+
setFilters(function () {
|
|
499
|
+
if (onSubmit && _.isFunction(onSubmit)) {
|
|
500
|
+
onSubmit({});
|
|
501
|
+
}
|
|
502
|
+
return [];
|
|
503
|
+
});
|
|
504
|
+
};
|
|
505
|
+
var contextValue = {
|
|
506
|
+
// 状态
|
|
507
|
+
searchValue: searchValue,
|
|
508
|
+
filters: filters,
|
|
509
|
+
showValueSelector: showValueSelector,
|
|
510
|
+
selectedColumn: selectedColumn,
|
|
511
|
+
tempValue: tempValue,
|
|
512
|
+
// 引用
|
|
513
|
+
inputRef: inputRef,
|
|
514
|
+
// 配置
|
|
515
|
+
columns: columns,
|
|
516
|
+
filterOptions: filterOptions,
|
|
517
|
+
onSubmit: onSubmit,
|
|
518
|
+
beforeSearchSubmit: beforeSearchSubmit,
|
|
519
|
+
// 状态更新方法
|
|
520
|
+
setSearchValue: setSearchValue,
|
|
521
|
+
setFilters: setFilters,
|
|
522
|
+
setShowValueSelector: setShowValueSelector,
|
|
523
|
+
setSelectedColumn: setSelectedColumn,
|
|
524
|
+
setTempValue: setTempValue,
|
|
525
|
+
// 业务方法
|
|
526
|
+
handleSearch: handleSearch,
|
|
527
|
+
handleSelectColumn: handleSelectColumn,
|
|
528
|
+
addFilter: addFilter,
|
|
529
|
+
confirmAddFilter: confirmAddFilter,
|
|
530
|
+
cancelValueSelector: cancelValueSelector,
|
|
531
|
+
removeFilter: removeFilter,
|
|
532
|
+
handelRest: handelRest,
|
|
533
|
+
// 工具方法
|
|
534
|
+
getColumnOptions: getColumnOptions,
|
|
535
|
+
getDisplayText: getDisplayText,
|
|
536
|
+
hasOptions: hasOptions,
|
|
537
|
+
filtersToParams: filtersToParams,
|
|
538
|
+
getValueTypeConfig: getValueTypeConfig,
|
|
539
|
+
formatDateValue: formatDateValue,
|
|
540
|
+
shouldShowValueSelector: shouldShowValueSelector
|
|
541
|
+
};
|
|
542
|
+
return /*#__PURE__*/_jsx(SearchContext.Provider, {
|
|
543
|
+
value: contextValue,
|
|
544
|
+
children: children
|
|
545
|
+
});
|
|
546
|
+
};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { DeleteOutlined } from '@ant-design/icons';
|
|
2
|
+
import { Flex, Space, Tag } from 'antd';
|
|
3
|
+
import { createStyles } from 'antd-style';
|
|
4
|
+
import classNames from 'classnames';
|
|
5
|
+
import { useSearchContext } from "./CreekSearchContext";
|
|
6
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
// 样式定义
|
|
9
|
+
var useStyles = createStyles(function (_ref) {
|
|
10
|
+
var token = _ref.token;
|
|
11
|
+
return {
|
|
12
|
+
filtersDisplay: {
|
|
13
|
+
padding: "0 0 ".concat(token.padding, "px"),
|
|
14
|
+
display: 'flex',
|
|
15
|
+
alignItems: 'center',
|
|
16
|
+
flexWrap: 'wrap',
|
|
17
|
+
gap: token.marginXS
|
|
18
|
+
},
|
|
19
|
+
filterTag: {
|
|
20
|
+
borderRadius: token.borderRadiusSM,
|
|
21
|
+
fontSize: token.fontSizeSM,
|
|
22
|
+
backgroundColor: '#f2f3f5',
|
|
23
|
+
padding: "2px 12px 2px 8px"
|
|
24
|
+
},
|
|
25
|
+
filterTagTitle: {
|
|
26
|
+
color: '#81838A'
|
|
27
|
+
},
|
|
28
|
+
filterTagValue: {
|
|
29
|
+
color: '#42464E'
|
|
30
|
+
},
|
|
31
|
+
clearButtonContainer: {
|
|
32
|
+
marginLeft: token.marginXS,
|
|
33
|
+
borderLeft: "1px solid #EBEDF1",
|
|
34
|
+
paddingLeft: 8,
|
|
35
|
+
height: 20
|
|
36
|
+
},
|
|
37
|
+
clearTextContainer: {
|
|
38
|
+
color: '#1E2128',
|
|
39
|
+
fontWeight: 500,
|
|
40
|
+
cursor: 'pointer'
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
export var CreekFilterDisplay = function CreekFilterDisplay(props) {
|
|
45
|
+
var _useStyles = useStyles(),
|
|
46
|
+
styles = _useStyles.styles;
|
|
47
|
+
var _useSearchContext = useSearchContext(),
|
|
48
|
+
filters = _useSearchContext.filters,
|
|
49
|
+
removeFilter = _useSearchContext.removeFilter,
|
|
50
|
+
handelRest = _useSearchContext.handelRest;
|
|
51
|
+
var className = props.className;
|
|
52
|
+
|
|
53
|
+
// 渲染筛选条件标签
|
|
54
|
+
var renderFilterTags = function renderFilterTags(filterList) {
|
|
55
|
+
return /*#__PURE__*/_jsx(Space, {
|
|
56
|
+
size: 4,
|
|
57
|
+
wrap: true,
|
|
58
|
+
children: filterList === null || filterList === void 0 ? void 0 : filterList.map(function (filter) {
|
|
59
|
+
return /*#__PURE__*/_jsxs(Tag, {
|
|
60
|
+
closable: true,
|
|
61
|
+
onClose: function onClose() {
|
|
62
|
+
return removeFilter(filter.dataIndex);
|
|
63
|
+
},
|
|
64
|
+
className: styles.filterTag,
|
|
65
|
+
children: [/*#__PURE__*/_jsxs("span", {
|
|
66
|
+
className: styles.filterTagTitle,
|
|
67
|
+
children: [" ", filter.title, ":"]
|
|
68
|
+
}), /*#__PURE__*/_jsxs("span", {
|
|
69
|
+
className: styles.filterTagValue,
|
|
70
|
+
children: [" ", filter.displayText]
|
|
71
|
+
})]
|
|
72
|
+
}, filter.dataIndex);
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 如果没有筛选条件,不渲染
|
|
78
|
+
if (!filters || filters.length === 0) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return /*#__PURE__*/_jsxs(Flex, {
|
|
82
|
+
className: classNames(styles.filtersDisplay, className),
|
|
83
|
+
wrap: true,
|
|
84
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
85
|
+
children: renderFilterTags(filters)
|
|
86
|
+
}), /*#__PURE__*/_jsxs(Space, {
|
|
87
|
+
className: styles.clearButtonContainer,
|
|
88
|
+
align: "center",
|
|
89
|
+
size: 4,
|
|
90
|
+
onClick: handelRest,
|
|
91
|
+
children: [/*#__PURE__*/_jsx(DeleteOutlined, {}), /*#__PURE__*/_jsx("span", {
|
|
92
|
+
className: styles.clearTextContainer,
|
|
93
|
+
children: "\u6E05\u7A7A"
|
|
94
|
+
})]
|
|
95
|
+
})]
|
|
96
|
+
});
|
|
97
|
+
};
|