openxiangda 1.0.34 → 1.0.36

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 (60) hide show
  1. package/README.md +18 -0
  2. package/lib/cli.js +410 -1
  3. package/lib/workspace-init.js +1 -0
  4. package/openxiangda-skills/SKILL.md +5 -3
  5. package/openxiangda-skills/references/best-practices.md +11 -6
  6. package/openxiangda-skills/references/component-guide.md +10 -11
  7. package/openxiangda-skills/references/connector-resources.md +3 -0
  8. package/openxiangda-skills/references/data-views.md +217 -0
  9. package/openxiangda-skills/references/forms/component-registry.md +4 -3
  10. package/openxiangda-skills/references/forms/form-schema.md +31 -2
  11. package/openxiangda-skills/references/pages/page-sdk.md +43 -0
  12. package/openxiangda-skills/references/style-system.md +14 -18
  13. package/openxiangda-skills/references/troubleshooting.md +13 -13
  14. package/openxiangda-skills/references/workspace-state.md +9 -0
  15. package/openxiangda-skills/skills/openxiangda-form/SKILL.md +3 -3
  16. package/openxiangda-skills/skills/openxiangda-page/SKILL.md +2 -2
  17. package/openxiangda-skills/skills/openxiangda-permission-settings/SKILL.md +1 -1
  18. package/package.json +1 -1
  19. package/packages/sdk/dist/components/index.cjs +944 -765
  20. package/packages/sdk/dist/components/index.cjs.map +1 -1
  21. package/packages/sdk/dist/components/index.d.mts +18 -2
  22. package/packages/sdk/dist/components/index.d.ts +18 -2
  23. package/packages/sdk/dist/components/index.mjs +938 -761
  24. package/packages/sdk/dist/components/index.mjs.map +1 -1
  25. package/packages/sdk/dist/runtime/index.cjs +114 -30
  26. package/packages/sdk/dist/runtime/index.cjs.map +1 -1
  27. package/packages/sdk/dist/runtime/index.d.mts +18 -1
  28. package/packages/sdk/dist/runtime/index.d.ts +18 -1
  29. package/packages/sdk/dist/runtime/index.mjs +114 -30
  30. package/packages/sdk/dist/runtime/index.mjs.map +1 -1
  31. package/packages/sdk/dist/styles/antd-theme.cjs +11 -3
  32. package/packages/sdk/dist/styles/antd-theme.cjs.map +1 -1
  33. package/packages/sdk/dist/styles/antd-theme.d.mts +2 -1
  34. package/packages/sdk/dist/styles/antd-theme.d.ts +2 -1
  35. package/packages/sdk/dist/styles/antd-theme.mjs +11 -3
  36. package/packages/sdk/dist/styles/antd-theme.mjs.map +1 -1
  37. package/packages/sdk/dist/styles/tailwind-preset.cjs +0 -1
  38. package/packages/sdk/dist/styles/tailwind-preset.cjs.map +1 -1
  39. package/packages/sdk/dist/styles/tailwind-preset.d.mts +0 -1
  40. package/packages/sdk/dist/styles/tailwind-preset.d.ts +0 -1
  41. package/packages/sdk/dist/styles/tailwind-preset.mjs +0 -1
  42. package/packages/sdk/dist/styles/tailwind-preset.mjs.map +1 -1
  43. package/packages/sdk/dist/styles/tokens.css +1 -0
  44. package/packages/sdk/src/build-source/scripts/build-forms.mjs +135 -50
  45. package/packages/sdk/src/build-source/scripts/build-pages.mjs +37 -10
  46. package/packages/sdk/src/build-source/scripts/register.mjs +2 -0
  47. package/packages/sdk/src/build-source/scripts/utils/form-api.mjs +1 -0
  48. package/packages/sdk/src/build-source/scripts/utils/load-config.mjs +3 -2
  49. package/packages/sdk/src/build-source/scripts/utils/register-payload.test.ts +2 -1
  50. package/packages/sdk/src/build-source/scripts/utils/tailwind-config.mjs +9 -7
  51. package/packages/sdk/src/build-source/scripts/utils/tailwind-config.test.ts +6 -4
  52. package/packages/sdk/src/build-source/src/cli.mjs +17 -0
  53. package/templates/sy-lowcode-app-workspace/app-workspace.config.ts +3 -3
  54. package/templates/sy-lowcode-app-workspace/examples/best-practices/decision-guide.md +4 -3
  55. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/domain/role-governance/permissions.test.ts +1 -1
  56. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/app-role/schema.ts +36 -18
  57. package/templates/sy-lowcode-app-workspace/examples/best-practices/src/forms/service-ticket/schema.ts +36 -18
  58. package/templates/sy-lowcode-app-workspace/postcss.config.cjs +0 -15
  59. package/templates/sy-lowcode-app-workspace/src/main.tsx +1 -12
  60. package/templates/sy-lowcode-app-workspace/src/shared/form-schema.ts +0 -1
@@ -13,7 +13,7 @@ describe("role-governance permission helpers", () => {
13
13
  assert.equal(buildRoleCode({ roleCode: "class advisor" }), "class_advisor");
14
14
  });
15
15
 
16
- it("derives hidden scope keys from maintainable association values", () => {
16
+ it("derives hidden scope keys from maintainable select values", () => {
17
17
  assert.deepEqual(
18
18
  deriveRoleScopeKeys({
19
19
  collegeScope: { label: "理学院", value: "college_science" },
@@ -30,32 +30,50 @@ export default createFormSchema({
30
30
  },
31
31
  {
32
32
  fieldId: "collegeScope",
33
- componentName: "AssociationFormField",
33
+ componentName: "SelectField",
34
34
  label: "适用学院",
35
35
  placeholder: "请选择适用学院",
36
- associationForm: {
37
- appType: process.env.OPENXIANGDA_APP_TYPE || "APP_XXXX",
38
- formUuid: "FORM_COLLEGE_PROFILE",
39
- mainFieldId: "collegeName",
40
- selectorColumns: [
41
- { title: "学院名称", dataIndex: "collegeName" },
42
- { title: "学院编码", dataIndex: "collegeCode" },
43
- ],
36
+ showSearch: true,
37
+ allowClear: true,
38
+ options: [],
39
+ valueSync: [{ targetFieldId: "collegeScopeKey", valuePath: "value" }],
40
+ optionSource: {
41
+ type: "linkedForm",
42
+ linkedForm: {
43
+ formUuid: "FORM_COLLEGE_PROFILE",
44
+ fieldId: "collegeName",
45
+ labelFieldId: "collegeName",
46
+ valueFieldId: "collegeCode",
47
+ searchFieldId: "collegeName",
48
+ sortField: "collegeName",
49
+ pageSize: 20,
50
+ remoteSearch: true,
51
+ deduplicate: true,
52
+ },
44
53
  },
45
54
  },
46
55
  {
47
56
  fieldId: "classScope",
48
- componentName: "AssociationFormField",
57
+ componentName: "SelectField",
49
58
  label: "适用班级",
50
59
  placeholder: "请选择适用班级",
51
- associationForm: {
52
- appType: process.env.OPENXIANGDA_APP_TYPE || "APP_XXXX",
53
- formUuid: "FORM_CLASS_PROFILE",
54
- mainFieldId: "className",
55
- selectorColumns: [
56
- { title: "班级名称", dataIndex: "className" },
57
- { title: "所属学院", dataIndex: "collegeName" },
58
- ],
60
+ showSearch: true,
61
+ allowClear: true,
62
+ options: [],
63
+ valueSync: [{ targetFieldId: "classScopeKey", valuePath: "value" }],
64
+ optionSource: {
65
+ type: "linkedForm",
66
+ linkedForm: {
67
+ formUuid: "FORM_CLASS_PROFILE",
68
+ fieldId: "className",
69
+ labelFieldId: "className",
70
+ valueFieldId: "classCode",
71
+ searchFieldId: "className",
72
+ sortField: "className",
73
+ pageSize: 20,
74
+ remoteSearch: true,
75
+ deduplicate: true,
76
+ },
59
77
  },
60
78
  },
61
79
  {
@@ -52,32 +52,50 @@ export default createFormSchema({
52
52
  },
53
53
  {
54
54
  fieldId: "college",
55
- componentName: "AssociationFormField",
55
+ componentName: "SelectField",
56
56
  label: "所属学院",
57
57
  placeholder: "请选择所属学院",
58
- associationForm: {
59
- appType: process.env.OPENXIANGDA_APP_TYPE || "APP_XXXX",
60
- formUuid: "FORM_COLLEGE_PROFILE",
61
- mainFieldId: "collegeName",
62
- selectorColumns: [
63
- { title: "学院名称", dataIndex: "collegeName" },
64
- { title: "学院编码", dataIndex: "collegeCode" },
65
- ],
58
+ showSearch: true,
59
+ allowClear: true,
60
+ options: [],
61
+ valueSync: [{ targetFieldId: "collegeScopeKey", valuePath: "value" }],
62
+ optionSource: {
63
+ type: "linkedForm",
64
+ linkedForm: {
65
+ formUuid: "FORM_COLLEGE_PROFILE",
66
+ fieldId: "collegeName",
67
+ labelFieldId: "collegeName",
68
+ valueFieldId: "collegeCode",
69
+ searchFieldId: "collegeName",
70
+ sortField: "collegeName",
71
+ pageSize: 20,
72
+ remoteSearch: true,
73
+ deduplicate: true,
74
+ },
66
75
  },
67
76
  },
68
77
  {
69
78
  fieldId: "classGroup",
70
- componentName: "AssociationFormField",
79
+ componentName: "SelectField",
71
80
  label: "所属班级",
72
81
  placeholder: "请选择所属班级",
73
- associationForm: {
74
- appType: process.env.OPENXIANGDA_APP_TYPE || "APP_XXXX",
75
- formUuid: "FORM_CLASS_PROFILE",
76
- mainFieldId: "className",
77
- selectorColumns: [
78
- { title: "班级名称", dataIndex: "className" },
79
- { title: "所属学院", dataIndex: "collegeName" },
80
- ],
82
+ showSearch: true,
83
+ allowClear: true,
84
+ options: [],
85
+ valueSync: [{ targetFieldId: "classScopeKey", valuePath: "value" }],
86
+ optionSource: {
87
+ type: "linkedForm",
88
+ linkedForm: {
89
+ formUuid: "FORM_CLASS_PROFILE",
90
+ fieldId: "className",
91
+ labelFieldId: "className",
92
+ valueFieldId: "classCode",
93
+ searchFieldId: "className",
94
+ sortField: "className",
95
+ pageSize: 20,
96
+ remoteSearch: true,
97
+ deduplicate: true,
98
+ },
81
99
  },
82
100
  },
83
101
  {
@@ -1,24 +1,9 @@
1
1
  const tailwindcss = require("tailwindcss");
2
2
  const autoprefixer = require("autoprefixer");
3
3
 
4
- function loadOpenXiangdaBuild() {
5
- try {
6
- return require("openxiangda/build");
7
- } catch (error) {
8
- try {
9
- return require("../../packages/sdk/dist/build/index.cjs");
10
- } catch {
11
- throw error;
12
- }
13
- }
14
- }
15
-
16
- const { createOpenXiangdaNamespaceCssPlugin } = loadOpenXiangdaBuild();
17
-
18
4
  module.exports = {
19
5
  plugins: [
20
6
  tailwindcss(),
21
- createOpenXiangdaNamespaceCssPlugin(),
22
7
  autoprefixer(),
23
8
  ],
24
9
  };
@@ -14,21 +14,10 @@ createRoot(document.getElementById("root")!).render(
14
14
  <StyleProvider hashPriority="high">
15
15
  <ConfigProvider
16
16
  locale={zhCN}
17
- prefixCls="sy-ant"
18
- iconPrefixCls="sy-anticon"
19
17
  theme={antdTheme}
20
- getPopupContainer={() =>
21
- document.querySelector(".sy-app-workspace") as HTMLElement
22
- }
23
- getTargetContainer={() =>
24
- (document.querySelector(".sy-app-workspace") as HTMLElement) ||
25
- document.body
26
- }
27
18
  >
28
19
  <AntdApp>
29
- <div className="sy-app-workspace">
30
- <App />
31
- </div>
20
+ <App />
32
21
  </AntdApp>
33
22
  </ConfigProvider>
34
23
  </StyleProvider>
@@ -16,7 +16,6 @@ export type FormComponentName =
16
16
  | "ImageField"
17
17
  | "AddressField"
18
18
  | "CascadeSelectField"
19
- | "AssociationFormField"
20
19
  | "LocationField"
21
20
  | "EditorField"
22
21
  | "JSONField"