@nokecy/qc-ui 1.1.49 → 1.1.50

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.
@@ -305,7 +305,8 @@ var ColumnSetting = function ColumnSetting(_ref) {
305
305
  // 【修复】修正 originalHeaderName,确保使用 initialColumnDefs 中的原始值
306
306
  var config = fixOriginalHeaderName(currentScheme.columnConfig);
307
307
  // 【修复】检测并追加代码中新增的列到配置末尾
308
- config = mergeNewColumns(config, originalColumnDefs);
308
+ // 只做查询条件的列不进列配置:方案里存过的剔除,也不当新增列追加 @author nokecy
309
+ config = mergeNewColumns((0, _columnGroupUtils.dropQueryOnlyItems)(config, originalColumnDefs), (0, _columnGroupUtils.excludeQueryOnlyColumns)(originalColumnDefs));
309
310
  // 【修复】按 order 字段排序,确保配置弹窗显示的列顺序与保存时一致
310
311
  config = _toConsumableArray(config).sort(function (a, b) {
311
312
  return a.order - b.order;
@@ -8,6 +8,18 @@ import type { FlatColumnItem, OldColumnState } from './columnGroupTypes';
8
8
  * 生成唯一 ID
9
9
  */
10
10
  export declare const generateId: () => string;
11
+ /**
12
+ * 去掉只做查询条件的列(hideInTable),含分组内的
13
+ * 这类列只进查询表单,不是表格列:列方案的还原、新增列检测都不能把它带进表格
14
+ * @author nokecy
15
+ */
16
+ export declare function excludeQueryOnlyColumns<T extends ColDef | ColGroupDef>(defs?: T[]): T[] | undefined;
17
+ /**
18
+ * 从已存的列方案中去掉只做查询条件的列
19
+ * 旧版本方案会把它们当新增列存进去,还原时要按当前列定义剔除
20
+ * @author nokecy
21
+ */
22
+ export declare function dropQueryOnlyItems(flatConfig: FlatColumnItem[], originalColumnDefs?: (ColDef | ColGroupDef)[]): FlatColumnItem[];
11
23
  /**
12
24
  * Grid State → 扁平化配置
13
25
  * 将 AG-Grid 的树形结构转换为扁平化数组,用于 UI 展示和编辑
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
 
3
- 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); }
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.checkIsLastChild = checkIsLastChild;
7
+ exports.dropQueryOnlyItems = dropQueryOnlyItems;
8
+ exports.excludeQueryOnlyColumns = excludeQueryOnlyColumns;
8
9
  exports.findLastDescendantIndex = findLastDescendantIndex;
9
10
  exports.flatConfigToColumnState = flatConfigToColumnState;
10
11
  exports.flatConfigToGridState = flatConfigToGridState;
@@ -15,18 +16,19 @@ exports.migrateOldScheme = migrateOldScheme;
15
16
  exports.reorderItems = reorderItems;
16
17
  var _lodash = require("lodash");
17
18
  var _logger = require("../utils/logger");
18
- 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; }
19
- 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; }
20
- 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; }
21
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
22
- 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); }
19
+ 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); }
23
20
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
24
21
  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."); }
25
22
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
26
23
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
27
24
  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; } } }; }
28
25
  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); }
29
- 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; } /**
26
+ 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; }
27
+ 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; }
28
+ 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; }
29
+ 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; }
30
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
31
+ 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); } /**
30
32
  * 表头分组配置工具函数
31
33
  * 负责 Grid State 与扁平化配置之间的转换
32
34
  */
@@ -37,6 +39,39 @@ var generateId = exports.generateId = function generateId() {
37
39
  return (0, _lodash.uniqueId)('col_');
38
40
  };
39
41
 
42
+ /**
43
+ * 去掉只做查询条件的列(hideInTable),含分组内的
44
+ * 这类列只进查询表单,不是表格列:列方案的还原、新增列检测都不能把它带进表格
45
+ * @author nokecy
46
+ */
47
+ function excludeQueryOnlyColumns(defs) {
48
+ return defs === null || defs === void 0 ? void 0 : defs.filter(function (def) {
49
+ return !def.hideInTable;
50
+ }).map(function (def) {
51
+ return 'children' in def && def.children ? _objectSpread(_objectSpread({}, def), {}, {
52
+ children: excludeQueryOnlyColumns(def.children)
53
+ }) : def;
54
+ });
55
+ }
56
+
57
+ /**
58
+ * 从已存的列方案中去掉只做查询条件的列
59
+ * 旧版本方案会把它们当新增列存进去,还原时要按当前列定义剔除
60
+ * @author nokecy
61
+ */
62
+ function dropQueryOnlyItems(flatConfig, originalColumnDefs) {
63
+ var queryOnlyFields = new Set();
64
+ var collect = function collect(defs) {
65
+ return defs.forEach(function (def) {
66
+ if ('children' in def && def.children) collect(def.children);else if (def.hideInTable && def.field) queryOnlyFields.add(def.field);
67
+ });
68
+ };
69
+ collect(originalColumnDefs !== null && originalColumnDefs !== void 0 ? originalColumnDefs : []);
70
+ return flatConfig.filter(function (item) {
71
+ return item.type !== 'column' || !item.field || !queryOnlyFields.has(item.field);
72
+ });
73
+ }
74
+
40
75
  /**
41
76
  * Grid State → 扁平化配置
42
77
  * 将 AG-Grid 的树形结构转换为扁平化数组,用于 UI 展示和编辑
@@ -146,6 +181,10 @@ function gridStateToFlatConfig(columnDefs, originalColumnDefs) {
146
181
  * @returns AG-Grid 列定义数组
147
182
  */
148
183
  function flatConfigToGridState(flatConfig, originalColumnDefs) {
184
+ // 只做查询条件的列不进表格:方案里存过的剔除,也不当新增列补回 @author nokecy
185
+ flatConfig = dropQueryOnlyItems(flatConfig, originalColumnDefs);
186
+ originalColumnDefs = excludeQueryOnlyColumns(originalColumnDefs);
187
+
149
188
  /**
150
189
  * 从原始列定义中查找指定字段的列定义(支持递归查找分组内的列)
151
190
  */
@@ -463,6 +502,10 @@ function isOldSchemeData(data) {
463
502
  * @returns AG-Grid columnState 数组
464
503
  */
465
504
  function flatConfigToColumnState(flatConfig, originalColumnDefs) {
505
+ // 只做查询条件的列不进表格:方案里存过的剔除,也不当新增列补回 @author nokecy
506
+ flatConfig = dropQueryOnlyItems(flatConfig, originalColumnDefs);
507
+ originalColumnDefs = excludeQueryOnlyColumns(originalColumnDefs);
508
+
466
509
  /**
467
510
  * 递归收集所有列定义(包括分组内的列)
468
511
  */
@@ -9,6 +9,7 @@ var _react = _interopRequireDefault(require("react"));
9
9
  var _antd = require("antd");
10
10
  var _react2 = require("@formily/react");
11
11
  var _shared = require("@formily/shared");
12
+ var _jsonSchema = require("@formily/json-schema");
12
13
  var _arrayBase = _interopRequireDefault(require("./arrayBase"));
13
14
  var _readOnlyFormatters = require("./readOnlyFormatters");
14
15
  var _excluded = ["hide", "sort", "sortIndex", "forceAgField"];
@@ -190,6 +191,54 @@ var resolveEmptyPlaceholder = function resolveEmptyPlaceholder(fieldSchema) {
190
191
  return SELECT_LIKE.has(fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema['x-component']) ? '请选择' : '请输入';
191
192
  };
192
193
 
194
+ /** Formily 字段的四种 pattern;x-pattern 求出来不在其中,视为「求不出」 */
195
+ var CELL_PATTERNS = new Set(['editable', 'disabled', 'readOnly', 'readPretty']);
196
+
197
+ /**
198
+ * 懒挂载格此刻的 pattern。
199
+ *
200
+ * 懒挂载不创建 Formily 字段,拿不到字段实例上求好的 pattern,只能按同一套规则自己求:
201
+ * 字段自己的 x-pattern 优先(表达式按本行本格的作用域求值,$self 只提供 path/index/value/form/parent/query),
202
+ * 没写则继承整表 pattern。表达式用到本格没有的能力、抛错或求出非法值时返回 undefined,
203
+ * 调用方按「可编辑」处理,保持原有提示。@author nokecy
204
+ */
205
+ var resolveLazyCellPattern = function resolveLazyCellPattern(arrayField, record, dataKey, fieldSchema, scope) {
206
+ var own = fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema['x-pattern'];
207
+ if (own == null) return arrayField === null || arrayField === void 0 ? void 0 : arrayField.pattern;
208
+ if (typeof own !== 'string') return undefined;
209
+ if (CELL_PATTERNS.has(own)) return own;
210
+ var form = arrayField === null || arrayField === void 0 ? void 0 : arrayField.form;
211
+ if (!form || !dataKey) return undefined;
212
+ try {
213
+ var _arrayField$value$ind, _arrayField$value, _arrayField$value$ind2;
214
+ var index = (_arrayField$value$ind = (_arrayField$value = arrayField.value) === null || _arrayField$value === void 0 || (_arrayField$value$ind2 = _arrayField$value.indexOf) === null || _arrayField$value$ind2 === void 0 ? void 0 : _arrayField$value$ind2.call(_arrayField$value, record)) !== null && _arrayField$value$ind !== void 0 ? _arrayField$value$ind : -1;
215
+ var path = arrayField.address.concat(index).concat(dataKey);
216
+ var self = {
217
+ path: path,
218
+ address: path,
219
+ index: index,
220
+ form: form,
221
+ parent: arrayField,
222
+ get value() {
223
+ return readByFieldPath(record, dataKey);
224
+ },
225
+ query: function query(pattern) {
226
+ return form.query(pattern);
227
+ }
228
+ };
229
+ var result = _jsonSchema.Schema.shallowCompile(own, (0, _shared.lazyMerge)(scope !== null && scope !== void 0 ? scope : {}, {
230
+ $form: form,
231
+ $values: form.values,
232
+ $self: self,
233
+ $record: record,
234
+ $index: index
235
+ }));
236
+ return CELL_PATTERNS.has(result) ? result : undefined;
237
+ } catch (_unused) {
238
+ return undefined;
239
+ }
240
+ };
241
+
193
242
  /**
194
243
  * 懒挂载单元格渲染器(可编辑列)。
195
244
  *
@@ -219,6 +268,7 @@ var LazyAgField = exports.LazyAgField = function LazyAgField(params) {
219
268
  // hook 必须在下面的条件 return 之前调用
220
269
  var _theme$useToken = _antd.theme.useToken(),
221
270
  token = _theme$useToken.token;
271
+ var scope = (0, _react2.useExpressionScope)();
222
272
  var key = "".concat(node === null || node === void 0 ? void 0 : node.id, ":").concat(colDef === null || colDef === void 0 ? void 0 : colDef.field);
223
273
  var activated = (record === null || record === void 0 ? void 0 : record._isNew) === true || (context === null || context === void 0 || (_context$activeCells = context.activeCells) === null || _context$activeCells === void 0 || (_context$activeCells$ = _context$activeCells.has) === null || _context$activeCells$ === void 0 ? void 0 : _context$activeCells$.call(_context$activeCells, key)) === true;
224
274
  if (activated) {
@@ -245,7 +295,9 @@ var LazyAgField = exports.LazyAgField = function LazyAgField(params) {
245
295
  fieldSchema: fieldSchema
246
296
  }) : liveValue == null ? '' : String(liveValue);
247
297
  // 纯文本占满单元格,点击交给 AG-Grid onCellClicked 激活;样式尽量贴近 Editable 只读态避免点开跳动
248
- if (text === '') {
298
+ // 只读态(readPretty/disabled/readOnly)的空格不出编辑提示,留空与只读快路径一致
299
+ var pattern = text === '' ? resolveLazyCellPattern(field, record, dataKey, fieldSchema, scope) : undefined;
300
+ if (text === '' && (pattern == null || pattern === 'editable')) {
249
301
  // 空值:出淡灰 placeholder,让用户看得出这格能填(颜色取 antd 输入框 placeholder 的 token,自动跟随暗色主题)
250
302
  return /*#__PURE__*/_react.default.createElement("span", {
251
303
  className: "ag-array-table-lazy-placeholder",
@@ -33,7 +33,7 @@ import { AgGridReact } from 'ag-grid-react';
33
33
  import { agGridTheme } from "../theme";
34
34
  import { localeText } from "../locale";
35
35
  import { createForm, onFormInit } from '@formily/core';
36
- import { gridStateToFlatConfig, flatConfigToGridState, flatConfigToColumnState, isOldSchemeData, migrateOldScheme, generateId } from "./columnGroupUtils";
36
+ import { gridStateToFlatConfig, flatConfigToGridState, flatConfigToColumnState, dropQueryOnlyItems, excludeQueryOnlyColumns, isOldSchemeData, migrateOldScheme, generateId } from "./columnGroupUtils";
37
37
  import ColumnConfigTable from "./ColumnConfigTable";
38
38
  import DraggableModal from "../../draggableModal";
39
39
  import { useGridSchemes } from "../context/useSchemeManager";
@@ -298,7 +298,8 @@ var ColumnSetting = function ColumnSetting(_ref) {
298
298
  // 【修复】修正 originalHeaderName,确保使用 initialColumnDefs 中的原始值
299
299
  var config = fixOriginalHeaderName(currentScheme.columnConfig);
300
300
  // 【修复】检测并追加代码中新增的列到配置末尾
301
- config = mergeNewColumns(config, originalColumnDefs);
301
+ // 只做查询条件的列不进列配置:方案里存过的剔除,也不当新增列追加 @author nokecy
302
+ config = mergeNewColumns(dropQueryOnlyItems(config, originalColumnDefs), excludeQueryOnlyColumns(originalColumnDefs));
302
303
  // 【修复】按 order 字段排序,确保配置弹窗显示的列顺序与保存时一致
303
304
  config = _toConsumableArray(config).sort(function (a, b) {
304
305
  return a.order - b.order;
@@ -8,6 +8,18 @@ import type { FlatColumnItem, OldColumnState } from './columnGroupTypes';
8
8
  * 生成唯一 ID
9
9
  */
10
10
  export declare const generateId: () => string;
11
+ /**
12
+ * 去掉只做查询条件的列(hideInTable),含分组内的
13
+ * 这类列只进查询表单,不是表格列:列方案的还原、新增列检测都不能把它带进表格
14
+ * @author nokecy
15
+ */
16
+ export declare function excludeQueryOnlyColumns<T extends ColDef | ColGroupDef>(defs?: T[]): T[] | undefined;
17
+ /**
18
+ * 从已存的列方案中去掉只做查询条件的列
19
+ * 旧版本方案会把它们当新增列存进去,还原时要按当前列定义剔除
20
+ * @author nokecy
21
+ */
22
+ export declare function dropQueryOnlyItems(flatConfig: FlatColumnItem[], originalColumnDefs?: (ColDef | ColGroupDef)[]): FlatColumnItem[];
11
23
  /**
12
24
  * Grid State → 扁平化配置
13
25
  * 将 AG-Grid 的树形结构转换为扁平化数组,用于 UI 展示和编辑
@@ -1,9 +1,4 @@
1
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 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; }
3
- 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; }
4
- 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; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
- 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); }
7
2
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
3
  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."); }
9
4
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -11,6 +6,11 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
11
6
  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; } } }; }
12
7
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13
8
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
9
+ function 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; }
10
+ 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; }
11
+ 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; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
13
+ 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); }
14
14
  /**
15
15
  * 表头分组配置工具函数
16
16
  * 负责 Grid State 与扁平化配置之间的转换
@@ -25,6 +25,39 @@ export var generateId = function generateId() {
25
25
  return uniqueId('col_');
26
26
  };
27
27
 
28
+ /**
29
+ * 去掉只做查询条件的列(hideInTable),含分组内的
30
+ * 这类列只进查询表单,不是表格列:列方案的还原、新增列检测都不能把它带进表格
31
+ * @author nokecy
32
+ */
33
+ export function excludeQueryOnlyColumns(defs) {
34
+ return defs === null || defs === void 0 ? void 0 : defs.filter(function (def) {
35
+ return !def.hideInTable;
36
+ }).map(function (def) {
37
+ return 'children' in def && def.children ? _objectSpread(_objectSpread({}, def), {}, {
38
+ children: excludeQueryOnlyColumns(def.children)
39
+ }) : def;
40
+ });
41
+ }
42
+
43
+ /**
44
+ * 从已存的列方案中去掉只做查询条件的列
45
+ * 旧版本方案会把它们当新增列存进去,还原时要按当前列定义剔除
46
+ * @author nokecy
47
+ */
48
+ export function dropQueryOnlyItems(flatConfig, originalColumnDefs) {
49
+ var queryOnlyFields = new Set();
50
+ var collect = function collect(defs) {
51
+ return defs.forEach(function (def) {
52
+ if ('children' in def && def.children) collect(def.children);else if (def.hideInTable && def.field) queryOnlyFields.add(def.field);
53
+ });
54
+ };
55
+ collect(originalColumnDefs !== null && originalColumnDefs !== void 0 ? originalColumnDefs : []);
56
+ return flatConfig.filter(function (item) {
57
+ return item.type !== 'column' || !item.field || !queryOnlyFields.has(item.field);
58
+ });
59
+ }
60
+
28
61
  /**
29
62
  * Grid State → 扁平化配置
30
63
  * 将 AG-Grid 的树形结构转换为扁平化数组,用于 UI 展示和编辑
@@ -134,6 +167,10 @@ export function gridStateToFlatConfig(columnDefs, originalColumnDefs) {
134
167
  * @returns AG-Grid 列定义数组
135
168
  */
136
169
  export function flatConfigToGridState(flatConfig, originalColumnDefs) {
170
+ // 只做查询条件的列不进表格:方案里存过的剔除,也不当新增列补回 @author nokecy
171
+ flatConfig = dropQueryOnlyItems(flatConfig, originalColumnDefs);
172
+ originalColumnDefs = excludeQueryOnlyColumns(originalColumnDefs);
173
+
137
174
  /**
138
175
  * 从原始列定义中查找指定字段的列定义(支持递归查找分组内的列)
139
176
  */
@@ -451,6 +488,10 @@ export function isOldSchemeData(data) {
451
488
  * @returns AG-Grid columnState 数组
452
489
  */
453
490
  export function flatConfigToColumnState(flatConfig, originalColumnDefs) {
491
+ // 只做查询条件的列不进表格:方案里存过的剔除,也不当新增列补回 @author nokecy
492
+ flatConfig = dropQueryOnlyItems(flatConfig, originalColumnDefs);
493
+ originalColumnDefs = excludeQueryOnlyColumns(originalColumnDefs);
494
+
454
495
  /**
455
496
  * 递归收集所有列定义(包括分组内的列)
456
497
  */
@@ -9,8 +9,9 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
9
9
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
10
10
  import React from 'react';
11
11
  import { theme } from 'antd';
12
- import { useField, useFieldSchema, RecursionField, Observer } from '@formily/react';
13
- import { isArr } from '@formily/shared';
12
+ import { useField, useFieldSchema, RecursionField, Observer, useExpressionScope } from '@formily/react';
13
+ import { isArr, lazyMerge } from '@formily/shared';
14
+ import { Schema } from '@formily/json-schema';
14
15
  import ArrayBase from "./arrayBase";
15
16
  import { getReadOnlyFormatter } from "./readOnlyFormatters";
16
17
  var isColumnComponent = function isColumnComponent(schema) {
@@ -183,6 +184,54 @@ var resolveEmptyPlaceholder = function resolveEmptyPlaceholder(fieldSchema) {
183
184
  return SELECT_LIKE.has(fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema['x-component']) ? '请选择' : '请输入';
184
185
  };
185
186
 
187
+ /** Formily 字段的四种 pattern;x-pattern 求出来不在其中,视为「求不出」 */
188
+ var CELL_PATTERNS = new Set(['editable', 'disabled', 'readOnly', 'readPretty']);
189
+
190
+ /**
191
+ * 懒挂载格此刻的 pattern。
192
+ *
193
+ * 懒挂载不创建 Formily 字段,拿不到字段实例上求好的 pattern,只能按同一套规则自己求:
194
+ * 字段自己的 x-pattern 优先(表达式按本行本格的作用域求值,$self 只提供 path/index/value/form/parent/query),
195
+ * 没写则继承整表 pattern。表达式用到本格没有的能力、抛错或求出非法值时返回 undefined,
196
+ * 调用方按「可编辑」处理,保持原有提示。@author nokecy
197
+ */
198
+ var resolveLazyCellPattern = function resolveLazyCellPattern(arrayField, record, dataKey, fieldSchema, scope) {
199
+ var own = fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema['x-pattern'];
200
+ if (own == null) return arrayField === null || arrayField === void 0 ? void 0 : arrayField.pattern;
201
+ if (typeof own !== 'string') return undefined;
202
+ if (CELL_PATTERNS.has(own)) return own;
203
+ var form = arrayField === null || arrayField === void 0 ? void 0 : arrayField.form;
204
+ if (!form || !dataKey) return undefined;
205
+ try {
206
+ var _arrayField$value$ind, _arrayField$value, _arrayField$value$ind2;
207
+ var index = (_arrayField$value$ind = (_arrayField$value = arrayField.value) === null || _arrayField$value === void 0 || (_arrayField$value$ind2 = _arrayField$value.indexOf) === null || _arrayField$value$ind2 === void 0 ? void 0 : _arrayField$value$ind2.call(_arrayField$value, record)) !== null && _arrayField$value$ind !== void 0 ? _arrayField$value$ind : -1;
208
+ var path = arrayField.address.concat(index).concat(dataKey);
209
+ var self = {
210
+ path: path,
211
+ address: path,
212
+ index: index,
213
+ form: form,
214
+ parent: arrayField,
215
+ get value() {
216
+ return readByFieldPath(record, dataKey);
217
+ },
218
+ query: function query(pattern) {
219
+ return form.query(pattern);
220
+ }
221
+ };
222
+ var result = Schema.shallowCompile(own, lazyMerge(scope !== null && scope !== void 0 ? scope : {}, {
223
+ $form: form,
224
+ $values: form.values,
225
+ $self: self,
226
+ $record: record,
227
+ $index: index
228
+ }));
229
+ return CELL_PATTERNS.has(result) ? result : undefined;
230
+ } catch (_unused) {
231
+ return undefined;
232
+ }
233
+ };
234
+
186
235
  /**
187
236
  * 懒挂载单元格渲染器(可编辑列)。
188
237
  *
@@ -212,6 +261,7 @@ var LazyAgField = function LazyAgField(params) {
212
261
  // hook 必须在下面的条件 return 之前调用
213
262
  var _theme$useToken = theme.useToken(),
214
263
  token = _theme$useToken.token;
264
+ var scope = useExpressionScope();
215
265
  var key = "".concat(node === null || node === void 0 ? void 0 : node.id, ":").concat(colDef === null || colDef === void 0 ? void 0 : colDef.field);
216
266
  var activated = (record === null || record === void 0 ? void 0 : record._isNew) === true || (context === null || context === void 0 || (_context$activeCells = context.activeCells) === null || _context$activeCells === void 0 || (_context$activeCells$ = _context$activeCells.has) === null || _context$activeCells$ === void 0 ? void 0 : _context$activeCells$.call(_context$activeCells, key)) === true;
217
267
  if (activated) {
@@ -238,7 +288,9 @@ var LazyAgField = function LazyAgField(params) {
238
288
  fieldSchema: fieldSchema
239
289
  }) : liveValue == null ? '' : String(liveValue);
240
290
  // 纯文本占满单元格,点击交给 AG-Grid onCellClicked 激活;样式尽量贴近 Editable 只读态避免点开跳动
241
- if (text === '') {
291
+ // 只读态(readPretty/disabled/readOnly)的空格不出编辑提示,留空与只读快路径一致
292
+ var pattern = text === '' ? resolveLazyCellPattern(field, record, dataKey, fieldSchema, scope) : undefined;
293
+ if (text === '' && (pattern == null || pattern === 'editable')) {
242
294
  // 空值:出淡灰 placeholder,让用户看得出这格能填(颜色取 antd 输入框 placeholder 的 token,自动跟随暗色主题)
243
295
  return /*#__PURE__*/React.createElement("span", {
244
296
  className: "ag-array-table-lazy-placeholder",