weaver-e10-builder 1.0.2-beta

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 (301) hide show
  1. package/README.md +200 -0
  2. package/dist/commands/app.d.ts +3 -0
  3. package/dist/commands/app.d.ts.map +1 -0
  4. package/dist/commands/app.js +305 -0
  5. package/dist/commands/app.js.map +1 -0
  6. package/dist/commands/auth.d.ts +3 -0
  7. package/dist/commands/auth.d.ts.map +1 -0
  8. package/dist/commands/auth.js +386 -0
  9. package/dist/commands/auth.js.map +1 -0
  10. package/dist/commands/check.d.ts +3 -0
  11. package/dist/commands/check.d.ts.map +1 -0
  12. package/dist/commands/check.js +106 -0
  13. package/dist/commands/check.js.map +1 -0
  14. package/dist/commands/compile.d.ts +3 -0
  15. package/dist/commands/compile.d.ts.map +1 -0
  16. package/dist/commands/compile.js +134 -0
  17. package/dist/commands/compile.js.map +1 -0
  18. package/dist/commands/docx.d.ts +3 -0
  19. package/dist/commands/docx.d.ts.map +1 -0
  20. package/dist/commands/docx.js +54 -0
  21. package/dist/commands/docx.js.map +1 -0
  22. package/dist/commands/form-button.d.ts +3 -0
  23. package/dist/commands/form-button.d.ts.map +1 -0
  24. package/dist/commands/form-button.js +441 -0
  25. package/dist/commands/form-button.js.map +1 -0
  26. package/dist/commands/form-data.d.ts +3 -0
  27. package/dist/commands/form-data.d.ts.map +1 -0
  28. package/dist/commands/form-data.js +197 -0
  29. package/dist/commands/form-data.js.map +1 -0
  30. package/dist/commands/form-ebuilder-columns.d.ts +3 -0
  31. package/dist/commands/form-ebuilder-columns.d.ts.map +1 -0
  32. package/dist/commands/form-ebuilder-columns.js +118 -0
  33. package/dist/commands/form-ebuilder-columns.js.map +1 -0
  34. package/dist/commands/form-ebuilder-filter.d.ts +3 -0
  35. package/dist/commands/form-ebuilder-filter.d.ts.map +1 -0
  36. package/dist/commands/form-ebuilder-filter.js +135 -0
  37. package/dist/commands/form-ebuilder-filter.js.map +1 -0
  38. package/dist/commands/form-ebuilder-scope.d.ts +3 -0
  39. package/dist/commands/form-ebuilder-scope.d.ts.map +1 -0
  40. package/dist/commands/form-ebuilder-scope.js +321 -0
  41. package/dist/commands/form-ebuilder-scope.js.map +1 -0
  42. package/dist/commands/form-ebuilder-search.d.ts +3 -0
  43. package/dist/commands/form-ebuilder-search.d.ts.map +1 -0
  44. package/dist/commands/form-ebuilder-search.js +252 -0
  45. package/dist/commands/form-ebuilder-search.js.map +1 -0
  46. package/dist/commands/form-formula.d.ts +12 -0
  47. package/dist/commands/form-formula.d.ts.map +1 -0
  48. package/dist/commands/form-formula.js +252 -0
  49. package/dist/commands/form-formula.js.map +1 -0
  50. package/dist/commands/form-layout-init.d.ts +15 -0
  51. package/dist/commands/form-layout-init.d.ts.map +1 -0
  52. package/dist/commands/form-layout-init.js +162 -0
  53. package/dist/commands/form-layout-init.js.map +1 -0
  54. package/dist/commands/form-layout.d.ts +3 -0
  55. package/dist/commands/form-layout.d.ts.map +1 -0
  56. package/dist/commands/form-layout.js +236 -0
  57. package/dist/commands/form-layout.js.map +1 -0
  58. package/dist/commands/form-list-click.d.ts +3 -0
  59. package/dist/commands/form-list-click.d.ts.map +1 -0
  60. package/dist/commands/form-list-click.js +154 -0
  61. package/dist/commands/form-list-click.js.map +1 -0
  62. package/dist/commands/form-list-event.d.ts +3 -0
  63. package/dist/commands/form-list-event.d.ts.map +1 -0
  64. package/dist/commands/form-list-event.js +203 -0
  65. package/dist/commands/form-list-event.js.map +1 -0
  66. package/dist/commands/form-list-filter.d.ts +9 -0
  67. package/dist/commands/form-list-filter.d.ts.map +1 -0
  68. package/dist/commands/form-list-filter.js +107 -0
  69. package/dist/commands/form-list-filter.js.map +1 -0
  70. package/dist/commands/form-list-group.d.ts +11 -0
  71. package/dist/commands/form-list-group.d.ts.map +1 -0
  72. package/dist/commands/form-list-group.js +100 -0
  73. package/dist/commands/form-list-group.js.map +1 -0
  74. package/dist/commands/form-list-permission.d.ts +3 -0
  75. package/dist/commands/form-list-permission.d.ts.map +1 -0
  76. package/dist/commands/form-list-permission.js +127 -0
  77. package/dist/commands/form-list-permission.js.map +1 -0
  78. package/dist/commands/form-list-search-group.d.ts +3 -0
  79. package/dist/commands/form-list-search-group.d.ts.map +1 -0
  80. package/dist/commands/form-list-search-group.js +132 -0
  81. package/dist/commands/form-list-search-group.js.map +1 -0
  82. package/dist/commands/form-list-stats.d.ts +11 -0
  83. package/dist/commands/form-list-stats.d.ts.map +1 -0
  84. package/dist/commands/form-list-stats.js +139 -0
  85. package/dist/commands/form-list-stats.js.map +1 -0
  86. package/dist/commands/form-list-unit.d.ts +3 -0
  87. package/dist/commands/form-list-unit.d.ts.map +1 -0
  88. package/dist/commands/form-list-unit.js +95 -0
  89. package/dist/commands/form-list-unit.js.map +1 -0
  90. package/dist/commands/form-list-utils.d.ts +32 -0
  91. package/dist/commands/form-list-utils.d.ts.map +1 -0
  92. package/dist/commands/form-list-utils.js +76 -0
  93. package/dist/commands/form-list-utils.js.map +1 -0
  94. package/dist/commands/form-list.d.ts +3 -0
  95. package/dist/commands/form-list.d.ts.map +1 -0
  96. package/dist/commands/form-list.js +624 -0
  97. package/dist/commands/form-list.js.map +1 -0
  98. package/dist/commands/form-permission.d.ts +3 -0
  99. package/dist/commands/form-permission.d.ts.map +1 -0
  100. package/dist/commands/form-permission.js +193 -0
  101. package/dist/commands/form-permission.js.map +1 -0
  102. package/dist/commands/form-relate.d.ts +14 -0
  103. package/dist/commands/form-relate.d.ts.map +1 -0
  104. package/dist/commands/form-relate.js +140 -0
  105. package/dist/commands/form-relate.js.map +1 -0
  106. package/dist/commands/form-serial-mark.d.ts +18 -0
  107. package/dist/commands/form-serial-mark.d.ts.map +1 -0
  108. package/dist/commands/form-serial-mark.js +167 -0
  109. package/dist/commands/form-serial-mark.js.map +1 -0
  110. package/dist/commands/form-table-view.d.ts +3 -0
  111. package/dist/commands/form-table-view.d.ts.map +1 -0
  112. package/dist/commands/form-table-view.js +217 -0
  113. package/dist/commands/form-table-view.js.map +1 -0
  114. package/dist/commands/form-validate.d.ts +3 -0
  115. package/dist/commands/form-validate.d.ts.map +1 -0
  116. package/dist/commands/form-validate.js +122 -0
  117. package/dist/commands/form-validate.js.map +1 -0
  118. package/dist/commands/form-view-permission.d.ts +3 -0
  119. package/dist/commands/form-view-permission.d.ts.map +1 -0
  120. package/dist/commands/form-view-permission.js +86 -0
  121. package/dist/commands/form-view-permission.js.map +1 -0
  122. package/dist/commands/form-view.d.ts +3 -0
  123. package/dist/commands/form-view.d.ts.map +1 -0
  124. package/dist/commands/form-view.js +145 -0
  125. package/dist/commands/form-view.js.map +1 -0
  126. package/dist/commands/form.d.ts +3 -0
  127. package/dist/commands/form.d.ts.map +1 -0
  128. package/dist/commands/form.js +2467 -0
  129. package/dist/commands/form.js.map +1 -0
  130. package/dist/commands/icon.d.ts +3 -0
  131. package/dist/commands/icon.d.ts.map +1 -0
  132. package/dist/commands/icon.js +82 -0
  133. package/dist/commands/icon.js.map +1 -0
  134. package/dist/commands/matrix.d.ts +3 -0
  135. package/dist/commands/matrix.d.ts.map +1 -0
  136. package/dist/commands/matrix.js +587 -0
  137. package/dist/commands/matrix.js.map +1 -0
  138. package/dist/commands/menu-permission.d.ts +3 -0
  139. package/dist/commands/menu-permission.d.ts.map +1 -0
  140. package/dist/commands/menu-permission.js +188 -0
  141. package/dist/commands/menu-permission.js.map +1 -0
  142. package/dist/commands/menu.d.ts +16 -0
  143. package/dist/commands/menu.d.ts.map +1 -0
  144. package/dist/commands/menu.js +269 -0
  145. package/dist/commands/menu.js.map +1 -0
  146. package/dist/commands/project.d.ts +3 -0
  147. package/dist/commands/project.d.ts.map +1 -0
  148. package/dist/commands/project.js +345 -0
  149. package/dist/commands/project.js.map +1 -0
  150. package/dist/commands/role.d.ts +3 -0
  151. package/dist/commands/role.d.ts.map +1 -0
  152. package/dist/commands/role.js +224 -0
  153. package/dist/commands/role.js.map +1 -0
  154. package/dist/commands/user.d.ts +3 -0
  155. package/dist/commands/user.d.ts.map +1 -0
  156. package/dist/commands/user.js +49 -0
  157. package/dist/commands/user.js.map +1 -0
  158. package/dist/commands/workflow-action.d.ts +3 -0
  159. package/dist/commands/workflow-action.d.ts.map +1 -0
  160. package/dist/commands/workflow-action.js +1821 -0
  161. package/dist/commands/workflow-action.js.map +1 -0
  162. package/dist/commands/workflow-advanced.d.ts +3 -0
  163. package/dist/commands/workflow-advanced.d.ts.map +1 -0
  164. package/dist/commands/workflow-advanced.js +290 -0
  165. package/dist/commands/workflow-advanced.js.map +1 -0
  166. package/dist/commands/workflow-condition.d.ts +7 -0
  167. package/dist/commands/workflow-condition.d.ts.map +1 -0
  168. package/dist/commands/workflow-condition.js +562 -0
  169. package/dist/commands/workflow-condition.js.map +1 -0
  170. package/dist/commands/workflow-message.d.ts +3 -0
  171. package/dist/commands/workflow-message.d.ts.map +1 -0
  172. package/dist/commands/workflow-message.js +399 -0
  173. package/dist/commands/workflow-message.js.map +1 -0
  174. package/dist/commands/workflow-node-overtime.d.ts +3 -0
  175. package/dist/commands/workflow-node-overtime.d.ts.map +1 -0
  176. package/dist/commands/workflow-node-overtime.js +150 -0
  177. package/dist/commands/workflow-node-overtime.js.map +1 -0
  178. package/dist/commands/workflow-node-reject.d.ts +3 -0
  179. package/dist/commands/workflow-node-reject.d.ts.map +1 -0
  180. package/dist/commands/workflow-node-reject.js +115 -0
  181. package/dist/commands/workflow-node-reject.js.map +1 -0
  182. package/dist/commands/workflow-node-sign.d.ts +15 -0
  183. package/dist/commands/workflow-node-sign.d.ts.map +1 -0
  184. package/dist/commands/workflow-node-sign.js +100 -0
  185. package/dist/commands/workflow-node-sign.js.map +1 -0
  186. package/dist/commands/workflow-node-validate.d.ts +16 -0
  187. package/dist/commands/workflow-node-validate.d.ts.map +1 -0
  188. package/dist/commands/workflow-node-validate.js +169 -0
  189. package/dist/commands/workflow-node-validate.js.map +1 -0
  190. package/dist/commands/workflow-node.d.ts +3 -0
  191. package/dist/commands/workflow-node.d.ts.map +1 -0
  192. package/dist/commands/workflow-node.js +347 -0
  193. package/dist/commands/workflow-node.js.map +1 -0
  194. package/dist/commands/workflow-numbering.d.ts +17 -0
  195. package/dist/commands/workflow-numbering.d.ts.map +1 -0
  196. package/dist/commands/workflow-numbering.js +191 -0
  197. package/dist/commands/workflow-numbering.js.map +1 -0
  198. package/dist/commands/workflow-plan-range.d.ts +3 -0
  199. package/dist/commands/workflow-plan-range.d.ts.map +1 -0
  200. package/dist/commands/workflow-plan-range.js +116 -0
  201. package/dist/commands/workflow-plan-range.js.map +1 -0
  202. package/dist/commands/workflow-setting.d.ts +3 -0
  203. package/dist/commands/workflow-setting.d.ts.map +1 -0
  204. package/dist/commands/workflow-setting.js +440 -0
  205. package/dist/commands/workflow-setting.js.map +1 -0
  206. package/dist/commands/workflow-title.d.ts +14 -0
  207. package/dist/commands/workflow-title.d.ts.map +1 -0
  208. package/dist/commands/workflow-title.js +106 -0
  209. package/dist/commands/workflow-title.js.map +1 -0
  210. package/dist/commands/workflow.d.ts +26 -0
  211. package/dist/commands/workflow.d.ts.map +1 -0
  212. package/dist/commands/workflow.js +2359 -0
  213. package/dist/commands/workflow.js.map +1 -0
  214. package/dist/core/auth.d.ts +36 -0
  215. package/dist/core/auth.d.ts.map +1 -0
  216. package/dist/core/auth.js +351 -0
  217. package/dist/core/auth.js.map +1 -0
  218. package/dist/core/client.d.ts +27 -0
  219. package/dist/core/client.d.ts.map +1 -0
  220. package/dist/core/client.js +100 -0
  221. package/dist/core/client.js.map +1 -0
  222. package/dist/core/crypto.d.ts +11 -0
  223. package/dist/core/crypto.d.ts.map +1 -0
  224. package/dist/core/crypto.js +102 -0
  225. package/dist/core/crypto.js.map +1 -0
  226. package/dist/core/edition.d.ts +4 -0
  227. package/dist/core/edition.d.ts.map +1 -0
  228. package/dist/core/edition.js +19 -0
  229. package/dist/core/edition.js.map +1 -0
  230. package/dist/index.d.ts +3 -0
  231. package/dist/index.d.ts.map +1 -0
  232. package/dist/index.js +118 -0
  233. package/dist/index.js.map +1 -0
  234. package/dist/services/action-detail.d.ts +112 -0
  235. package/dist/services/action-detail.d.ts.map +1 -0
  236. package/dist/services/action-detail.js +443 -0
  237. package/dist/services/action-detail.js.map +1 -0
  238. package/dist/services/condition-rules.d.ts +45 -0
  239. package/dist/services/condition-rules.d.ts.map +1 -0
  240. package/dist/services/condition-rules.js +207 -0
  241. package/dist/services/condition-rules.js.map +1 -0
  242. package/dist/services/form-create.d.ts +102 -0
  243. package/dist/services/form-create.d.ts.map +1 -0
  244. package/dist/services/form-create.js +835 -0
  245. package/dist/services/form-create.js.map +1 -0
  246. package/dist/services/form-ebuilder-filter.d.ts +60 -0
  247. package/dist/services/form-ebuilder-filter.d.ts.map +1 -0
  248. package/dist/services/form-ebuilder-filter.js +562 -0
  249. package/dist/services/form-ebuilder-filter.js.map +1 -0
  250. package/dist/services/form-table-view.d.ts +117 -0
  251. package/dist/services/form-table-view.d.ts.map +1 -0
  252. package/dist/services/form-table-view.js +882 -0
  253. package/dist/services/form-table-view.js.map +1 -0
  254. package/dist/services/form-view-permission.d.ts +30 -0
  255. package/dist/services/form-view-permission.d.ts.map +1 -0
  256. package/dist/services/form-view-permission.js +208 -0
  257. package/dist/services/form-view-permission.js.map +1 -0
  258. package/dist/services/form-view.d.ts +41 -0
  259. package/dist/services/form-view.d.ts.map +1 -0
  260. package/dist/services/form-view.js +334 -0
  261. package/dist/services/form-view.js.map +1 -0
  262. package/dist/services/formula-detail.d.ts +31 -0
  263. package/dist/services/formula-detail.d.ts.map +1 -0
  264. package/dist/services/formula-detail.js +66 -0
  265. package/dist/services/formula-detail.js.map +1 -0
  266. package/dist/services/rich-types.d.ts +35 -0
  267. package/dist/services/rich-types.d.ts.map +1 -0
  268. package/dist/services/rich-types.js +105 -0
  269. package/dist/services/rich-types.js.map +1 -0
  270. package/dist/services/workflow-layout.d.ts +118 -0
  271. package/dist/services/workflow-layout.d.ts.map +1 -0
  272. package/dist/services/workflow-layout.js +279 -0
  273. package/dist/services/workflow-layout.js.map +1 -0
  274. package/dist/services/workflow-operator.d.ts +36 -0
  275. package/dist/services/workflow-operator.d.ts.map +1 -0
  276. package/dist/services/workflow-operator.js +65 -0
  277. package/dist/services/workflow-operator.js.map +1 -0
  278. package/dist/types.d.ts +53 -0
  279. package/dist/types.d.ts.map +1 -0
  280. package/dist/types.js +2 -0
  281. package/dist/types.js.map +1 -0
  282. package/dist/utils/column-name.d.ts +13 -0
  283. package/dist/utils/column-name.d.ts.map +1 -0
  284. package/dist/utils/column-name.js +45 -0
  285. package/dist/utils/column-name.js.map +1 -0
  286. package/ecodecmd/package.json +27 -0
  287. package/ecodecmd/src/build.js +709 -0
  288. package/ecodecmd/src/compile.js +81 -0
  289. package/ecodecmd/src/index.js +48 -0
  290. package/ecodecmd/src/init.js +73 -0
  291. package/ecodecmd/src/lib/@babel/plugin-proposal-object-rest-spread@7.5.5/index.js +1795 -0
  292. package/ecodecmd/src/lib/@babel/plugin-proposal-optional-chaining@7.6.0/index.js +135 -0
  293. package/ecodecmd/src/lib/@babel/preset-env-standalone@7.5.5/babel-preset-env.js +76043 -0
  294. package/ecodecmd/src/lib/@babel/standalone@7.5.5/babel.js +90802 -0
  295. package/ecodecmd/src/lib/exec.js +77 -0
  296. package/ecodecmd/src/loaddep.js +154 -0
  297. package/ecodecmd/src/util/compress.js +58 -0
  298. package/ecodecmd/src/util/crypto-util.js +19 -0
  299. package/ecodecmd/src/util/index.js +153 -0
  300. package/ecodecmd/src/util/snowflake.js +144 -0
  301. package/package.json +43 -0
@@ -0,0 +1,562 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ const FORM_LIST_PATH = '/api/bs/ebuilder/form/obj/getList';
3
+ const QUERY_FIELDS_PATH = '/api/ebuilder/form/dataset/v1/getFields';
4
+ const QUERY_FIELD_PAGE_PATH = '/api/ebuilder/form/form/field/manage/getFormFieldPage';
5
+ const GET_FIELD_PATH = '/api/ebuilder/form/form/field/manage/getFormField';
6
+ const GET_LAYOUT_PATH = '/api/ebuilder/form/form/builder/getFormLayout';
7
+ const SAVE_FIELD_LAYOUT_PATH = '/api/ebuilder/form/form/field/layout/save';
8
+ const EMPTY_OPERATORS = new Set(['isnull', 'isnotnull', 'null', 'notnull']);
9
+ const COMPONENT_TYPES = {
10
+ Text: 'text',
11
+ TextArea: 'text',
12
+ Textarea: 'text',
13
+ Email: 'text',
14
+ Phone: 'text',
15
+ Mobile: 'text',
16
+ String: 'text',
17
+ Money: 'number',
18
+ Number: 'number',
19
+ NumberComponent: 'number',
20
+ Date: 'date',
21
+ DateTime: 'date',
22
+ DateComponent: 'date',
23
+ DateInterval: 'date',
24
+ Select: 'option',
25
+ Radio: 'option',
26
+ RadioBox: 'option',
27
+ Checkbox: 'option',
28
+ CheckBox: 'option',
29
+ ComboSelect: 'option',
30
+ Switch: 'option',
31
+ Employee: 'browser',
32
+ Department: 'browser',
33
+ SubCompany: 'browser',
34
+ EBuilder: 'browser',
35
+ Ebuilder: 'browser',
36
+ };
37
+ const CUSTOM_OPERATORS = {
38
+ text: ['like', 'eq', 'neq', 'null', 'notnull'],
39
+ number: ['like', 'null', 'notnull'],
40
+ date: ['like', 'null', 'notnull', 'beq', 'seq'],
41
+ option: ['eq', 'neq', 'null', 'notnull'],
42
+ browser: ['eq', 'neq', 'null', 'notnull'],
43
+ };
44
+ const FIXED_FIELDS = {
45
+ name: { componentKey: 'name', componentType: 'text' },
46
+ creator: { componentKey: 'creator', componentType: 'browser' },
47
+ create_time: { componentKey: 'create_time', componentType: 'date' },
48
+ };
49
+ const FIXED_OPERATORS = {
50
+ name: ['like', 'eq', 'neq'],
51
+ creator: ['eq', 'neq'],
52
+ create_time: ['like'],
53
+ };
54
+ const CHECKED_LAYOUT_ITEMS = [
55
+ 'other',
56
+ 'hideDescribe',
57
+ 'isHideTitle',
58
+ 'titleLayout',
59
+ 'mTitleLayout',
60
+ 'orderContent',
61
+ 'selectColumn',
62
+ 'cardDisplay',
63
+ 'customFields',
64
+ 'filterParams',
65
+ ];
66
+ const OTHER_PROPERTY_DEFAULTS = {
67
+ hideDescribe: null,
68
+ isHideTitle: false,
69
+ titleLayout: null,
70
+ mTitleLayout: null,
71
+ virtualForm: null,
72
+ orderContent: null,
73
+ newSortColumn: null,
74
+ selectColumn: null,
75
+ columnFields: null,
76
+ relateExt: null,
77
+ fieldIds: null,
78
+ showFields: null,
79
+ customFields: null,
80
+ };
81
+ function encode(value) {
82
+ return encodeURIComponent(value);
83
+ }
84
+ function requireSuccess(response, operation) {
85
+ if (response === undefined
86
+ || response === null
87
+ || (response.code !== undefined && response.code !== 200)
88
+ || response.status === false
89
+ || response.success === false
90
+ || response.fail === true) {
91
+ throw new Error(response?.msg || `${operation} 未确认成功`);
92
+ }
93
+ return response;
94
+ }
95
+ function parseObject(value, label) {
96
+ if (value === undefined || value === null || value === '')
97
+ return {};
98
+ if (typeof value === 'object' && !Array.isArray(value))
99
+ return structuredClone(value);
100
+ if (typeof value !== 'string')
101
+ throw new Error(`${label} 不是 JSON 对象`);
102
+ try {
103
+ const parsed = JSON.parse(value);
104
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
105
+ throw new Error();
106
+ return parsed;
107
+ }
108
+ catch {
109
+ throw new Error(`${label} 不是有效 JSON 对象`);
110
+ }
111
+ }
112
+ function pageRecords(response) {
113
+ const records = response?.data?.pageDatas?.result
114
+ ?? response?.data?.data?.records
115
+ ?? response?.data?.records
116
+ ?? [];
117
+ return Array.isArray(records) ? records : [];
118
+ }
119
+ function findComponentConfig(value, fieldId, seen = new Set()) {
120
+ if (!value || typeof value !== 'object' || seen.has(value))
121
+ return null;
122
+ seen.add(value);
123
+ if (!Array.isArray(value)) {
124
+ const object = value;
125
+ if (String(object.fieldId ?? '') === fieldId && object.componentKey)
126
+ return object;
127
+ if (object.config && String(object.config.fieldId ?? '') === fieldId)
128
+ return object.config;
129
+ for (const child of Object.values(object)) {
130
+ const found = findComponentConfig(child, fieldId, seen);
131
+ if (found)
132
+ return found;
133
+ }
134
+ return null;
135
+ }
136
+ for (const child of value) {
137
+ const found = findComponentConfig(child, fieldId, seen);
138
+ if (found)
139
+ return found;
140
+ }
141
+ return null;
142
+ }
143
+ function componentType(componentKey, fieldType) {
144
+ const type = COMPONENT_TYPES[componentKey] ?? COMPONENT_TYPES[fieldType];
145
+ if (!type)
146
+ throw new Error(`字段类型 ${componentKey || fieldType || '(空)'} 尚无可靠的数据过滤契约`);
147
+ return type;
148
+ }
149
+ function normalizeTargetFields(fields) {
150
+ return fields.filter((field) => {
151
+ const fieldId = String(field.fieldId ?? '');
152
+ return fieldId in FIXED_FIELDS || /^\d+$/.test(fieldId);
153
+ }).map((field) => {
154
+ const fieldId = String(field.fieldId ?? '');
155
+ const fixed = fieldId in FIXED_FIELDS;
156
+ const fixedConfig = FIXED_FIELDS[fieldId];
157
+ const componentKey = fixed
158
+ ? fixedConfig.componentKey
159
+ : String(field.fieldKey || field.componentKey || field.fieldType || '');
160
+ const fieldType = String(field.fieldType || componentKey);
161
+ return {
162
+ fieldId,
163
+ fieldName: String(field.fieldName || field.title || fieldId),
164
+ fieldType,
165
+ componentKey,
166
+ componentType: fixed ? fixedConfig.componentType : componentType(componentKey, fieldType),
167
+ fixed,
168
+ };
169
+ }).filter((field) => field.fieldId);
170
+ }
171
+ function resolveField(fields, selector) {
172
+ const byId = fields.filter((field) => field.fieldId === selector);
173
+ if (byId.length === 1)
174
+ return byId[0];
175
+ const byName = fields.filter((field) => field.fieldName === selector);
176
+ if (byName.length === 1)
177
+ return byName[0];
178
+ if (byName.length > 1)
179
+ throw new Error(`目标字段名 "${selector}" 不唯一,请改用 fieldId`);
180
+ throw new Error(`目标关联表单中不存在字段 "${selector}"`);
181
+ }
182
+ function allowedOperators(field) {
183
+ return field.fixed ? (FIXED_OPERATORS[field.fieldId] ?? []) : CUSTOM_OPERATORS[field.componentType];
184
+ }
185
+ function validateOperator(field, operator) {
186
+ const allowed = allowedOperators(field);
187
+ if (!allowed.includes(operator)) {
188
+ throw new Error(`字段 ${field.fieldName} (${field.componentKey}) 不支持条件 ${operator};可选值: ${allowed.join(', ')}`);
189
+ }
190
+ }
191
+ function asRange(value, fieldName, keys) {
192
+ if (Array.isArray(value) && value.length === 2)
193
+ return [value[0], value[1]];
194
+ if (value && typeof value === 'object') {
195
+ const object = value;
196
+ if (keys[0] in object && keys[1] in object)
197
+ return [object[keys[0]], object[keys[1]]];
198
+ }
199
+ throw new Error(`字段 ${fieldName} 的区间值必须是 [起始,结束] 或 {"${keys[0]}":...,"${keys[1]}":...}`);
200
+ }
201
+ function scalarValue(value, fieldName) {
202
+ if (value === undefined || value === null || typeof value === 'object') {
203
+ throw new Error(`字段 ${fieldName} 需要单个常量值`);
204
+ }
205
+ return value;
206
+ }
207
+ function arrayValue(value, fieldName) {
208
+ if (value === undefined || value === null)
209
+ throw new Error(`字段 ${fieldName} 需要至少一个值`);
210
+ const values = Array.isArray(value) ? value : [value];
211
+ if (!values.length)
212
+ throw new Error(`字段 ${fieldName} 需要至少一个值`);
213
+ return values;
214
+ }
215
+ async function getOptionModels(client, baseUrl, formId, field) {
216
+ if (!formId)
217
+ return [];
218
+ const response = requireSuccess(await client.post(`${baseUrl}${GET_FIELD_PATH}`, {
219
+ module: 'ebuilderform',
220
+ formTableField: { formField: { id: field.fieldId, form: { id: formId } } },
221
+ }, { ebbusinessid: formId }), 'target option field query');
222
+ const options = response?.data?.options;
223
+ return Array.isArray(options) ? options : [];
224
+ }
225
+ function optionId(option) {
226
+ return String(option.valueKey ?? option.selectionId ?? option.id ?? '');
227
+ }
228
+ async function resolveOptionValues(client, baseUrl, targetFormId, field, value) {
229
+ const requested = arrayValue(value, field.fieldName).map(String);
230
+ const options = await getOptionModels(client, baseUrl, targetFormId, field);
231
+ const content = requested.map((item) => {
232
+ const matches = options.filter((option) => optionId(option) === item || String(option.name ?? option.content ?? '') === item);
233
+ if (matches.length > 1)
234
+ throw new Error(`字段 ${field.fieldName} 的选项 "${item}" 不唯一,请改用 valueKey`);
235
+ if (matches.length === 1) {
236
+ const option = matches[0];
237
+ const id = optionId(option);
238
+ return {
239
+ ...structuredClone(option),
240
+ id,
241
+ content: String(option.content ?? option.name ?? id),
242
+ name: String(option.name ?? option.content ?? id),
243
+ };
244
+ }
245
+ if (/^\d{8,}$/.test(item))
246
+ return { id: item, content: item, name: item };
247
+ const available = options.map((option) => `${option.name ?? option.content}(${optionId(option)})`).join('、');
248
+ throw new Error(`字段 ${field.fieldName} 找不到选项 "${item}"${available ? `;可选值: ${available}` : ''}`);
249
+ });
250
+ return { ids: content.map((item) => String(item.id)), content };
251
+ }
252
+ async function compileRule(client, baseUrl, targetFormId, targetFields, input) {
253
+ if (!input || typeof input !== 'object')
254
+ throw new Error('每条过滤规则必须是对象');
255
+ const selector = String(input.field ?? '').trim();
256
+ const operator = String(input.operator ?? '').trim();
257
+ if (!selector)
258
+ throw new Error('过滤规则 field 不能为空');
259
+ if (!operator)
260
+ throw new Error(`字段 ${selector} 的 operator 不能为空`);
261
+ const field = resolveField(targetFields, selector);
262
+ validateOperator(field, operator);
263
+ const emptyOperator = EMPTY_OPERATORS.has(operator);
264
+ if (emptyOperator && input.value !== undefined && input.value !== null && input.value !== '') {
265
+ throw new Error(`条件 ${operator} 不接受 value`);
266
+ }
267
+ if (!emptyOperator && input.value === undefined)
268
+ throw new Error(`字段 ${field.fieldName} 的条件 ${operator} 必须提供 value`);
269
+ const query = {
270
+ freezeComponentKey: `${field.componentKey}@${field.fieldId}`,
271
+ term: operator,
272
+ };
273
+ let normalizedValue = input.value;
274
+ if (!emptyOperator) {
275
+ if (field.componentType === 'number' && operator === 'like') {
276
+ const [min, max] = asRange(input.value, field.fieldName, ['min', 'max']);
277
+ query.content = min;
278
+ query.endContent = max;
279
+ normalizedValue = { min, max };
280
+ }
281
+ else if (field.componentType === 'date') {
282
+ if (operator === 'like') {
283
+ const [start, end] = asRange(input.value, field.fieldName, ['start', 'end']);
284
+ query.content = start;
285
+ query.endContent = end;
286
+ normalizedValue = { start, end };
287
+ }
288
+ else {
289
+ query.content = scalarValue(input.value, field.fieldName);
290
+ }
291
+ if (input.format)
292
+ query.format = input.format;
293
+ }
294
+ else if (field.componentType === 'option') {
295
+ const resolved = await resolveOptionValues(client, baseUrl, targetFormId, field, input.value);
296
+ query.content = resolved.content;
297
+ query.ids = resolved.ids;
298
+ normalizedValue = resolved.ids;
299
+ }
300
+ else if (field.componentType === 'browser') {
301
+ const values = arrayValue(input.value, field.fieldName).map((item) => {
302
+ if (item && typeof item === 'object') {
303
+ const object = item;
304
+ const id = String(object.id ?? object.valueKey ?? '');
305
+ if (!id)
306
+ throw new Error(`字段 ${field.fieldName} 的浏览值对象缺少 id`);
307
+ return { ...structuredClone(object), id };
308
+ }
309
+ const id = String(item);
310
+ return { id, content: id, name: id };
311
+ });
312
+ query.content = values;
313
+ query.ids = values.map((item) => item.id);
314
+ normalizedValue = query.ids;
315
+ }
316
+ else {
317
+ query.content = scalarValue(input.value, field.fieldName);
318
+ }
319
+ }
320
+ let group;
321
+ if (field.fixed) {
322
+ group = `${field.componentKey}s`;
323
+ }
324
+ else {
325
+ group = 'filterFormDatas';
326
+ query.fieldId = field.fieldId;
327
+ query.com_key = field.componentKey;
328
+ }
329
+ const runtime = structuredClone(query);
330
+ delete runtime.freezeComponentKey;
331
+ delete runtime.selectedOptions;
332
+ if (field.componentType === 'option' || field.componentType === 'browser')
333
+ delete runtime.content;
334
+ return {
335
+ group,
336
+ runtime,
337
+ query,
338
+ normalized: {
339
+ fieldId: field.fieldId,
340
+ fieldName: field.fieldName,
341
+ componentKey: field.componentKey,
342
+ componentType: field.componentType,
343
+ operator,
344
+ ...(emptyOperator ? {} : { value: normalizedValue }),
345
+ },
346
+ };
347
+ }
348
+ export async function compileEBuilderFilterRules(client, baseUrl, formId, targetFormId, targetFields, inputs) {
349
+ if (!Array.isArray(inputs))
350
+ throw new Error('rules 必须是 JSON 数组');
351
+ const runtime = {};
352
+ const query = { formId };
353
+ const rules = [];
354
+ for (const input of inputs) {
355
+ const compiled = await compileRule(client, baseUrl, targetFormId, targetFields, input);
356
+ runtime[compiled.group] ??= [];
357
+ query[compiled.group] ??= [];
358
+ runtime[compiled.group].push(compiled.runtime);
359
+ query[compiled.group].push(compiled.query);
360
+ rules.push(compiled.normalized);
361
+ }
362
+ return { runtime, query, rules };
363
+ }
364
+ async function loadContext(client, baseUrl, appId, objId, fieldId, userId, tenantKey) {
365
+ const formsResponse = requireSuccess(await client.get(`${baseUrl}${FORM_LIST_PATH}/${encode(appId)}?apid=${encode(appId)}`, { ebbusinessid: appId }), 'form list');
366
+ const forms = Array.isArray(formsResponse.data) ? formsResponse.data : [];
367
+ const sourceForm = forms.find((form) => String(form.id) === objId);
368
+ const formId = String(sourceForm?.formId ?? '');
369
+ if (!formId)
370
+ throw new Error(`应用 ${appId} 中不存在源表单 ${objId}`);
371
+ const fieldPageResponse = requireSuccess(await client.post(`${baseUrl}${QUERY_FIELD_PAGE_PATH}?apid=${encode(appId)}`, {
372
+ pageNo: 1,
373
+ pageSize: 200,
374
+ module: 'ebuilderform',
375
+ customParam: { appId, objId },
376
+ formFieldSearchEntity: { isDelete: 0, status: 'enable', formId },
377
+ }, { ebbusinessid: formId }), 'source field query');
378
+ const fieldRecord = pageRecords(fieldPageResponse).find((field) => String(field.fieldId) === fieldId);
379
+ if (!fieldRecord)
380
+ throw new Error(`源表单中不存在字段 ${fieldId}`);
381
+ if (String(fieldRecord.type ?? '').toLowerCase() !== 'ebuilder'
382
+ && String(fieldRecord.componentKey ?? '').toLowerCase() !== 'ebuilder') {
383
+ throw new Error(`字段 ${fieldId} 不是 EBuilder 关联字段`);
384
+ }
385
+ const targetObjId = String(fieldRecord.sformId ?? '');
386
+ if (!targetObjId)
387
+ throw new Error(`EBuilder 字段 ${fieldId} 尚未绑定目标表单`);
388
+ const layoutResponse = requireSuccess(await client.post(`${baseUrl}${GET_LAYOUT_PATH}`, {
389
+ module: 'ebuilder',
390
+ formId,
391
+ layoutId: '',
392
+ layoutMultiId: '',
393
+ customParam: {},
394
+ designerParam: { onlyLayout: false },
395
+ form: { id: formId },
396
+ local: true,
397
+ }, { ebbusinessid: formId }), 'form layout query');
398
+ const componentConfig = findComponentConfig(layoutResponse.data?.formLayout, fieldId);
399
+ if (!componentConfig)
400
+ throw new Error(`表单布局中找不到 EBuilder 字段 ${fieldId}`);
401
+ const fieldLayout = layoutResponse.data?.fieldLayout?.[fieldId] ?? {};
402
+ const targetFieldsResponse = requireSuccess(await client.post(`${baseUrl}${QUERY_FIELDS_PATH}`, { objId: targetObjId, userid: userId, tenantKey }), 'target fields query');
403
+ const targetFields = normalizeTargetFields(targetFieldsResponse.data?.mainFields ?? []);
404
+ if (!targetFields.length)
405
+ throw new Error(`目标表单 ${targetObjId} 没有可读取字段`);
406
+ const targetForm = forms.find((form) => String(form.id) === targetObjId);
407
+ return {
408
+ appId,
409
+ objId,
410
+ formId,
411
+ formTableId: String(fieldRecord.formTableId ?? componentConfig.formTableId ?? ''),
412
+ fieldId,
413
+ fieldRecord,
414
+ componentConfig,
415
+ fieldLayout,
416
+ targetObjId,
417
+ targetFormName: String(fieldRecord.formName ?? targetForm?.objName ?? targetForm?.name ?? targetObjId),
418
+ targetFormId: String(targetForm?.formId ?? ''),
419
+ targetFields,
420
+ };
421
+ }
422
+ function normalizeRuleValue(item, field) {
423
+ if (EMPTY_OPERATORS.has(String(item.term ?? '')))
424
+ return undefined;
425
+ if (field.componentType === 'number' && item.endContent !== undefined) {
426
+ return { min: item.content, max: item.endContent };
427
+ }
428
+ if (field.componentType === 'date' && item.endContent !== undefined) {
429
+ return { start: item.content, end: item.endContent };
430
+ }
431
+ if (field.componentType === 'option' || field.componentType === 'browser') {
432
+ if (Array.isArray(item.ids))
433
+ return item.ids.map(String);
434
+ if (Array.isArray(item.content)) {
435
+ return item.content.map((entry) => String(entry?.id ?? entry?.valueKey ?? entry));
436
+ }
437
+ }
438
+ return item.content;
439
+ }
440
+ function decodeRules(query, fields) {
441
+ const byId = new Map(fields.map((field) => [field.fieldId, field]));
442
+ const result = [];
443
+ for (const [group, value] of Object.entries(query)) {
444
+ if (group === 'formId' || !Array.isArray(value))
445
+ continue;
446
+ for (const item of value) {
447
+ if (!item || typeof item !== 'object')
448
+ continue;
449
+ const frozen = String(item.freezeComponentKey ?? '');
450
+ const frozenParts = frozen.split('@');
451
+ const id = String(item.fieldId ?? frozenParts[1] ?? group.replace(/s$/, ''));
452
+ const field = byId.get(id);
453
+ if (!field)
454
+ continue;
455
+ const normalizedValue = normalizeRuleValue(item, field);
456
+ result.push({
457
+ fieldId: field.fieldId,
458
+ fieldName: field.fieldName,
459
+ componentKey: field.componentKey,
460
+ componentType: field.componentType,
461
+ operator: String(item.term ?? ''),
462
+ ...(normalizedValue === undefined ? {} : { value: normalizedValue }),
463
+ });
464
+ }
465
+ }
466
+ return result;
467
+ }
468
+ function snapshotFromContext(context) {
469
+ const other = parseObject(context.fieldLayout.otherProperties, 'fieldLayout.otherProperties');
470
+ const filterParams = parseObject(other.filterParams, 'filterParams');
471
+ const filterQueryParams = parseObject(other.filterQueryParams, 'filterQueryParams');
472
+ const logic = other.conditionOperate === 'or' ? 'or' : 'and';
473
+ return {
474
+ appId: context.appId,
475
+ objId: context.objId,
476
+ formId: context.formId,
477
+ fieldId: context.fieldId,
478
+ fieldName: String(context.fieldRecord.title ?? context.componentConfig.title ?? context.fieldId),
479
+ targetObjId: context.targetObjId,
480
+ targetFormName: context.targetFormName,
481
+ logic,
482
+ ...(typeof other.filterIsNull === 'boolean' ? { fillNull: other.filterIsNull } : {}),
483
+ filterParams,
484
+ filterQueryParams,
485
+ rules: decodeRules(filterQueryParams, context.targetFields),
486
+ };
487
+ }
488
+ export async function getEBuilderFieldFilter(client, baseUrl, appId, objId, fieldId, options) {
489
+ const context = await loadContext(client, baseUrl, appId, objId, fieldId, options.userId, options.tenantKey);
490
+ return snapshotFromContext(context);
491
+ }
492
+ export async function setEBuilderFieldFilter(client, baseUrl, appId, objId, fieldId, inputs, options) {
493
+ const context = await loadContext(client, baseUrl, appId, objId, fieldId, options.userId, options.tenantKey);
494
+ const before = snapshotFromContext(context);
495
+ const logic = options.logic ?? before.logic;
496
+ if (logic !== 'and' && logic !== 'or')
497
+ throw new Error('logic 必须是 and 或 or');
498
+ const compiled = await compileEBuilderFilterRules(client, baseUrl, context.formId, context.targetFormId, context.targetFields, inputs);
499
+ const currentOther = parseObject(context.fieldLayout.otherProperties, 'fieldLayout.otherProperties');
500
+ const currentView = parseObject(context.fieldLayout.viewConfig, 'fieldLayout.viewConfig');
501
+ const otherProperties = {
502
+ ...OTHER_PROPERTY_DEFAULTS,
503
+ ...currentOther,
504
+ isHideTitle: currentOther.isHideTitle ?? context.componentConfig.isHideTitle ?? false,
505
+ virtualForm: currentOther.virtualForm ?? context.componentConfig.virtualForm ?? null,
506
+ relateExt: currentOther.relateExt ?? context.componentConfig.relateExt ?? null,
507
+ customFields: currentOther.customFields ?? context.componentConfig.customFields ?? null,
508
+ conditionOperate: logic,
509
+ filterParams: JSON.stringify(compiled.runtime),
510
+ filterQueryParams: JSON.stringify(compiled.query),
511
+ };
512
+ if (options.fillNull !== undefined)
513
+ otherProperties.filterIsNull = options.fillNull;
514
+ const viewConfig = {
515
+ display: context.componentConfig.display ?? true,
516
+ readOnly: context.componentConfig.readOnly ?? false,
517
+ required: context.componentConfig.required ?? false,
518
+ disableEdit: context.componentConfig.disableEdit ?? false,
519
+ ...currentView,
520
+ };
521
+ const allOtherProperties = {
522
+ ...context.fieldRecord,
523
+ ...context.componentConfig,
524
+ ...viewConfig,
525
+ ...otherProperties,
526
+ hasLayoutSetting: true,
527
+ };
528
+ const payload = {
529
+ module: 'ebuilderform',
530
+ formId: context.formId,
531
+ configType: 'field',
532
+ config: {
533
+ fieldType: String(context.fieldRecord.type ?? context.componentConfig.type ?? 'EBuilder'),
534
+ fieldId,
535
+ viewConfig: JSON.stringify(viewConfig),
536
+ otherProperties: JSON.stringify(otherProperties),
537
+ checked: JSON.stringify(CHECKED_LAYOUT_ITEMS),
538
+ allOtherProperties: JSON.stringify(allOtherProperties),
539
+ },
540
+ customParam: { appId, objId },
541
+ };
542
+ requireSuccess(await client.post(`${baseUrl}${SAVE_FIELD_LAYOUT_PATH}?apid=${encode(appId)}`, payload, { ebbusinessid: context.formId }), 'EBuilder field filter save');
543
+ const after = await getEBuilderFieldFilter(client, baseUrl, appId, objId, fieldId, options);
544
+ if (after.logic !== logic
545
+ || !isDeepStrictEqual(after.filterParams, compiled.runtime)
546
+ || !isDeepStrictEqual(after.filterQueryParams, compiled.query)) {
547
+ throw new Error('数据过滤保存后独立回读不一致');
548
+ }
549
+ if (options.fillNull !== undefined && after.fillNull !== options.fillNull) {
550
+ throw new Error('filterIsNull 保存后独立回读不一致');
551
+ }
552
+ return {
553
+ ...after,
554
+ rules: compiled.rules,
555
+ ruleCount: compiled.rules.length,
556
+ persisted: true,
557
+ };
558
+ }
559
+ export async function clearEBuilderFieldFilter(client, baseUrl, appId, objId, fieldId, options) {
560
+ return setEBuilderFieldFilter(client, baseUrl, appId, objId, fieldId, [], options);
561
+ }
562
+ //# sourceMappingURL=form-ebuilder-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-ebuilder-filter.js","sourceRoot":"","sources":["../../src/services/form-ebuilder-filter.ts"],"names":[],"mappings":"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"}