weaver-e10-builder 1.5.7 → 1.5.10

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 (196) hide show
  1. package/dist/commands/app.d.ts.map +1 -1
  2. package/dist/commands/app.js +259 -0
  3. package/dist/commands/app.js.map +1 -1
  4. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  5. package/dist/commands/form-add-detail-table.js +13 -2
  6. package/dist/commands/form-add-detail-table.js.map +1 -1
  7. package/dist/commands/form-button.d.ts.map +1 -1
  8. package/dist/commands/form-button.js +6 -4
  9. package/dist/commands/form-button.js.map +1 -1
  10. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  11. package/dist/commands/form-formula-linkage.js +4 -4
  12. package/dist/commands/form-formula-linkage.js.map +1 -1
  13. package/dist/commands/form-list-filter.d.ts +3 -0
  14. package/dist/commands/form-list-filter.d.ts.map +1 -1
  15. package/dist/commands/form-list-filter.js +88 -24
  16. package/dist/commands/form-list-filter.js.map +1 -1
  17. package/dist/commands/form-list-permission.d.ts.map +1 -1
  18. package/dist/commands/form-list-permission.js +2 -9
  19. package/dist/commands/form-list-permission.js.map +1 -1
  20. package/dist/commands/form-list-search-group.d.ts.map +1 -1
  21. package/dist/commands/form-list-search-group.js +54 -64
  22. package/dist/commands/form-list-search-group.js.map +1 -1
  23. package/dist/commands/form-list-stats.d.ts.map +1 -1
  24. package/dist/commands/form-list-stats.js +29 -4
  25. package/dist/commands/form-list-stats.js.map +1 -1
  26. package/dist/commands/form-list-utils.d.ts +46 -1
  27. package/dist/commands/form-list-utils.d.ts.map +1 -1
  28. package/dist/commands/form-list-utils.js +140 -47
  29. package/dist/commands/form-list-utils.js.map +1 -1
  30. package/dist/commands/form-list.d.ts.map +1 -1
  31. package/dist/commands/form-list.js +141 -71
  32. package/dist/commands/form-list.js.map +1 -1
  33. package/dist/commands/form-message.d.ts +3 -0
  34. package/dist/commands/form-message.d.ts.map +1 -0
  35. package/dist/commands/form-message.js +341 -0
  36. package/dist/commands/form-message.js.map +1 -0
  37. package/dist/commands/form-permission.d.ts.map +1 -1
  38. package/dist/commands/form-permission.js +378 -0
  39. package/dist/commands/form-permission.js.map +1 -1
  40. package/dist/commands/form-view.d.ts.map +1 -1
  41. package/dist/commands/form-view.js +31 -4
  42. package/dist/commands/form-view.js.map +1 -1
  43. package/dist/commands/matrix.d.ts.map +1 -1
  44. package/dist/commands/matrix.js +80 -42
  45. package/dist/commands/matrix.js.map +1 -1
  46. package/dist/commands/menu.d.ts +2 -2
  47. package/dist/commands/menu.d.ts.map +1 -1
  48. package/dist/commands/menu.js +46 -13
  49. package/dist/commands/menu.js.map +1 -1
  50. package/dist/commands/org.d.ts.map +1 -1
  51. package/dist/commands/org.js +61 -0
  52. package/dist/commands/org.js.map +1 -1
  53. package/dist/commands/role.d.ts.map +1 -1
  54. package/dist/commands/role.js +69 -9
  55. package/dist/commands/role.js.map +1 -1
  56. package/dist/commands/wf-form.d.ts.map +1 -1
  57. package/dist/commands/wf-form.js +5 -5
  58. package/dist/commands/wf-form.js.map +1 -1
  59. package/dist/index.js +2 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
  62. package/dist/services/actionflow/calendar_mapper.js +15 -10
  63. package/dist/services/actionflow/calendar_mapper.js.map +1 -1
  64. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
  65. package/dist/services/actionflow/components/custom_set_form.js +9 -7
  66. package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
  67. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  68. package/dist/services/actionflow/components/index.js +2 -1
  69. package/dist/services/actionflow/components/index.js.map +1 -1
  70. package/dist/services/actionflow/components/inner_mq_listener.d.ts +6 -0
  71. package/dist/services/actionflow/components/inner_mq_listener.d.ts.map +1 -1
  72. package/dist/services/actionflow/components/inner_mq_listener.js +50 -2
  73. package/dist/services/actionflow/components/inner_mq_listener.js.map +1 -1
  74. package/dist/services/actionflow/components/meeting_create.js +1 -1
  75. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  76. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  77. package/dist/services/actionflow/components/multiple_execution.js +20 -19
  78. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  79. package/dist/services/actionflow/components/output.d.ts.map +1 -1
  80. package/dist/services/actionflow/components/output.js +3 -10
  81. package/dist/services/actionflow/components/output.js.map +1 -1
  82. package/dist/services/actionflow/components/schedule_create.js +2 -2
  83. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  84. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  85. package/dist/services/actionflow/components/workflow_actions.js +33 -16
  86. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  87. package/dist/services/actionflow/context_preflight.d.ts +3 -3
  88. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  89. package/dist/services/actionflow/context_preflight.js +85 -27
  90. package/dist/services/actionflow/context_preflight.js.map +1 -1
  91. package/dist/services/actionflow/context_provider.d.ts +7 -0
  92. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  93. package/dist/services/actionflow/context_provider.js +13 -1
  94. package/dist/services/actionflow/context_provider.js.map +1 -1
  95. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -1
  96. package/dist/services/actionflow/custom_trigger_context.js +1 -0
  97. package/dist/services/actionflow/custom_trigger_context.js.map +1 -1
  98. package/dist/services/actionflow/formula_service.d.ts +15 -0
  99. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  100. package/dist/services/actionflow/formula_service.js +413 -64
  101. package/dist/services/actionflow/formula_service.js.map +1 -1
  102. package/dist/services/actionflow/machine_key.d.ts +13 -0
  103. package/dist/services/actionflow/machine_key.d.ts.map +1 -0
  104. package/dist/services/actionflow/machine_key.js +62 -0
  105. package/dist/services/actionflow/machine_key.js.map +1 -0
  106. package/dist/services/actionflow/param_group_dto.d.ts.map +1 -1
  107. package/dist/services/actionflow/param_group_dto.js +31 -8
  108. package/dist/services/actionflow/param_group_dto.js.map +1 -1
  109. package/dist/services/actionflow/param_type.d.ts +14 -0
  110. package/dist/services/actionflow/param_type.d.ts.map +1 -0
  111. package/dist/services/actionflow/param_type.js +69 -0
  112. package/dist/services/actionflow/param_type.js.map +1 -0
  113. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  114. package/dist/services/actionflow/preflight_service.js +68 -44
  115. package/dist/services/actionflow/preflight_service.js.map +1 -1
  116. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  117. package/dist/services/actionflow/workflow_compiler.js +65 -29
  118. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  119. package/dist/services/app-publish.d.ts +227 -0
  120. package/dist/services/app-publish.d.ts.map +1 -0
  121. package/dist/services/app-publish.js +403 -0
  122. package/dist/services/app-publish.js.map +1 -0
  123. package/dist/services/form-button-position.d.ts.map +1 -1
  124. package/dist/services/form-button-position.js +7 -1
  125. package/dist/services/form-button-position.js.map +1 -1
  126. package/dist/services/form-field-drop.d.ts.map +1 -1
  127. package/dist/services/form-field-drop.js +7 -0
  128. package/dist/services/form-field-drop.js.map +1 -1
  129. package/dist/services/form-formula-linkage.d.ts +24 -3
  130. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  131. package/dist/services/form-formula-linkage.js +24 -5
  132. package/dist/services/form-formula-linkage.js.map +1 -1
  133. package/dist/services/form-list-search-group.d.ts +89 -0
  134. package/dist/services/form-list-search-group.d.ts.map +1 -0
  135. package/dist/services/form-list-search-group.js +260 -0
  136. package/dist/services/form-list-search-group.js.map +1 -0
  137. package/dist/services/form-list-search.d.ts +110 -0
  138. package/dist/services/form-list-search.d.ts.map +1 -0
  139. package/dist/services/form-list-search.js +231 -0
  140. package/dist/services/form-list-search.js.map +1 -0
  141. package/dist/services/form-list-stats.d.ts +21 -1
  142. package/dist/services/form-list-stats.d.ts.map +1 -1
  143. package/dist/services/form-list-stats.js +86 -12
  144. package/dist/services/form-list-stats.js.map +1 -1
  145. package/dist/services/form-message.d.ts +273 -0
  146. package/dist/services/form-message.d.ts.map +1 -0
  147. package/dist/services/form-message.js +575 -0
  148. package/dist/services/form-message.js.map +1 -0
  149. package/dist/services/form-permission-archive.d.ts +113 -0
  150. package/dist/services/form-permission-archive.d.ts.map +1 -0
  151. package/dist/services/form-permission-archive.js +359 -0
  152. package/dist/services/form-permission-archive.js.map +1 -0
  153. package/dist/services/form-sub-detail.d.ts.map +1 -1
  154. package/dist/services/form-sub-detail.js +5 -1
  155. package/dist/services/form-sub-detail.js.map +1 -1
  156. package/dist/services/form-view.d.ts +34 -2
  157. package/dist/services/form-view.d.ts.map +1 -1
  158. package/dist/services/form-view.js +74 -8
  159. package/dist/services/form-view.js.map +1 -1
  160. package/dist/services/matrix-fields.d.ts +42 -0
  161. package/dist/services/matrix-fields.d.ts.map +1 -0
  162. package/dist/services/matrix-fields.js +102 -0
  163. package/dist/services/matrix-fields.js.map +1 -0
  164. package/dist/services/menu-catalog.d.ts +13 -0
  165. package/dist/services/menu-catalog.d.ts.map +1 -1
  166. package/dist/services/menu-catalog.js +24 -0
  167. package/dist/services/menu-catalog.js.map +1 -1
  168. package/dist/services/org-browser.d.ts +60 -0
  169. package/dist/services/org-browser.d.ts.map +1 -0
  170. package/dist/services/org-browser.js +62 -0
  171. package/dist/services/org-browser.js.map +1 -0
  172. package/dist/services/quick-date-range.d.ts +22 -0
  173. package/dist/services/quick-date-range.d.ts.map +1 -0
  174. package/dist/services/quick-date-range.js +134 -0
  175. package/dist/services/quick-date-range.js.map +1 -0
  176. package/dist/services/role-member.d.ts +73 -2
  177. package/dist/services/role-member.d.ts.map +1 -1
  178. package/dist/services/role-member.js +141 -9
  179. package/dist/services/role-member.js.map +1 -1
  180. package/package.json +1 -1
  181. package/skill-docs/SKILL.md +281 -278
  182. package/skill-docs/_catalog.md +5 -1
  183. package/skill-docs/actionflows/SKILL.md +3 -1
  184. package/skill-docs/actionflows/references/components/logic/Output.md +1 -1
  185. package/skill-docs/actionflows/references/components/message/InnerMQSend.md +6 -0
  186. package/skill-docs/actionflows/references/dynamic_capability_matrix.md +3 -3
  187. package/skill-docs/references/app/guide-app-publish.md +92 -0
  188. package/skill-docs/references/common/guide-plan-template.md +148 -252
  189. package/skill-docs/references/common/map.md +2 -1
  190. package/skill-docs/references/common/ref-cli-commands.md +32 -11
  191. package/skill-docs/references/form/guide-form-archive-permission.md +122 -0
  192. package/skill-docs/references/form/guide-form-message.md +57 -0
  193. package/skill-docs/references/form/guide-form-view.md +7 -2
  194. package/skill-docs/references/form/guide-formula-linkage.md +1 -1
  195. package/skill-docs/references/form/guide-list-stats.md +55 -2
  196. package/skill-docs/references/hrm/guide-matrix.md +30 -2
@@ -1,50 +1,26 @@
1
1
  import { AuthSession } from '../core/auth.js';
2
2
  import { ApiClient } from '../core/client.js';
3
3
  import { loadMobileConfig } from './form-list-utils.js';
4
- /**
5
- * 分类搜索(list-search-group)命令。
6
- * 走 saveNListConfig config.searchConditions.groupFilters(视图级,明文;非同事说的页面级 layout/save)。
7
- * sjr 实测(2026-08-20 抓包):groupFilter 条目结构——
8
- * id/fieldId=字段id, name/fieldName=field_<id>, compType/componentKey/fieldType/type=组件类型,
9
- * showName/fieldShowName/text=中文名, objId, expandMethod:"0", showPosition:"0", tabStyle:"select",
10
- * config{formId(=tableField.browserParams.formId), hideScore:true, groupId:"-1", dataType:["dataOptionObj"],
11
- * title, type, dataCount:0, selectedNum:"", dataKey(=physicalField), columnName(=physicalField),
12
- * systemField:true, labelObj:{}, columnTypeSwitch:false, showOrder, placeholder:"", componentKey, fieldId},
13
- * listFilterDefaultSets{listGroupSets:[], multiSelect:true, enableShowCountNum:1, showCountNumType:"notUpdate",
14
- * enableShowCountNumLimit:0, enableBrowserFilter:0, showArchiveOption:"1"}
15
- * **产品边界**:分类搜索**不支持明细字段**(条目无 subTableId,仅主表字段)。传入明细字段 fieldId 会报错。
16
- * listGroupSets 留空数组(平台运行时据字段 options 生成,CLI 不造)。
17
- * 仅支持选项类字段(Select/RadioBox/CheckBox,dataType:["dataOptionObj"]);其他类型需抓包确认 dataType。
18
- */
19
- const OPTION_COMP = new Set(['Select', 'RadioBox', 'CheckBox']);
20
- function buildGroupFilter(t, objId, showPosition = '1') {
21
- const id = String(t.id);
22
- return {
23
- id, fieldId: id,
24
- name: `field_${id}`, fieldName: `field_${id}`,
25
- compType: t.compType, componentKey: t.compType,
26
- showName: t.text, fieldShowName: t.text, text: t.text,
27
- objId: t.objId || objId,
28
- fieldType: t.type, type: t.type,
29
- expandMethod: '0', showPosition, tabStyle: 'select',
30
- config: {
31
- formId: t.browserParams?.formId, hideScore: true, groupId: '-1',
32
- dataType: ['dataOptionObj'], title: t.text, type: t.type,
33
- dataCount: 0, selectedNum: '', dataKey: t.physicalField, columnName: t.physicalField,
34
- systemField: true, labelObj: {}, columnTypeSwitch: false, showOrder: t.showOrder || 0, placeholder: '',
35
- componentKey: t.compType, fieldId: id,
36
- },
37
- listFilterDefaultSets: { listGroupSets: [], multiSelect: true, enableShowCountNum: 1, showCountNumType: 'notUpdate', enableShowCountNumLimit: 0, enableBrowserFilter: 0, showArchiveOption: '1' },
38
- };
4
+ import { DATE_GRANULARITIES, KIND_LABEL, buildGroupFilterEntry, extractCandidateColumns, listGroupFilters, parseDateGranularity, parseOptionOrder, parseShowPosition, resolveCandidateColumn, resolveGroupFilterKind, resolveOptionKeys, } from '../services/form-list-search-group.js';
5
+ /** 逗号分隔的名字列表(`--options 选项1,选项2`)。 */
6
+ function nameList(v, acc) {
7
+ for (const part of String(v).split(/[,,]/).map((s) => s.trim()).filter(Boolean))
8
+ acc.push(part);
9
+ return acc;
39
10
  }
40
11
  export function registerListSearchGroupCommand(form, program) {
41
12
  form.command('list-search-group')
42
- .description('查看/配置台账分类搜索(按选项字段分类筛选;仅主表字段,不支持明细)')
13
+ .description('查看/配置台账分类搜索(选项 / 浏览框 / 日期 / 系统字段;仅主表字段,不支持明细)')
43
14
  .argument('<objId>', '表单 objId')
44
15
  .argument('<appId>', '应用 ID')
45
16
  .argument('<listId>', '台账列表 ID')
46
- .option('--add <fieldId>', '添加分类搜索字段(须为主表选项类字段:Select/RadioBox/CheckBox)')
47
- .option('--position <0|1>', '显示位置:1=顶部(缺省,所有字段可用)/ 0=下拉样式(仅 Select 等下拉类型可用)', '1')
17
+ .option('--add <字段名或fieldId>', '加入分类搜索(已在里面则按本次参数重建那条)')
18
+ .option('--position <0|1>', '显示位置:1=顶部(缺省)/ 0=下拉样式', '1')
19
+ .option('--option-order <default|field>', '选项排序:default=默认排序(缺省)/ field=按字段属性设置(浏览框专有)')
20
+ .option('--no-show-count', '不显示统计数字(缺省显示)')
21
+ .option('--date-granularity <列表>', `日期粒度,逗号分隔:${DATE_GRANULARITIES.map((g) => g.name).join('/')}(缺省全要)`)
22
+ .option('--options <列表>', '只让这些选项出现,逗号分隔(选项类专有;缺省全部出现)', nameList, [])
23
+ .option('--default-options <列表>', '这些选项默认选中,逗号分隔', nameList, [])
48
24
  .option('--remove <fieldId>', '按字段 ID 移除一条分类搜索')
49
25
  .option('--clear', '清空所有分类搜索')
50
26
  .option('--pc-only', '目标明确只使用 PC;移动端配置不存在时允许继续')
@@ -64,7 +40,7 @@ export function registerListSearchGroupCommand(form, program) {
64
40
  }
65
41
  const cfg = getRes?.data || {};
66
42
  const sc = cfg.searchConditions || {};
67
- const groupFilters = sc.groupFilters || [];
43
+ const groupFilters = listGroupFilters(cfg);
68
44
  if (!cmdOpts.add && !cmdOpts.remove && !cmdOpts.clear) {
69
45
  if (isJson) {
70
46
  console.log(JSON.stringify(groupFilters, null, 2));
@@ -75,8 +51,10 @@ export function registerListSearchGroupCommand(form, program) {
75
51
  return;
76
52
  }
77
53
  console.log(`分类搜索 (${groupFilters.length}):`);
78
- for (const g of groupFilters)
79
- console.log(` - ${g.showName || g.text} (fieldId=${g.fieldId}, type=${g.type})`);
54
+ for (const g of groupFilters) {
55
+ const kind = kindOfEntry(g);
56
+ console.log(` - ${g.showName || g.text} (fieldId=${g.fieldId}, ${g.fieldType || g.type}, ${KIND_LABEL[kind]}${kind === 'browser' ? `, 位置=${g.showPosition}` : ''})`);
57
+ }
80
58
  return;
81
59
  }
82
60
  if (cmdOpts.clear) {
@@ -91,34 +69,34 @@ export function registerListSearchGroupCommand(form, program) {
91
69
  }
92
70
  }
93
71
  else if (cmdOpts.add) {
94
- // 边界:仅主表选项类字段
95
- const tableField = cfg.tableField || [];
96
- const t = tableField.find((f) => String(f.id) === String(cmdOpts.add));
97
- if (!t) {
98
- console.error(`字段 ${cmdOpts.add} 不在显示列中(分类搜索需先加入显示列:form list-columns --add)`);
99
- process.exit(1);
100
- }
101
- if (t.subTableId && String(t.subTableId) !== '') {
102
- console.error(`字段「${t.text}」是明细字段,分类搜索不支持明细字段(产品边界,仅主表)`);
103
- process.exit(1);
104
- }
105
- if (!OPTION_COMP.has(t.compType || t.type)) {
106
- console.error(`字段「${t.text}」类型 ${t.compType || t.type} 不支持分类搜索(仅选项类:Select/RadioBox/CheckBox)`);
107
- process.exit(1);
108
- }
109
- if (groupFilters.find((g) => String(g.fieldId) === String(cmdOpts.add))) {
110
- console.error(`字段 ${cmdOpts.add} 已在分类搜索中`);
72
+ const columns = extractCandidateColumns(cfg);
73
+ if (columns.length === 0) {
74
+ console.error('台账配置里没有候选字段(fieldUsage[0].fields 为空),无法解析字段');
111
75
  process.exit(1);
112
76
  }
113
- const pos = cmdOpts.position === '0' ? '0' : '1';
114
- if (pos === '0' && t.compType !== 'Select') {
115
- console.error(`字段「${t.text}」类型 ${t.compType || t.type} 不支持下拉样式(position=0),仅 Select 可用;用 --position 1(顶部)`);
77
+ const col = resolveCandidateColumn(columns, cmdOpts.add);
78
+ if (col.subTableId && String(col.subTableId) !== '') {
79
+ console.error(`字段「${col.text}」是明细字段,分类搜索不支持明细字段(产品边界,仅主表)`);
116
80
  process.exit(1);
117
81
  }
118
- sc.groupFilters = [...groupFilters, buildGroupFilter(t, objId, pos)];
119
- console.error(` 已加分类搜索: ${t.text} (showPosition=${pos} ${pos === '1' ? '顶部' : '下拉'})`);
82
+ const kind = resolveGroupFilterKind(col); // 类型不认会在这里报错
83
+ const buildOpts = {
84
+ position: parseShowPosition(cmdOpts.position),
85
+ optionOrder: parseOptionOrder(cmdOpts.optionOrder),
86
+ showCount: cmdOpts.showCount !== false,
87
+ granularity: parseDateGranularity(cmdOpts.dateGranularity),
88
+ optionShow: resolveOptionKeys(col?.config?.options, cmdOpts.options, '--options'),
89
+ optionDefault: resolveOptionKeys(col?.config?.options, cmdOpts.defaultOptions, '--default-options'),
90
+ };
91
+ const entry = buildGroupFilterEntry(col, buildOpts);
92
+ // 已在里面 → 就地替换那条(改配置走这里);否则追加
93
+ const idx = groupFilters.findIndex((g) => String(g.fieldId) === String(entry.fieldId));
94
+ sc.groupFilters = idx >= 0
95
+ ? groupFilters.map((g, i) => (i === idx ? entry : g))
96
+ : [...groupFilters, entry];
97
+ const verb = idx >= 0 ? '已更新' : '已加入';
98
+ console.error(` ${verb}分类搜索: ${col.text} (${KIND_LABEL[kind]}${kind === 'browser' ? `, 位置=${buildOpts.position}` : ''})`);
120
99
  }
121
- // 保存前读回真实移动端 mConfig 原样回传(仅改 PC config.searchConditions,移动端保持原样)
122
100
  const { mobileConfig, mobilePreserved } = await loadMobileConfig(client, baseUrl, appId, listId, cmdOpts.pcOnly);
123
101
  const saveRes = await client.post(`${baseUrl}/api/bs/ebuilder/form/list/saveNListConfig?apid=${appId}`, {
124
102
  listId, appId, terminalType: 'PC', config: { ...cfg, searchConditions: sc }, mConfig: mobileConfig,
@@ -136,4 +114,16 @@ export function registerListSearchGroupCommand(form, program) {
136
114
  }
137
115
  });
138
116
  }
117
+ /** 回读条目判类型:条目上没有 `fieldClassification`,只能按 `fieldType`/`type` 反推。 */
118
+ function kindOfEntry(g) {
119
+ const t = String(g?.fieldType || g?.type || '');
120
+ if (['Select', 'RadioBox', 'CheckBox'].includes(t))
121
+ return 'option';
122
+ if (['DateComponent', 'Date', 'DateTime'].includes(t))
123
+ return 'date';
124
+ // 系统字段的 id 是语义键("2"/"5" 这种),雪花 id 都很长
125
+ if (String(g?.fieldId ?? '').length < 15)
126
+ return 'system';
127
+ return 'browser';
128
+ }
139
129
  //# sourceMappingURL=form-list-search-group.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-list-search-group.js","sourceRoot":"","sources":["../../src/commands/form-list-search-group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-list-search-group.js","sourceRoot":"","sources":["../../src/commands/form-list-search-group.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form-list-stats.d.ts","sourceRoot":"","sources":["../../src/commands/form-list-stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC9E"}
1
+ {"version":3,"file":"form-list-stats.d.ts","sourceRoot":"","sources":["../../src/commands/form-list-stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAiD9E"}
@@ -2,6 +2,18 @@ import { readFileSync } from 'node:fs';
2
2
  import { AuthSession } from '../core/auth.js';
3
3
  import { ApiClient } from '../core/client.js';
4
4
  import { ListStatsService } from '../services/form-list-stats.js';
5
+ /** `on|off` 三态:不传 = 不动该项。 */
6
+ function parseOnOff(value, label) {
7
+ if (value === undefined)
8
+ return undefined;
9
+ const v = String(value).trim().toLowerCase();
10
+ if (['on', 'true', '1', 'yes'].includes(v))
11
+ return true;
12
+ if (['off', 'false', '0', 'no'].includes(v))
13
+ return false;
14
+ throw new Error(`${label} 只接受 on|off(收到「${value}」)`);
15
+ }
16
+ const splitIds = (value) => (value === undefined ? [] : String(value).split(',').map(s => s.trim()).filter(Boolean));
5
17
  export function registerListStatsCommand(form, program) {
6
18
  async function run(objId, appId, listId, work) {
7
19
  try {
@@ -18,16 +30,29 @@ export function registerListStatsCommand(form, program) {
18
30
  process.exitCode = 1;
19
31
  }
20
32
  }
21
- const command = form.command('list-stats').description('查看/配置主表及明细顶部统计,保存后回读并校验移动端')
33
+ const command = form.command('list-stats').description('查看/配置主表及明细统计(统计项、启用状态、显示位置、加载方式、点击过滤),保存后回读并校验移动端')
22
34
  .argument('[objId]', '表单 objId').argument('[appId]', '应用 ID').argument('[listId]', '台账视图 ID')
23
- .option('--add <json|@file>', '统计对象:{fieldId,type,name?,subFormId?,conditions?};明细 count 可只填 type/subFormId')
35
+ .option('--add <json|@file>', '统计对象:{fieldId,type,name?,subFormId?,conditions?,enable?};明细 count 可只填 type/subFormId;enable:false 建出来即停用')
24
36
  .option('--remove <statId>', '移除统计项 ID(operation:DELETE)')
37
+ .option('--enable <statIds>', '启用统计项(逗号分隔)')
38
+ .option('--disable <statIds>', '停用统计项(逗号分隔)')
39
+ .option('--position <code>', '显示位置:top 顶部显示 / topSimple 顶部简约显示 / topRight 右上角显示(也收中文标签)')
40
+ .option('--manual-load <on|off>', '手动加载统计值(开了就不进视图自动跑)')
41
+ .option('--filter-data <on|off>', '点击统计结果过滤列表数据')
25
42
  .option('--pc-only', '明确仅 PC 使用;移动端读取失败时允许继续')
26
43
  .option('--json', 'JSON 输出')
27
44
  .action((objId, appId, listId, raw) => run(objId, appId, listId, async (service) => {
28
45
  if (raw.add && raw.remove)
29
46
  throw new Error('--add 与 --remove 不能同时使用');
30
- if (!raw.add && !raw.remove)
47
+ const panel = {
48
+ position: raw.position,
49
+ manualLoad: parseOnOff(raw.manualLoad, '--manual-load'),
50
+ filterData: parseOnOff(raw.filterData, '--filter-data'),
51
+ };
52
+ const enable = splitIds(raw.enable), disable = splitIds(raw.disable);
53
+ const editing = raw.add || raw.remove || raw.position !== undefined
54
+ || panel.manualLoad !== undefined || panel.filterData !== undefined || enable.length || disable.length;
55
+ if (!editing)
31
56
  return (await service.config()).listStatistics || {};
32
57
  const rules = [];
33
58
  if (raw.add) {
@@ -36,7 +61,7 @@ export function registerListStatsCommand(form, program) {
36
61
  throw new Error('--add 必须为统计对象');
37
62
  rules.push(value);
38
63
  }
39
- return service.save(rules, raw.remove ? [raw.remove] : [], raw.pcOnly);
64
+ return service.save(rules, raw.remove ? [raw.remove] : [], raw.pcOnly, { enable, disable, panel });
40
65
  }));
41
66
  command.command('detail').description('为指定明细子表批量配置选定数值字段求和及一项记录计数,重复运行复用同配置')
42
67
  .argument('<objId>', '来源表单 ID').argument('<appId>', '应用 ID').argument('<listId>', '视图 ID').argument('<subFormId>', '明细子表 ID')
@@ -1 +1 @@
1
- {"version":3,"file":"form-list-stats.js","sourceRoot":"","sources":["../../src/commands/form-list-stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-list-stats.js","sourceRoot":"","sources":["../../src/commands/form-list-stats.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,12 @@ export interface CondInput {
20
20
  text?: string;
21
21
  /** 值引用另一字段(field vs field,"当前变量"):填目标字段名或 fieldId。设置后 value 自动构造为 compareFormField 对象 */
22
22
  valueField?: string;
23
+ /**
24
+ * 日期区间的**快捷档**(设计器「区间」旁边那排:今天 / 本周 / 今年 …,共 16 档)。
25
+ * 给了它就等价于 `func: "range"` + 当场算好的起止日期(见 `services/quick-date-range.ts`)——
26
+ * 设计器也是这么干的,存进去的是**死日期**,不是动态标记。可与 `func`/`value` 二选一,不能同时给。
27
+ */
28
+ quick?: string;
23
29
  }
24
30
  /**
25
31
  * 解析条件里的 valueField(值引用另一字段)→ 构造 compareFormField 对象。
@@ -41,7 +47,46 @@ export declare function resolveValueFieldRefs(client: {
41
47
  * @param fields fetchFields 返回的字段表,用于补 fieldType/text/compType
42
48
  * @param objId 表单 objId
43
49
  * @param filterIsNull 统计 rootdata 用 false、视图数据条件 filter 用 true
50
+ * @param now 快捷档(`quick`)的基准时刻,默认当下;仅供测试注入
44
51
  * @returns JSON 字符串(空条件返回 '')
45
52
  */
46
- export declare function buildConditionTree(conditions: CondInput[], fields: any[], objId: string, filterIsNull: boolean): string;
53
+ /** 条件组:组内关系 + 子节点(子节点本身也可以是组,与顶层同构)。 */
54
+ export interface CondGroup {
55
+ /** 组内关系:`and` / `or`(或码 `1` / `0`)。缺省 AND。 */
56
+ relation?: string;
57
+ conditions: CondNode[];
58
+ }
59
+ /** 条件树的节点:叶子条件,或一个条件组。**有 `conditions` 数组就是组**,否则按条件(认 `fieldId`)。 */
60
+ export type CondNode = CondInput | CondGroup;
61
+ export declare const isCondGroup: (n: any) => n is CondGroup;
62
+ export declare function relationCode(raw: any, fallback: string): string;
63
+ /**
64
+ * 渲染 `rootStr`。实测规则:**≥2 个孩子才套一层括号**,单个孩子直接用它的渲染结果
65
+ * (所以单条件条件是 `( 创建时间 区间 '…' )` 而不是双括号),组内按自己的关系码连接。
66
+ */
67
+ export declare function renderCond(n: any): string;
68
+ /** 树里(已构建的)所有叶子条件(供展示、后处理用)。 */
69
+ export declare function condLeaves(node: any): any[];
70
+ /** 入参节点数组 → 所有叶子条件(递归进组;供字段校验、值引用解析用)。 */
71
+ export declare function inputLeaves(nodes: CondNode[]): CondInput[];
72
+ export declare function buildConditionTree(conditions: CondNode[], fields: any[], objId: string, filterIsNull: boolean, opts?: {
73
+ now?: Date;
74
+ relation?: string;
75
+ }): string;
76
+ /**
77
+ * 把新条件**叠加**到已有条件树上(这是 `--add` 的语义:原地加,不整体覆盖)。
78
+ * 已有树为空/不存在时等价于新建。不给 `relation` 就沿用现有顶层关系。
79
+ */
80
+ export declare function appendConditions(existing: any, nodes: CondNode[], fields: any[], objId: string, opts?: {
81
+ now?: Date;
82
+ relation?: string;
83
+ }): any;
84
+ /**
85
+ * 按字段 ID 摘条件(**该字段的所有条件都摘**;组被摘空就整组拿掉)。
86
+ * 同一个字段有多条条件时想只摘一条 —— 用 `--replace` 传整棵树。
87
+ */
88
+ export declare function removeConditions(existing: any, targets: string[]): {
89
+ filter: any;
90
+ removed: number;
91
+ };
47
92
  //# sourceMappingURL=form-list-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-list-utils.d.ts","sourceRoot":"","sources":["../../src/commands/form-list-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAYnG;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAa1E;AAkCD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwBD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE;IAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,EACvH,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,GAAG,EAAE,GACZ,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,GAAG,EAAE,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,OAAO,GACpB,MAAM,CA0CR"}
1
+ {"version":3,"file":"form-list-utils.d.ts","sourceRoot":"","sources":["../../src/commands/form-list-utils.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { resolveQuickDateRange } from '../services/quick-date-range.js';
1
2
  /**
2
3
  * 通过 multipart/form-data 的 ds/fields 接口拉取表单字段元数据。
3
4
  * 供 list-columns / list-search / list-stats / list-filter 等命令共用。
@@ -133,59 +134,151 @@ export async function resolveValueFieldRefs(client, baseUrl, appId, objId, condi
133
134
  delete c.valueField;
134
135
  }
135
136
  }
137
+ export const isCondGroup = (n) => Array.isArray(n?.conditions);
138
+ /** 关系码:实测 `1` = AND、`0` = OR(设计器把顶层切成 OR 时发的是 `"0"`)。 */
139
+ const REL_CODES = { and: '1', '1': '1', or: '0', '0': '0' };
140
+ export function relationCode(raw, fallback) {
141
+ if (raw === undefined || raw === null || raw === '')
142
+ return fallback;
143
+ const code = REL_CODES[String(raw).trim().toLowerCase()];
144
+ if (!code)
145
+ throw new Error(`未知的条件关系「${raw}」,只支持 and / or(或 1 / 0)`);
146
+ return code;
147
+ }
148
+ const relLabel = (code) => (String(code) === '0' ? 'OR' : 'AND');
149
+ /** 叶子条件 → 树节点。 */
150
+ function conditionNode(c, parentKey, key, fields, objId, now) {
151
+ const cf = fields.find((x) => String(x.id) === String(c.fieldId));
152
+ const fieldType = cf?.type || 'String';
153
+ const compType = cf?.compType || fieldType;
154
+ if (c.quick && (c.value !== undefined || c.valueField !== undefined || c.func !== undefined)) {
155
+ throw new Error(`条件 ${c.fieldId} 的 quick 不能与 func/value/valueField 同时使用:快捷档本身已经决定了区间`);
156
+ }
157
+ // 快捷档 → 当场算好的起止日期(设计器同样存死日期,见 services/quick-date-range.ts)
158
+ const quick = c.quick ? resolveQuickDateRange(c.quick, now) : null;
159
+ const func = quick ? 'range' : FUNC_NORMALIZE[c.func || 'eq'] || c.func || 'eq';
160
+ const isRange = func === 'range';
161
+ const isUnaggregate = func === 'unaggregate'; // 不属于:value 为逗号分隔字符串(抓包 "v1,v2,v3")
162
+ const isSelect = ['Select', 'SelectMultiple'].includes(compType) || ['Select', 'SelectMultiple'].includes(fieldType);
163
+ const isDateNum = fieldType === 'Date' || fieldType === 'Number';
164
+ return {
165
+ isParent: false, parentNode: parentKey, key,
166
+ id: c.fieldId, fieldName: 'field_' + c.fieldId,
167
+ fieldType, text: cf?.text || c.fieldId,
168
+ optionType: '',
169
+ originBrowserType: isSelect ? 'browser' : '',
170
+ objId, compType, type: 'condition',
171
+ conditions: {
172
+ func,
173
+ // 快捷档直接落算好的区间;否则:对象 value(字段引用 {compareFormField,...})原样保留;
174
+ // unaggregate 数组 join 成逗号串;range 保数组;其余转字符串
175
+ value: quick ?? (isRange ? c.value
176
+ : (isUnaggregate && Array.isArray(c.value) ? c.value.map(String).join(',')
177
+ : (c.value && typeof c.value === 'object' ? c.value : String(c.value ?? '')))),
178
+ type: '',
179
+ text: isRange ? '' : (c.text || ''),
180
+ isEsb: false,
181
+ },
182
+ multiSelect: 'false', formInfo: { fieldId: c.fieldId },
183
+ module: 'ebuilderform', mainField: true, subTableId: '',
184
+ dbFieldType: 'String', isEdit: '0',
185
+ ...(isDateNum ? { formatType: '4' } : {}),
186
+ config: { fieldId: c.fieldId },
187
+ };
188
+ }
189
+ /** 把一组入参节点铺成 `datas` 数组:子节点的 `parentNode` 指向 `parentKey`。 */
190
+ function childrenOf(nodes, parentKey, prefix, fields, objId, now) {
191
+ if (!Array.isArray(nodes) || nodes.length === 0)
192
+ throw new Error('条件组至少要有一个条件');
193
+ return nodes.map((n, i) => isCondGroup(n)
194
+ ? groupNode(n.conditions, parentKey, `${prefix}_${i + 1}`, relationCode(n.relation, '1'), fields, objId, now)
195
+ : conditionNode(n, parentKey, `${prefix}_${i + 1}`, fields, objId, now));
196
+ }
197
+ /** 一组节点 → 父节点(顶层与嵌套组同构:`isParent:true` + 自己的 `relationship` + `datas`)。 */
198
+ function groupNode(nodes, parentKey, key, relation, fields, objId, now) {
199
+ return {
200
+ key, relationship: relation, isParent: true, parentNode: parentKey,
201
+ datas: childrenOf(nodes, key, key, fields, objId, now),
202
+ };
203
+ }
136
204
  /**
137
- * 构造明文 JSON 条件树(平台 rootdata / config.filter 都用此结构)。
138
- * 实测:可直接发明文保存,读回也是明文,无需 LZW 编码。
139
- * func 用设计师 code(neq/range,非 notEq/between);dbFieldType 抓包恒为 "String";
140
- * Select 条件 originBrowserType="browser";Date/Number 条件带 formatType="4"。
141
- * @param conditions 条件数组(多条件默认 AND,relationship:'1')
142
- * @param fields fetchFields 返回的字段表,用于补 fieldType/text/compType
143
- * @param objId 表单 objId
144
- * @param filterIsNull 统计 rootdata 用 false、视图数据条件 filter 用 true
145
- * @returns JSON 字符串(空条件返回 '')
205
+ * 渲染 `rootStr`。实测规则:**≥2 个孩子才套一层括号**,单个孩子直接用它的渲染结果
206
+ * (所以单条件条件是 `( 创建时间 区间 '…' )` 而不是双括号),组内按自己的关系码连接。
146
207
  */
147
- export function buildConditionTree(conditions, fields, objId, filterIsNull) {
208
+ export function renderCond(n) {
209
+ if (!n?.isParent)
210
+ return `( ${condRootStr(n)} )`;
211
+ const children = (n.datas || []).map(renderCond);
212
+ if (children.length <= 1)
213
+ return children[0] ?? '';
214
+ return `(${children.join(` ${relLabel(n.relationship)} `)})`;
215
+ }
216
+ /** 树里(已构建的)所有叶子条件(供展示、后处理用)。 */
217
+ export function condLeaves(node) {
218
+ if (!node)
219
+ return [];
220
+ if (!node.isParent)
221
+ return [node];
222
+ return (node.datas || []).flatMap((d) => condLeaves(d));
223
+ }
224
+ /** 入参节点数组 → 所有叶子条件(递归进组;供字段校验、值引用解析用)。 */
225
+ export function inputLeaves(nodes) {
226
+ return (nodes || []).flatMap((n) => (isCondGroup(n) ? inputLeaves(n.conditions) : [n]));
227
+ }
228
+ export function buildConditionTree(conditions, fields, objId, filterIsNull, opts = {}) {
148
229
  if (!Array.isArray(conditions) || conditions.length === 0)
149
230
  return '';
150
231
  const topKey = String(Date.now());
151
- const datas = conditions.map((c, i) => {
152
- const cf = fields.find((x) => String(x.id) === String(c.fieldId));
153
- const fieldType = cf?.type || 'String';
154
- const compType = cf?.compType || fieldType;
155
- const func = FUNC_NORMALIZE[c.func || 'eq'] || c.func || 'eq';
156
- const isRange = func === 'range';
157
- const isUnaggregate = func === 'unaggregate'; // 不属于:value 为逗号分隔字符串(抓包 "v1,v2,v3")
158
- const isSelect = ['Select', 'SelectMultiple'].includes(compType) || ['Select', 'SelectMultiple'].includes(fieldType);
159
- const isDateNum = fieldType === 'Date' || fieldType === 'Number';
160
- return {
161
- isParent: false, parentNode: topKey, key: topKey + (i + 1),
162
- id: c.fieldId, fieldName: 'field_' + c.fieldId,
163
- fieldType, text: cf?.text || c.fieldId,
164
- optionType: '',
165
- originBrowserType: isSelect ? 'browser' : '',
166
- objId, compType, type: 'condition',
167
- conditions: {
168
- func,
169
- // 对象 value(字段引用 {compareFormField,...})原样保留;unaggregate 数组 join 成逗号串;range 保数组;其余转字符串
170
- value: isRange ? c.value
171
- : (isUnaggregate && Array.isArray(c.value) ? c.value.map(String).join(',')
172
- : (c.value && typeof c.value === 'object' ? c.value : String(c.value ?? ''))),
173
- type: '',
174
- text: isRange ? '' : (c.text || ''),
175
- isEsb: false,
176
- },
177
- multiSelect: 'false', formInfo: { fieldId: c.fieldId },
178
- module: 'ebuilderform', mainField: true, subTableId: '',
179
- dbFieldType: 'String', isEdit: '0',
180
- ...(isDateNum ? { formatType: '4' } : {}),
181
- config: { fieldId: c.fieldId },
182
- };
183
- });
184
- const parts = datas.map((d) => `( ${condRootStr(d)} )`);
185
- const rootStr = parts.length > 1 ? `(${parts.join(' AND ')})` : parts[0];
232
+ const top = groupNode(conditions, '', topKey, relationCode(opts.relation, '1'), fields, objId, opts.now);
186
233
  return JSON.stringify({
187
- key: topKey, relationship: '1', isParent: true, isNewFilter: true, parentNode: '',
188
- datas, version: 1, filterIsNull, isFilterSub: false, rootStr,
234
+ key: topKey, relationship: top.relationship, isParent: true, isNewFilter: true, parentNode: '',
235
+ datas: top.datas, version: 1, filterIsNull, isFilterSub: false, rootStr: renderCond(top),
236
+ });
237
+ }
238
+ /**
239
+ * 把新条件**叠加**到已有条件树上(这是 `--add` 的语义:原地加,不整体覆盖)。
240
+ * 已有树为空/不存在时等价于新建。不给 `relation` 就沿用现有顶层关系。
241
+ */
242
+ export function appendConditions(existing, nodes, fields, objId, opts = {}) {
243
+ const usable = existing && typeof existing === 'object' && !Array.isArray(existing) && Array.isArray(existing.datas);
244
+ if (!usable)
245
+ return JSON.parse(buildConditionTree(nodes, fields, objId, true, opts));
246
+ const topKey = String(existing.key ?? Date.now());
247
+ const relation = relationCode(opts.relation, String(existing.relationship ?? '1'));
248
+ // 新节点直接挂到现有顶层下 —— 用现有顶层 key 当 parent,不能再套一层组,否则 parentNode 悬空
249
+ const added = childrenOf(nodes, topKey, `${topKey}_append`, fields, objId, opts.now);
250
+ const merged = {
251
+ ...existing, key: topKey, relationship: relation, isParent: true, parentNode: '',
252
+ datas: [...existing.datas, ...added], version: existing.version ?? 1,
253
+ };
254
+ merged.rootStr = renderCond(merged);
255
+ return merged;
256
+ }
257
+ /**
258
+ * 按字段 ID 摘条件(**该字段的所有条件都摘**;组被摘空就整组拿掉)。
259
+ * 同一个字段有多条条件时想只摘一条 —— 用 `--replace` 传整棵树。
260
+ */
261
+ export function removeConditions(existing, targets) {
262
+ const wanted = new Set(targets.map((t) => String(t).trim()).filter(Boolean));
263
+ if (!existing || !Array.isArray(existing.datas) || !wanted.size)
264
+ return { filter: existing, removed: 0 };
265
+ let removed = 0;
266
+ const prune = (nodes) => nodes.filter((n) => {
267
+ if (n?.isParent) {
268
+ const kids = prune(n.datas || []);
269
+ if (!kids.length)
270
+ return false;
271
+ n.datas = kids;
272
+ return true;
273
+ }
274
+ if (wanted.has(String(n?.id))) {
275
+ removed += 1;
276
+ return false;
277
+ }
278
+ return true;
189
279
  });
280
+ const filter = { ...existing, datas: prune(existing.datas) };
281
+ filter.rootStr = renderCond(filter);
282
+ return { filter, removed };
190
283
  }
191
284
  //# sourceMappingURL=form-list-utils.js.map