@nokecy/qc-ui 1.1.22 → 1.1.23
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/cjs/ag-grid-plus/ag-gridPlus.js +128 -8
- package/dist/cjs/ag-grid-plus/queryForm/AdvancedQueryBuilder.d.ts +10 -0
- package/dist/cjs/ag-grid-plus/queryForm/AdvancedQueryBuilder.js +547 -0
- package/dist/cjs/ag-grid-plus/queryForm/index.js +3 -6
- package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +36 -0
- package/dist/cjs/ag-grid-plus/utils.d.ts +6 -0
- package/dist/cjs/ag-grid-plus/utils.js +86 -1
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +131 -11
- package/dist/esm/ag-grid-plus/queryForm/AdvancedQueryBuilder.d.ts +10 -0
- package/dist/esm/ag-grid-plus/queryForm/AdvancedQueryBuilder.js +541 -0
- package/dist/esm/ag-grid-plus/queryForm/index.js +3 -6
- package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +36 -0
- package/dist/esm/ag-grid-plus/utils.d.ts +6 -0
- package/dist/esm/ag-grid-plus/utils.js +85 -0
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _antd = require("antd");
|
|
9
|
+
var _icons = require("@ant-design/icons");
|
|
10
|
+
var _uuid = require("uuid");
|
|
11
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
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; }
|
|
14
|
+
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; }
|
|
15
|
+
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; }
|
|
16
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
17
|
+
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); }
|
|
18
|
+
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); }
|
|
19
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
20
|
+
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); }
|
|
21
|
+
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; }
|
|
22
|
+
// 字段类型枚举
|
|
23
|
+
|
|
24
|
+
// 根据字段类型获取可用操作符
|
|
25
|
+
var getOperatorsByFieldType = function getOperatorsByFieldType(fieldType) {
|
|
26
|
+
var common = [{
|
|
27
|
+
label: '等于',
|
|
28
|
+
value: '='
|
|
29
|
+
}, {
|
|
30
|
+
label: '不等于',
|
|
31
|
+
value: '!='
|
|
32
|
+
}, {
|
|
33
|
+
label: '为空',
|
|
34
|
+
value: 'isEmpty'
|
|
35
|
+
}, {
|
|
36
|
+
label: '不为空',
|
|
37
|
+
value: 'isNotEmpty'
|
|
38
|
+
}];
|
|
39
|
+
switch (fieldType) {
|
|
40
|
+
case 'string':
|
|
41
|
+
return [].concat(common, [{
|
|
42
|
+
label: '包含',
|
|
43
|
+
value: 'contains'
|
|
44
|
+
}, {
|
|
45
|
+
label: '开头是',
|
|
46
|
+
value: 'startsWith'
|
|
47
|
+
}, {
|
|
48
|
+
label: '结尾是',
|
|
49
|
+
value: 'endsWith'
|
|
50
|
+
}]);
|
|
51
|
+
case 'number':
|
|
52
|
+
return [].concat(common, [{
|
|
53
|
+
label: '大于',
|
|
54
|
+
value: '>'
|
|
55
|
+
}, {
|
|
56
|
+
label: '大于等于',
|
|
57
|
+
value: '>='
|
|
58
|
+
}, {
|
|
59
|
+
label: '小于',
|
|
60
|
+
value: '<'
|
|
61
|
+
}, {
|
|
62
|
+
label: '小于等于',
|
|
63
|
+
value: '<='
|
|
64
|
+
}, {
|
|
65
|
+
label: '区间',
|
|
66
|
+
value: 'between'
|
|
67
|
+
}]);
|
|
68
|
+
case 'date':
|
|
69
|
+
return [].concat(common, [{
|
|
70
|
+
label: '大于',
|
|
71
|
+
value: '>'
|
|
72
|
+
}, {
|
|
73
|
+
label: '大于等于',
|
|
74
|
+
value: '>='
|
|
75
|
+
}, {
|
|
76
|
+
label: '小于',
|
|
77
|
+
value: '<'
|
|
78
|
+
}, {
|
|
79
|
+
label: '小于等于',
|
|
80
|
+
value: '<='
|
|
81
|
+
}, {
|
|
82
|
+
label: '区间',
|
|
83
|
+
value: 'between'
|
|
84
|
+
}]);
|
|
85
|
+
case 'enum':
|
|
86
|
+
case 'boolean':
|
|
87
|
+
// 枚举和布尔只支持等于/不等于
|
|
88
|
+
return common;
|
|
89
|
+
default:
|
|
90
|
+
return common;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// 推断字段类型
|
|
95
|
+
var inferFieldType = function inferFieldType(colDef) {
|
|
96
|
+
if (!colDef) return 'string';
|
|
97
|
+
|
|
98
|
+
// 有枚举值定义
|
|
99
|
+
if (colDef.valueEnum && colDef.valueEnum.length > 0) {
|
|
100
|
+
return 'enum';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// 根据 type 判断
|
|
104
|
+
var type = colDef.type;
|
|
105
|
+
if (type === 'numberColumn' || type === 'numericColumn') {
|
|
106
|
+
return 'number';
|
|
107
|
+
}
|
|
108
|
+
if (type === 'dateColumn' || type === 'dateTimeColumn') {
|
|
109
|
+
return 'date';
|
|
110
|
+
}
|
|
111
|
+
if (type === 'bool' || type === 'boolColumn') {
|
|
112
|
+
return 'boolean';
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// 根据 filter 判断
|
|
116
|
+
if (colDef.filter === 'agNumberColumnFilter') {
|
|
117
|
+
return 'number';
|
|
118
|
+
}
|
|
119
|
+
if (colDef.filter === 'agDateColumnFilter') {
|
|
120
|
+
return 'date';
|
|
121
|
+
}
|
|
122
|
+
if (colDef.filter === 'boolFilter') {
|
|
123
|
+
return 'boolean';
|
|
124
|
+
}
|
|
125
|
+
return 'string';
|
|
126
|
+
};
|
|
127
|
+
var AdvancedQueryBuilder = function AdvancedQueryBuilder(_ref) {
|
|
128
|
+
var rootGroup = _ref.rootGroup,
|
|
129
|
+
onChange = _ref.onChange,
|
|
130
|
+
colDefs = _ref.colDefs;
|
|
131
|
+
var updateGroup = function updateGroup(newGroup) {
|
|
132
|
+
onChange(newGroup);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// 更加精确的增删改查
|
|
136
|
+
var modifyTree = function modifyTree(callback) {
|
|
137
|
+
var newRoot = JSON.parse(JSON.stringify(rootGroup));
|
|
138
|
+
callback(newRoot);
|
|
139
|
+
updateGroup(newRoot);
|
|
140
|
+
};
|
|
141
|
+
var findGroup = function findGroup(root, id) {
|
|
142
|
+
if (root.id === id) return root;
|
|
143
|
+
if (root.children) {
|
|
144
|
+
var _iterator = _createForOfIteratorHelper(root.children),
|
|
145
|
+
_step;
|
|
146
|
+
try {
|
|
147
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
148
|
+
var child = _step.value;
|
|
149
|
+
// @ts-ignore
|
|
150
|
+
if (child.logic) {
|
|
151
|
+
// @ts-ignore
|
|
152
|
+
var found = findGroup(child, id);
|
|
153
|
+
if (found) return found;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} catch (err) {
|
|
157
|
+
_iterator.e(err);
|
|
158
|
+
} finally {
|
|
159
|
+
_iterator.f();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
};
|
|
164
|
+
var addRule = function addRule(groupId) {
|
|
165
|
+
var firstCol = colDefs.find(function (c) {
|
|
166
|
+
return !c.hide && !c.hideInSearch;
|
|
167
|
+
});
|
|
168
|
+
var fieldType = inferFieldType(firstCol);
|
|
169
|
+
var operators = getOperatorsByFieldType(fieldType);
|
|
170
|
+
modifyTree(function (root) {
|
|
171
|
+
var group = findGroup(root, groupId);
|
|
172
|
+
if (group) {
|
|
173
|
+
var _operators$;
|
|
174
|
+
group.children.push({
|
|
175
|
+
id: (0, _uuid.v4)(),
|
|
176
|
+
field: (firstCol === null || firstCol === void 0 ? void 0 : firstCol.field) || '',
|
|
177
|
+
operator: ((_operators$ = operators[0]) === null || _operators$ === void 0 ? void 0 : _operators$.value) || '=',
|
|
178
|
+
value: null
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
var addGroup = function addGroup(groupId) {
|
|
184
|
+
modifyTree(function (root) {
|
|
185
|
+
var group = findGroup(root, groupId);
|
|
186
|
+
if (group) {
|
|
187
|
+
group.children.push({
|
|
188
|
+
id: (0, _uuid.v4)(),
|
|
189
|
+
logic: 'AND',
|
|
190
|
+
children: []
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
var removeChild = function removeChild(parentId, childId) {
|
|
196
|
+
modifyTree(function (root) {
|
|
197
|
+
var group = findGroup(root, parentId);
|
|
198
|
+
if (group) {
|
|
199
|
+
group.children = group.children.filter(function (c) {
|
|
200
|
+
return c.id !== childId;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
var updateRule = function updateRule(parentId, ruleId, updates) {
|
|
206
|
+
modifyTree(function (root) {
|
|
207
|
+
var group = findGroup(root, parentId);
|
|
208
|
+
if (group) {
|
|
209
|
+
var rule = group.children.find(function (c) {
|
|
210
|
+
return c.id === ruleId;
|
|
211
|
+
});
|
|
212
|
+
if (rule) {
|
|
213
|
+
Object.assign(rule, updates);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
var updateGroupLogic = function updateGroupLogic(groupId, logic) {
|
|
219
|
+
modifyTree(function (root) {
|
|
220
|
+
var group = findGroup(root, groupId);
|
|
221
|
+
if (group) {
|
|
222
|
+
group.logic = logic;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
var renderValueInput = function renderValueInput(rule, colDef, onValueChange) {
|
|
227
|
+
if (rule.operator === 'isEmpty' || rule.operator === 'isNotEmpty') {
|
|
228
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Input, {
|
|
229
|
+
disabled: true,
|
|
230
|
+
placeholder: "\u65E0\u9700\u8F93\u5165\u503C",
|
|
231
|
+
style: {
|
|
232
|
+
width: '100%'
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// 优先使用列定义的自定义搜索组件
|
|
238
|
+
if (colDef !== null && colDef !== void 0 && colDef.searchComponent) {
|
|
239
|
+
var CustomComponent = colDef.searchComponent;
|
|
240
|
+
// 如果 searchComponent 是 React 组件(函数或类)
|
|
241
|
+
if (typeof CustomComponent === 'function' || CustomComponent && _typeof(CustomComponent) === 'object') {
|
|
242
|
+
var componentProps = _objectSpread({
|
|
243
|
+
value: rule.value,
|
|
244
|
+
onChange: onValueChange,
|
|
245
|
+
style: {
|
|
246
|
+
width: '100%'
|
|
247
|
+
},
|
|
248
|
+
allowClear: true,
|
|
249
|
+
placeholder: colDef.headerName ? "\u8BF7\u9009\u62E9".concat(colDef.headerName) : '请选择'
|
|
250
|
+
}, colDef.searchComponentProps || {});
|
|
251
|
+
|
|
252
|
+
// 渲染自定义组件
|
|
253
|
+
try {
|
|
254
|
+
return /*#__PURE__*/_react.default.createElement(CustomComponent, componentProps);
|
|
255
|
+
} catch (e) {
|
|
256
|
+
// 如果创建失败,继续使用默认逻辑
|
|
257
|
+
console.warn('Failed to render custom search component:', e);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
var fieldType = inferFieldType(colDef);
|
|
262
|
+
|
|
263
|
+
// 枚举类型 - 下拉选择
|
|
264
|
+
if (fieldType === 'enum' && colDef !== null && colDef !== void 0 && colDef.valueEnum) {
|
|
265
|
+
// 获取默认值
|
|
266
|
+
var defaultItems = colDef.valueEnum.filter(function (item) {
|
|
267
|
+
return item.default;
|
|
268
|
+
});
|
|
269
|
+
var isMultiple = defaultItems.length > 1;
|
|
270
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
271
|
+
style: {
|
|
272
|
+
width: '100%'
|
|
273
|
+
},
|
|
274
|
+
value: rule.value,
|
|
275
|
+
onChange: onValueChange,
|
|
276
|
+
allowClear: true,
|
|
277
|
+
mode: isMultiple ? 'multiple' : undefined,
|
|
278
|
+
placeholder: "\u8BF7\u9009\u62E9"
|
|
279
|
+
}, colDef.valueEnum.map(function (item) {
|
|
280
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
281
|
+
key: item.value,
|
|
282
|
+
value: item.value
|
|
283
|
+
}, item.label);
|
|
284
|
+
}));
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// 布尔类型
|
|
288
|
+
if (fieldType === 'boolean') {
|
|
289
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
290
|
+
style: {
|
|
291
|
+
width: '100%'
|
|
292
|
+
},
|
|
293
|
+
value: rule.value,
|
|
294
|
+
onChange: onValueChange,
|
|
295
|
+
allowClear: true,
|
|
296
|
+
placeholder: "\u8BF7\u9009\u62E9"
|
|
297
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
298
|
+
value: true
|
|
299
|
+
}, "\u662F"), /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
300
|
+
value: false
|
|
301
|
+
}, "\u5426"));
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// 数字类型
|
|
305
|
+
if (fieldType === 'number') {
|
|
306
|
+
if (rule.operator === 'between') {
|
|
307
|
+
var rangeValue = Array.isArray(rule.value) ? rule.value : [null, null];
|
|
308
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Space.Compact, {
|
|
309
|
+
style: {
|
|
310
|
+
width: '100%'
|
|
311
|
+
}
|
|
312
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.InputNumber, {
|
|
313
|
+
style: {
|
|
314
|
+
width: '50%'
|
|
315
|
+
},
|
|
316
|
+
placeholder: "\u6700\u5C0F\u503C",
|
|
317
|
+
value: rangeValue[0],
|
|
318
|
+
onChange: function onChange(val) {
|
|
319
|
+
return onValueChange([val, rangeValue[1]]);
|
|
320
|
+
}
|
|
321
|
+
}), /*#__PURE__*/_react.default.createElement(_antd.InputNumber, {
|
|
322
|
+
style: {
|
|
323
|
+
width: '50%'
|
|
324
|
+
},
|
|
325
|
+
placeholder: "\u6700\u5927\u503C",
|
|
326
|
+
value: rangeValue[1],
|
|
327
|
+
onChange: function onChange(val) {
|
|
328
|
+
return onValueChange([rangeValue[0], val]);
|
|
329
|
+
}
|
|
330
|
+
}));
|
|
331
|
+
}
|
|
332
|
+
return /*#__PURE__*/_react.default.createElement(_antd.InputNumber, {
|
|
333
|
+
style: {
|
|
334
|
+
width: '100%'
|
|
335
|
+
},
|
|
336
|
+
value: rule.value,
|
|
337
|
+
onChange: onValueChange,
|
|
338
|
+
placeholder: "\u8BF7\u8F93\u5165\u6570\u5B57"
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// 日期类型
|
|
343
|
+
if (fieldType === 'date') {
|
|
344
|
+
if (rule.operator === 'between') {
|
|
345
|
+
return /*#__PURE__*/_react.default.createElement(_antd.DatePicker.RangePicker, {
|
|
346
|
+
style: {
|
|
347
|
+
width: '100%'
|
|
348
|
+
},
|
|
349
|
+
value: Array.isArray(rule.value) ? [rule.value[0] ? (0, _dayjs.default)(rule.value[0]) : null, rule.value[1] ? (0, _dayjs.default)(rule.value[1]) : null] : [null, null],
|
|
350
|
+
onChange: function onChange(dates) {
|
|
351
|
+
if (dates) {
|
|
352
|
+
var _dates$, _dates$2;
|
|
353
|
+
onValueChange([(_dates$ = dates[0]) === null || _dates$ === void 0 ? void 0 : _dates$.format('YYYY-MM-DD'), (_dates$2 = dates[1]) === null || _dates$2 === void 0 ? void 0 : _dates$2.format('YYYY-MM-DD')]);
|
|
354
|
+
} else {
|
|
355
|
+
onValueChange(null);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
return /*#__PURE__*/_react.default.createElement(_antd.DatePicker, {
|
|
361
|
+
style: {
|
|
362
|
+
width: '100%'
|
|
363
|
+
},
|
|
364
|
+
value: rule.value ? (0, _dayjs.default)(rule.value) : null,
|
|
365
|
+
onChange: function onChange(date) {
|
|
366
|
+
return onValueChange(date === null || date === void 0 ? void 0 : date.format('YYYY-MM-DD'));
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// 默认:字符串输入
|
|
372
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Input, {
|
|
373
|
+
style: {
|
|
374
|
+
width: '100%'
|
|
375
|
+
},
|
|
376
|
+
value: rule.value,
|
|
377
|
+
onChange: function onChange(e) {
|
|
378
|
+
return onValueChange(e.target.value);
|
|
379
|
+
},
|
|
380
|
+
allowClear: true,
|
|
381
|
+
placeholder: "\u8BF7\u8F93\u5165"
|
|
382
|
+
});
|
|
383
|
+
};
|
|
384
|
+
var renderRule = function renderRule(rule, parentGroup, index) {
|
|
385
|
+
var colDef = colDefs.find(function (c) {
|
|
386
|
+
return c.field === rule.field;
|
|
387
|
+
});
|
|
388
|
+
var fieldType = inferFieldType(colDef);
|
|
389
|
+
var operators = getOperatorsByFieldType(fieldType);
|
|
390
|
+
|
|
391
|
+
// 当切换字段时,需要重置操作符(如果当前操作符在新类型中不可用)
|
|
392
|
+
var handleFieldChange = function handleFieldChange(newField) {
|
|
393
|
+
var _newOperators$;
|
|
394
|
+
var newColDef = colDefs.find(function (c) {
|
|
395
|
+
return c.field === newField;
|
|
396
|
+
});
|
|
397
|
+
var newFieldType = inferFieldType(newColDef);
|
|
398
|
+
var newOperators = getOperatorsByFieldType(newFieldType);
|
|
399
|
+
|
|
400
|
+
// 检查当前操作符是否在新类型中可用
|
|
401
|
+
var currentOpAvailable = newOperators.some(function (op) {
|
|
402
|
+
return op.value === rule.operator;
|
|
403
|
+
});
|
|
404
|
+
updateRule(parentGroup.id, rule.id, {
|
|
405
|
+
field: newField,
|
|
406
|
+
operator: currentOpAvailable ? rule.operator : ((_newOperators$ = newOperators[0]) === null || _newOperators$ === void 0 ? void 0 : _newOperators$.value) || '=',
|
|
407
|
+
value: null // 重置值
|
|
408
|
+
});
|
|
409
|
+
};
|
|
410
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Row, {
|
|
411
|
+
gutter: 8,
|
|
412
|
+
style: {
|
|
413
|
+
marginBottom: 8,
|
|
414
|
+
flexWrap: 'nowrap'
|
|
415
|
+
},
|
|
416
|
+
align: "middle",
|
|
417
|
+
wrap: false
|
|
418
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
419
|
+
flex: "200px"
|
|
420
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
421
|
+
style: {
|
|
422
|
+
width: '100%'
|
|
423
|
+
},
|
|
424
|
+
placeholder: "\u9009\u62E9\u5B57\u6BB5",
|
|
425
|
+
showSearch: true,
|
|
426
|
+
optionFilterProp: "children",
|
|
427
|
+
value: rule.field,
|
|
428
|
+
onChange: handleFieldChange
|
|
429
|
+
}, colDefs.filter(function (c) {
|
|
430
|
+
return !c.hide && !c.hideInSearch;
|
|
431
|
+
}).map(function (c) {
|
|
432
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
433
|
+
key: c.field,
|
|
434
|
+
value: c.field
|
|
435
|
+
}, c.headerName || c.field);
|
|
436
|
+
}))), /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
437
|
+
flex: "120px"
|
|
438
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
439
|
+
style: {
|
|
440
|
+
width: '100%'
|
|
441
|
+
},
|
|
442
|
+
value: rule.operator,
|
|
443
|
+
onChange: function onChange(val) {
|
|
444
|
+
return updateRule(parentGroup.id, rule.id, {
|
|
445
|
+
operator: val
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
}, operators.map(function (op) {
|
|
449
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
450
|
+
key: op.value,
|
|
451
|
+
value: op.value
|
|
452
|
+
}, op.label);
|
|
453
|
+
}))), /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
454
|
+
flex: "auto"
|
|
455
|
+
}, renderValueInput(rule, colDef, function (val) {
|
|
456
|
+
return updateRule(parentGroup.id, rule.id, {
|
|
457
|
+
value: val
|
|
458
|
+
});
|
|
459
|
+
})), /*#__PURE__*/_react.default.createElement(_antd.Col, {
|
|
460
|
+
flex: "32px"
|
|
461
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
462
|
+
type: "text",
|
|
463
|
+
danger: true,
|
|
464
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.DeleteOutlined, null),
|
|
465
|
+
onClick: function onClick() {
|
|
466
|
+
return removeChild(parentGroup.id, rule.id);
|
|
467
|
+
}
|
|
468
|
+
})));
|
|
469
|
+
};
|
|
470
|
+
var renderGroup = function renderGroup(group, parentGroup, indexInParent) {
|
|
471
|
+
return /*#__PURE__*/_react.default.createElement(_antd.Card, {
|
|
472
|
+
size: "small",
|
|
473
|
+
style: {
|
|
474
|
+
marginBottom: 8,
|
|
475
|
+
borderLeft: "3px solid ".concat(group.logic === 'AND' ? '#1890ff' : '#52c41a')
|
|
476
|
+
},
|
|
477
|
+
bodyStyle: {
|
|
478
|
+
padding: '8px 12px'
|
|
479
|
+
}
|
|
480
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
481
|
+
style: {
|
|
482
|
+
display: 'flex',
|
|
483
|
+
alignItems: 'center',
|
|
484
|
+
marginBottom: group.children.length > 0 ? 8 : 0
|
|
485
|
+
}
|
|
486
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Space, {
|
|
487
|
+
size: "small"
|
|
488
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Select, {
|
|
489
|
+
value: group.logic,
|
|
490
|
+
onChange: function onChange(val) {
|
|
491
|
+
return updateGroupLogic(group.id, val);
|
|
492
|
+
},
|
|
493
|
+
style: {
|
|
494
|
+
width: 80
|
|
495
|
+
},
|
|
496
|
+
size: "small"
|
|
497
|
+
}, /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
498
|
+
value: "AND"
|
|
499
|
+
}, "\u4E14"), /*#__PURE__*/_react.default.createElement(_antd.Select.Option, {
|
|
500
|
+
value: "OR"
|
|
501
|
+
}, "\u6216")), /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
502
|
+
type: "dashed",
|
|
503
|
+
size: "small",
|
|
504
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, null),
|
|
505
|
+
onClick: function onClick() {
|
|
506
|
+
return addRule(group.id);
|
|
507
|
+
}
|
|
508
|
+
}, "\u89C4\u5219"), /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
509
|
+
type: "dashed",
|
|
510
|
+
size: "small",
|
|
511
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.PartitionOutlined, null),
|
|
512
|
+
onClick: function onClick() {
|
|
513
|
+
return addGroup(group.id);
|
|
514
|
+
}
|
|
515
|
+
}, "\u5206\u7EC4")), /*#__PURE__*/_react.default.createElement("div", {
|
|
516
|
+
style: {
|
|
517
|
+
flex: 1
|
|
518
|
+
}
|
|
519
|
+
}), parentGroup && /*#__PURE__*/_react.default.createElement(_antd.Button, {
|
|
520
|
+
type: "text",
|
|
521
|
+
danger: true,
|
|
522
|
+
size: "small",
|
|
523
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.DeleteOutlined, null),
|
|
524
|
+
onClick: function onClick() {
|
|
525
|
+
return removeChild(parentGroup.id, group.id);
|
|
526
|
+
}
|
|
527
|
+
})), group.children.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
|
|
528
|
+
style: {
|
|
529
|
+
paddingLeft: 12,
|
|
530
|
+
borderLeft: '1px dashed #d9d9d9',
|
|
531
|
+
marginLeft: 8
|
|
532
|
+
}
|
|
533
|
+
}, group.children.map(function (child, idx) {
|
|
534
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
535
|
+
key: child.id
|
|
536
|
+
}, child.logic ? renderGroup(child, group, idx) : renderRule(child, group, idx));
|
|
537
|
+
})));
|
|
538
|
+
};
|
|
539
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
540
|
+
style: {
|
|
541
|
+
background: '#fafafa',
|
|
542
|
+
borderRadius: 4,
|
|
543
|
+
padding: 8
|
|
544
|
+
}
|
|
545
|
+
}, renderGroup(rootGroup, null, 0));
|
|
546
|
+
};
|
|
547
|
+
var _default = exports.default = AdvancedQueryBuilder;
|
|
@@ -35,7 +35,7 @@ var FormRender = function FormRender(props) {
|
|
|
35
35
|
columnStates = props.columnStates,
|
|
36
36
|
onQuery = props.onQuery,
|
|
37
37
|
_props$defaultRows = props.defaultRows,
|
|
38
|
-
defaultRows = _props$defaultRows === void 0 ? 1 : _props$defaultRows;
|
|
38
|
+
defaultRows = _props$defaultRows === void 0 ? 1 : _props$defaultRows;
|
|
39
39
|
var _useState = (0, _react2.useState)({
|
|
40
40
|
type: 'object',
|
|
41
41
|
properties: {}
|
|
@@ -80,7 +80,6 @@ var FormRender = function FormRender(props) {
|
|
|
80
80
|
};
|
|
81
81
|
var onReset = function onReset() {
|
|
82
82
|
// 使用 forceClear: true 强制清空所有字段,包括有默认值的字段
|
|
83
|
-
// 这样可以确保点击重置时,表单组件显示被完全清空
|
|
84
83
|
form.reset('*', {
|
|
85
84
|
forceClear: true
|
|
86
85
|
});
|
|
@@ -199,11 +198,9 @@ var FormRender = function FormRender(props) {
|
|
|
199
198
|
setSchema(new_schema);
|
|
200
199
|
}, [columnStates === null || columnStates === void 0 ? void 0 : columnStates.map(function (c) {
|
|
201
200
|
return c.colId;
|
|
202
|
-
}).join('|'),
|
|
203
|
-
colDefs === null || colDefs === void 0 ? void 0 : colDefs.map(function (c) {
|
|
201
|
+
}).join('|'), colDefs === null || colDefs === void 0 ? void 0 : colDefs.map(function (c) {
|
|
204
202
|
return "".concat(c.field, "|").concat(c.headerName);
|
|
205
|
-
}).join('|')
|
|
206
|
-
]);
|
|
203
|
+
}).join('|')]);
|
|
207
204
|
return /*#__PURE__*/_react2.default.createElement("div", {
|
|
208
205
|
className: (0, _classnames.default)(className, "ag-grid-table-search ag-grid-table-search-query-filter")
|
|
209
206
|
}, /*#__PURE__*/_react2.default.createElement(_antdV.Form, {
|
|
@@ -8,6 +8,38 @@ export interface QueryItem {
|
|
|
8
8
|
/** 是否隐藏 */
|
|
9
9
|
hidden?: boolean;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* 逻辑操作符 // P0
|
|
13
|
+
*/
|
|
14
|
+
export type LogicOperator = 'AND' | 'OR';
|
|
15
|
+
/**
|
|
16
|
+
* 查询规则操作符 // P0
|
|
17
|
+
*/
|
|
18
|
+
export type RuleOperator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'contains' | 'startsWith' | 'endsWith' | 'isEmpty' | 'isNotEmpty' | 'between';
|
|
19
|
+
/**
|
|
20
|
+
* 单条查询规则 // P0
|
|
21
|
+
*/
|
|
22
|
+
export interface QueryRule {
|
|
23
|
+
/** 规则ID */
|
|
24
|
+
id: string;
|
|
25
|
+
/** 字段名 */
|
|
26
|
+
field: string;
|
|
27
|
+
/** 操作符 */
|
|
28
|
+
operator: string;
|
|
29
|
+
/** 值 */
|
|
30
|
+
value: any;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 查询规则组 // P0
|
|
34
|
+
*/
|
|
35
|
+
export interface QueryRuleGroup {
|
|
36
|
+
/** 组ID */
|
|
37
|
+
id: string;
|
|
38
|
+
/** 逻辑连接符 */
|
|
39
|
+
logic: LogicOperator;
|
|
40
|
+
/** 子规则或子组 */
|
|
41
|
+
children: (QueryRule | QueryRuleGroup)[];
|
|
42
|
+
}
|
|
11
43
|
/**
|
|
12
44
|
* 查询配置结构
|
|
13
45
|
*/
|
|
@@ -16,6 +48,10 @@ export interface QueryConfig {
|
|
|
16
48
|
items: QueryItem[];
|
|
17
49
|
/** 查询表单默认值 */
|
|
18
50
|
defaultValues?: Record<string, any>;
|
|
51
|
+
/** 查询模式: simple(简单表单) | advanced(高级组合器) // P0 */
|
|
52
|
+
mode?: 'simple' | 'advanced';
|
|
53
|
+
/** 高级模式下的规则树 // P0 */
|
|
54
|
+
rules?: QueryRuleGroup;
|
|
19
55
|
}
|
|
20
56
|
/**
|
|
21
57
|
* 查询方案
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { ValueFormatterParams } from 'ag-grid-community';
|
|
2
2
|
import { AgGridColumnPropsClone } from './interface';
|
|
3
|
+
/**
|
|
4
|
+
* 将高级查询规则转换为后端 Filter 字符串
|
|
5
|
+
* 注意: 目前为了保持兼容性,只能尽量将 OR 转换为后端支持的格式(如 A=1|A=2),
|
|
6
|
+
* 复杂的嵌套 OR 可能需要后端升级支持。当前策略是尽力转换。
|
|
7
|
+
*/
|
|
8
|
+
export declare const convertRulesToFilterString: (ruleGroup: any, colDefs: any[]) => string;
|
|
3
9
|
declare const convertFilterModel: (filterModel: any, colDefs: AgGridColumnPropsClone[]) => string;
|
|
4
10
|
declare const convertSortModel: (sortModel: any[]) => string;
|
|
5
11
|
declare const dateValueFormatter: (params: ValueFormatterParams) => string;
|