@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.
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +128 -8
- package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.d.ts +2 -1
- package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +6 -5
- 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/setting/columnGroupUtils.d.ts +7 -2
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +196 -4
- 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/cjs/formDesigner/FormDesigner.js +4 -2
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +131 -11
- package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.d.ts +2 -1
- package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +6 -5
- 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/setting/columnGroupUtils.d.ts +7 -2
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +196 -4
- 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/esm/formDesigner/FormDesigner.js +4 -2
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +2 -2
|
@@ -9,6 +9,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
9
9
|
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; }
|
|
10
10
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
11
11
|
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); }
|
|
12
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
13
|
+
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."); }
|
|
14
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
15
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
12
16
|
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; } } }; }
|
|
13
17
|
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
18
|
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; }
|
|
@@ -121,8 +125,10 @@ export function gridStateToFlatConfig(columnDefs, originalColumnDefs) {
|
|
|
121
125
|
* 【重要】如果提供了 originalColumnDefs,会合并原始列定义中的所有属性
|
|
122
126
|
* 这样可以保留 cellRenderer、valueFormatter、valueEnum 等自定义渲染属性
|
|
123
127
|
*
|
|
128
|
+
* 【重要】会自动检测并追加代码中新增的列(在 originalColumnDefs 中存在但 flatConfig 中不存在的列)
|
|
129
|
+
*
|
|
124
130
|
* @param flatConfig 扁平化配置数组
|
|
125
|
-
* @param originalColumnDefs
|
|
131
|
+
* @param originalColumnDefs 原始列定义数组(可选),用于保留自定义属性和检测新增列
|
|
126
132
|
* @returns AG-Grid 列定义数组
|
|
127
133
|
*/
|
|
128
134
|
export function flatConfigToGridState(flatConfig, originalColumnDefs) {
|
|
@@ -157,6 +163,30 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
|
|
|
157
163
|
return undefined;
|
|
158
164
|
}
|
|
159
165
|
|
|
166
|
+
/**
|
|
167
|
+
* 递归收集所有列定义(包括分组内的列)
|
|
168
|
+
*/
|
|
169
|
+
function collectAllColumns(defs) {
|
|
170
|
+
var columns = [];
|
|
171
|
+
var _iterator3 = _createForOfIteratorHelper(defs),
|
|
172
|
+
_step3;
|
|
173
|
+
try {
|
|
174
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
175
|
+
var def = _step3.value;
|
|
176
|
+
if ('children' in def && def.children) {
|
|
177
|
+
columns.push.apply(columns, _toConsumableArray(collectAllColumns(def.children)));
|
|
178
|
+
} else {
|
|
179
|
+
columns.push(def);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
} catch (err) {
|
|
183
|
+
_iterator3.e(err);
|
|
184
|
+
} finally {
|
|
185
|
+
_iterator3.f();
|
|
186
|
+
}
|
|
187
|
+
return columns;
|
|
188
|
+
}
|
|
189
|
+
|
|
160
190
|
/**
|
|
161
191
|
* 递归构建树形结构
|
|
162
192
|
*/
|
|
@@ -211,7 +241,74 @@ export function flatConfigToGridState(flatConfig, originalColumnDefs) {
|
|
|
211
241
|
}
|
|
212
242
|
});
|
|
213
243
|
}
|
|
214
|
-
|
|
244
|
+
var result = buildTree();
|
|
245
|
+
|
|
246
|
+
// 【新增】检测并插入代码中新增的列到原始位置
|
|
247
|
+
// 场景:用户保存列配置后,开发者在代码中新增了列,这些列应该在其原始定义位置显示
|
|
248
|
+
if (originalColumnDefs && originalColumnDefs.length > 0) {
|
|
249
|
+
// 收集 flatConfig 中所有已存在的 field
|
|
250
|
+
var existingFields = new Set(flatConfig.filter(function (item) {
|
|
251
|
+
return item.type === 'column' && item.field;
|
|
252
|
+
}).map(function (item) {
|
|
253
|
+
return item.field;
|
|
254
|
+
}));
|
|
255
|
+
|
|
256
|
+
// 收集原始列定义中所有的列(保留顺序索引)
|
|
257
|
+
var allOriginalColumns = collectAllColumns(originalColumnDefs);
|
|
258
|
+
|
|
259
|
+
// 找出新增的列及其在原始定义中的索引
|
|
260
|
+
var newColumnsWithIndex = [];
|
|
261
|
+
allOriginalColumns.forEach(function (col, index) {
|
|
262
|
+
if (col.field && !existingFields.has(col.field)) {
|
|
263
|
+
newColumnsWithIndex.push({
|
|
264
|
+
col: col,
|
|
265
|
+
originalIndex: index
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
if (newColumnsWithIndex.length > 0) {
|
|
270
|
+
// 将新增列插入到正确位置(基于其在原始定义中的相对位置)
|
|
271
|
+
var _iterator4 = _createForOfIteratorHelper(newColumnsWithIndex),
|
|
272
|
+
_step4;
|
|
273
|
+
try {
|
|
274
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
275
|
+
var _step4$value = _step4.value,
|
|
276
|
+
col = _step4$value.col,
|
|
277
|
+
originalIndex = _step4$value.originalIndex;
|
|
278
|
+
var insertIndex = 0; // 默认插入到开头
|
|
279
|
+
|
|
280
|
+
// 从该列之前的列开始查找,找到第一个在 result 中存在的列
|
|
281
|
+
var _loop = function _loop() {
|
|
282
|
+
var prevCol = allOriginalColumns[i];
|
|
283
|
+
if (!prevCol.field) return 0; // continue
|
|
284
|
+
|
|
285
|
+
// 在 result 中找到这个前置列的位置
|
|
286
|
+
var prevIndexInResult = result.findIndex(function (r) {
|
|
287
|
+
return r.field === prevCol.field;
|
|
288
|
+
});
|
|
289
|
+
if (prevIndexInResult !== -1) {
|
|
290
|
+
insertIndex = prevIndexInResult + 1;
|
|
291
|
+
return 1; // break
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
_ret;
|
|
295
|
+
for (var i = originalIndex - 1; i >= 0; i--) {
|
|
296
|
+
_ret = _loop();
|
|
297
|
+
if (_ret === 0) continue;
|
|
298
|
+
if (_ret === 1) break;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// 在 insertIndex 位置插入新列
|
|
302
|
+
result.splice(insertIndex, 0, col);
|
|
303
|
+
}
|
|
304
|
+
} catch (err) {
|
|
305
|
+
_iterator4.e(err);
|
|
306
|
+
} finally {
|
|
307
|
+
_iterator4.f();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return result;
|
|
215
312
|
}
|
|
216
313
|
|
|
217
314
|
/**
|
|
@@ -339,11 +436,37 @@ export function isOldSchemeData(data) {
|
|
|
339
436
|
* 扁平化配置 → AG-Grid Column State
|
|
340
437
|
* 将扁平化数组转换为 AG-Grid 的 columnState 格式,用于控制列的顺序和属性
|
|
341
438
|
*
|
|
439
|
+
* 【重要】会自动检测并追加代码中新增的列(在 originalColumnDefs 中存在但 flatConfig 中不存在的列)
|
|
440
|
+
*
|
|
342
441
|
* @param flatConfig 扁平化配置数组
|
|
442
|
+
* @param originalColumnDefs 原始列定义数组(可选),用于检测新增列
|
|
343
443
|
* @returns AG-Grid columnState 数组
|
|
344
444
|
*/
|
|
345
|
-
export function flatConfigToColumnState(flatConfig) {
|
|
346
|
-
|
|
445
|
+
export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
|
|
446
|
+
/**
|
|
447
|
+
* 递归收集所有列定义(包括分组内的列)
|
|
448
|
+
*/
|
|
449
|
+
function collectAllColumns(defs) {
|
|
450
|
+
var columns = [];
|
|
451
|
+
var _iterator5 = _createForOfIteratorHelper(defs),
|
|
452
|
+
_step5;
|
|
453
|
+
try {
|
|
454
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
455
|
+
var def = _step5.value;
|
|
456
|
+
if ('children' in def && def.children) {
|
|
457
|
+
columns.push.apply(columns, _toConsumableArray(collectAllColumns(def.children)));
|
|
458
|
+
} else {
|
|
459
|
+
columns.push(def);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
} catch (err) {
|
|
463
|
+
_iterator5.e(err);
|
|
464
|
+
} finally {
|
|
465
|
+
_iterator5.f();
|
|
466
|
+
}
|
|
467
|
+
return columns;
|
|
468
|
+
}
|
|
469
|
+
var result = flatConfig.filter(function (item) {
|
|
347
470
|
return item.type === 'column';
|
|
348
471
|
}) // 只处理列节点,分组不在 columnState 中
|
|
349
472
|
.filter(function (item) {
|
|
@@ -368,4 +491,73 @@ export function flatConfigToColumnState(flatConfig) {
|
|
|
368
491
|
}
|
|
369
492
|
return state;
|
|
370
493
|
});
|
|
494
|
+
|
|
495
|
+
// 【新增】检测并插入代码中新增的列到原始位置
|
|
496
|
+
if (originalColumnDefs && originalColumnDefs.length > 0) {
|
|
497
|
+
// 收集 flatConfig 中所有已存在的 field
|
|
498
|
+
var existingFields = new Set(flatConfig.filter(function (item) {
|
|
499
|
+
return item.type === 'column' && item.field;
|
|
500
|
+
}).map(function (item) {
|
|
501
|
+
return item.field;
|
|
502
|
+
}));
|
|
503
|
+
|
|
504
|
+
// 收集原始列定义中所有的列(保留顺序索引)
|
|
505
|
+
var allOriginalColumns = collectAllColumns(originalColumnDefs);
|
|
506
|
+
|
|
507
|
+
// 找出新增的列及其在原始定义中的索引
|
|
508
|
+
var newColumnsWithIndex = [];
|
|
509
|
+
allOriginalColumns.forEach(function (col, index) {
|
|
510
|
+
if (col.field && !existingFields.has(col.field)) {
|
|
511
|
+
newColumnsWithIndex.push({
|
|
512
|
+
col: col,
|
|
513
|
+
originalIndex: index
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
if (newColumnsWithIndex.length > 0) {
|
|
518
|
+
// 将新增列插入到正确位置(基于其在原始定义中的相对位置)
|
|
519
|
+
var _iterator6 = _createForOfIteratorHelper(newColumnsWithIndex),
|
|
520
|
+
_step6;
|
|
521
|
+
try {
|
|
522
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
523
|
+
var _step6$value = _step6.value,
|
|
524
|
+
col = _step6$value.col,
|
|
525
|
+
originalIndex = _step6$value.originalIndex;
|
|
526
|
+
var insertIndex = 0; // 默认插入到开头
|
|
527
|
+
|
|
528
|
+
// 从该列之前的列开始查找,找到第一个在 result 中存在的列
|
|
529
|
+
var _loop2 = function _loop2() {
|
|
530
|
+
var prevCol = allOriginalColumns[i];
|
|
531
|
+
if (!prevCol.field) return 0; // continue
|
|
532
|
+
|
|
533
|
+
// 在 result 中找到这个前置列的位置
|
|
534
|
+
var prevIndexInResult = result.findIndex(function (r) {
|
|
535
|
+
return r.colId === prevCol.field;
|
|
536
|
+
});
|
|
537
|
+
if (prevIndexInResult !== -1) {
|
|
538
|
+
insertIndex = prevIndexInResult + 1;
|
|
539
|
+
return 1; // break
|
|
540
|
+
}
|
|
541
|
+
},
|
|
542
|
+
_ret2;
|
|
543
|
+
for (var i = originalIndex - 1; i >= 0; i--) {
|
|
544
|
+
_ret2 = _loop2();
|
|
545
|
+
if (_ret2 === 0) continue;
|
|
546
|
+
if (_ret2 === 1) break;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// 在 insertIndex 位置插入新列状态
|
|
550
|
+
result.splice(insertIndex, 0, {
|
|
551
|
+
colId: col.field
|
|
552
|
+
// 新增列使用默认状态,不设置 hide/width 等
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
} catch (err) {
|
|
556
|
+
_iterator6.e(err);
|
|
557
|
+
} finally {
|
|
558
|
+
_iterator6.f();
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return result;
|
|
371
563
|
}
|
|
@@ -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;
|
|
@@ -15,6 +15,91 @@ import dayjs from 'dayjs';
|
|
|
15
15
|
var esc = function esc(v) {
|
|
16
16
|
return v.replace(/([(),|,\\]|\/i)/g, '\\$1');
|
|
17
17
|
};
|
|
18
|
+
|
|
19
|
+
// --- Query Builder Logic Helpers (P0) ---
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 将高级查询规则转换为后端 Filter 字符串
|
|
23
|
+
* 注意: 目前为了保持兼容性,只能尽量将 OR 转换为后端支持的格式(如 A=1|A=2),
|
|
24
|
+
* 复杂的嵌套 OR 可能需要后端升级支持。当前策略是尽力转换。
|
|
25
|
+
*/
|
|
26
|
+
export var convertRulesToFilterString = function convertRulesToFilterString(ruleGroup, colDefs) {
|
|
27
|
+
if (!ruleGroup || !ruleGroup.children || ruleGroup.children.length === 0) {
|
|
28
|
+
return "";
|
|
29
|
+
}
|
|
30
|
+
var processGroup = function processGroup(group) {
|
|
31
|
+
var results = [];
|
|
32
|
+
var isAnd = group.logic === 'AND';
|
|
33
|
+
group.children.forEach(function (child) {
|
|
34
|
+
if (child.logic) {
|
|
35
|
+
// Nested Group
|
|
36
|
+
var childFilters = processGroup(child);
|
|
37
|
+
if (childFilters.length > 0) {
|
|
38
|
+
// 简单的嵌套处理,如果顶层是 AND,子组也是 AND,则展开
|
|
39
|
+
// 如果逻辑不一致,目前简单的 Filter String 可能无法完美表达 ((A=1) AND (B=2)) OR (C=3)
|
|
40
|
+
// 现在的降级策略:如果是 OR 组,尝试用逗号分隔(但标准是 AND 用逗号)
|
|
41
|
+
// TODO: 确认后端是否支持 SQL-like filter string。
|
|
42
|
+
// 假设目前只处理最简单的:平铺的 AND
|
|
43
|
+
results.push.apply(results, _toConsumableArray(childFilters)); // 暂时打平
|
|
44
|
+
}
|
|
45
|
+
} else {
|
|
46
|
+
// Rule
|
|
47
|
+
var colDef = colDefs.find(function (c) {
|
|
48
|
+
return c.field === child.field;
|
|
49
|
+
});
|
|
50
|
+
var filter = getRuleFilter(child, colDef);
|
|
51
|
+
if (filter) {
|
|
52
|
+
results.push(filter);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return results;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// 目前为了兼容性,强制打平输出。高级功能的完整支持依赖后端。
|
|
60
|
+
// 这里我们把所有规则都视为可以通过 convertFilterModel 处理的单元
|
|
61
|
+
var filters = processGroup(ruleGroup);
|
|
62
|
+
return filters.join(",");
|
|
63
|
+
};
|
|
64
|
+
var getRuleFilter = function getRuleFilter(rule, colDef) {
|
|
65
|
+
var field = rule.field,
|
|
66
|
+
operator = rule.operator,
|
|
67
|
+
value = rule.value;
|
|
68
|
+
if (value === undefined || value === null || value === "") return "";
|
|
69
|
+
var objectKey = field;
|
|
70
|
+
|
|
71
|
+
// 根据操作符构造查询串
|
|
72
|
+
switch (operator) {
|
|
73
|
+
case '=':
|
|
74
|
+
return "".concat(objectKey, " = ").concat(value);
|
|
75
|
+
case '!=':
|
|
76
|
+
return "".concat(objectKey, " != ").concat(value);
|
|
77
|
+
case '>':
|
|
78
|
+
return "".concat(objectKey, " > ").concat(value);
|
|
79
|
+
case '>=':
|
|
80
|
+
return "".concat(objectKey, " >= ").concat(value);
|
|
81
|
+
case '<':
|
|
82
|
+
return "".concat(objectKey, " < ").concat(value);
|
|
83
|
+
case '<=':
|
|
84
|
+
return "".concat(objectKey, " <= ").concat(value);
|
|
85
|
+
case 'contains':
|
|
86
|
+
return "".concat(objectKey, " =* ").concat(esc(value));
|
|
87
|
+
case 'startsWith':
|
|
88
|
+
return "".concat(objectKey, " ^ ").concat(esc(value));
|
|
89
|
+
case 'endsWith':
|
|
90
|
+
// 后端可能不支持 endWith 语法,暂用 =*
|
|
91
|
+
return "".concat(objectKey, " =* ").concat(esc(value));
|
|
92
|
+
case 'between':
|
|
93
|
+
if (Array.isArray(value)) {
|
|
94
|
+
// 复用现有的 range 逻辑
|
|
95
|
+
return getFilter(objectKey, value, colDef);
|
|
96
|
+
}
|
|
97
|
+
return "";
|
|
98
|
+
default:
|
|
99
|
+
// 默认回退到标准处理
|
|
100
|
+
return getFilter(objectKey, value, colDef);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
18
103
|
var getFilter = function getFilter(objectKey, value, colDef) {
|
|
19
104
|
if (typeof value === 'string') {
|
|
20
105
|
return value && value != "" ? "".concat(objectKey, " ").concat(colDef !== null && colDef !== void 0 && colDef.exactQuery ? '^' : "=*", " ").concat(esc(value)) : "";
|
|
@@ -55,8 +55,10 @@ var FormDesigner = function FormDesigner(props) {
|
|
|
55
55
|
var getComponents = function getComponents() {
|
|
56
56
|
var components = {};
|
|
57
57
|
businessComponents.map(function (x) {
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
var _x$Behavior;
|
|
59
|
+
if ((_x$Behavior = x.Behavior) !== null && _x$Behavior !== void 0 && (_x$Behavior = _x$Behavior[0]) !== null && _x$Behavior !== void 0 && _x$Behavior.name) {
|
|
60
|
+
components[x.Behavior[0].name] = x;
|
|
61
|
+
}
|
|
60
62
|
});
|
|
61
63
|
return components;
|
|
62
64
|
};
|