weaver-e10-builder 1.2.5 → 1.5.2

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 (230) hide show
  1. package/assets/org-employee-template.xlsx +0 -0
  2. package/dist/commands/form-add-physical-field.d.ts +3 -0
  3. package/dist/commands/form-add-physical-field.d.ts.map +1 -0
  4. package/dist/commands/form-add-physical-field.js +125 -0
  5. package/dist/commands/form-add-physical-field.js.map +1 -0
  6. package/dist/commands/form-button.d.ts.map +1 -1
  7. package/dist/commands/form-button.js +28 -5
  8. package/dist/commands/form-button.js.map +1 -1
  9. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  10. package/dist/commands/form-field-linkage.js +27 -6
  11. package/dist/commands/form-field-linkage.js.map +1 -1
  12. package/dist/commands/form-formula-linkage.d.ts +3 -0
  13. package/dist/commands/form-formula-linkage.d.ts.map +1 -0
  14. package/dist/commands/form-formula-linkage.js +434 -0
  15. package/dist/commands/form-formula-linkage.js.map +1 -0
  16. package/dist/commands/form-formula.d.ts.map +1 -1
  17. package/dist/commands/form-formula.js +22 -3
  18. package/dist/commands/form-formula.js.map +1 -1
  19. package/dist/commands/form-list-click.d.ts.map +1 -1
  20. package/dist/commands/form-list-click.js +2 -1
  21. package/dist/commands/form-list-click.js.map +1 -1
  22. package/dist/commands/form-list-permission.js +1 -1
  23. package/dist/commands/form-list-permission.js.map +1 -1
  24. package/dist/commands/form-native.d.ts.map +1 -1
  25. package/dist/commands/form-native.js +11 -3
  26. package/dist/commands/form-native.js.map +1 -1
  27. package/dist/commands/form-physical-table.d.ts +3 -0
  28. package/dist/commands/form-physical-table.d.ts.map +1 -0
  29. package/dist/commands/form-physical-table.js +195 -0
  30. package/dist/commands/form-physical-table.js.map +1 -0
  31. package/dist/commands/form.d.ts.map +1 -1
  32. package/dist/commands/form.js +246 -549
  33. package/dist/commands/form.js.map +1 -1
  34. package/dist/commands/matrix.d.ts.map +1 -1
  35. package/dist/commands/matrix.js +175 -36
  36. package/dist/commands/matrix.js.map +1 -1
  37. package/dist/commands/org.d.ts +10 -0
  38. package/dist/commands/org.d.ts.map +1 -0
  39. package/dist/commands/org.js +402 -0
  40. package/dist/commands/org.js.map +1 -0
  41. package/dist/commands/role.d.ts.map +1 -1
  42. package/dist/commands/role.js +106 -62
  43. package/dist/commands/role.js.map +1 -1
  44. package/dist/commands/wf-form.d.ts.map +1 -1
  45. package/dist/commands/wf-form.js +501 -26
  46. package/dist/commands/wf-form.js.map +1 -1
  47. package/dist/commands/workflow-auth-resp.d.ts.map +1 -1
  48. package/dist/commands/workflow-auth-resp.js +53 -5
  49. package/dist/commands/workflow-auth-resp.js.map +1 -1
  50. package/dist/commands/workflow-create-auth-resp.d.ts.map +1 -1
  51. package/dist/commands/workflow-create-auth-resp.js +5 -1
  52. package/dist/commands/workflow-create-auth-resp.js.map +1 -1
  53. package/dist/commands/workflow-operator-sign.js +1 -1
  54. package/dist/commands/workflow-operator-sign.js.map +1 -1
  55. package/dist/commands/workflow.d.ts.map +1 -1
  56. package/dist/commands/workflow.js +78 -9
  57. package/dist/commands/workflow.js.map +1 -1
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/services/action-detail.d.ts.map +1 -1
  61. package/dist/services/action-detail.js +5 -4
  62. package/dist/services/action-detail.js.map +1 -1
  63. package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
  64. package/dist/services/actionflow/components/action_eb_update_compiler.js +22 -7
  65. package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
  66. package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
  67. package/dist/services/actionflow/components/approve_create.js +6 -3
  68. package/dist/services/actionflow/components/approve_create.js.map +1 -1
  69. package/dist/services/actionflow/components/custom_set_form.d.ts.map +1 -1
  70. package/dist/services/actionflow/components/custom_set_form.js +35 -1
  71. package/dist/services/actionflow/components/custom_set_form.js.map +1 -1
  72. package/dist/services/actionflow/components/custom_trigger.d.ts.map +1 -1
  73. package/dist/services/actionflow/components/custom_trigger.js +4 -1
  74. package/dist/services/actionflow/components/custom_trigger.js.map +1 -1
  75. package/dist/services/actionflow/components/dml_execute.d.ts.map +1 -1
  76. package/dist/services/actionflow/components/dml_execute.js +7 -3
  77. package/dist/services/actionflow/components/dml_execute.js.map +1 -1
  78. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  79. package/dist/services/actionflow/components/document_actions.js +7 -3
  80. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  81. package/dist/services/actionflow/components/hrm_actions.d.ts.map +1 -1
  82. package/dist/services/actionflow/components/hrm_actions.js +7 -3
  83. package/dist/services/actionflow/components/hrm_actions.js.map +1 -1
  84. package/dist/services/actionflow/components/multiple_execution.d.ts.map +1 -1
  85. package/dist/services/actionflow/components/multiple_execution.js +14 -5
  86. package/dist/services/actionflow/components/multiple_execution.js.map +1 -1
  87. package/dist/services/actionflow/components/output.js +1 -1
  88. package/dist/services/actionflow/components/output.js.map +1 -1
  89. package/dist/services/actionflow/components/send_message.js +2 -2
  90. package/dist/services/actionflow/components/send_message.js.map +1 -1
  91. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  92. package/dist/services/actionflow/components/workflow_actions.js +7 -3
  93. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  94. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  95. package/dist/services/actionflow/context_preflight.js +12 -2
  96. package/dist/services/actionflow/context_preflight.js.map +1 -1
  97. package/dist/services/actionflow/context_provider.d.ts.map +1 -1
  98. package/dist/services/actionflow/context_provider.js +21 -2
  99. package/dist/services/actionflow/context_provider.js.map +1 -1
  100. package/dist/services/actionflow/custom_trigger_context.d.ts +10 -0
  101. package/dist/services/actionflow/custom_trigger_context.d.ts.map +1 -0
  102. package/dist/services/actionflow/custom_trigger_context.js +46 -0
  103. package/dist/services/actionflow/custom_trigger_context.js.map +1 -0
  104. package/dist/services/actionflow/filter_rules.js +2 -2
  105. package/dist/services/actionflow/filter_rules.js.map +1 -1
  106. package/dist/services/actionflow/formula_service.d.ts +9 -1
  107. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  108. package/dist/services/actionflow/formula_service.js +59 -21
  109. package/dist/services/actionflow/formula_service.js.map +1 -1
  110. package/dist/services/actionflow/id_generator.d.ts +2 -0
  111. package/dist/services/actionflow/id_generator.d.ts.map +1 -1
  112. package/dist/services/actionflow/id_generator.js +13 -0
  113. package/dist/services/actionflow/id_generator.js.map +1 -1
  114. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  115. package/dist/services/actionflow/preflight_service.js +6 -1
  116. package/dist/services/actionflow/preflight_service.js.map +1 -1
  117. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  118. package/dist/services/actionflow/workflow_compiler.js +89 -35
  119. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  120. package/dist/services/auth-resp-condition.d.ts +35 -0
  121. package/dist/services/auth-resp-condition.d.ts.map +1 -0
  122. package/dist/services/auth-resp-condition.js +111 -0
  123. package/dist/services/auth-resp-condition.js.map +1 -0
  124. package/dist/services/condition-rules.d.ts.map +1 -1
  125. package/dist/services/condition-rules.js +4 -1
  126. package/dist/services/condition-rules.js.map +1 -1
  127. package/dist/services/esb-interface/document-parser.d.ts.map +1 -1
  128. package/dist/services/esb-interface/document-parser.js +62 -5
  129. package/dist/services/esb-interface/document-parser.js.map +1 -1
  130. package/dist/services/form-association.d.ts +19 -0
  131. package/dist/services/form-association.d.ts.map +1 -1
  132. package/dist/services/form-association.js +64 -0
  133. package/dist/services/form-association.js.map +1 -1
  134. package/dist/services/form-button-action.d.ts +7 -0
  135. package/dist/services/form-button-action.d.ts.map +1 -1
  136. package/dist/services/form-button-action.js +11 -1
  137. package/dist/services/form-button-action.js.map +1 -1
  138. package/dist/services/form-create.d.ts +4 -0
  139. package/dist/services/form-create.d.ts.map +1 -1
  140. package/dist/services/form-create.js +18 -12
  141. package/dist/services/form-create.js.map +1 -1
  142. package/dist/services/form-field-build.d.ts +71 -0
  143. package/dist/services/form-field-build.d.ts.map +1 -0
  144. package/dist/services/form-field-build.js +436 -0
  145. package/dist/services/form-field-build.js.map +1 -0
  146. package/dist/services/form-field-patch.d.ts +3 -1
  147. package/dist/services/form-field-patch.d.ts.map +1 -1
  148. package/dist/services/form-field-patch.js +23 -9
  149. package/dist/services/form-field-patch.js.map +1 -1
  150. package/dist/services/form-formula-linkage.d.ts +349 -0
  151. package/dist/services/form-formula-linkage.d.ts.map +1 -0
  152. package/dist/services/form-formula-linkage.js +546 -0
  153. package/dist/services/form-formula-linkage.js.map +1 -0
  154. package/dist/services/form-layout-insert.d.ts +84 -0
  155. package/dist/services/form-layout-insert.d.ts.map +1 -0
  156. package/dist/services/form-layout-insert.js +244 -0
  157. package/dist/services/form-layout-insert.js.map +1 -0
  158. package/dist/services/form-linkage-condition.d.ts +159 -0
  159. package/dist/services/form-linkage-condition.d.ts.map +1 -0
  160. package/dist/services/form-linkage-condition.js +307 -0
  161. package/dist/services/form-linkage-condition.js.map +1 -0
  162. package/dist/services/form-physical-table.d.ts +115 -0
  163. package/dist/services/form-physical-table.d.ts.map +1 -0
  164. package/dist/services/form-physical-table.js +153 -0
  165. package/dist/services/form-physical-table.js.map +1 -0
  166. package/dist/services/formula-detail.d.ts +98 -6
  167. package/dist/services/formula-detail.d.ts.map +1 -1
  168. package/dist/services/formula-detail.js +208 -26
  169. package/dist/services/formula-detail.js.map +1 -1
  170. package/dist/services/matrix-rows.d.ts +43 -0
  171. package/dist/services/matrix-rows.d.ts.map +1 -0
  172. package/dist/services/matrix-rows.js +104 -0
  173. package/dist/services/matrix-rows.js.map +1 -0
  174. package/dist/services/org-department.d.ts +114 -0
  175. package/dist/services/org-department.d.ts.map +1 -0
  176. package/dist/services/org-department.js +209 -0
  177. package/dist/services/org-department.js.map +1 -0
  178. package/dist/services/org-employee.d.ts +191 -0
  179. package/dist/services/org-employee.d.ts.map +1 -0
  180. package/dist/services/org-employee.js +400 -0
  181. package/dist/services/org-employee.js.map +1 -0
  182. package/dist/services/role-member.d.ts +99 -0
  183. package/dist/services/role-member.d.ts.map +1 -0
  184. package/dist/services/role-member.js +206 -0
  185. package/dist/services/role-member.js.map +1 -0
  186. package/dist/services/workflow-info.d.ts +83 -0
  187. package/dist/services/workflow-info.d.ts.map +1 -0
  188. package/dist/services/workflow-info.js +97 -0
  189. package/dist/services/workflow-info.js.map +1 -0
  190. package/dist/services/workflow-odoc-setting.d.ts +1 -1
  191. package/dist/services/workflow-odoc-setting.d.ts.map +1 -1
  192. package/dist/services/workflow-odoc-setting.js +15 -6
  193. package/dist/services/workflow-odoc-setting.js.map +1 -1
  194. package/dist/utils/column-name.d.ts +24 -0
  195. package/dist/utils/column-name.d.ts.map +1 -1
  196. package/dist/utils/column-name.js +16 -0
  197. package/dist/utils/column-name.js.map +1 -1
  198. package/ecodecmd/package.json +1 -2
  199. package/ecodecmd/src/loaddep.js +19 -9
  200. package/package.json +4 -4
  201. package/skill-docs/SKILL.md +13 -9
  202. package/skill-docs/_catalog.md +86 -81
  203. package/skill-docs/actionflows/SKILL.md +173 -170
  204. package/skill-docs/actionflows/references/components/logic/Output.md +1 -1
  205. package/skill-docs/actionflows/references/components/trigger/CustomTrigger.md +32 -0
  206. package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
  207. package/skill-docs/references/common/guide-plan-template.md +9 -3
  208. package/skill-docs/references/common/ref-cli-commands.md +54 -23
  209. package/skill-docs/references/esb-interface/guide-import.md +4 -1
  210. package/skill-docs/references/form/guide-create-form.md +13 -0
  211. package/skill-docs/references/form/guide-field-linkage.md +2 -0
  212. package/skill-docs/references/form/guide-form-association.md +1 -1
  213. package/skill-docs/references/form/guide-form-formula-functions.md +36 -0
  214. package/skill-docs/references/form/guide-form-layout-incremental.md +75 -0
  215. package/skill-docs/references/form/guide-form-linkage.md +62 -4
  216. package/skill-docs/references/form/guide-form-physical-table.md +146 -0
  217. package/skill-docs/references/form/guide-formula-linkage.md +250 -0
  218. package/skill-docs/references/form/ref-form-fields.md +6 -0
  219. package/skill-docs/references/hrm/guide-matrix.md +79 -16
  220. package/skill-docs/references/hrm/guide-org-employee.md +124 -0
  221. package/skill-docs/references/report/cell-config-echo-guide.md +1 -1
  222. package/skill-docs/references/report/dataset-query-filter-guide.md +3 -3
  223. package/skill-docs/references/report/date-range-query-reference.md +2 -2
  224. package/skill-docs/references/report/query-condition-api-guide.md +11 -11
  225. package/skill-docs/references/report/report-designer-feature-map.md +1 -1
  226. package/skill-docs/references/report/report-permission-guide.md +2 -2
  227. package/skill-docs/references/workflow/guide-workflow-auth-resp.md +48 -22
  228. package/skill-docs/references/workflow/guide-workflow-odoc-setting.md +248 -0
  229. package/skill-docs/references/workflow/guide-workflow-odoc.md +23 -51
  230. package/skill-docs/references/workflow/guide-workflow.md +1 -1
@@ -34,26 +34,69 @@
34
34
  *
35
35
  * 明细引用的参数对象需带 `sFormId`(明细表 id) + `sFormName`(明细表名)。
36
36
  * 字段结构统一从 getEbField 取(主表 main + 明细 detail)。
37
+ *
38
+ * ## 模块字段(系统字段)
39
+ *
40
+ * `{主表.主表数据id}`、`{主表.当前日期}` 这类引用**不在** getEbField 的 main/detail 里,
41
+ * 得由调用方通过可选参数 `moduleColumns` 传进来(目前只有函数联动会传,来源是
42
+ * `linkage/findFormDrivingColumns` 的模块字段桶)。
43
+ *
44
+ * 下发时**一律写成裸标签**(`{主表.主表数据id}`)—— 语义键写法 `[formDataId]` 也会被归一到标签形态,
45
+ * 与平台落库的 `expressSql` 一致。不传 `moduleColumns` 时,模块字段仍按「未找到字段」报错(原有行为不变)。
46
+ *
47
+ * ## 选项引用(三段式)`{主表.性别.男}`
48
+ *
49
+ * 第三段是**选项名** —— 指「性别」字段里那个叫「男」的选项。
50
+ *
51
+ * 平台比的是**选项对象**,不是选项名的字符串:参数里带的是选项的 **`valueKey`**
52
+ * (`fieldType:"option"` + `id`=valueKey + `middleFieldIds`=[字段id],没有 `fieldId`/`title`)。
53
+ *
54
+ * 因此 `{主表.性别}=='男'` 这种写法**恒不成立** —— 它拿字段的 valueKey 去比字符串「男」。
55
+ * 要命的是平台**照收、不报错、回 200**,写完看着全绿、结果永远不对,所以解析时专门对
56
+ * 「选项型字段 vs 字符串字面量」出声警告。
57
+ *
58
+ * ⚠ 三段式**不能按第一个点切**:那样字段会变成 `性别.男`,然后报「未找到字段 性别.男」——
59
+ * 这正是「CLI 写不出选项比较」的老毛病(读得出来、写不回去)。必须整段切开数段数。
37
60
  */
38
61
  import type { ApiClient } from '../core/client.js';
39
62
  export interface FormulaParam {
40
63
  dataTemplateId: string;
41
- fieldId: string;
42
- formId: string;
64
+ /** 业务字段有;**选项参数没有这个键** —— 平台靠 `middleFieldIds` 定位它属于哪个字段。 */
65
+ fieldId?: string;
66
+ formId?: string;
43
67
  module: string;
44
68
  properKey: string;
45
69
  sFormId?: string;
46
70
  sFormName?: string;
47
- title: string;
71
+ title?: string;
48
72
  name: string;
49
- appId: string;
50
- id: null;
73
+ /** eb 表那条路由必给;流程表单的函数联动报文里没有这个键,就留空。 */
74
+ appId?: string;
75
+ /** 业务字段是 `null`;**选项参数是选项的 `valueKey`**。 */
76
+ id: string | null;
77
+ fieldType?: string;
78
+ direct?: boolean;
79
+ del?: boolean;
80
+ middleFieldIds?: string[];
81
+ directFormId?: string;
82
+ parent?: string;
83
+ formulaParentVarList?: unknown[];
84
+ dataSourceField?: boolean;
85
+ repeat?: boolean;
86
+ groupData?: boolean;
51
87
  }
52
88
  /** 一处字段引用。 */
53
89
  export interface FormulaRef {
54
90
  /** 表名。`{主表.x}` → `'主表'`;`[x]` 这种不带表名的写法 → `null`(待按字段名反查)。 */
55
91
  table: string | null;
56
92
  field: string;
93
+ /**
94
+ * 选项引用 `{主表.性别.男}` 的**第三段**:选项名。普通字段引用没有这一段。
95
+ *
96
+ * ⚠ 必须写**完整三段**才有这段:`[性别.男]` 只有两段,仍按「明细表.字段名」读 ——
97
+ * 方括号的两段式是既有写法,二者无法区分,不给它开后门。
98
+ */
99
+ option?: string;
57
100
  /** 原文,报错回显用。 */
58
101
  raw: string;
59
102
  /** 在表达式中的起止位置,供归一化改写。 */
@@ -77,6 +120,10 @@ export interface FormulaParseResult {
77
120
  * - `{主表.字段名}` / `{明细表名.字段名}` —— 平台存储格式
78
121
  * - `[字段名]` / `[表名.字段名]` —— 设计器编辑器的写法
79
122
  *
123
+ * **三段式是「选项引用」**:`{主表.性别.男}` 指「性别」字段里那个叫「男」的**选项**,
124
+ * 不是某个叫「性别.男」的字段。按第一个点切分会把字段读成 `性别.男`,然后报「未找到字段」——
125
+ * 那正是「用 CLI 表达不了选项比较」的老毛病(参数要的是选项的 valueKey,平台比的是选项对象)。
126
+ *
80
127
  * 重复出现**不去重** —— 每个出现位置都要单独一个参数(见文件头说明)。
81
128
  * 不做字符串字面量剔除:公式里写 `"["` 这种极端情况不在支持范围,误判会在解析阶段
82
129
  * 报「未找到字段」,比静默错绑安全。
@@ -90,5 +137,50 @@ export declare function parseFormulaRefs(expression: string): FormulaRef[];
90
137
  * 报错说的是真话:我们替用户要了个数字。
91
138
  */
92
139
  export declare function defaultReturnType(fieldKey: string | undefined): string;
93
- export declare function buildFormulaParameters(client: ApiClient, baseUrl: string, objId: string, appId: string, formId: string, expression: string): Promise<FormulaParseResult>;
140
+ /**
141
+ * 模块字段(系统字段)。只有函数联动那条链路会用到 —— 普通公式的字段来源是 `getEbField`,
142
+ * 里面没有这些字段。
143
+ *
144
+ * 三种键的约定(来自 `linkage/findFormDrivingColumns` 的模块字段桶):
145
+ * - `id`:**语义键**(`formDataId` / `current_date` / `system_operator_department_id`),不是雪花 id
146
+ * - `name`:裸中文标签(`主表数据id`),表达式里写的就是它
147
+ * - `descType`:**全大写**(`TEXT` / `DATE` / `OBJECT`),可直接当 `properKey` 用
148
+ *
149
+ * 业务字段恰好相反:`id` 是雪花、`descType` 是驼峰(`Text` / `Money`)。
150
+ */
151
+ export interface FormulaModuleColumn {
152
+ id: string;
153
+ name: string;
154
+ descType: string;
155
+ }
156
+ /** 业务字段与模块字段的字段来源。两条路由(eb 表的 `getEbField`、流程表单的 `getConfig`)
157
+ * 各自映射成这个形状,解析核只认它。 */
158
+ export interface FormulaRefContext {
159
+ /** 主表字段。元素形状沿用 `getEbField` 的 `{ id, showName, dataKey, componentKey }`,明细则用 `name`。 */
160
+ mainFields: any[];
161
+ /** 明细表:`{ detailTableId, tableName, fields: [] }`。 */
162
+ detailTables: any[];
163
+ moduleColumns?: FormulaModuleColumn[];
164
+ formId: string;
165
+ /** 公式参数的 `module`。eb 表 = `ebuilderform`;流程表单的函数联动 = `ebuildercard`。 */
166
+ module: string;
167
+ /** 给了才写 `appId` 键;`undefined` = 整个键不出现(流程表单那条路由就是这样)。 */
168
+ appId?: string;
169
+ /** 报错里指路的命令名,形如 `wf-form formula-linkage columns`。 */
170
+ hint?: string;
171
+ }
172
+ /**
173
+ * 引用解析与参数构建的**纯核** —— 不碰网络,字段来源由调用方注入。
174
+ *
175
+ * 两条路由共用它(eb 表的字段来源是 `getEbField`,流程表单是 `getConfig`),所以这里只放
176
+ * **与路由无关**的规则:方括号归一化成花括号、逐出现位置各给一份参数、明细引用带
177
+ * `sFormId`/`sFormName`、模块字段一律写裸标签、业务字段与模块字段撞名时业务字段胜出。
178
+ */
179
+ export declare function resolveFormulaRefs(expression: string, ctx: FormulaRefContext): FormulaParseResult;
180
+ /**
181
+ * eb 表那条路由:先取字段来源(`getEbField`)再调解析核。
182
+ *
183
+ * @param moduleColumns 模块字段(系统字段)候选。只有函数联动会传;**不传时行为与加这个参数之前完全一致**。
184
+ */
185
+ export declare function buildFormulaParameters(client: ApiClient, baseUrl: string, objId: string, appId: string, formId: string, expression: string, moduleColumns?: FormulaModuleColumn[]): Promise<FormulaParseResult>;
94
186
  //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"formula-detail.d.ts","sourceRoot":"","sources":["../../src/services/formula-detail.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,10 @@
3
3
  * - `{主表.字段名}` / `{明细表名.字段名}` —— 平台存储格式
4
4
  * - `[字段名]` / `[表名.字段名]` —— 设计器编辑器的写法
5
5
  *
6
+ * **三段式是「选项引用」**:`{主表.性别.男}` 指「性别」字段里那个叫「男」的**选项**,
7
+ * 不是某个叫「性别.男」的字段。按第一个点切分会把字段读成 `性别.男`,然后报「未找到字段」——
8
+ * 那正是「用 CLI 表达不了选项比较」的老毛病(参数要的是选项的 valueKey,平台比的是选项对象)。
9
+ *
6
10
  * 重复出现**不去重** —— 每个出现位置都要单独一个参数(见文件头说明)。
7
11
  * 不做字符串字面量剔除:公式里写 `"["` 这种极端情况不在支持范围,误判会在解析阶段
8
12
  * 报「未找到字段」,比静默错绑安全。
@@ -15,11 +19,17 @@ export function parseFormulaRefs(expression) {
15
19
  const inner = (m[1] ?? m[2] ?? '').trim();
16
20
  if (!inner)
17
21
  continue;
18
- const dot = inner.indexOf('.');
19
- const hasTable = dot > 0 && dot < inner.length - 1;
22
+ // 按点切段(最多三段:表 / 字段 / 选项)。字段名带点的情形在这套平台里不存在,
23
+ // 而「第一个点之后全是字段名」会把三段式读坏,所以这里必须整段切开看。
24
+ // ⚠ 选项引用必须写**完整三段**:`[性别.男]` 只有两段,仍然按「明细表.字段名」读 ——
25
+ // 这与既有的方括号写法天然撞车,没法从段数之外再区分,所以不给它开后门。
26
+ const parts = inner.split('.').map((s) => s.trim());
27
+ const hasTable = parts.length >= 2 && parts[0] !== '' && parts[1] !== '';
28
+ const tail = hasTable ? parts.slice(2).join('.').trim() : '';
20
29
  refs.push({
21
- table: hasTable ? inner.slice(0, dot).trim() : null,
22
- field: (hasTable ? inner.slice(dot + 1) : inner).trim(),
30
+ table: hasTable ? parts[0] : null,
31
+ field: hasTable ? parts[1] : inner,
32
+ ...(hasTable && tail ? { option: tail } : {}),
23
33
  raw: m[0],
24
34
  index: m.index,
25
35
  length: m[0].length,
@@ -27,6 +37,52 @@ export function parseFormulaRefs(expression) {
27
37
  }
28
38
  return refs;
29
39
  }
40
+ /** 选项型控件的 componentKey —— 这些字段的值是选项,能写三段式引用。 */
41
+ const OPTION_FIELD_KEYS = ['Select', 'SelectMultiple', 'RadioBox', 'CheckBox'];
42
+ function isOptionField(field) {
43
+ return OPTION_FIELD_KEYS.includes(String(field?.componentKey || field?.fieldKey || field?.type || ''));
44
+ }
45
+ /**
46
+ * 取字段的选项表。`getEbField` 把选项放在 **`fieldConfig.options`**(`{name, valueKey, …}`);
47
+ * 其余几个位置是别的路由/老版本留下的可能落点,一并兜住,取到第一个非空数组为止。
48
+ */
49
+ function optionsOf(field) {
50
+ const cands = [
51
+ field?.fieldConfig?.options,
52
+ field?.otherPropertiesObj?.options,
53
+ Array.isArray(field?.selectData) ? field.selectData : field?.selectData?.options,
54
+ ];
55
+ for (const c of cands)
56
+ if (Array.isArray(c) && c.length)
57
+ return c;
58
+ return [];
59
+ }
60
+ /**
61
+ * 选项的参数对象(形状实测自设计器落库的报文)。
62
+ *
63
+ * ⚠ `id` 是选项的 **valueKey**,不是选项记录自己的 id —— 同一份数据里这两个值相邻但不同
64
+ * (`valueKey=…7601` / 记录 `id=…2674`),发错了平台不报错,只是永远比对不上。
65
+ * 平台比的是**选项对象**,不是选项名的字符串,所以这种引用**没有 `fieldId`/`title`/`appId`**。
66
+ */
67
+ function buildOptionParam(fieldId, optionName, optionValueKey, properKey, formId, module) {
68
+ return {
69
+ parent: '',
70
+ properKey,
71
+ formulaParentVarList: [],
72
+ dataTemplateId: '',
73
+ module,
74
+ direct: true,
75
+ del: false,
76
+ middleFieldIds: [fieldId],
77
+ dataSourceField: false,
78
+ repeat: false,
79
+ name: optionName,
80
+ directFormId: formId,
81
+ id: optionValueKey,
82
+ fieldType: 'option',
83
+ groupData: false,
84
+ };
85
+ }
30
86
  /**
31
87
  * 按目标字段的类型给出合适的公式返回类型。
32
88
  *
@@ -42,7 +98,48 @@ export function defaultReturnType(fieldKey) {
42
98
  return 'Date';
43
99
  return 'String';
44
100
  }
45
- export async function buildFormulaParameters(client, baseUrl, objId, appId, formId, expression) {
101
+ /**
102
+ * 反查模块字段。**命中多条不取首条**,返回候选让调用方报错 ——
103
+ * 语义键 `name` 的标签就叫「名称」,与业务字段撞名是可预期的。
104
+ */
105
+ function findModuleColumn(moduleColumns, name) {
106
+ if (!moduleColumns?.length)
107
+ return {};
108
+ const byId = moduleColumns.filter((c) => c.id === name);
109
+ if (byId.length)
110
+ return byId.length === 1 ? { col: byId[0] } : { candidates: byId };
111
+ const byName = moduleColumns.filter((c) => c.name === name);
112
+ if (byName.length)
113
+ return byName.length === 1 ? { col: byName[0] } : { candidates: byName };
114
+ return {};
115
+ }
116
+ /**
117
+ * 参数对象拼装。业务字段与模块字段共用这一处,将来补平台默认键只改这里。
118
+ * `module` 与 `appId` 由路由决定:`appId` 为 `undefined` 时**整个键不出现**
119
+ * —— 流程表单那条路由的 parameter 里就没有这个键,写个空串是另一回事。
120
+ */
121
+ function buildParam(src, formId, module, appId) {
122
+ return {
123
+ dataTemplateId: '', fieldId: src.fieldId, formId, module,
124
+ properKey: src.properKey,
125
+ ...(src.sFormId ? { sFormId: src.sFormId, sFormName: src.sFormName } : {}),
126
+ title: src.title, name: src.name,
127
+ ...(appId === undefined ? {} : { appId }),
128
+ id: null,
129
+ };
130
+ }
131
+ /** 没给 `hint` 时的兜底指路。 */
132
+ const DEFAULT_COLUMNS_HINT = 'form formula-linkage columns';
133
+ /**
134
+ * 引用解析与参数构建的**纯核** —— 不碰网络,字段来源由调用方注入。
135
+ *
136
+ * 两条路由共用它(eb 表的字段来源是 `getEbField`,流程表单是 `getConfig`),所以这里只放
137
+ * **与路由无关**的规则:方括号归一化成花括号、逐出现位置各给一份参数、明细引用带
138
+ * `sFormId`/`sFormName`、模块字段一律写裸标签、业务字段与模块字段撞名时业务字段胜出。
139
+ */
140
+ export function resolveFormulaRefs(expression, ctx) {
141
+ const { mainFields, detailTables, moduleColumns, formId, module, appId } = ctx;
142
+ const hint = ctx.hint || DEFAULT_COLUMNS_HINT;
46
143
  const errors = [];
47
144
  const warnings = [];
48
145
  const parameters = [];
@@ -53,15 +150,6 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
53
150
  // 早期版本在这里直接报错退出,把「平台允许的用法」当成非法输入拦掉了。
54
151
  warnings.push('表达式中没有字段引用(纯常量公式)。平台允许这种写法,将按原样保存。');
55
152
  }
56
- // getEbField 取主表 + 明细结构(主表字段用于反查不带表名的 `[字段]`)
57
- let mainFields = [];
58
- let detailTables = [];
59
- try {
60
- const eb = await client.post(`${baseUrl}/api/bs/esb/setting/component/getEbField`, { tableId: objId, appId });
61
- mainFields = eb?.data?.main || [];
62
- detailTables = eb?.data?.detail || [];
63
- }
64
- catch { /* 拉取失败由解析报错兜底 */ }
65
153
  const mainFind = (name) => mainFields.find((f) => String(f.id) === name || f.showName === name || f.dataKey === name);
66
154
  const detailOf = (table) => detailTables.find((d) => d.tableName === table || String(d.detailTableId) === table);
67
155
  const fieldIn = (dt, name) => (dt?.fields || []).find((x) => String(x.id) === name || x.showName === name || x.dataKey === name);
@@ -71,6 +159,7 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
71
159
  for (const ref of refs) {
72
160
  let table = ref.table;
73
161
  let resolved;
162
+ let moduleCol = null;
74
163
  if (table === '主表' || table === null) {
75
164
  resolved = mainFind(ref.field);
76
165
  if (!resolved && table === null) {
@@ -87,6 +176,23 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
87
176
  }
88
177
  if (resolved && (table === null || table === '主表')) {
89
178
  table = '主表';
179
+ // 业务字段赢了同名的模块字段:不报错、不静默换源,只提示一句怎么强制指定
180
+ const sameName = moduleColumns?.filter((c) => c.name === ref.field) || [];
181
+ if (sameName.length) {
182
+ warnings.push(`「${ref.field}」已按业务字段解析;若要引用系统模块字段,请写成 [${sameName[0].id}]`);
183
+ }
184
+ }
185
+ // 主表里没有 → 找模块字段(调用方没传 moduleColumns 时这里恒不命中,等价于原有报错)
186
+ if (!resolved) {
187
+ const hit = findModuleColumn(moduleColumns, ref.field);
188
+ if (hit.candidates) {
189
+ errors.push(`模块字段「${ref.field}」有多个候选(${hit.candidates.map((c) => c.id).join('、')}),请写成 [<语义键>] 指明是哪个`);
190
+ continue;
191
+ }
192
+ if (hit.col) {
193
+ moduleCol = hit.col;
194
+ table = '主表';
195
+ }
90
196
  }
91
197
  }
92
198
  else {
@@ -98,29 +204,86 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
98
204
  resolved = fieldIn(dt, ref.field);
99
205
  table = dt.tableName;
100
206
  }
101
- if (!resolved) {
207
+ if (!resolved && !moduleCol) {
102
208
  const where = ref.table === '主表' ? '主表' : ref.table ? `明细表「${ref.table}」` : '主表或任一明细表';
103
209
  const avail = ref.table && ref.table !== '主表'
104
210
  ? (detailOf(ref.table)?.fields || []).map((x) => x.showName).join(', ')
105
211
  : mainFields.map((x) => x.showName).join(', ');
106
- errors.push(`在${where}中未找到字段: "${ref.field}",可用: ${avail}`);
212
+ // 传了 moduleColumns 才提示模块字段写法;没传时错误文案与加这个参数之前逐字相同
213
+ const moduleHint = moduleColumns?.length
214
+ ? `;若是系统模块字段(${moduleColumns.slice(0, 3).map((c) => c.name).join('、')} 等),可写成 [<语义键>],语义键见 ${hint}`
215
+ : '';
216
+ errors.push(`在${where}中未找到字段: "${ref.field}",可用: ${avail}${moduleHint}`);
107
217
  continue;
108
218
  }
219
+ // ── 护栏:选项型字段 与 **字符串字面量** 比较 ──────────────────────
220
+ // 选项存的是 valueKey,拿它跟选项**名字**比**恒不成立**;而平台照收、不报错、回 200 ——
221
+ // 这是最容易被写出来、又最难查的错法(写完看着全绿,只是结果永远不对)。
222
+ // 不阻断(表达式最终合不合法由平台定),但必须出声。
223
+ if (resolved && !ref.option && isOptionField(resolved)) {
224
+ const lit = /^\s*(==|!=)\s*(['"])([^'"]*)\2/.exec(expression.slice(ref.index + ref.length));
225
+ if (lit) {
226
+ // 建议按**字面量本身**去找同名的选项(`'女'` 就建议「女」),找不到才退而拿第一个当例子。
227
+ const opts = optionsOf(resolved);
228
+ const matched = opts.find((o) => String(o.name) === lit[3]);
229
+ const suggest = matched ? matched.name : (opts[0] ? opts[0].name : '<选项名>');
230
+ warnings.push(`「${ref.field}」是选项型控件,这里却拿它跟字符串 ${lit[2]}${lit[3]}${lit[2]} 比较 —— `
231
+ + '选项存的是 valueKey,与选项名比**恒不成立**,平台也不报错。正确写法是引用选项本身:'
232
+ + `{${ref.table || '主表'}.${ref.field}.${suggest}}`);
233
+ }
234
+ }
235
+ // ── 选项引用 `{主表.性别.男}` ─────────────────────────────────
236
+ // 平台比的是**选项对象**(参数里带选项的 valueKey),不是选项名的字符串 ——
237
+ // 所以这种引用必须解析出 valueKey,光把三段式原样发下去是不行的。
238
+ let optionHit = null;
239
+ if (ref.option) {
240
+ if (moduleCol) {
241
+ errors.push(`模块字段「${moduleCol.name}」没有选项,不能写成 {${ref.table || '主表'}.${moduleCol.name}.${ref.option}}`);
242
+ continue;
243
+ }
244
+ const opts = optionsOf(resolved);
245
+ if (!opts.length) {
246
+ errors.push(`字段「${ref.field}」不是选项型控件(${resolved.componentKey || resolved.fieldKey || '未知类型'}),`
247
+ + `不能写成 {${ref.table || '主表'}.${ref.field}.${ref.option}}`);
248
+ continue;
249
+ }
250
+ const byName = opts.filter((o) => String(o.name) === ref.option);
251
+ const hit = byName.length ? byName : opts.filter((o) => String(o.valueKey) === ref.option);
252
+ if (!hit.length) {
253
+ errors.push(`字段「${ref.field}」里没有选项「${ref.option}」,可选: ${opts.map((o) => o.name).join(', ')}`);
254
+ continue;
255
+ }
256
+ if (hit.length > 1) {
257
+ errors.push(`选项「${ref.option}」在字段「${ref.field}」里有多个同名候选,请改用它的 valueKey 指定`);
258
+ continue;
259
+ }
260
+ optionHit = hit[0];
261
+ }
109
262
  // 走到这里 table 必然已定型:要么 '主表',要么是某个明细表名(带表名的引用校验过、不带表名的已反查过)
110
263
  const tableName = table;
111
264
  const isDetail = tableName !== '主表';
112
265
  const dt = isDetail ? detailOf(tableName) : null;
113
- parameters.push({
114
- dataTemplateId: '', fieldId: String(resolved.id), formId, module: 'ebuilderform',
115
- properKey: resolved.componentKey || resolved.fieldKey || 'Text',
116
- ...(dt ? { sFormId: String(dt.detailTableId), sFormName: dt.tableName } : {}),
117
- title: resolved.showName || resolved.title || ref.field,
118
- name: resolved.showName || resolved.field || ref.field,
119
- appId, id: null,
120
- });
121
- refNames.push(`${table}.${ref.field}`);
266
+ // 归一化用的字段名:模块字段与选项一律写**裸标签**(`{主表.主表数据id}` / `{主表.性别.男}`),
267
+ // 与平台落库形态一致,免得用户写 [formDataId] 时下发一个平台不认的 `{主表.formDataId}`
268
+ const normField = moduleCol ? moduleCol.name : optionHit ? `${ref.field}.${optionHit.name}` : ref.field;
269
+ if (moduleCol) {
270
+ parameters.push(buildParam({ fieldId: moduleCol.id, properKey: moduleCol.descType, title: moduleCol.name, name: moduleCol.name }, formId, module, appId));
271
+ }
272
+ else if (optionHit) {
273
+ parameters.push(buildOptionParam(String(resolved.id), String(optionHit.name), String(optionHit.valueKey), resolved.componentKey || resolved.fieldKey || 'Select', formId, module));
274
+ }
275
+ else {
276
+ parameters.push(buildParam({
277
+ fieldId: String(resolved.id),
278
+ properKey: resolved.componentKey || resolved.fieldKey || 'Text',
279
+ title: resolved.showName || resolved.title || ref.field,
280
+ name: resolved.showName || resolved.field || ref.field,
281
+ ...(dt ? { sFormId: String(dt.detailTableId), sFormName: dt.tableName } : {}),
282
+ }, formId, module, appId));
283
+ }
284
+ refNames.push(`${table}.${normField}`);
122
285
  pieces.push(expression.slice(cursor, ref.index));
123
- pieces.push(`{${table}.${ref.field}}`);
286
+ pieces.push(`{${table}.${normField}}`);
124
287
  cursor = ref.index + ref.length;
125
288
  }
126
289
  pieces.push(expression.slice(cursor));
@@ -129,4 +292,23 @@ export async function buildFormulaParameters(client, baseUrl, objId, appId, form
129
292
  normalizedExpression: errors.length ? expression : pieces.join(''),
130
293
  };
131
294
  }
295
+ /**
296
+ * eb 表那条路由:先取字段来源(`getEbField`)再调解析核。
297
+ *
298
+ * @param moduleColumns 模块字段(系统字段)候选。只有函数联动会传;**不传时行为与加这个参数之前完全一致**。
299
+ */
300
+ export async function buildFormulaParameters(client, baseUrl, objId, appId, formId, expression, moduleColumns) {
301
+ // getEbField 取主表 + 明细结构(主表字段用于反查不带表名的 `[字段]`)
302
+ let mainFields = [];
303
+ let detailTables = [];
304
+ try {
305
+ const eb = await client.post(`${baseUrl}/api/bs/esb/setting/component/getEbField`, { tableId: objId, appId });
306
+ mainFields = eb?.data?.main || [];
307
+ detailTables = eb?.data?.detail || [];
308
+ }
309
+ catch { /* 拉取失败由解析报错兜底 */ }
310
+ return resolveFormulaRefs(expression, {
311
+ mainFields, detailTables, moduleColumns, formId, module: 'ebuilderform', appId,
312
+ });
313
+ }
132
314
  //# sourceMappingURL=formula-detail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formula-detail.js","sourceRoot":"","sources":["../../src/services/formula-detail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formula-detail.js","sourceRoot":"","sources":["../../src/services/formula-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { ApiClient } from '../core/client.js';
2
+ /**
3
+ * HRM 矩阵数据行的形状处理。
4
+ *
5
+ * 平台的 `data/save` 收的是:
6
+ * { matrixId, rowData: [ { id?, data: [ {dataIndex, conditionAble, value: ["<实体ID>"]} ] } ] }
7
+ *
8
+ * 两个要点:
9
+ *
10
+ * 1. **带 `id` 是改,不带是增。** 行 id 用 `matrix data list` 拿。同步型矩阵(`syncType=1`,
11
+ * 如部门矩阵)的行是组织架构同步出来的、不可增删,**行 id 就是部门 id**;手工维护的矩阵
12
+ * 行 id 是平台发号的雪花。
13
+ *
14
+ * 2. **平台整行覆盖**,不是按列合并。只给值列去改一行,条件列会被清空 —— 所以改行时必须
15
+ * 先读回该行、把没给的列补上再发。
16
+ */
17
+ /** 简写数据行里代表「行 id」的键。列键(configId)全是数字串,不会与这两个撞。 */
18
+ export declare const ROW_ID_KEYS: string[];
19
+ /** 拆出简写行里的「行 id」与各列值。 */
20
+ export declare function splitMatrixRow(row: any): {
21
+ rowId?: string;
22
+ cells: Record<string, any>;
23
+ };
24
+ /**
25
+ * 统一成 ID 字符串数组。
26
+ * 两种写法都收:`["<实体ID>"]`(提交用)与 `[{id:"<实体ID>",...}]`(`data list` 读回的实体对象)。
27
+ */
28
+ export declare function toIdList(v: any): string[];
29
+ /** 这一行没给、但列定义里有的列。改行时这些列必须从现有行补回来。 */
30
+ export declare function missingMatrixColumns(row: any, allColumns: string[]): string[];
31
+ /** 行里给了但矩阵没有的列 —— 多半是 configId 抄错了,要报出来而不是静默发出去。 */
32
+ export declare function unknownMatrixColumns(row: any, allColumns: string[]): string[];
33
+ /**
34
+ * 把一行简写展开成平台要的形状。
35
+ *
36
+ * 带了 `rowId` 且该行缺列时,必须传 `existingRow`(该行的现有数据)—— 缺的列会从它取值补上,
37
+ * 否则会被平台整行覆盖清空。`existingRow` 里的值是 `data list` 读回的实体对象数组,
38
+ * 由 [[toIdList]] 统一成 ID。
39
+ */
40
+ export declare function buildMatrixRow(row: any, conditionIds: Set<string>, allColumns: string[], existingRow?: any | null): any;
41
+ /** 按行 id 取一行。`data/page` 没有按行 id 过滤的入参,只能翻页找。 */
42
+ export declare function fetchMatrixRow(client: ApiClient, baseUrl: string, matrixId: string, rowId: string): Promise<any | null>;
43
+ //# sourceMappingURL=matrix-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-rows.d.ts","sourceRoot":"","sources":["../../src/services/matrix-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AAEH,kDAAkD;AAClD,eAAO,MAAM,WAAW,UAAkB,CAAC;AAE3C,yBAAyB;AACzB,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAYvF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAOzC;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG7E;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG7E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,CAAC,EAAE,GAAG,GAAG,IAAI,GACvB,GAAG,CAqBL;AAED,iDAAiD;AACjD,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAClE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAerB"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * HRM 矩阵数据行的形状处理。
3
+ *
4
+ * 平台的 `data/save` 收的是:
5
+ * { matrixId, rowData: [ { id?, data: [ {dataIndex, conditionAble, value: ["<实体ID>"]} ] } ] }
6
+ *
7
+ * 两个要点:
8
+ *
9
+ * 1. **带 `id` 是改,不带是增。** 行 id 用 `matrix data list` 拿。同步型矩阵(`syncType=1`,
10
+ * 如部门矩阵)的行是组织架构同步出来的、不可增删,**行 id 就是部门 id**;手工维护的矩阵
11
+ * 行 id 是平台发号的雪花。
12
+ *
13
+ * 2. **平台整行覆盖**,不是按列合并。只给值列去改一行,条件列会被清空 —— 所以改行时必须
14
+ * 先读回该行、把没给的列补上再发。
15
+ */
16
+ /** 简写数据行里代表「行 id」的键。列键(configId)全是数字串,不会与这两个撞。 */
17
+ export const ROW_ID_KEYS = ['rowId', 'id'];
18
+ /** 拆出简写行里的「行 id」与各列值。 */
19
+ export function splitMatrixRow(row) {
20
+ const cells = {};
21
+ let rowId;
22
+ for (const [k, v] of Object.entries(row || {})) {
23
+ if (ROW_ID_KEYS.includes(k)) {
24
+ const s = String(v ?? '').trim();
25
+ if (s)
26
+ rowId = s;
27
+ continue;
28
+ }
29
+ cells[k] = v;
30
+ }
31
+ return { rowId, cells };
32
+ }
33
+ /**
34
+ * 统一成 ID 字符串数组。
35
+ * 两种写法都收:`["<实体ID>"]`(提交用)与 `[{id:"<实体ID>",...}]`(`data list` 读回的实体对象)。
36
+ */
37
+ export function toIdList(v) {
38
+ if (v === undefined || v === null || v === '')
39
+ return [];
40
+ const arr = Array.isArray(v) ? v : [v];
41
+ return arr
42
+ .map((e) => (e && typeof e === 'object' ? e.id : e))
43
+ .map((e) => String(e ?? '').trim())
44
+ .filter(Boolean);
45
+ }
46
+ /** 这一行没给、但列定义里有的列。改行时这些列必须从现有行补回来。 */
47
+ export function missingMatrixColumns(row, allColumns) {
48
+ const given = new Set(Object.keys(splitMatrixRow(row).cells));
49
+ return allColumns.filter((c) => !given.has(c));
50
+ }
51
+ /** 行里给了但矩阵没有的列 —— 多半是 configId 抄错了,要报出来而不是静默发出去。 */
52
+ export function unknownMatrixColumns(row, allColumns) {
53
+ const cols = new Set(allColumns);
54
+ return Object.keys(splitMatrixRow(row).cells).filter((k) => !cols.has(k));
55
+ }
56
+ /**
57
+ * 把一行简写展开成平台要的形状。
58
+ *
59
+ * 带了 `rowId` 且该行缺列时,必须传 `existingRow`(该行的现有数据)—— 缺的列会从它取值补上,
60
+ * 否则会被平台整行覆盖清空。`existingRow` 里的值是 `data list` 读回的实体对象数组,
61
+ * 由 [[toIdList]] 统一成 ID。
62
+ */
63
+ export function buildMatrixRow(row, conditionIds, allColumns, existingRow) {
64
+ const { rowId, cells } = splitMatrixRow(row);
65
+ const merged = Object.entries(cells);
66
+ if (rowId) {
67
+ const given = new Set(Object.keys(cells));
68
+ for (const col of allColumns) {
69
+ if (given.has(col))
70
+ continue;
71
+ // 没给又没得补的列留空数组:与平台「整行覆盖」的语义一致,也避免发 undefined。
72
+ merged.push([col, existingRow ? toIdList(existingRow[col]) : []]);
73
+ }
74
+ }
75
+ return {
76
+ ...(rowId ? { id: rowId } : {}),
77
+ data: merged.map(([configId, v]) => ({
78
+ dataIndex: configId,
79
+ conditionAble: conditionIds.has(configId),
80
+ value: toIdList(v),
81
+ })),
82
+ };
83
+ }
84
+ /** 按行 id 取一行。`data/page` 没有按行 id 过滤的入参,只能翻页找。 */
85
+ export async function fetchMatrixRow(client, baseUrl, matrixId, rowId) {
86
+ const size = 500;
87
+ const maxPages = 20;
88
+ for (let page = 1; page <= maxPages; page++) {
89
+ const res = await client.post(`${baseUrl}/api/bs/hrm/matrix2/data/page`, {
90
+ matrixId, current: page, pageSize: size,
91
+ });
92
+ const p = res?.data || {};
93
+ const rows = p.data || p.records || p.datas || [];
94
+ const hit = rows.find((r) => String(r.id) === String(rowId));
95
+ if (hit)
96
+ return hit;
97
+ if (rows.length < size)
98
+ return null; // 没有更多页
99
+ if (typeof p.total === 'number' && p.total <= page * size)
100
+ return null; // 已翻到底
101
+ }
102
+ return null;
103
+ }
104
+ //# sourceMappingURL=matrix-rows.js.map