weaver-e10-builder 1.2.2 → 1.2.3

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 (106) hide show
  1. package/README.md +8 -19
  2. package/dist/commands/actionflow.d.ts.map +1 -1
  3. package/dist/commands/actionflow.js +26 -0
  4. package/dist/commands/actionflow.js.map +1 -1
  5. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  6. package/dist/commands/form-add-detail-table.js +127 -7
  7. package/dist/commands/form-add-detail-table.js.map +1 -1
  8. package/dist/commands/form-ebuilder-columns.d.ts +7 -0
  9. package/dist/commands/form-ebuilder-columns.d.ts.map +1 -1
  10. package/dist/commands/form-ebuilder-columns.js +2 -24
  11. package/dist/commands/form-ebuilder-columns.js.map +1 -1
  12. package/dist/commands/form-formula.d.ts.map +1 -1
  13. package/dist/commands/form-formula.js +35 -11
  14. package/dist/commands/form-formula.js.map +1 -1
  15. package/dist/commands/form-nlist.d.ts +1 -1
  16. package/dist/commands/form-nlist.d.ts.map +1 -1
  17. package/dist/commands/form-nlist.js +5 -3
  18. package/dist/commands/form-nlist.js.map +1 -1
  19. package/dist/commands/form.d.ts.map +1 -1
  20. package/dist/commands/form.js +93 -72
  21. package/dist/commands/form.js.map +1 -1
  22. package/dist/commands/workflow-auth-resp.d.ts.map +1 -1
  23. package/dist/commands/workflow-auth-resp.js +69 -8
  24. package/dist/commands/workflow-auth-resp.js.map +1 -1
  25. package/dist/commands/workflow-node-assign-flow.d.ts +3 -0
  26. package/dist/commands/workflow-node-assign-flow.d.ts.map +1 -0
  27. package/dist/commands/workflow-node-assign-flow.js +342 -0
  28. package/dist/commands/workflow-node-assign-flow.js.map +1 -0
  29. package/dist/commands/workflow-node.d.ts +2 -0
  30. package/dist/commands/workflow-node.d.ts.map +1 -1
  31. package/dist/commands/workflow-node.js +75 -49
  32. package/dist/commands/workflow-node.js.map +1 -1
  33. package/dist/core/auth.js +1 -1
  34. package/dist/index.js +2 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/services/actionflow/components/assign_var.d.ts +12 -0
  37. package/dist/services/actionflow/components/assign_var.d.ts.map +1 -0
  38. package/dist/services/actionflow/components/assign_var.js +133 -0
  39. package/dist/services/actionflow/components/assign_var.js.map +1 -0
  40. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  41. package/dist/services/actionflow/components/index.js +9 -0
  42. package/dist/services/actionflow/components/index.js.map +1 -1
  43. package/dist/services/actionflow/dynamic_resources.d.ts +7 -1
  44. package/dist/services/actionflow/dynamic_resources.d.ts.map +1 -1
  45. package/dist/services/actionflow/dynamic_resources.js +64 -7
  46. package/dist/services/actionflow/dynamic_resources.js.map +1 -1
  47. package/dist/services/actionflow/form_source.d.ts +35 -0
  48. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  49. package/dist/services/actionflow/form_source.js +50 -0
  50. package/dist/services/actionflow/form_source.js.map +1 -1
  51. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  52. package/dist/services/actionflow/formula_service.js +51 -1
  53. package/dist/services/actionflow/formula_service.js.map +1 -1
  54. package/dist/services/form-create.d.ts +2 -1
  55. package/dist/services/form-create.d.ts.map +1 -1
  56. package/dist/services/form-create.js.map +1 -1
  57. package/dist/services/form-ebuilder-columns.d.ts +50 -0
  58. package/dist/services/form-ebuilder-columns.d.ts.map +1 -0
  59. package/dist/services/form-ebuilder-columns.js +68 -0
  60. package/dist/services/form-ebuilder-columns.js.map +1 -0
  61. package/dist/services/form-field-drop.d.ts +30 -1
  62. package/dist/services/form-field-drop.d.ts.map +1 -1
  63. package/dist/services/form-field-drop.js +60 -0
  64. package/dist/services/form-field-drop.js.map +1 -1
  65. package/dist/services/form-field-patch.d.ts +47 -0
  66. package/dist/services/form-field-patch.d.ts.map +1 -0
  67. package/dist/services/form-field-patch.js +88 -0
  68. package/dist/services/form-field-patch.js.map +1 -0
  69. package/dist/services/form-nlist.d.ts +1 -0
  70. package/dist/services/form-nlist.d.ts.map +1 -1
  71. package/dist/services/form-nlist.js +32 -5
  72. package/dist/services/form-nlist.js.map +1 -1
  73. package/dist/services/form-sub-detail.d.ts +51 -3
  74. package/dist/services/form-sub-detail.d.ts.map +1 -1
  75. package/dist/services/form-sub-detail.js +183 -20
  76. package/dist/services/form-sub-detail.js.map +1 -1
  77. package/dist/services/formula-detail.d.ts +68 -5
  78. package/dist/services/formula-detail.d.ts.map +1 -1
  79. package/dist/services/formula-detail.js +110 -44
  80. package/dist/services/formula-detail.js.map +1 -1
  81. package/dist/services/rich-text.d.ts +33 -0
  82. package/dist/services/rich-text.d.ts.map +1 -0
  83. package/dist/services/rich-text.js +134 -0
  84. package/dist/services/rich-text.js.map +1 -0
  85. package/dist/services/workflow-assign-flow.d.ts +114 -0
  86. package/dist/services/workflow-assign-flow.d.ts.map +1 -0
  87. package/dist/services/workflow-assign-flow.js +311 -0
  88. package/dist/services/workflow-assign-flow.js.map +1 -0
  89. package/dist/services/workflow-node-menu.d.ts +57 -0
  90. package/dist/services/workflow-node-menu.d.ts.map +1 -0
  91. package/dist/services/workflow-node-menu.js +144 -0
  92. package/dist/services/workflow-node-menu.js.map +1 -0
  93. package/package.json +48 -48
  94. package/skill-docs/SKILL.md +6 -5
  95. package/skill-docs/_catalog.md +79 -77
  96. package/skill-docs/actionflows/SKILL.md +168 -167
  97. package/skill-docs/actionflows/references/components/ebuilder/ActionEbAdd.md +1 -1
  98. package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +33 -33
  99. package/skill-docs/references/common/guide-plan-template.md +254 -251
  100. package/skill-docs/references/common/ref-cli-commands.md +529 -519
  101. package/skill-docs/references/form/guide-create-form.md +233 -232
  102. package/skill-docs/references/form/guide-form-formula-functions.md +11 -1
  103. package/skill-docs/references/form/guide-form-sub-detail.md +82 -0
  104. package/skill-docs/references/form/guide-list-custom-text.md +52 -0
  105. package/skill-docs/references/workflow/guide-workflow-auth-resp.md +198 -190
  106. package/skill-docs/references/workflow/guide-workflow.md +7 -0
@@ -3,17 +3,56 @@ export type SubDetailClient = Pick<ApiClient, 'post' | 'postForm'>;
3
3
  export interface SubDetailLinkInput {
4
4
  subForm: string;
5
5
  subField: string;
6
- parentMark?: 'rowId';
6
+ /** 父级行标识:缺省 rowId;也可传父明细字段名称或 ID。 */
7
+ parentField?: string;
8
+ /** 兼容 fields.json 旧键;值可为 rowId 或父明细字段名称/ID。 */
9
+ parentMark?: string;
7
10
  displayMode?: 'inside';
8
11
  filterType?: 'single';
9
12
  }
10
- interface SubFormInfo {
13
+ export interface SubFormInfo {
11
14
  id: string;
12
15
  title: string;
13
16
  dataKey: string;
14
17
  props: Record<string, any>;
15
18
  raw: any;
16
19
  }
20
+ /**
21
+ * 列出表单下的**全部**明细子表。
22
+ *
23
+ * 这是全仓**唯一**能看见「空明细表」的读接口,务必走这条找子表:
24
+ * 子表一旦一个字段都不剩,`getEbField.detail`、`getFields.detailFields`、
25
+ * `getConfig.configs` 会把它整条隐去 —— 按字段走的路全都够不着它。
26
+ * 历史事故:按 `getEbField` 找子表,用户把明细字段删光后,同一张表再也加不回字段
27
+ * (报「未找到明细表 subFormId=…」,而表明明还在)。
28
+ *
29
+ * 注意返回的 `dataKey` 是**物理表名**(如 `uf_fxmx_5439`),不是物理表记录 id;
30
+ * 空表连物理表记录 id 都拿不到(`otherProperties` 里没有 `formTableId`)。
31
+ *
32
+ * **删除是软删**:删掉的子表仍留在返回里,只是 `deleteType != 0` / `delete:true`。
33
+ * 所以这里必须按 `deleteType` 过滤,否则删完还能被当成「存在的表」找到。
34
+ */
35
+ export declare function listSubForms(client: SubDetailClient, baseUrl: string, appId: string, formId: string): Promise<SubFormInfo[]>;
36
+ export interface ResolvedDetailTable {
37
+ subFormId: string;
38
+ title: string;
39
+ /** true = 只从 querySubForms 命中,即这是张**空明细表**(getEbField 看不见它)。 */
40
+ empty: boolean;
41
+ /** 明细表物理表记录 id。空表取不到(平台不给),为空串。 */
42
+ formTableId: string;
43
+ }
44
+ /**
45
+ * 按 subFormId 解析明细表 —— **空表也能解析出来**。
46
+ *
47
+ * 顺序有讲究:先 `getEbField`(命中时能顺带拿到子字段的 formTableId),
48
+ * 再退 `querySubForms`。反过来每次都得多打一次接口。
49
+ *
50
+ * 为什么必须有这层兜底:`getEbField.detail` 只列**有字段的**明细表。
51
+ * 用户把某张明细表的字段删光后,那张表就从 detail 里消失,调用方若只看 getEbField
52
+ * 就会判「未找到明细表」—— 而实际上它好端端地还在,只是空着。删字段恰恰是本 CLI
53
+ * 引导用户做的操作,删完却再也加不回去,属于不可逆事故。
54
+ */
55
+ export declare function resolveDetailTable(client: SubDetailClient, baseUrl: string, appId: string, objId: string, formId: string, subFormId: string): Promise<ResolvedDetailTable | null>;
17
56
  export declare class FormSubDetailService {
18
57
  private client;
19
58
  private baseUrl;
@@ -23,14 +62,23 @@ export declare class FormSubDetailService {
23
62
  constructor(client: SubDetailClient, baseUrl: string, appId: string, objId: string, formId: string);
24
63
  list(): Promise<SubFormInfo[]>;
25
64
  private resolve;
65
+ private fieldsOf;
26
66
  private resolveField;
67
+ private assertChildMark;
68
+ private resolveParentMark;
69
+ private reachable;
70
+ private edgeMap;
71
+ private candidateRows;
72
+ private buildConfigs;
27
73
  private formTableIdOf;
28
74
  read(parentRef: string): Promise<any>;
29
75
  set(parentRef: string, links: SubDetailLinkInput[], defaultExpandRow?: boolean): Promise<any>;
76
+ add(parentRef: string, links: SubDetailLinkInput[], defaultExpandRow?: boolean): Promise<any>;
77
+ remove(parentRef: string, targetRef: string): Promise<any>;
78
+ candidates(parentRef: string): Promise<any>;
30
79
  enable(parentRef: string): Promise<any>;
31
80
  disable(parentRef: string): Promise<any>;
32
81
  clear(parentRef: string): Promise<any>;
33
82
  private save;
34
83
  }
35
- export {};
36
84
  //# sourceMappingURL=form-sub-detail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-sub-detail.d.ts","sourceRoot":"","sources":["../../src/services/form-sub-detail.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,GAAG,EAAE,GAAG,CAAC;CACV;AAeD,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;gBAJN,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;IAGlB,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAepC,OAAO,CAAC,OAAO;YAMD,YAAY;YAWZ,aAAa;IAcrB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAOrC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAiB7F,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAOvC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;YAK9B,IAAI;CAyBnB"}
1
+ {"version":3,"file":"form-sub-detail.d.ts","sourceRoot":"","sources":["../../src/services/form-sub-detail.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,32 @@
1
1
  import { randomUUID } from 'node:crypto';
2
+ /**
3
+ * 列出表单下的**全部**明细子表。
4
+ *
5
+ * 这是全仓**唯一**能看见「空明细表」的读接口,务必走这条找子表:
6
+ * 子表一旦一个字段都不剩,`getEbField.detail`、`getFields.detailFields`、
7
+ * `getConfig.configs` 会把它整条隐去 —— 按字段走的路全都够不着它。
8
+ * 历史事故:按 `getEbField` 找子表,用户把明细字段删光后,同一张表再也加不回字段
9
+ * (报「未找到明细表 subFormId=…」,而表明明还在)。
10
+ *
11
+ * 注意返回的 `dataKey` 是**物理表名**(如 `uf_fxmx_5439`),不是物理表记录 id;
12
+ * 空表连物理表记录 id 都拿不到(`otherProperties` 里没有 `formTableId`)。
13
+ *
14
+ * **删除是软删**:删掉的子表仍留在返回里,只是 `deleteType != 0` / `delete:true`。
15
+ * 所以这里必须按 `deleteType` 过滤,否则删完还能被当成「存在的表」找到。
16
+ */
17
+ export async function listSubForms(client, baseUrl, appId, formId) {
18
+ const res = success(await client.postForm(`${baseUrl}/api/ebuilder/form/form/builder/querySubForms?apid=${encodeURIComponent(appId)}`, new URLSearchParams({ formId, module: 'ebuilderform' }).toString(), { ebbusinessid: formId }), '读取明细表');
19
+ return (res?.data?.subForms || []).filter((raw) => {
20
+ const dt = Number(raw?.deleteType ?? 0);
21
+ return dt === 0 && raw?.delete !== true;
22
+ }).map((raw) => {
23
+ const props = parseProps(raw.otherProperties);
24
+ return {
25
+ id: String(raw.id), title: String(raw.title || props.title || ''),
26
+ dataKey: String(raw.dataKey || props.dataKey || props.tableName || ''), props, raw,
27
+ };
28
+ });
29
+ }
2
30
  function success(value, operation) {
3
31
  if (value?.code !== 200 || value?.status === false || value?.fail === true) {
4
32
  throw new Error(value?.msg || `${operation}失败`);
@@ -17,6 +45,37 @@ function parseProps(value) {
17
45
  return {};
18
46
  }
19
47
  }
48
+ /**
49
+ * 按 subFormId 解析明细表 —— **空表也能解析出来**。
50
+ *
51
+ * 顺序有讲究:先 `getEbField`(命中时能顺带拿到子字段的 formTableId),
52
+ * 再退 `querySubForms`。反过来每次都得多打一次接口。
53
+ *
54
+ * 为什么必须有这层兜底:`getEbField.detail` 只列**有字段的**明细表。
55
+ * 用户把某张明细表的字段删光后,那张表就从 detail 里消失,调用方若只看 getEbField
56
+ * 就会判「未找到明细表」—— 而实际上它好端端地还在,只是空着。删字段恰恰是本 CLI
57
+ * 引导用户做的操作,删完却再也加不回去,属于不可逆事故。
58
+ */
59
+ export async function resolveDetailTable(client, baseUrl, appId, objId, formId, subFormId) {
60
+ try {
61
+ const eb = await client.post(`${baseUrl}/api/bs/esb/setting/component/getEbField`, { tableId: objId, appId });
62
+ const dt = (eb?.data?.detail || []).find((d) => String(d.detailTableId) === String(subFormId));
63
+ if (dt) {
64
+ return {
65
+ subFormId: String(dt.detailTableId),
66
+ title: String(dt.tableName || ''),
67
+ empty: false,
68
+ formTableId: String(dt.fields?.[0]?.formTableId || ''),
69
+ };
70
+ }
71
+ }
72
+ catch { /* 拉取失败则由下面的 querySubForms 兜底 */ }
73
+ const hit = (await listSubForms(client, baseUrl, appId, formId))
74
+ .find((s) => s.id === String(subFormId));
75
+ if (!hit)
76
+ return null;
77
+ return { subFormId: hit.id, title: hit.title, empty: true, formTableId: String(hit.props.formTableId || '') };
78
+ }
20
79
  export class FormSubDetailService {
21
80
  client;
22
81
  baseUrl;
@@ -31,14 +90,7 @@ export class FormSubDetailService {
31
90
  this.formId = formId;
32
91
  }
33
92
  async list() {
34
- const res = success(await this.client.postForm(`${this.baseUrl}/api/ebuilder/form/form/builder/querySubForms?apid=${encodeURIComponent(this.appId)}`, new URLSearchParams({ formId: this.formId, module: 'ebuilderform' }).toString(), { ebbusinessid: this.formId }), '读取明细表');
35
- return (res?.data?.subForms || []).map((raw) => {
36
- const props = parseProps(raw.otherProperties);
37
- return {
38
- id: String(raw.id), title: String(raw.title || props.title || ''),
39
- dataKey: String(raw.dataKey || props.dataKey || props.tableName || ''), props, raw,
40
- };
41
- });
93
+ return listSubForms(this.client, this.baseUrl, this.appId, this.formId);
42
94
  }
43
95
  resolve(ref, rows) {
44
96
  const matches = rows.filter((r) => r.id === String(ref) || r.title === ref);
@@ -46,12 +98,99 @@ export class FormSubDetailService {
46
98
  throw new Error(matches.length ? `明细表名称不唯一: ${ref}` : `未找到明细表: ${ref}`);
47
99
  return matches[0];
48
100
  }
49
- async resolveField(subForm, ref) {
101
+ async fieldsOf(subForm) {
50
102
  const res = success(await this.client.postForm(`${this.baseUrl}/api/ebuilder/form/form/builder/queryBySubFormId?apid=${encodeURIComponent(this.appId)}`, new URLSearchParams({ subFormId: subForm.id, module: 'ebuilderform' }).toString(), { ebbusinessid: this.formId }), '读取明细字段');
51
- const matches = (res?.data?.formFields || []).filter((f) => String(f.id) === String(ref) || f.title === ref);
103
+ return (res?.data?.formFields || []).map((field) => {
104
+ const props = parseProps(field.otherProperties);
105
+ return {
106
+ id: String(field.id || field.fieldId || props.fieldId || ''),
107
+ title: String(field.title || props.title || ''),
108
+ componentKey: String(field.componentKey || props.componentKey || field.type || props.type || ''),
109
+ };
110
+ });
111
+ }
112
+ async resolveField(subForm, ref) {
113
+ const matches = (await this.fieldsOf(subForm)).filter((f) => f.id === String(ref) || f.title === ref);
52
114
  if (matches.length !== 1)
53
115
  throw new Error(matches.length ? `明细字段名称不唯一: ${ref}` : `在 ${subForm.title} 中未找到字段: ${ref}`);
54
- return { id: String(matches[0].id), title: String(matches[0].title || '') };
116
+ return matches[0];
117
+ }
118
+ assertChildMark(field, subForm) {
119
+ if (field.componentKey !== 'Text') {
120
+ throw new Error(`子明细表「${subForm.title}」的行标识「${field.title}」必须是单行文本(Text)`);
121
+ }
122
+ }
123
+ async resolveParentMark(parent, link) {
124
+ const ref = link.parentField || link.parentMark || 'rowId';
125
+ if (ref === 'rowId')
126
+ return 'rowId';
127
+ const field = await this.resolveField(parent, ref);
128
+ if (!['Text', 'Select', 'RadioBox'].includes(field.componentKey)) {
129
+ throw new Error(`父明细表「${parent.title}」的行标识「${field.title}」仅支持单行文本、单选框或下拉单选框`);
130
+ }
131
+ return field.id;
132
+ }
133
+ reachable(start, target, edges) {
134
+ const seen = new Set();
135
+ const stack = [start];
136
+ while (stack.length) {
137
+ const current = stack.pop();
138
+ if (current === target)
139
+ return true;
140
+ if (seen.has(current))
141
+ continue;
142
+ seen.add(current);
143
+ for (const next of edges.get(current) || [])
144
+ stack.push(next);
145
+ }
146
+ return false;
147
+ }
148
+ edgeMap(rows, omitParentId) {
149
+ const edges = new Map();
150
+ for (const row of rows) {
151
+ if (row.id === omitParentId)
152
+ continue;
153
+ for (const config of (Array.isArray(row.props.subDetailConfig) ? row.props.subDetailConfig : [])) {
154
+ const child = String(config.subFormId || '');
155
+ if (!child)
156
+ continue;
157
+ if (!edges.has(row.id))
158
+ edges.set(row.id, new Set());
159
+ edges.get(row.id).add(child);
160
+ }
161
+ }
162
+ return edges;
163
+ }
164
+ candidateRows(parent, rows, edges = this.edgeMap(rows)) {
165
+ return rows.filter((candidate) => candidate.id !== parent.id && !this.reachable(candidate.id, parent.id, edges));
166
+ }
167
+ async buildConfigs(parent, rows, links, baseConfigs) {
168
+ const configs = [...baseConfigs];
169
+ const edges = this.edgeMap(rows, parent.id);
170
+ edges.set(parent.id, new Set(configs.map((item) => String(item.subFormId))));
171
+ for (const link of links) {
172
+ const target = this.resolve(link.subForm, rows);
173
+ const candidateIds = new Set(this.candidateRows(parent, rows, edges).map((row) => row.id));
174
+ if (!candidateIds.has(target.id)) {
175
+ throw new Error(`「${target.title}」不在「${parent.title}」的可选子明细列表中;不能选择自身、直属父级或祖先。需要反转父子关系时,先删除原父级上的关系,再重新查询候选列表并新增反向关系`);
176
+ }
177
+ const field = await this.resolveField(target, link.subField);
178
+ this.assertChildMark(field, target);
179
+ const parentMark = await this.resolveParentMark(parent, link);
180
+ const existingIndex = configs.findIndex((c) => String(c.subFormId) === target.id);
181
+ const existing = existingIndex >= 0 ? configs[existingIndex] : undefined;
182
+ const config = {
183
+ id: existing?.id || randomUUID(), subFormId: target.id, parentMark,
184
+ displayMode: link.displayMode || existing?.displayMode || 'inside',
185
+ filterType: link.filterType || existing?.filterType || 'single', subMark: field.id,
186
+ };
187
+ if (existingIndex >= 0)
188
+ configs[existingIndex] = config;
189
+ else
190
+ configs.push(config);
191
+ edges.get(parent.id).add(target.id);
192
+ }
193
+ return configs;
55
194
  }
56
195
  async formTableIdOf(subForm) {
57
196
  if (subForm.props.formTableId)
@@ -76,18 +215,42 @@ export class FormSubDetailService {
76
215
  const rows = await this.list();
77
216
  const parent = this.resolve(parentRef, rows);
78
217
  const oldConfigs = Array.isArray(parent.props.subDetailConfig) ? parent.props.subDetailConfig : [];
79
- const configs = [];
80
- for (const link of links) {
81
- const target = this.resolve(link.subForm, rows);
82
- if (target.id === parent.id)
83
- throw new Error('二级明细不能关联自身');
84
- const field = await this.resolveField(target, link.subField);
85
- const existing = oldConfigs.find((c) => String(c.subFormId) === target.id && String(c.subMark) === field.id);
86
- configs.push({ id: existing?.id || randomUUID(), subFormId: target.id, parentMark: link.parentMark || 'rowId',
87
- displayMode: link.displayMode || 'inside', filterType: link.filterType || 'single', subMark: field.id });
218
+ const configs = await this.buildConfigs(parent, rows, links, []);
219
+ for (const config of configs) {
220
+ const existing = oldConfigs.find((item) => String(item.subFormId) === String(config.subFormId));
221
+ if (existing?.id)
222
+ config.id = existing.id;
88
223
  }
89
224
  return this.save(parent, true, configs, defaultExpandRow ?? Boolean(parent.props.defaultExpandRow));
90
225
  }
226
+ async add(parentRef, links, defaultExpandRow) {
227
+ if (!links.length)
228
+ throw new Error('新增的二级明细配置不能为空');
229
+ const rows = await this.list();
230
+ const parent = this.resolve(parentRef, rows);
231
+ const oldConfigs = Array.isArray(parent.props.subDetailConfig) ? parent.props.subDetailConfig : [];
232
+ const configs = await this.buildConfigs(parent, rows, links, oldConfigs);
233
+ return this.save(parent, true, configs, defaultExpandRow ?? Boolean(parent.props.defaultExpandRow));
234
+ }
235
+ async remove(parentRef, targetRef) {
236
+ const rows = await this.list();
237
+ const parent = this.resolve(parentRef, rows);
238
+ const target = this.resolve(targetRef, rows);
239
+ const oldConfigs = Array.isArray(parent.props.subDetailConfig) ? parent.props.subDetailConfig : [];
240
+ const configs = oldConfigs.filter((config) => String(config.subFormId) !== target.id);
241
+ if (configs.length === oldConfigs.length)
242
+ throw new Error(`「${parent.title}」未关联子明细表「${target.title}」`);
243
+ return this.save(parent, configs.length > 0, configs, configs.length > 0 && Boolean(parent.props.defaultExpandRow));
244
+ }
245
+ async candidates(parentRef) {
246
+ const rows = await this.list();
247
+ const parent = this.resolve(parentRef, rows);
248
+ const edges = this.edgeMap(rows);
249
+ return {
250
+ parent: { subFormId: parent.id, name: parent.title },
251
+ candidates: this.candidateRows(parent, rows, edges).map((row) => ({ subFormId: row.id, name: row.title })),
252
+ };
253
+ }
91
254
  async enable(parentRef) {
92
255
  const rows = await this.list();
93
256
  const parent = this.resolve(parentRef, rows);
@@ -1 +1 @@
1
- {"version":3,"file":"form-sub-detail.js","sourceRoot":"","sources":["../../src/services/form-sub-detail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-sub-detail.js","sourceRoot":"","sources":["../../src/services/form-sub-detail.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,39 @@
1
1
  /**
2
2
  * 公式表达式引用解析(主表 + 明细表)。
3
3
  *
4
- * 公式 expressSql 里的字段引用支持两种语法:
5
- * - `{主表.字段名}` — 主表字段
6
- * - `{明细表名.字段名}` — 明细表字段(如 `{行程明细.行程开始时间}`)
4
+ * ## 引用语法:两套写法,一套存储
7
5
  *
8
- * 明细引用的参数对象需带 `sFormId`(明细表 id) + `sFormName`(明细表名)(浏览器实测)。
9
- * 字段结构统一从 getEbField 取(主表 main + 明细 detail,含 detailTableId/tableName/fields)。
6
+ * 平台**存**的是花括号:`{主表.字段名}` / `{明细表名.字段名}`,配一份 `parameters` 参数表。
7
+ * 而设计器的公式编辑器**显示和输入**用的是方括号:`[字段名]`(截图对照:
8
+ * `CONCAT([通知], 当前日期)`),保存时由编辑器自己转回花括号 + 参数。
9
+ *
10
+ * 所以方括号是**编辑器那层的写法**,不是服务端语法。直接把它发给保存接口的后果实测如下:
11
+ *
12
+ * | 发送 | 参数表 | 结果 |
13
+ * |---|---|---|
14
+ * | `[主表名称]` | 带上 | ❌「参数列表与执行语句不一致」 |
15
+ * | `[主表名称]` | 空 | ⚠️ 保存成功,但平台记录的参数数 = 0 —— **字段其实没接上,静默失效** |
16
+ * | `{主表.主表名称}` | 带上 | ✅ 参数数 = 1 |
17
+ *
18
+ * 第二行是最坑的:看着保存成功,实际是个死引用。因此本模块**只接受方括号作为输入写法,
19
+ * 一律归一化成花括号后再下发**,绝不把 `[x]` 原样发给平台。
20
+ *
21
+ * ## 参数必须逐个出现位置各一份(不去重)
22
+ *
23
+ * 同一字段在表达式里出现两次,就必须给**两个**参数对象:
24
+ *
25
+ * ```
26
+ * CONCAT({主表.主表名称}, "—", {主表.主表名称})
27
+ * 参数 1 个 → ❌ 参数列表与执行语句不一致
28
+ * 参数 2 个 → ✅ 平台记录参数数 = 2
29
+ * ```
30
+ *
31
+ * 早期版本在这里做了去重,等于「同一字段引用两次」必失败。
32
+ *
33
+ * ## 明细引用
34
+ *
35
+ * 明细引用的参数对象需带 `sFormId`(明细表 id) + `sFormName`(明细表名)。
36
+ * 字段结构统一从 getEbField 取(主表 main + 明细 detail)。
10
37
  */
11
38
  import type { ApiClient } from '../core/client.js';
12
39
  export interface FormulaParam {
@@ -22,10 +49,46 @@ export interface FormulaParam {
22
49
  appId: string;
23
50
  id: null;
24
51
  }
52
+ /** 一处字段引用。 */
53
+ export interface FormulaRef {
54
+ /** 表名。`{主表.x}` → `'主表'`;`[x]` 这种不带表名的写法 → `null`(待按字段名反查)。 */
55
+ table: string | null;
56
+ field: string;
57
+ /** 原文,报错回显用。 */
58
+ raw: string;
59
+ /** 在表达式中的起止位置,供归一化改写。 */
60
+ index: number;
61
+ length: number;
62
+ }
25
63
  export interface FormulaParseResult {
26
64
  parameters: FormulaParam[];
27
65
  refNames: string[];
28
66
  errors: string[];
67
+ /** 不阻断保存、但该让用户知道的(如零引用的纯常量公式)。 */
68
+ warnings: string[];
69
+ /**
70
+ * 归一化后的表达式:方括号引用已改写成 `{表.字段}`。
71
+ * **保存时必须用这个**,不能用用户原样输入。
72
+ */
73
+ normalizedExpression: string;
29
74
  }
75
+ /**
76
+ * 扫出表达式里的全部字段引用,**两种写法都认**:
77
+ * - `{主表.字段名}` / `{明细表名.字段名}` —— 平台存储格式
78
+ * - `[字段名]` / `[表名.字段名]` —— 设计器编辑器的写法
79
+ *
80
+ * 重复出现**不去重** —— 每个出现位置都要单独一个参数(见文件头说明)。
81
+ * 不做字符串字面量剔除:公式里写 `"["` 这种极端情况不在支持范围,误判会在解析阶段
82
+ * 报「未找到字段」,比静默错绑安全。
83
+ */
84
+ export declare function parseFormulaRefs(expression: string): FormulaRef[];
85
+ /**
86
+ * 按目标字段的类型给出合适的公式返回类型。
87
+ *
88
+ * 此前 fields.json 里 `formula` 写成字符串时**一律按 `Number` 提交**,
89
+ * 于是「给单行文本挂公式」必然被平台拒(「公式计算结果必须为: 数字」)——
90
+ * 报错说的是真话:我们替用户要了个数字。
91
+ */
92
+ export declare function defaultReturnType(fieldKey: string | undefined): string;
30
93
  export declare function buildFormulaParameters(client: ApiClient, baseUrl: string, objId: string, appId: string, formId: string, expression: string): Promise<FormulaParseResult>;
31
94
  //# sourceMappingURL=formula-detail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formula-detail.d.ts","sourceRoot":"","sources":["../../src/services/formula-detail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,IAAI,CAAC;CACV;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAClC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAqE7B"}
1
+ {"version":3,"file":"formula-detail.d.ts","sourceRoot":"","sources":["../../src/services/formula-detail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,IAAI,CAAC;CACV;AAED,cAAc;AACd,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CAkBjE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKtE;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAClC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAgG7B"}