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