openxiangda 1.0.264 → 2.0.0-alpha.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 (537) hide show
  1. package/README.md +11 -666
  2. package/bin/run.js +11 -0
  3. package/dist/browser/AuthoritativeSelector.d.ts +37 -0
  4. package/dist/browser/AuthoritativeSelector.d.ts.map +1 -0
  5. package/dist/browser/AuthoritativeSelector.js +357 -0
  6. package/dist/browser/AuthoritativeSelector.js.map +1 -0
  7. package/dist/browser/FilePreviewPage.d.ts +2 -0
  8. package/dist/browser/FilePreviewPage.d.ts.map +1 -0
  9. package/dist/browser/FilePreviewPage.js +191 -0
  10. package/dist/browser/FilePreviewPage.js.map +1 -0
  11. package/dist/browser/Shell.d.ts +6 -0
  12. package/dist/browser/Shell.d.ts.map +1 -0
  13. package/dist/browser/Shell.js +198 -0
  14. package/dist/browser/Shell.js.map +1 -0
  15. package/dist/browser/appearance.d.ts +12 -0
  16. package/dist/browser/appearance.d.ts.map +1 -0
  17. package/dist/browser/appearance.js +100 -0
  18. package/dist/browser/appearance.js.map +1 -0
  19. package/dist/browser/application.d.ts +8 -0
  20. package/dist/browser/application.d.ts.map +1 -0
  21. package/dist/browser/application.js +42 -0
  22. package/dist/browser/application.js.map +1 -0
  23. package/dist/browser/components/platform-fields/AddressField.d.ts +12 -0
  24. package/dist/browser/components/platform-fields/AddressField.d.ts.map +1 -0
  25. package/dist/browser/components/platform-fields/AddressField.js +179 -0
  26. package/dist/browser/components/platform-fields/AddressField.js.map +1 -0
  27. package/dist/browser/components/platform-fields/AttachmentFileList.d.ts +9 -0
  28. package/dist/browser/components/platform-fields/AttachmentFileList.d.ts.map +1 -0
  29. package/dist/browser/components/platform-fields/AttachmentFileList.js +164 -0
  30. package/dist/browser/components/platform-fields/AttachmentFileList.js.map +1 -0
  31. package/dist/browser/components/platform-fields/CascadeField.d.ts +13 -0
  32. package/dist/browser/components/platform-fields/CascadeField.d.ts.map +1 -0
  33. package/dist/browser/components/platform-fields/CascadeField.js +14 -0
  34. package/dist/browser/components/platform-fields/CascadeField.js.map +1 -0
  35. package/dist/browser/components/platform-fields/DateTimeField.d.ts +16 -0
  36. package/dist/browser/components/platform-fields/DateTimeField.d.ts.map +1 -0
  37. package/dist/browser/components/platform-fields/DateTimeField.js +51 -0
  38. package/dist/browser/components/platform-fields/DateTimeField.js.map +1 -0
  39. package/dist/browser/components/platform-fields/JsonField.d.ts +11 -0
  40. package/dist/browser/components/platform-fields/JsonField.d.ts.map +1 -0
  41. package/dist/browser/components/platform-fields/JsonField.js +40 -0
  42. package/dist/browser/components/platform-fields/JsonField.js.map +1 -0
  43. package/dist/browser/components/platform-fields/LocationField.d.ts +11 -0
  44. package/dist/browser/components/platform-fields/LocationField.d.ts.map +1 -0
  45. package/dist/browser/components/platform-fields/LocationField.js +73 -0
  46. package/dist/browser/components/platform-fields/LocationField.js.map +1 -0
  47. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts +12 -0
  48. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.d.ts.map +1 -0
  49. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js +269 -0
  50. package/dist/browser/components/platform-fields/PlatformDirectoryPicker.js.map +1 -0
  51. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts +12 -0
  52. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts.map +1 -0
  53. package/dist/browser/components/platform-fields/ResourceReferenceField.js +22 -0
  54. package/dist/browser/components/platform-fields/ResourceReferenceField.js.map +1 -0
  55. package/dist/browser/components/platform-fields/RichTextField.d.ts +14 -0
  56. package/dist/browser/components/platform-fields/RichTextField.d.ts.map +1 -0
  57. package/dist/browser/components/platform-fields/RichTextField.js +214 -0
  58. package/dist/browser/components/platform-fields/RichTextField.js.map +1 -0
  59. package/dist/browser/components/platform-fields/SignatureField.d.ts +15 -0
  60. package/dist/browser/components/platform-fields/SignatureField.d.ts.map +1 -0
  61. package/dist/browser/components/platform-fields/SignatureField.js +179 -0
  62. package/dist/browser/components/platform-fields/SignatureField.js.map +1 -0
  63. package/dist/browser/components/platform-fields/SubtableField.d.ts +18 -0
  64. package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -0
  65. package/dist/browser/components/platform-fields/SubtableField.js +236 -0
  66. package/dist/browser/components/platform-fields/SubtableField.js.map +1 -0
  67. package/dist/browser/components/platform-fields/address-value.d.ts +13 -0
  68. package/dist/browser/components/platform-fields/address-value.d.ts.map +1 -0
  69. package/dist/browser/components/platform-fields/address-value.js +70 -0
  70. package/dist/browser/components/platform-fields/address-value.js.map +1 -0
  71. package/dist/browser/components/platform-fields/cascade-value.d.ts +6 -0
  72. package/dist/browser/components/platform-fields/cascade-value.d.ts.map +1 -0
  73. package/dist/browser/components/platform-fields/cascade-value.js +47 -0
  74. package/dist/browser/components/platform-fields/cascade-value.js.map +1 -0
  75. package/dist/browser/components/platform-fields/directory-value.d.ts +7 -0
  76. package/dist/browser/components/platform-fields/directory-value.d.ts.map +1 -0
  77. package/dist/browser/components/platform-fields/directory-value.js +35 -0
  78. package/dist/browser/components/platform-fields/directory-value.js.map +1 -0
  79. package/dist/browser/components/platform-fields/field-form-codec.d.ts +10 -0
  80. package/dist/browser/components/platform-fields/field-form-codec.d.ts.map +1 -0
  81. package/dist/browser/components/platform-fields/field-form-codec.js +82 -0
  82. package/dist/browser/components/platform-fields/field-form-codec.js.map +1 -0
  83. package/dist/browser/components/platform-fields/location-value.d.ts +20 -0
  84. package/dist/browser/components/platform-fields/location-value.d.ts.map +1 -0
  85. package/dist/browser/components/platform-fields/location-value.js +57 -0
  86. package/dist/browser/components/platform-fields/location-value.js.map +1 -0
  87. package/dist/browser/components/platform-fields/resource-query.d.ts +14 -0
  88. package/dist/browser/components/platform-fields/resource-query.d.ts.map +1 -0
  89. package/dist/browser/components/platform-fields/resource-query.js +102 -0
  90. package/dist/browser/components/platform-fields/resource-query.js.map +1 -0
  91. package/dist/browser/components/platform-fields/rich-text-value.d.ts +12 -0
  92. package/dist/browser/components/platform-fields/rich-text-value.d.ts.map +1 -0
  93. package/dist/browser/components/platform-fields/rich-text-value.js +83 -0
  94. package/dist/browser/components/platform-fields/rich-text-value.js.map +1 -0
  95. package/dist/browser/components/platform-fields/subtable-value.d.ts +31 -0
  96. package/dist/browser/components/platform-fields/subtable-value.d.ts.map +1 -0
  97. package/dist/browser/components/platform-fields/subtable-value.js +120 -0
  98. package/dist/browser/components/platform-fields/subtable-value.js.map +1 -0
  99. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts +8 -0
  100. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts.map +1 -0
  101. package/dist/browser/components/resource/GeneratedResourceCrud.js +580 -0
  102. package/dist/browser/components/resource/GeneratedResourceCrud.js.map +1 -0
  103. package/dist/browser/components/resource/ResourceBatchActions.d.ts +25 -0
  104. package/dist/browser/components/resource/ResourceBatchActions.d.ts.map +1 -0
  105. package/dist/browser/components/resource/ResourceBatchActions.js +168 -0
  106. package/dist/browser/components/resource/ResourceBatchActions.js.map +1 -0
  107. package/dist/browser/components/resource/StandardResourcePages.d.ts +57 -0
  108. package/dist/browser/components/resource/StandardResourcePages.d.ts.map +1 -0
  109. package/dist/browser/components/resource/StandardResourcePages.js +89 -0
  110. package/dist/browser/components/resource/StandardResourcePages.js.map +1 -0
  111. package/dist/browser/components/resource/SurfaceFields.d.ts +88 -0
  112. package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -0
  113. package/dist/browser/components/resource/SurfaceFields.js +497 -0
  114. package/dist/browser/components/resource/SurfaceFields.js.map +1 -0
  115. package/dist/browser/components/resource/generated-resource-definition.d.ts +19 -0
  116. package/dist/browser/components/resource/generated-resource-definition.d.ts.map +1 -0
  117. package/dist/browser/components/resource/generated-resource-definition.js +2 -0
  118. package/dist/browser/components/resource/generated-resource-definition.js.map +1 -0
  119. package/dist/browser/components/resource/resource-import.d.ts +15 -0
  120. package/dist/browser/components/resource/resource-import.d.ts.map +1 -0
  121. package/dist/browser/components/resource/resource-import.js +197 -0
  122. package/dist/browser/components/resource/resource-import.js.map +1 -0
  123. package/dist/browser/data-provider.d.ts +4 -0
  124. package/dist/browser/data-provider.d.ts.map +1 -0
  125. package/dist/browser/data-provider.js +45 -0
  126. package/dist/browser/data-provider.js.map +1 -0
  127. package/dist/browser/platform-client.d.ts +81 -0
  128. package/dist/browser/platform-client.d.ts.map +1 -0
  129. package/dist/browser/platform-client.js +422 -0
  130. package/dist/browser/platform-client.js.map +1 -0
  131. package/dist/browser/resource-definitions.d.ts +8 -0
  132. package/dist/browser/resource-definitions.d.ts.map +1 -0
  133. package/dist/browser/resource-definitions.js +14 -0
  134. package/dist/browser/resource-definitions.js.map +1 -0
  135. package/dist/browser/runtime-meta.d.ts +22 -0
  136. package/dist/browser/runtime-meta.d.ts.map +1 -0
  137. package/dist/browser/runtime-meta.js +79 -0
  138. package/dist/browser/runtime-meta.js.map +1 -0
  139. package/dist/browser/runtime.d.ts +13 -0
  140. package/dist/browser/runtime.d.ts.map +1 -0
  141. package/dist/browser/runtime.js +47 -0
  142. package/dist/browser/runtime.js.map +1 -0
  143. package/dist/browser/styles.css +1941 -0
  144. package/dist/config.d.ts +2 -0
  145. package/dist/config.d.ts.map +1 -0
  146. package/dist/config.js +2 -0
  147. package/dist/config.js.map +1 -0
  148. package/dist/core.d.ts +6 -0
  149. package/dist/core.d.ts.map +1 -0
  150. package/dist/core.js +4 -0
  151. package/dist/core.js.map +1 -0
  152. package/dist/field-kit.d.ts +22 -0
  153. package/dist/field-kit.d.ts.map +1 -0
  154. package/dist/field-kit.js +22 -0
  155. package/dist/field-kit.js.map +1 -0
  156. package/dist/index.d.ts +2 -0
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +2 -0
  159. package/dist/index.js.map +1 -0
  160. package/dist/nest.d.ts +10 -0
  161. package/dist/nest.d.ts.map +1 -0
  162. package/dist/nest.js +9 -0
  163. package/dist/nest.js.map +1 -0
  164. package/dist/react.d.ts +12 -0
  165. package/dist/react.d.ts.map +1 -0
  166. package/dist/react.js +11 -0
  167. package/dist/react.js.map +1 -0
  168. package/dist/testing.d.ts +4 -0
  169. package/dist/testing.d.ts.map +1 -0
  170. package/dist/testing.js +4 -0
  171. package/dist/testing.js.map +1 -0
  172. package/package.json +95 -200
  173. package/skills/manifest.json +10 -0
  174. package/skills/openxiangda-v2/SKILL.md +55 -0
  175. package/skills/openxiangda-v2/references/architecture.md +7 -0
  176. package/skills/openxiangda-v2/references/backend.md +116 -0
  177. package/skills/openxiangda-v2/references/data-authz.md +93 -0
  178. package/skills/openxiangda-v2/references/delivery.md +11 -0
  179. package/skills/openxiangda-v2/references/discovery.md +15 -0
  180. package/skills/openxiangda-v2/references/frontend.md +10 -0
  181. package/skills/openxiangda-v2/references/testing.md +16 -0
  182. package/skills/openxiangda-v2/references/workflow-notification.md +69 -0
  183. package/skills/openxiangda-v2/references/workspace.md +21 -0
  184. package/bin/openxiangda.js +0 -26
  185. package/lib/app-function-invoke.js +0 -28
  186. package/lib/application-environments.js +0 -1134
  187. package/lib/change-baseline.js +0 -1359
  188. package/lib/cli.js +0 -31084
  189. package/lib/config.js +0 -450
  190. package/lib/content-cache.js +0 -97
  191. package/lib/delivery-v2-cli.js +0 -329
  192. package/lib/delivery-v2-executor.js +0 -1703
  193. package/lib/delivery-v2-package.js +0 -1176
  194. package/lib/dependency-capsule.js +0 -246
  195. package/lib/design-gates.js +0 -668
  196. package/lib/design-review.js +0 -220
  197. package/lib/developer-center.js +0 -160
  198. package/lib/form-field-contract.js +0 -79
  199. package/lib/form-schema-loader.js +0 -181
  200. package/lib/git-remote-identity.js +0 -89
  201. package/lib/http.js +0 -196
  202. package/lib/integration-bundle.js +0 -225
  203. package/lib/js-code-build.js +0 -175
  204. package/lib/open-api.js +0 -256
  205. package/lib/policy.js +0 -137
  206. package/lib/publish-context.js +0 -98
  207. package/lib/publish-lease-heartbeat.js +0 -182
  208. package/lib/publish-lease.js +0 -221
  209. package/lib/release-error-classification.js +0 -41
  210. package/lib/release-explain.js +0 -75
  211. package/lib/release-mainline.js +0 -654
  212. package/lib/release-plan.js +0 -550
  213. package/lib/release-telemetry.js +0 -182
  214. package/lib/resource-binding-contract.js +0 -210
  215. package/lib/role-resolution.js +0 -57
  216. package/lib/runtime-lineage.js +0 -326
  217. package/lib/sdd.js +0 -3306
  218. package/lib/skills.js +0 -453
  219. package/lib/source-dependencies.js +0 -921
  220. package/lib/task-status.js +0 -330
  221. package/lib/utils.js +0 -178
  222. package/lib/workspace-bootstrap.js +0 -268
  223. package/lib/workspace-init.js +0 -202
  224. package/lib/worktree-cleanup.js +0 -631
  225. package/lib/worktree-owner.js +0 -354
  226. package/openxiangda-skills/SKILL.md +0 -226
  227. package/openxiangda-skills/references/architecture-design.md +0 -409
  228. package/openxiangda-skills/references/architecture-patterns.md +0 -264
  229. package/openxiangda-skills/references/automation-v3.md +0 -349
  230. package/openxiangda-skills/references/best-practices.md +0 -272
  231. package/openxiangda-skills/references/component-guide.md +0 -287
  232. package/openxiangda-skills/references/connector-resources.md +0 -80
  233. package/openxiangda-skills/references/data-views.md +0 -360
  234. package/openxiangda-skills/references/forms/component-registry.md +0 -90
  235. package/openxiangda-skills/references/forms/form-schema.md +0 -146
  236. package/openxiangda-skills/references/forms/layout-and-rules.md +0 -24
  237. package/openxiangda-skills/references/notifications.md +0 -227
  238. package/openxiangda-skills/references/openxiangda-api.md +0 -971
  239. package/openxiangda-skills/references/pages/app-shell.md +0 -66
  240. package/openxiangda-skills/references/pages/page-sdk.md +0 -401
  241. package/openxiangda-skills/references/pages/publish-flow.md +0 -84
  242. package/openxiangda-skills/references/pages/workspace-structure.md +0 -41
  243. package/openxiangda-skills/references/permission-design-patterns.md +0 -313
  244. package/openxiangda-skills/references/permissions-settings.md +0 -468
  245. package/openxiangda-skills/references/platform-data-model.md +0 -340
  246. package/openxiangda-skills/references/resource-manifest-cheatsheet.md +0 -936
  247. package/openxiangda-skills/references/school-contact-relations.md +0 -224
  248. package/openxiangda-skills/references/style-system.md +0 -218
  249. package/openxiangda-skills/references/troubleshooting.md +0 -271
  250. package/openxiangda-skills/references/workflow-v3.md +0 -441
  251. package/openxiangda-skills/references/workspace-state.md +0 -115
  252. package/openxiangda-skills/skills/openxiangda-app/SKILL.md +0 -118
  253. package/openxiangda-skills/skills/openxiangda-architecture-design/SKILL.md +0 -137
  254. package/openxiangda-skills/skills/openxiangda-core/SKILL.md +0 -222
  255. package/openxiangda-skills/skills/openxiangda-form/SKILL.md +0 -184
  256. package/openxiangda-skills/skills/openxiangda-inspect/SKILL.md +0 -63
  257. package/openxiangda-skills/skills/openxiangda-open-api/SKILL.md +0 -57
  258. package/openxiangda-skills/skills/openxiangda-open-api/agents/openai.yaml +0 -4
  259. package/openxiangda-skills/skills/openxiangda-open-api/references/backend-authentication.md +0 -63
  260. package/openxiangda-skills/skills/openxiangda-open-api/references/dingtalk-api.openapi.json +0 -15653
  261. package/openxiangda-skills/skills/openxiangda-page/SKILL.md +0 -154
  262. package/openxiangda-skills/skills/openxiangda-permission-settings/SKILL.md +0 -209
  263. package/openxiangda-skills/skills/openxiangda-workflow-automation/SKILL.md +0 -201
  264. package/packages/sdk/bin/lowcode-workspace.mjs +0 -4
  265. package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.mts +0 -1292
  266. package/packages/sdk/dist/ProcessPreview-DSUIJi5V.d.ts +0 -1292
  267. package/packages/sdk/dist/build/index.cjs +0 -1
  268. package/packages/sdk/dist/build/index.d.mts +0 -60
  269. package/packages/sdk/dist/build/index.d.ts +0 -60
  270. package/packages/sdk/dist/build/index.mjs +0 -1
  271. package/packages/sdk/dist/components/index.cjs +0 -148
  272. package/packages/sdk/dist/components/index.d.mts +0 -970
  273. package/packages/sdk/dist/components/index.d.ts +0 -970
  274. package/packages/sdk/dist/components/index.mjs +0 -148
  275. package/packages/sdk/dist/dataManagementApi-Ro9itwm8.d.ts +0 -142
  276. package/packages/sdk/dist/dataManagementApi-p_HOhQnA.d.mts +0 -142
  277. package/packages/sdk/dist/runtime/index.cjs +0 -148
  278. package/packages/sdk/dist/runtime/index.d.mts +0 -171
  279. package/packages/sdk/dist/runtime/index.d.ts +0 -171
  280. package/packages/sdk/dist/runtime/index.mjs +0 -148
  281. package/packages/sdk/dist/runtime/react.cjs +0 -148
  282. package/packages/sdk/dist/runtime/react.d.mts +0 -3202
  283. package/packages/sdk/dist/runtime/react.d.ts +0 -3202
  284. package/packages/sdk/dist/runtime/react.mjs +0 -148
  285. package/packages/sdk/dist/styles/antd-theme.cjs +0 -1
  286. package/packages/sdk/dist/styles/antd-theme.d.mts +0 -6
  287. package/packages/sdk/dist/styles/antd-theme.d.ts +0 -6
  288. package/packages/sdk/dist/styles/antd-theme.mjs +0 -1
  289. package/packages/sdk/dist/styles/tailwind-preset.cjs +0 -1
  290. package/packages/sdk/dist/styles/tailwind-preset.d.mts +0 -74
  291. package/packages/sdk/dist/styles/tailwind-preset.d.ts +0 -74
  292. package/packages/sdk/dist/styles/tailwind-preset.mjs +0 -1
  293. package/packages/sdk/dist/styles/tokens.css +0 -74
  294. package/packages/sdk/dist/workflow/index.cjs +0 -3
  295. package/packages/sdk/dist/workflow/index.d.mts +0 -291
  296. package/packages/sdk/dist/workflow/index.d.ts +0 -291
  297. package/packages/sdk/dist/workflow/index.mjs +0 -3
  298. package/packages/sdk/source/admin-list/AdminList.tsx +0 -1734
  299. package/packages/sdk/source/admin-list/README.md +0 -12
  300. package/packages/sdk/source/admin-list/dataSources.ts +0 -345
  301. package/packages/sdk/source/admin-list/index.ts +0 -42
  302. package/packages/sdk/source/admin-list/preferences.ts +0 -174
  303. package/packages/sdk/source/admin-list/types.ts +0 -273
  304. package/packages/sdk/src/build-source/README.md +0 -9
  305. package/packages/sdk/src/build-source/bin/lowcode-workspace.mjs +0 -7
  306. package/packages/sdk/src/build-source/package.json +0 -34
  307. package/packages/sdk/src/build-source/scripts/build-forms.mjs +0 -1129
  308. package/packages/sdk/src/build-source/scripts/build-pages.mjs +0 -897
  309. package/packages/sdk/src/build-source/scripts/build-workspace.mjs +0 -89
  310. package/packages/sdk/src/build-source/scripts/publish-all.mjs +0 -190
  311. package/packages/sdk/src/build-source/scripts/publish-oss.mjs +0 -144
  312. package/packages/sdk/src/build-source/scripts/register-bundle.mjs +0 -1
  313. package/packages/sdk/src/build-source/scripts/register.mjs +0 -362
  314. package/packages/sdk/src/build-source/scripts/sync-schema.mjs +0 -381
  315. package/packages/sdk/src/build-source/scripts/utils/form-api.mjs +0 -1058
  316. package/packages/sdk/src/build-source/scripts/utils/form-runtime-assets.mjs +0 -57
  317. package/packages/sdk/src/build-source/scripts/utils/incremental.mjs +0 -348
  318. package/packages/sdk/src/build-source/scripts/utils/load-config.mjs +0 -331
  319. package/packages/sdk/src/build-source/scripts/utils/mime-types.mjs +0 -70
  320. package/packages/sdk/src/build-source/scripts/utils/namespace-css.mjs +0 -77
  321. package/packages/sdk/src/build-source/scripts/utils/oss-client.mjs +0 -128
  322. package/packages/sdk/src/build-source/scripts/utils/pages.mjs +0 -150
  323. package/packages/sdk/src/build-source/scripts/utils/progress.mjs +0 -57
  324. package/packages/sdk/src/build-source/scripts/utils/publish-oss-patterns.mjs +0 -20
  325. package/packages/sdk/src/build-source/scripts/utils/register-payload.mjs +0 -90
  326. package/packages/sdk/src/build-source/scripts/utils/runtime-css-check.mjs +0 -44
  327. package/packages/sdk/src/build-source/scripts/utils/schema-transform.mjs +0 -142
  328. package/packages/sdk/src/build-source/scripts/utils/static-assets.mjs +0 -165
  329. package/packages/sdk/src/build-source/scripts/utils/tailwind-config.mjs +0 -283
  330. package/packages/sdk/src/build-source/scripts/utils/tailwind-token-warnings.mjs +0 -146
  331. package/packages/sdk/src/build-source/scripts/utils/workspace-style-entry.mjs +0 -29
  332. package/packages/sdk/src/build-source/src/cli.mjs +0 -735
  333. package/policy/openxiangda-policy.json +0 -72
  334. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-form.mdc +0 -24
  335. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-page.mdc +0 -25
  336. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-resources.mdc +0 -32
  337. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda-workflow-automation.mdc +0 -26
  338. package/templates/openxiangda-react-spa/.cursor/rules/openxiangda.mdc +0 -68
  339. package/templates/openxiangda-react-spa/.env.example +0 -4
  340. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-form.md +0 -37
  341. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-page.md +0 -29
  342. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-resources.md +0 -32
  343. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda-workflow-automation.md +0 -34
  344. package/templates/openxiangda-react-spa/.qoder/rules/openxiangda.md +0 -66
  345. package/templates/openxiangda-react-spa/AGENTS.md +0 -192
  346. package/templates/openxiangda-react-spa/DELIVERY.md +0 -43
  347. package/templates/openxiangda-react-spa/app-workspace.config.ts +0 -50
  348. package/templates/openxiangda-react-spa/index.html +0 -12
  349. package/templates/openxiangda-react-spa/package.json +0 -53
  350. package/templates/openxiangda-react-spa/postcss.config.cjs +0 -6
  351. package/templates/openxiangda-react-spa/scripts/build-js-code.mjs +0 -600
  352. package/templates/openxiangda-react-spa/scripts/deploy.mjs +0 -18
  353. package/templates/openxiangda-react-spa/scripts/guard-publish.mjs +0 -21
  354. package/templates/openxiangda-react-spa/src/app/navigation.ts +0 -73
  355. package/templates/openxiangda-react-spa/src/app/router.tsx +0 -146
  356. package/templates/openxiangda-react-spa/src/app/starter-content.ts +0 -144
  357. package/templates/openxiangda-react-spa/src/forms/.gitkeep +0 -1
  358. package/templates/openxiangda-react-spa/src/layouts/AdminShell.tsx +0 -570
  359. package/templates/openxiangda-react-spa/src/main.tsx +0 -21
  360. package/templates/openxiangda-react-spa/src/pages/admin/AdminDashboardPage.tsx +0 -170
  361. package/templates/openxiangda-react-spa/src/pages/admin/LoginLogPage.tsx +0 -425
  362. package/templates/openxiangda-react-spa/src/pages/defaults/DataRoutePage.tsx +0 -36
  363. package/templates/openxiangda-react-spa/src/pages/defaults/FilePreviewRoutePage.tsx +0 -65
  364. package/templates/openxiangda-react-spa/src/pages/defaults/FormRoutePage.tsx +0 -235
  365. package/templates/openxiangda-react-spa/src/pages/public/PublicRegisterPage.tsx +0 -15
  366. package/templates/openxiangda-react-spa/src/pages/states/NotFoundPage.tsx +0 -31
  367. package/templates/openxiangda-react-spa/src/resources/menus/menus.json +0 -22
  368. package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/app-admin.json +0 -8
  369. package/templates/openxiangda-react-spa/src/resources/permissions/page-groups/public-visitor.json +0 -8
  370. package/templates/openxiangda-react-spa/src/resources/public-access/public-register.json +0 -14
  371. package/templates/openxiangda-react-spa/src/resources/roles/roles.json +0 -15
  372. package/templates/openxiangda-react-spa/src/resources/routes/public-register.json +0 -8
  373. package/templates/openxiangda-react-spa/src/runtime/default-page-overrides.tsx +0 -35
  374. package/templates/openxiangda-react-spa/src/runtime/default-routes.ts +0 -16
  375. package/templates/openxiangda-react-spa/src/shared/form-schema.ts +0 -135
  376. package/templates/openxiangda-react-spa/src/shared/mac-admin.tsx +0 -651
  377. package/templates/openxiangda-react-spa/src/shared/ui.tsx +0 -22
  378. package/templates/openxiangda-react-spa/src/styles/index.css +0 -105
  379. package/templates/openxiangda-react-spa/tailwind.config.cjs +0 -37
  380. package/templates/openxiangda-react-spa/tsconfig.app.json +0 -36
  381. package/templates/openxiangda-react-spa/tsconfig.js-code-nodes.json +0 -19
  382. package/templates/openxiangda-react-spa/tsconfig.json +0 -7
  383. package/templates/openxiangda-react-spa/tsconfig.node.json +0 -10
  384. package/templates/openxiangda-react-spa/vite.config.ts +0 -209
  385. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-form.mdc +0 -24
  386. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-page.mdc +0 -21
  387. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-resources.mdc +0 -40
  388. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda-workflow-automation.mdc +0 -21
  389. package/templates/sy-lowcode-app-workspace/.cursor/rules/openxiangda.mdc +0 -81
  390. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-form.md +0 -38
  391. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-page.md +0 -39
  392. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-resources.md +0 -59
  393. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda-workflow-automation.md +0 -46
  394. package/templates/sy-lowcode-app-workspace/.qoder/rules/openxiangda.md +0 -82
  395. package/templates/sy-lowcode-app-workspace/AGENTS.md +0 -158
  396. package/templates/sy-lowcode-app-workspace/DELIVERY.md +0 -43
  397. package/templates/sy-lowcode-app-workspace/app-workspace.config.ts +0 -51
  398. package/templates/sy-lowcode-app-workspace/examples/best-practices/README.md +0 -43
  399. package/templates/sy-lowcode-app-workspace/examples/best-practices/access-governance.md +0 -239
  400. package/templates/sy-lowcode-app-workspace/examples/best-practices/catalog.json +0 -99
  401. package/templates/sy-lowcode-app-workspace/examples/best-practices/decision-guide.md +0 -94
  402. package/templates/sy-lowcode-app-workspace/examples/best-practices/design-style.md +0 -91
  403. package/templates/sy-lowcode-app-workspace/examples/best-practices/module-structure.md +0 -48
  404. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/index.ts +0 -2
  405. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.test.ts +0 -52
  406. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.ts +0 -37
  407. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/types.ts +0 -19
  408. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/index.ts +0 -4
  409. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.test.ts +0 -42
  410. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/permissions.ts +0 -25
  411. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.test.ts +0 -63
  412. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/state-machine.ts +0 -73
  413. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.test.ts +0 -34
  414. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/ticket-query.ts +0 -73
  415. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/service-ticket/types.ts +0 -66
  416. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/page.tsx +0 -1
  417. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/schema.ts +0 -109
  418. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/page.tsx +0 -1
  419. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/customer-profile/schema.ts +0 -92
  420. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/page.tsx +0 -1
  421. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/schema.ts +0 -153
  422. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/page.tsx +0 -1
  423. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/ticket-action-log/schema.ts +0 -65
  424. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/daily_ticket_digest/index.ts +0 -44
  425. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/js-code-nodes/sync_roles_to_platform/index.ts +0 -33
  426. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/App.tsx +0 -8
  427. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/GlassHomeDashboard.tsx +0 -232
  428. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/index.tsx +0 -10
  429. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/page.config.ts +0 -14
  430. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/glass-home-dashboard/styles.css +0 -196
  431. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/App.tsx +0 -7
  432. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/WorkbenchPage.tsx +0 -36
  433. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/ConfigPanel.tsx +0 -34
  434. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/components/PreviewPanel.tsx +0 -17
  435. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/index.tsx +0 -10
  436. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/page.config.ts +0 -9
  437. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/reducer.ts +0 -29
  438. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/interactive-workbench/styles.css +0 -24
  439. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/App.tsx +0 -8
  440. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/MintAnalyticsDashboard.tsx +0 -279
  441. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/index.tsx +0 -10
  442. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/page.config.ts +0 -14
  443. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mint-analytics-dashboard/styles.css +0 -163
  444. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/App.tsx +0 -7
  445. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/MobilePortalShell.tsx +0 -31
  446. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/index.tsx +0 -10
  447. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/modules/MobileHome.tsx +0 -13
  448. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/page.config.ts +0 -14
  449. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/routes.ts +0 -13
  450. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/mobile-portal-shell/styles.css +0 -11
  451. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/App.tsx +0 -8
  452. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/OpsMonitorDashboard.tsx +0 -306
  453. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/index.tsx +0 -10
  454. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/page.config.ts +0 -14
  455. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/ops-monitor-dashboard/styles.css +0 -248
  456. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/App.tsx +0 -7
  457. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/PcPortalShell.tsx +0 -35
  458. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/components/PortalMetric.tsx +0 -11
  459. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/index.tsx +0 -10
  460. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/HomeModule.tsx +0 -25
  461. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/modules/TicketsModule.tsx +0 -14
  462. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/page.config.ts +0 -14
  463. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/routes.ts +0 -19
  464. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/pc-portal-shell/styles.css +0 -35
  465. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/App.tsx +0 -7
  466. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/TicketOpsPage.tsx +0 -105
  467. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketActionTimeline.tsx +0 -22
  468. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketDetailDrawer.tsx +0 -44
  469. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/components/TicketTableActions.tsx +0 -57
  470. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/index.tsx +0 -10
  471. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/page.config.ts +0 -9
  472. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/service-ticket-ops/styles.css +0 -35
  473. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/App.tsx +0 -8
  474. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/WorkOrderListDrawerPage.tsx +0 -371
  475. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/index.tsx +0 -10
  476. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/page.config.ts +0 -14
  477. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/pages/work-order-list-drawer/styles.css +0 -182
  478. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/automation.json +0 -25
  479. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/automations/daily-ticket-digest/trigger.json +0 -9
  480. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/notifications/daily-ticket-digest.json +0 -24
  481. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/form-groups/service-ticket-college.json +0 -21
  482. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/permissions/roles.json +0 -17
  483. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/resources/workflows/expense-approval-workflow.json +0 -48
  484. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/ConfirmAction.tsx +0 -22
  485. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/QueryState.tsx +0 -37
  486. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/StatusTag.tsx +0 -20
  487. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/DashboardPrimitives.tsx +0 -832
  488. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/chartOptions.ts +0 -140
  489. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/sampleData.ts +0 -466
  490. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/styles.css +0 -874
  491. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/components/admin-ui-templates/types.ts +0 -150
  492. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/hooks/useTicketOps.ts +0 -96
  493. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/role-governance.ts +0 -48
  494. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/shared/services/service-ticket.ts +0 -113
  495. package/templates/sy-lowcode-app-workspace/examples/forms/customer/page.tsx +0 -1
  496. package/templates/sy-lowcode-app-workspace/examples/forms/customer/schema.ts +0 -36
  497. package/templates/sy-lowcode-app-workspace/index.html +0 -12
  498. package/templates/sy-lowcode-app-workspace/package.json +0 -58
  499. package/templates/sy-lowcode-app-workspace/postcss.config.cjs +0 -9
  500. package/templates/sy-lowcode-app-workspace/scripts/build-js-code.mjs +0 -600
  501. package/templates/sy-lowcode-app-workspace/scripts/guard-publish.mjs +0 -29
  502. package/templates/sy-lowcode-app-workspace/src/dev/App.tsx +0 -820
  503. package/templates/sy-lowcode-app-workspace/src/forms/.gitkeep +0 -1
  504. package/templates/sy-lowcode-app-workspace/src/forms/README.md +0 -52
  505. package/templates/sy-lowcode-app-workspace/src/index.css +0 -26
  506. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/.gitkeep +0 -1
  507. package/templates/sy-lowcode-app-workspace/src/js-code-nodes/types.d.ts +0 -3
  508. package/templates/sy-lowcode-app-workspace/src/main.tsx +0 -29
  509. package/templates/sy-lowcode-app-workspace/src/pages/.gitkeep +0 -1
  510. package/templates/sy-lowcode-app-workspace/src/runtime/builtin-overrides.tsx +0 -8
  511. package/templates/sy-lowcode-app-workspace/src/shared/form-schema.ts +0 -135
  512. package/templates/sy-lowcode-app-workspace/src/types/app-workspace.types.ts +0 -88
  513. package/templates/sy-lowcode-app-workspace/tailwind.config.cjs +0 -31
  514. package/templates/sy-lowcode-app-workspace/tsconfig.app.json +0 -40
  515. package/templates/sy-lowcode-app-workspace/tsconfig.examples.json +0 -24
  516. package/templates/sy-lowcode-app-workspace/tsconfig.js-code-nodes.json +0 -19
  517. package/templates/sy-lowcode-app-workspace/tsconfig.json +0 -7
  518. package/templates/sy-lowcode-app-workspace/tsconfig.node.json +0 -10
  519. package/templates/sy-lowcode-app-workspace/vite.config.ts +0 -85
  520. package/v2/README.md +0 -35
  521. package/v2/skills/manifest.json +0 -45
  522. package/v2/skills/openxiangda-v1-maintenance/SKILL.md +0 -21
  523. package/v2/skills/openxiangda-v1-maintenance/agents/openai.yaml +0 -4
  524. package/v2/skills/openxiangda-v2/SKILL.md +0 -38
  525. package/v2/skills/openxiangda-v2-architecture/SKILL.md +0 -29
  526. package/v2/skills/openxiangda-v2-architecture/agents/openai.yaml +0 -4
  527. package/v2/skills/openxiangda-v2-backend/SKILL.md +0 -28
  528. package/v2/skills/openxiangda-v2-backend/agents/openai.yaml +0 -4
  529. package/v2/skills/openxiangda-v2-data-authz/SKILL.md +0 -28
  530. package/v2/skills/openxiangda-v2-data-authz/agents/openai.yaml +0 -4
  531. package/v2/skills/openxiangda-v2-delivery/SKILL.md +0 -30
  532. package/v2/skills/openxiangda-v2-delivery/agents/openai.yaml +0 -4
  533. package/v2/skills/openxiangda-v2-frontend/SKILL.md +0 -21
  534. package/v2/skills/openxiangda-v2-frontend/agents/openai.yaml +0 -4
  535. package/v2/skills/openxiangda-v2-workflow-events/SKILL.md +0 -28
  536. package/v2/skills/openxiangda-v2-workflow-events/agents/openai.yaml +0 -4
  537. /package/{v2/skills → skills}/openxiangda-v2/agents/openai.yaml +0 -0
@@ -1,239 +0,0 @@
1
- # Access Governance Pattern
2
-
3
- This example is a generic account and permission governance skeleton. Copy only
4
- the parts required by the selected permission mode. Do not publish this example
5
- directly without changing codes, names, roles, and data scopes.
6
-
7
- Start with:
8
-
9
- ```bash
10
- openxiangda design gates --topic permissions --json
11
- ```
12
-
13
- Choose one mode:
14
-
15
- - `managed-platform-account`: app creates/maintains platform departments,
16
- accounts, and role members.
17
- - `existing-platform-user-assignment`: app assigns existing platform users to
18
- app roles and business scopes.
19
- - `static-role-permission`: fixed roles and permission groups only.
20
- - `query-param-context`: query parameters are only context, filters, or ticket
21
- input; they do not grant sensitive data access.
22
-
23
- ## Resource Closure
24
-
25
- ```text
26
- src/forms/organization_unit/schema.ts
27
- src/forms/system_account/schema.ts
28
- src/forms/role_assignment/schema.ts
29
- src/functions/sync_access_governance/index.ts
30
- src/resources/roles/access-roles.json
31
- src/resources/permissions/page-groups/access-admin-pages.json
32
- src/resources/permissions/form-groups/role_assignment/access-admin.json
33
- ```
34
-
35
- ## Form Skeletons
36
-
37
- `organization_unit` stores business organization units and the platform
38
- department sync result:
39
-
40
- ```ts
41
- export const organizationUnitFields = [
42
- { fieldId: "unitName", label: "组织名称", componentName: "TextField", placeholder: "请输入组织名称" },
43
- { fieldId: "unitCode", label: "组织编码", componentName: "TextField", placeholder: "请输入稳定组织编码" },
44
- { fieldId: "parentUnit", label: "上级组织", componentName: "SelectField", placeholder: "请选择上级组织", options: [] },
45
- { fieldId: "manager", label: "负责人", componentName: "UserSelectField", placeholder: "请选择负责人" },
46
- { fieldId: "platformDeptId", label: "平台部门ID", componentName: "TextField", behavior: "HIDDEN" },
47
- {
48
- fieldId: "syncStatus",
49
- label: "同步状态",
50
- componentName: "SelectField",
51
- behavior: "HIDDEN",
52
- options: [
53
- { label: "待同步", value: "pending" },
54
- { label: "已同步", value: "synced" },
55
- { label: "同步失败", value: "failed" },
56
- ],
57
- },
58
- { fieldId: "syncMessage", label: "同步说明", componentName: "TextAreaField", behavior: "HIDDEN" },
59
- { fieldId: "lastSyncedAt", label: "最后同步时间", componentName: "DateField", behavior: "HIDDEN" },
60
- ];
61
- ```
62
-
63
- `system_account` stores the app-owned account record and the platform user sync
64
- result:
65
-
66
- ```ts
67
- export const systemAccountFields = [
68
- { fieldId: "displayName", label: "姓名", componentName: "TextField", placeholder: "请输入姓名" },
69
- { fieldId: "loginName", label: "登录名", componentName: "TextField", placeholder: "请输入登录名" },
70
- { fieldId: "phone", label: "手机号", componentName: "TextField", placeholder: "请输入手机号" },
71
- { fieldId: "unitCode", label: "所属组织", componentName: "SelectField", placeholder: "请选择所属组织", options: [] },
72
- {
73
- fieldId: "enabled",
74
- label: "账号状态",
75
- componentName: "RadioField",
76
- placeholder: "请选择账号状态",
77
- options: [
78
- { label: "启用", value: "enabled" },
79
- { label: "停用", value: "disabled" },
80
- ],
81
- },
82
- { fieldId: "platformUserId", label: "平台用户ID", componentName: "TextField", behavior: "HIDDEN" },
83
- { fieldId: "platformDeptId", label: "平台部门ID", componentName: "TextField", behavior: "HIDDEN" },
84
- {
85
- fieldId: "syncStatus",
86
- label: "同步状态",
87
- componentName: "SelectField",
88
- behavior: "HIDDEN",
89
- options: [
90
- { label: "待同步", value: "pending" },
91
- { label: "已同步", value: "synced" },
92
- { label: "同步失败", value: "failed" },
93
- ],
94
- },
95
- { fieldId: "lastSyncedAt", label: "最后同步时间", componentName: "DateField", behavior: "HIDDEN" },
96
- ];
97
- ```
98
-
99
- `role_assignment` maps accounts or existing platform users to roles and business
100
- scope keys:
101
-
102
- ```ts
103
- export const roleAssignmentFields = [
104
- { fieldId: "account", label: "账号", componentName: "SelectField", placeholder: "请选择账号", options: [] },
105
- { fieldId: "platformUser", label: "平台用户", componentName: "UserSelectField", placeholder: "请选择平台用户" },
106
- {
107
- fieldId: "roleCodes",
108
- label: "角色",
109
- componentName: "CheckboxField",
110
- placeholder: "请选择角色",
111
- options: [
112
- { label: "权限管理员", value: "access_admin" },
113
- { label: "范围内经办人", value: "scope_operator" },
114
- ],
115
- },
116
- { fieldId: "businessUnit", label: "业务组织", componentName: "SelectField", placeholder: "请选择业务组织", options: [] },
117
- { fieldId: "businessScopeKey", label: "业务范围键", componentName: "TextField", behavior: "HIDDEN" },
118
- {
119
- fieldId: "syncStatus",
120
- label: "同步状态",
121
- componentName: "SelectField",
122
- behavior: "HIDDEN",
123
- options: [
124
- { label: "待同步", value: "pending" },
125
- { label: "已同步", value: "synced" },
126
- { label: "同步失败", value: "failed" },
127
- ],
128
- },
129
- { fieldId: "syncMessage", label: "同步说明", componentName: "TextAreaField", behavior: "HIDDEN" },
130
- ];
131
- ```
132
-
133
- ## Sync App Function Skeleton
134
-
135
- ```ts
136
- export default async function syncAccessGovernance(ctx, input) {
137
- const roleCodes = ctx.operator?.roleCodes || [];
138
- if (!roleCodes.includes("access_admin") && !ctx.operator?.hasFullAccess) {
139
- throw new Error("ACCESS_DENIED");
140
- }
141
-
142
- if (input.action === "syncAccount") {
143
- if (!ctx.organization?.accounts) throw new Error("ORGANIZATION_API_UNAVAILABLE");
144
- // Current operator must have app:organization:manage.
145
- return ctx.organization.accounts.create({
146
- name: input.displayName,
147
- loginName: input.loginName,
148
- phone: input.phone,
149
- departmentId: input.platformDeptId,
150
- });
151
- }
152
-
153
- if (input.action === "syncRoleMembers") {
154
- // Read role_assignment records, resolve platformUserId values, and update
155
- // app role members through the platform role API exposed by OpenXiangda.
156
- return { ok: true };
157
- }
158
-
159
- throw new Error("UNKNOWN_ACTION");
160
- }
161
- ```
162
-
163
- ## Role Resource
164
-
165
- ```json
166
- [
167
- {
168
- "code": "access_admin",
169
- "name": "权限管理员",
170
- "description": "维护组织、账号、角色和权限资源",
171
- "apiPermissionMode": "merge",
172
- "apiPermissionCodes": [
173
- "app:role:manage",
174
- "app:page-permission-group:manage",
175
- "app:form-permission-group:manage",
176
- "app:organization:manage"
177
- ]
178
- },
179
- {
180
- "code": "scope_operator",
181
- "name": "范围内经办人",
182
- "description": "只能访问授权业务范围内的数据"
183
- }
184
- ]
185
- ```
186
-
187
- The initial grant of `access_admin` is normally done by a platform administrator
188
- or an existing app administrator. If `access_admin` creates another role that
189
- also manages accounts, roles, or permission groups, publish that new role with
190
- its own `apiPermissionCodes`; management power is not inherited from the
191
- creator.
192
-
193
- ## Page Permission Group
194
-
195
- ```json
196
- {
197
- "code": "access_admin_pages",
198
- "name": "权限管理员页面",
199
- "roles": ["access_admin"],
200
- "menuCodes": ["access_governance"],
201
- "routeCodes": ["access.governance"],
202
- "pathPatterns": ["/view/:appType/admin/access/*"]
203
- }
204
- ```
205
-
206
- ## Form Permission Group
207
-
208
- ```json
209
- {
210
- "code": "role_assignment_admin",
211
- "formCode": "role_assignment",
212
- "name": "角色分配管理员",
213
- "type": "view",
214
- "roles": ["access_admin"],
215
- "operations": ["view", "edit", "delete"],
216
- "dataScope": [{ "type": "all" }],
217
- "fieldAccessPolicy": {
218
- "defaultAccess": "edit",
219
- "fields": [
220
- { "fieldId": "syncMessage", "access": "readonly" }
221
- ]
222
- }
223
- }
224
- ```
225
-
226
- For `scope_operator`, use condition data permission against hidden scalar keys,
227
- for example `businessScopeKey = ${CURRENT_USER_SCOPE}`. Do not fetch all rows
228
- and filter them in the page.
229
-
230
- ## Acceptance
231
-
232
- - Permission mode and matrix are written in the SDD change or design document.
233
- - `openxiangda permission audit --json` has no high-risk gaps.
234
- - Allowed and denied role paths are both tested.
235
- - Query parameter tampering does not expand sensitive access.
236
- - Managed account writes are executed only by a user with
237
- `app:organization:manage`.
238
- - Roles that create roles, assign members, or maintain permission groups include
239
- `apiPermissionCodes` such as `app:role:manage`.
@@ -1,99 +0,0 @@
1
- {
2
- "version": 1,
3
- "publishedByDefault": false,
4
- "copyInto": "src/",
5
- "templates": [
6
- {
7
- "code": "glass-home-dashboard",
8
- "type": "page-ui-template",
9
- "path": "src/pages/glass-home-dashboard",
10
- "uiTemplate": "glass-home-dashboard",
11
- "recommendedFor": ["经营首页", "管理驾驶舱", "轻量门户首页"],
12
- "description": "Default light-blue glass dashboard shell with sidebar, top search, welcome banner, quick actions, KPI cards, charts, ranking, activity feed, query states, and drawer form actions."
13
- },
14
- {
15
- "code": "mint-analytics-dashboard",
16
- "type": "page-ui-template",
17
- "path": "src/pages/mint-analytics-dashboard",
18
- "uiTemplate": "mint-analytics-dashboard",
19
- "recommendedFor": ["数据分析", "BI 概览", "经营日报"],
20
- "description": "Mint analytics dashboard with high-density metrics, line/bar/donut charts, notices, todos, business summary, system health, query states, and drawer form actions."
21
- },
22
- {
23
- "code": "ops-monitor-dashboard",
24
- "type": "page-ui-template",
25
- "path": "src/pages/ops-monitor-dashboard",
26
- "uiTemplate": "ops-monitor-dashboard",
27
- "recommendedFor": ["运营监控", "任务中心", "系统健康度", "告警中心"],
28
- "description": "Blue-purple operations monitor with realtime trends, animated metric cards, task progress, health score, device status, alerts, quick actions, query states, and drawer form actions."
29
- },
30
- {
31
- "code": "work-order-list-drawer",
32
- "type": "page-ui-template",
33
- "path": "src/pages/work-order-list-drawer",
34
- "uiTemplate": "work-order-list-drawer",
35
- "recommendedFor": ["CRUD 列表", "工单管理", "审批处理", "数据管理页"],
36
- "description": "Default restrained admin list template with filters, toolbar, status stats, table, loading/empty/error branches, and right-side overlay drawers for detail, create, edit, and process forms."
37
- },
38
- {
39
- "code": "customer-profile",
40
- "type": "form",
41
- "path": "src/forms/customer-profile",
42
- "description": "Standard form schema covering field types, validation, users, departments, attachments, and subforms."
43
- },
44
- {
45
- "code": "service-ticket-lifecycle",
46
- "type": "state-flow",
47
- "path": "src/domain/service-ticket",
48
- "description": "Lifecycle state machine with ticket and action-log forms. Does not use workflow."
49
- },
50
- {
51
- "code": "service-ticket-ops",
52
- "type": "page",
53
- "path": "src/pages/service-ticket-ops",
54
- "description": "DataManagementList-based ops page with modular actions, drawer, timeline, hook, and service."
55
- },
56
- {
57
- "code": "access-governance",
58
- "type": "permissions",
59
- "path": "access-governance.md",
60
- "description": "Generic account/role permission mode decision with organization, account, role assignment, sync function, role resource, page group, and form group skeletons."
61
- },
62
- {
63
- "code": "role-governance",
64
- "type": "permissions",
65
- "path": "src/domain/role-governance",
66
- "description": "Dynamic role maintenance, role sync, maintainable scope fields, hidden permission keys, and permission-group resource examples."
67
- },
68
- {
69
- "code": "pc-portal-shell",
70
- "type": "app-shell-page",
71
- "path": "src/pages/pc-portal-shell",
72
- "description": "PC app-shell entry with routes, modules, shared domain usage, and no hardcoded view URLs."
73
- },
74
- {
75
- "code": "mobile-portal-shell",
76
- "type": "app-shell-page",
77
- "path": "src/pages/mobile-portal-shell",
78
- "description": "Mobile app-shell entry sharing domain/service logic with the PC portal."
79
- },
80
- {
81
- "code": "interactive-workbench",
82
- "type": "page",
83
- "path": "src/pages/interactive-workbench",
84
- "description": "Pure interaction workbench with reducer state, modular panels, and unified query states."
85
- },
86
- {
87
- "code": "expense-approval-workflow",
88
- "type": "workflow",
89
- "path": "src/resources/workflows/expense-approval-workflow.json",
90
- "description": "True approval workflow example. Use only when approval tasks are required."
91
- },
92
- {
93
- "code": "daily-ticket-digest",
94
- "type": "automation",
95
- "path": "src/resources/automations/daily-ticket-digest",
96
- "description": "Scheduled JS_CODE automation that queries paginated data and sends notification resources."
97
- }
98
- ]
99
- }
@@ -1,94 +0,0 @@
1
- # Decision Guide
2
-
3
- ## Page And Data Shape
4
-
5
- Use a form when you need a data table. Each form schema defines fields,
6
- validation, storage shape, and generated platform data APIs.
7
-
8
- Use a code page when you need a workbench, portal, dashboard, cross-form
9
- composition, custom list actions, or complex interaction.
10
-
11
- Use `DataManagementList` for list/search/export/batch-management pages. Extend
12
- it with row actions, custom renderers, and drawers instead of rebuilding
13
- pagination, export, and filters from scratch.
14
-
15
- ## Default Admin UI Templates
16
-
17
- The UI templates are recommended starting points, not mandatory styles. Choose
18
- one based on the page's primary job:
19
-
20
- - `work-order-list-drawer`: default for CRUD, approval handling, work orders,
21
- ticket lists, and data-management pages. Detail, create, edit, and process
22
- forms use right-side overlay drawers; do not reserve a permanent right detail
23
- column that squeezes the table.
24
- - `glass-home-dashboard`: default for a friendly PC admin home page, management
25
- portal, or first-screen business overview.
26
- - `mint-analytics-dashboard`: default for analysis-heavy dashboards, weekly
27
- business reviews, BI-like reports, and data-summary pages.
28
- - `ops-monitor-dashboard`: default for realtime operations, task execution,
29
- alerts, system health, and monitoring centers.
30
-
31
- When a page combines list management and a dashboard, start from
32
- `work-order-list-drawer` if users spend most time operating rows. Start from a
33
- dashboard template only when the main job is reading metrics.
34
-
35
- ## State Flow Is Not Workflow
36
-
37
- Most business "processes" are lifecycle state changes:
38
-
39
- - work tickets: new -> accepted -> processing -> resolved -> closed
40
- - orders: draft -> submitted -> paid -> fulfilled -> completed
41
- - assets: available -> reserved -> in_use -> maintenance -> retired
42
-
43
- Use a normal form with a `status` field, maintainable ownership/scope fields,
44
- and an operation-log form. Define allowed transitions in
45
- `domain/<feature>/state-machine.ts`, and execute changes through a service
46
- method that updates state and writes logs.
47
-
48
- Use workflow only when the platform must create approval tasks with approvers,
49
- approval comments, agree/reject actions, copy nodes, node field permissions, and
50
- approval history.
51
-
52
- ## Automation And JS_CODE
53
-
54
- Use automation or workflow JS_CODE when logic must run on the backend after a
55
- trigger: scheduled scans, cross-form synchronization, notification fan-out,
56
- external HTTP calls, or platform role synchronization.
57
-
58
- Frontend code must not be responsible for data isolation or background jobs.
59
-
60
- ## Permissions
61
-
62
- Run `openxiangda design gates --topic permissions --json` before implementing
63
- account, role, RBAC, organization-account, data-scope, or query-param
64
- authorization requirements.
65
-
66
- Choose one pattern:
67
-
68
- - `managed-platform-account`: app creates and maintains platform departments,
69
- accounts, and role members. Start from `access-governance.md`.
70
- - `existing-platform-user-assignment`: app selects existing platform users and
71
- assigns roles/business scopes. Use a role assignment form with
72
- `UserSelectField`.
73
- - `static-role-permission`: fixed roles and permission groups only.
74
- - `query-param-context`: query parameters are context, filters, or ticket input
75
- only; they cannot grant sensitive access.
76
-
77
- For dynamic multi-role apps, create a business role table and synchronize it to
78
- platform app roles. User-facing scope fields should be maintainable controls:
79
- personnel/department fields for people and orgs, enum fields for fixed option
80
- sets, and SDK-backed `SelectField` dropdowns for classes, colleges, projects,
81
- customers, and other records maintained by forms. Use `remoteSearch: true` when
82
- the source form can have many records. If the platform permission condition
83
- needs a scalar value, derive a hidden scope key such as `collegeScopeKey` or
84
- `ownerDeptScopeKey`. Use form permission groups with condition-style data
85
- permissions and App Function role/scope checks to enforce data isolation.
86
-
87
- When an app role is expected to create roles, assign role members, grant role
88
- API permissions, maintain permission groups, or manage organization accounts,
89
- declare the matching `apiPermissionCodes` on that role. `app:role:manage` is
90
- required for app role creation and member assignment; page/form permission group
91
- maintenance and organization account management use their own permission codes.
92
-
93
- Frontend hiding and query parameters are not authorization. They must not be the
94
- only barrier for sensitive data or write actions.
@@ -1,91 +0,0 @@
1
- # Design Style
2
-
3
- OpenXiangda business apps should feel like focused operational tools.
4
-
5
- ## Default Admin UI Templates
6
-
7
- These templates are polished defaults for B-end admin pages. They are optional
8
- starting points, not hard product constraints.
9
-
10
- ### `glass-home-dashboard`
11
-
12
- - Use for PC admin home pages, management portals, and general business
13
- dashboards.
14
- - Visual direction: light blue glass surface, soft sidebar, translucent panels,
15
- welcoming banner, KPI cards with small trends, quick actions, chart blocks,
16
- ranking, activity feed, and target progress.
17
- - Keep density medium. The first viewport should make the platform identity,
18
- navigation, search, and key metrics obvious.
19
-
20
- ### `mint-analytics-dashboard`
21
-
22
- - Use for BI-style analysis, business reviews, operational reports, and weekly
23
- summary pages.
24
- - Visual direction: low-saturation mint green, tighter metric cards, structured
25
- chart grid, notification and todo panels, business summary, and health score.
26
- - Keep labels short and chart containers stable. Favor comparison, trend, and
27
- distribution charts over decorative widgets.
28
-
29
- ### `ops-monitor-dashboard`
30
-
31
- - Use for realtime monitoring, operations centers, task execution, system
32
- health, and alert pages.
33
- - Visual direction: blue-purple accent, stronger status hierarchy, realtime
34
- traffic chart, task progress bars, system rings, device state, alert list, and
35
- subtle CSS motion.
36
- - Do not add GSAP or other animation dependencies by default. Use lightweight
37
- CSS transitions unless a product requirement needs a true timeline engine.
38
-
39
- ### `work-order-list-drawer`
40
-
41
- - Use as the default CRUD/data-management template for tickets, approvals,
42
- orders, assets, and record operations.
43
- - Layout: fixed app shell, compact filters, toolbar, status stat cards, dense
44
- table, pagination, and right-side overlay drawer.
45
- - Detail, create, edit, approve, reject, and process forms open in `Drawer` or
46
- `Modal`. Do not put a permanent form/detail column beside the table, because
47
- it narrows the main working area and makes table operations less stable.
48
-
49
- ## Interaction Defaults
50
-
51
- - Every async page has loading, refreshing, empty, error, and submit-pending
52
- states.
53
- - List refresh should keep existing rows visible and show a small refresh state.
54
- - Mutating actions need confirmation, pending feedback, success feedback, and a
55
- failure refresh or rollback path.
56
- - Detail, create, edit, approval, and processing workflows should use an overlay
57
- `Drawer` or `Modal` with fixed header, scrollable body, and footer actions.
58
- - Mobile actions should use a bottom action area, drawer, or action sheet; do
59
- not copy a dense PC table toolbar to mobile.
60
-
61
- ## Layout Defaults
62
-
63
- - Use dense but readable workbench layouts for admin and ops pages.
64
- - Put high-value filters near the list, not in hidden configuration pages.
65
- - Use status tags, responsibility fields, and latest action summaries for
66
- lifecycle data.
67
- - Do not build marketing-style hero pages for business tools.
68
- - Do not nest cards inside cards. Use panels for page regions, and use cards
69
- only for repeated items, modals/drawers, or genuinely framed controls.
70
-
71
- ## Styling Rules
72
-
73
- - Use Tailwind native utilities and arbitrary values as the default styling
74
- vocabulary, plus Ant Design and antd-mobile for mature controls.
75
- - Platform token classes are compatibility helpers for platform components and
76
- theme overrides. Do not make them the main pattern for business pages.
77
- - Prefer concrete Tailwind classes such as `bg-white`, `border`,
78
- `border-slate-200`, `text-slate-600`, `shadow-sm`, and
79
- `grid-cols-[240px_1fr]`. Do not use shadcn token classes such as `bg-card`,
80
- `text-muted-foreground`, or `text-foreground` unless the workspace explicitly
81
- configures them.
82
- - Use mature packages for mature interactions: antd controls instead of native
83
- inputs, ECharts for charts, GSAP for complex animation timelines, and
84
- maintained drag/drop or virtual-list libraries when those behaviors are
85
- required.
86
- - Research package docs and current maintenance before adding a new dependency;
87
- write business adapters instead of copying library internals.
88
- - Keep page styles in `styles.css`; avoid large inline style objects.
89
- - Keep reusable visual states in shared components: status tags, query states,
90
- confirmation triggers, and operation timelines.
91
- - Do not override private Ant Design class names.
@@ -1,48 +0,0 @@
1
- # Module Structure
2
-
3
- Use this structure for substantial features:
4
-
5
- ```text
6
- src/
7
- domain/<feature>/
8
- types.ts
9
- state-machine.ts
10
- permissions.ts
11
- query.ts
12
- index.ts
13
- shared/
14
- services/<feature>.ts
15
- hooks/use<Feature>.ts
16
- components/
17
- QueryState.tsx
18
- StatusTag.tsx
19
- pages/<feature>/
20
- page.config.ts
21
- index.tsx
22
- App.tsx
23
- styles.css
24
- components/
25
- forms/<feature>/
26
- schema.ts
27
- page.tsx
28
- ```
29
-
30
- ## Dependency Direction
31
-
32
- ```text
33
- pages -> shared/hooks -> shared/services -> domain
34
- forms -> shared -> domain
35
- ```
36
-
37
- - `domain/` has no React, Ant Design, SDK, or page imports.
38
- - `shared/` does not import from `pages/`.
39
- - `pages/` compose modules and call hooks; they do not build complex query
40
- payloads inline.
41
- - PC and mobile views can have different components and styles, but they reuse
42
- the same domain and service logic.
43
-
44
- ## File Size
45
-
46
- Avoid large single-file pages. If a page grows beyond roughly 250 lines, split
47
- table actions, drawers, timelines, query builders, hooks, and styles into
48
- separate files.
@@ -1,2 +0,0 @@
1
- export * from "./permissions";
2
- export * from "./types";
@@ -1,52 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { describe, it } from "node:test";
3
-
4
- import {
5
- buildConditionDataPermission,
6
- buildRoleCode,
7
- deriveRoleScopeKeys,
8
- } from "./permissions";
9
-
10
- describe("role-governance permission helpers", () => {
11
- it("normalizes dynamic role codes", () => {
12
- assert.equal(buildRoleCode({ roleCode: " College Admin " }), "college_admin");
13
- assert.equal(buildRoleCode({ roleCode: "class advisor" }), "class_advisor");
14
- });
15
-
16
- it("derives hidden scope keys from maintainable select values", () => {
17
- assert.deepEqual(
18
- deriveRoleScopeKeys({
19
- collegeScope: { label: "理学院", value: "college_science" },
20
- classScope: { label: "2026 级一班", value: "class_2026_01" },
21
- }),
22
- {
23
- collegeScopeKey: "college_science",
24
- classScopeKey: "class_2026_01",
25
- },
26
- );
27
- });
28
-
29
- it("builds condition-based data permissions from hidden scope keys", () => {
30
- const permission = buildConditionDataPermission({
31
- collegeScopeKey: "college_science",
32
- classScopeKey: "",
33
- ownerDeptScopeKey: "dept_lab",
34
- });
35
-
36
- assert.equal(permission.type, "condition");
37
- assert.deepEqual(permission.condition.rules, [
38
- {
39
- field: "collegeScopeKey",
40
- componentType: "Text",
41
- op: "=",
42
- value: "college_science",
43
- },
44
- {
45
- field: "ownerDeptScopeKey",
46
- componentType: "Text",
47
- op: "=",
48
- value: "dept_lab",
49
- },
50
- ]);
51
- });
52
- });
@@ -1,37 +0,0 @@
1
- import type { AppRoleRecord, DataOwnershipFields } from "./types";
2
-
3
- export function buildRoleCode(role: Pick<AppRoleRecord, "roleCode">) {
4
- return role.roleCode.trim().replace(/\s+/g, "_").toLowerCase();
5
- }
6
-
7
- function scopeKey(value: { value?: string | number } | undefined) {
8
- return value?.value === undefined || value.value === null ? "" : String(value.value);
9
- }
10
-
11
- export function deriveRoleScopeKeys(
12
- role: Pick<AppRoleRecord, "collegeScope" | "classScope">,
13
- ) {
14
- return {
15
- collegeScopeKey: scopeKey(role.collegeScope),
16
- classScopeKey: scopeKey(role.classScope),
17
- };
18
- }
19
-
20
- export function buildConditionDataPermission(scope: DataOwnershipFields) {
21
- const rules = Object.entries(scope)
22
- .filter(([, value]) => Boolean(value))
23
- .map(([field, value]) => ({
24
- field,
25
- componentType: "Text",
26
- op: "=",
27
- value,
28
- }));
29
-
30
- return {
31
- type: "condition" as const,
32
- condition: {
33
- logic: "AND" as const,
34
- rules,
35
- },
36
- };
37
- }