@ynight/framework 0.0.0-stage → 0.0.1
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.
- package/LICENSE +21 -0
- package/README.md +511 -2
- package/assets/.gitkeep +0 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/assets/index.d.ts +41 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +68 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/client/common.d.ts +77 -0
- package/dist/client/common.d.ts.map +1 -0
- package/dist/client/index.d.ts +56 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.mjs +8 -0
- package/dist/client/index.mjs.LICENSE.txt +8 -0
- package/dist/client/layout/Layout.vue.d.ts +21 -0
- package/dist/client/layout/Layout.vue.d.ts.map +1 -0
- package/dist/client/layout/SiderLayout.vue.d.ts +32 -0
- package/dist/client/layout/SiderLayout.vue.d.ts.map +1 -0
- package/dist/client/layout/SubMenu.vue.d.ts +8 -0
- package/dist/client/layout/SubMenu.vue.d.ts.map +1 -0
- package/dist/client/package.json +3 -0
- package/dist/client/pages/DashboardPage.vue.d.ts +4 -0
- package/dist/client/pages/DashboardPage.vue.d.ts.map +1 -0
- package/dist/client/pages/ErrorPage.vue.d.ts +9 -0
- package/dist/client/pages/ErrorPage.vue.d.ts.map +1 -0
- package/dist/client/pages/PageSkeleton.vue.d.ts +4 -0
- package/dist/client/pages/PageSkeleton.vue.d.ts.map +1 -0
- package/dist/client/pages/ProjectListPage.vue.d.ts +4 -0
- package/dist/client/pages/ProjectListPage.vue.d.ts.map +1 -0
- package/dist/client/pages/project-navigation.d.ts +21 -0
- package/dist/client/pages/project-navigation.d.ts.map +1 -0
- package/dist/client/public-components.d.ts +56 -0
- package/dist/client/public-components.d.ts.map +1 -0
- package/dist/client/runtime.d.ts +55 -0
- package/dist/client/runtime.d.ts.map +1 -0
- package/dist/client/schema-types.d.ts +129 -0
- package/dist/client/schema-types.d.ts.map +1 -0
- package/dist/client/schema.d.ts +105 -0
- package/dist/client/schema.d.ts.map +1 -0
- package/dist/client/style.css +147 -0
- package/dist/client/types.d.ts +195 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/views/ModuleHost.vue.d.ts +8 -0
- package/dist/client/views/ModuleHost.vue.d.ts.map +1 -0
- package/dist/client/views/SchemaView.vue.d.ts +8 -0
- package/dist/client/views/SchemaView.vue.d.ts.map +1 -0
- package/dist/client/views/schema/create-form.vue.d.ts +13 -0
- package/dist/client/views/schema/create-form.vue.d.ts.map +1 -0
- package/dist/client/views/schema/detail-view.vue.d.ts +10 -0
- package/dist/client/views/schema/detail-view.vue.d.ts.map +1 -0
- package/dist/client/views/schema/search-panel.vue.d.ts +11 -0
- package/dist/client/views/schema/search-panel.vue.d.ts.map +1 -0
- package/dist/client/views/schema/table-panel.vue.d.ts +17 -0
- package/dist/client/views/schema/table-panel.vue.d.ts.map +1 -0
- package/dist/client/views/schema/update-form.vue.d.ts +14 -0
- package/dist/client/views/schema/update-form.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/SchemaField.vue.d.ts +18 -0
- package/dist/client/widgets/schema-form/SchemaField.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/complex-view/index.d.ts +11 -0
- package/dist/client/widgets/schema-form/complex-view/index.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/complex-view/schema-async-search-select.vue.d.ts +39 -0
- package/dist/client/widgets/schema-form/complex-view/schema-async-search-select.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/complex-view/schema-dynamic-select.vue.d.ts +32 -0
- package/dist/client/widgets/schema-form/complex-view/schema-dynamic-select.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/complex-view/schema-tag-input.vue.d.ts +25 -0
- package/dist/client/widgets/schema-form/complex-view/schema-tag-input.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/complex-view/schema-upload.vue.d.ts +16 -0
- package/dist/client/widgets/schema-form/complex-view/schema-upload.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/hooks/use-schema-rules.d.ts +45 -0
- package/dist/client/widgets/schema-form/hooks/use-schema-rules.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/index.vue.d.ts +26 -0
- package/dist/client/widgets/schema-form/index.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/type.d.ts +295 -0
- package/dist/client/widgets/schema-form/type.d.ts.map +1 -0
- package/dist/client/widgets/schema-form/validator.d.ts +127 -0
- package/dist/client/widgets/schema-form/validator.d.ts.map +1 -0
- package/dist/client/widgets/schema-table/index.vue.d.ts +9 -0
- package/dist/client/widgets/schema-table/index.vue.d.ts.map +1 -0
- package/dist/client/widgets/schema-table/type.d.ts +91 -0
- package/dist/client/widgets/schema-table/type.d.ts.map +1 -0
- package/dist/model/index.d.ts +75 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +108 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model.d.ts +13 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +16 -0
- package/dist/model.js.map +1 -0
- package/dist/server/application.d.ts +33 -0
- package/dist/server/application.d.ts.map +1 -0
- package/dist/server/application.js +1082 -0
- package/dist/server/application.js.map +1 -0
- package/dist/server/base-class.d.ts +50 -0
- package/dist/server/base-class.d.ts.map +1 -0
- package/dist/server/base-class.js +66 -0
- package/dist/server/base-class.js.map +1 -0
- package/dist/server/config.d.ts +44 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +231 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/context.d.ts +30 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +3 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/define-routes.d.ts +29 -0
- package/dist/server/define-routes.d.ts.map +1 -0
- package/dist/server/define-routes.js +39 -0
- package/dist/server/define-routes.js.map +1 -0
- package/dist/server/define-server.d.ts +19 -0
- package/dist/server/define-server.d.ts.map +1 -0
- package/dist/server/define-server.js +23 -0
- package/dist/server/define-server.js.map +1 -0
- package/dist/server/index.d.ts +26 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +35 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/legacy.d.ts +13 -0
- package/dist/server/legacy.d.ts.map +1 -0
- package/dist/server/legacy.js +15 -0
- package/dist/server/legacy.js.map +1 -0
- package/dist/server/types.d.ts +272 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +3 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +15 -0
- package/dist/server.js.map +1 -0
- package/package.json +106 -3
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Lodash <https://lodash.com/>
|
|
4
|
+
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
|
|
5
|
+
* Released under MIT license <https://lodash.com/license>
|
|
6
|
+
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
|
7
|
+
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
8
|
+
*/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
title?: string;
|
|
3
|
+
};
|
|
4
|
+
declare var __VLS_14: {}, __VLS_16: {}, __VLS_30: {};
|
|
5
|
+
type __VLS_Slots = {} & {
|
|
6
|
+
menu?: (props: typeof __VLS_14) => any;
|
|
7
|
+
} & {
|
|
8
|
+
actions?: (props: typeof __VLS_16) => any;
|
|
9
|
+
} & {
|
|
10
|
+
default?: (props: typeof __VLS_30) => any;
|
|
11
|
+
};
|
|
12
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
14
|
+
declare const _default: typeof __VLS_export;
|
|
15
|
+
export default _default;
|
|
16
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
17
|
+
new (): {
|
|
18
|
+
$slots: S;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=Layout.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout.vue.d.ts","sourceRoot":"","sources":["../../../src/client/layout/Layout.vue"],"names":[],"mappings":"AAuHA,KAAK,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAsJtC,QAAA,IAAI,QAAQ,IAAW,EAAE,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AACpE,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC1C;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC7C;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAKhD,QAAA,MAAM,UAAU,kSAEd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 侧边栏布局组件。
|
|
3
|
+
*
|
|
4
|
+
* 职责:
|
|
5
|
+
* - 渲染固定宽度的左侧栏与可变主区
|
|
6
|
+
* - 暴露 activeKey 用于标记当前激活菜单项
|
|
7
|
+
* - 通过 select 事件将用户选中的菜单 key 抛给父组件(一般用于切换侧栏子模块)
|
|
8
|
+
*/
|
|
9
|
+
type __VLS_Props = {
|
|
10
|
+
activeKey?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
};
|
|
13
|
+
declare var __VLS_22: {}, __VLS_30: {};
|
|
14
|
+
type __VLS_Slots = {} & {
|
|
15
|
+
menu?: (props: typeof __VLS_22) => any;
|
|
16
|
+
} & {
|
|
17
|
+
default?: (props: typeof __VLS_30) => any;
|
|
18
|
+
};
|
|
19
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
20
|
+
select: (key: string) => any;
|
|
21
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
22
|
+
onSelect?: (key: string) => any;
|
|
23
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
25
|
+
declare const _default: typeof __VLS_export;
|
|
26
|
+
export default _default;
|
|
27
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
28
|
+
new (): {
|
|
29
|
+
$slots: S;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=SiderLayout.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiderLayout.vue.d.ts","sourceRoot":"","sources":["../../../src/client/layout/SiderLayout.vue"],"names":[],"mappings":"AAkEA;;;;;;;GAOG;AAGH,KAAK,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA0H1D,QAAA,IAAI,QAAQ,IAAW,EAAE,QAAQ,IAAY,CAAE;AAC/C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,GAC1C;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,GAAG,CAAA;CAAE,CAAC;AAKhD,QAAA,MAAM,UAAU;;;;kFAGd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MenuItemType } from '@ynight/contracts';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
menu: MenuItemType;
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
declare const _default: typeof __VLS_export;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=SubMenu.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubMenu.vue.d.ts","sourceRoot":"","sources":["../../../src/client/layout/SubMenu.vue"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAkF1C,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
4
|
+
//# sourceMappingURL=DashboardPage.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardPage.vue.d.ts","sourceRoot":"","sources":["../../../src/client/pages/DashboardPage.vue"],"names":[],"mappings":"AA0hBA,QAAA,MAAM,YAAY,+QAChB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
message?: string;
|
|
3
|
+
};
|
|
4
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
5
|
+
message: string;
|
|
6
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=ErrorPage.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorPage.vue.d.ts","sourceRoot":"","sources":["../../../src/client/pages/ErrorPage.vue"],"names":[],"mappings":"AAyBA,KAAK,WAAW,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmFxC,QAAA,MAAM,YAAY;aAnFa,MAAM;6EAsFnC,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
4
|
+
//# sourceMappingURL=PageSkeleton.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageSkeleton.vue.d.ts","sourceRoot":"","sources":["../../../src/client/pages/PageSkeleton.vue"],"names":[],"mappings":"AAiCA,QAAA,MAAM,YAAY,+QAChB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
4
|
+
//# sourceMappingURL=ProjectListPage.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectListPage.vue.d.ts","sourceRoot":"","sources":["../../../src/client/pages/ProjectListPage.vue"],"names":[],"mappings":"AA0ZA,QAAA,MAAM,YAAY,+QAChB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将项目配置中的主页转换为 dashboard 应用的浏览器地址。
|
|
3
|
+
*
|
|
4
|
+
* 处理三种典型情况:
|
|
5
|
+
* 1. `homePage` 为空或 `/`:直接落到 dashboard 根路径;
|
|
6
|
+
* 2. `homePage` 形如 `/dashboard/xxx`(旧模型仍保存 dashboard 前缀):把 `/dashboard` 前缀剥掉,
|
|
7
|
+
* 拼接上当前的 dashboardBase,避免最终 URL 出现 `/dashboard/dashboard/...` 这种双前缀;
|
|
8
|
+
* 3. `homePage` 为其它路径(如 `/schema/...`、`/iframe/...`):直接拼到 base 之后。
|
|
9
|
+
*
|
|
10
|
+
* 始终在 query 上追加 `projectKey`,让 dashboard 上下文能正确解析项目。
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* 计算项目入口的浏览器地址。
|
|
14
|
+
*
|
|
15
|
+
* @param homePage 项目配置中的主页路径(可含或不包含 `/dashboard` 前缀)。
|
|
16
|
+
* @param projectKey 项目 key,会作为 query 参数拼到结果 URL 上。
|
|
17
|
+
* @param dashboardBase dashboard 应用的 base 前缀,默认 `/dashboard`,用于兼容自定义部署路径。
|
|
18
|
+
* @returns 浏览器可用的完整路径(含 projectKey query)。
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveProjectLocation(homePage: string | undefined, projectKey: string, dashboardBase?: string): string;
|
|
21
|
+
//# sourceMappingURL=project-navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-navigation.d.ts","sourceRoot":"","sources":["../../../src/client/pages/project-navigation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,EAClB,aAAa,SAAe,GAC3B,MAAM,CAmBR"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* schema-form / schema-table 对外公开组件类型与"壳"。
|
|
3
|
+
*
|
|
4
|
+
* 这里采用"将实现文件(SFC)整体赋值给一个声明类型更严格的常量"的模式:
|
|
5
|
+
* - 内部实现仍然是 `.vue` 单文件组件(SchemaFormImplementation / SchemaTableImplementation);
|
|
6
|
+
* - 对外暴露时仅引用稳定的 Vue 类型以及框架自身定义的 props / emits / slots 类型,
|
|
7
|
+
* 避免业务侧通过框架间接依赖到 SFC 的内部声明细节;
|
|
8
|
+
* - 该常量会被 `vue-tsc` 校验,从而保证实现真的满足公开声明。
|
|
9
|
+
*/
|
|
10
|
+
import type { ComponentPublicInstance } from 'vue';
|
|
11
|
+
import type { FormValueInterface, SchemaFormProps, SchemaFormExposed, SchemaFormSlots, SchemaFormChangePayload, SchemaFormValidationFailedPayload, SchemaFormEmits } from './widgets/schema-form/type';
|
|
12
|
+
import type { SchemaTableProps, SchemaTableExposed, SchemaTableEmits, OperateParams } from './widgets/schema-table/type';
|
|
13
|
+
/**
|
|
14
|
+
* SchemaForm 公开声明时使用的 props 类型。
|
|
15
|
+
*
|
|
16
|
+
* 在原始 `SchemaFormProps` 之上额外补齐以 `onXxx` 形式书写的事件监听(Vue 模板中习惯写法),
|
|
17
|
+
* 业务侧在使用时可以同时享受 `v-model:modelValue` / `@submit` 等模板风格的类型推断。
|
|
18
|
+
*/
|
|
19
|
+
interface SchemaFormPublicProps extends SchemaFormProps {
|
|
20
|
+
/** `v-model:modelValue` 对应的 update 事件,回调参数为当前表单值快照。 */
|
|
21
|
+
'onUpdate:modelValue'?: (values: FormValueInterface) => void;
|
|
22
|
+
/** 提交事件,业务侧可在此处触发接口调用。 */
|
|
23
|
+
onSubmit?: (values: FormValueInterface) => void;
|
|
24
|
+
/** 字段值变化事件,回调包含变化字段、最新值与整个表单快照。 */
|
|
25
|
+
onChange?: (payload: SchemaFormChangePayload) => void;
|
|
26
|
+
/** 表单重置事件,回调为重置后的初始值。 */
|
|
27
|
+
onReset?: (values: FormValueInterface) => void;
|
|
28
|
+
/** 校验失败事件,回调包含失败时的表单值与错误列表。 */
|
|
29
|
+
'onValidation-failed'?: (payload: SchemaFormValidationFailedPayload) => void;
|
|
30
|
+
/** 单字段校验结果回调:字段 prop、是否通过、错误信息。 */
|
|
31
|
+
onValidate?: (field: string | string[], valid: boolean, message: string) => void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 实现保留原 SFC,公开声明仅引用稳定的 Vue 和框架类型。赋值由 vue-tsc 校验。
|
|
35
|
+
*
|
|
36
|
+
* 通过 `Omit<..., '$emit' | '$slots'>` 把这两个被 Vue 内部使用的特殊字段移除,
|
|
37
|
+
* 然后再以业务侧关心的精确类型重新声明,从而保留 emits / slots 的强类型推断。
|
|
38
|
+
*/
|
|
39
|
+
export declare const SchemaForm: new () => Omit<ComponentPublicInstance<SchemaFormPublicProps, SchemaFormExposed>, '$emit' | '$slots'> & {
|
|
40
|
+
$emit: SchemaFormEmits;
|
|
41
|
+
$slots: SchemaFormSlots;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* SchemaTable 对外公开组件。
|
|
45
|
+
*
|
|
46
|
+
* 与 SchemaForm 不同,SchemaTable 没有自定义 slot,因此只需替换 `$emit` 的类型;
|
|
47
|
+
* 额外补充 `onOperate` 以适配 Vue 模板中的 `@operate` 写法。
|
|
48
|
+
*/
|
|
49
|
+
export declare const SchemaTable: new () => Omit<ComponentPublicInstance<SchemaTableProps & {
|
|
50
|
+
/** 操作按钮点击事件,回调为按钮配置与所在行数据。 */
|
|
51
|
+
onOperate?: (payload: OperateParams) => void;
|
|
52
|
+
}, SchemaTableExposed>, '$emit'> & {
|
|
53
|
+
$emit: SchemaTableEmits;
|
|
54
|
+
};
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=public-components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-components.d.ts","sourceRoot":"","sources":["../../src/client/public-components.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,KAAK,CAAC;AAGnD,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,iCAAiC,EACjC,eAAe,EAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACd,MAAM,6BAA6B,CAAC;AAErC;;;;;GAKG;AACH,UAAU,qBAAsB,SAAQ,eAAe;IACrD,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7D,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAChD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACtD,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,iCAAiC,KAAK,IAAI,CAAC;IAC7E,mCAAmC;IACnC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClF;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,UAAU,IAAI,CACrC,uBAAuB,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,EACjE,OAAO,GAAG,QAAQ,CACnB,GAAG;IACF,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;CACE,CAAC;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,UAAU,IAAI,CACtC,uBAAuB,CACrB,gBAAgB,GAAG;IACjB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC9C,EACD,kBAAkB,CACnB,EACD,OAAO,CACR,GAAG;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAA8B,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 客户端运行时:负责创建并安装 `ElpisClientContext`。
|
|
3
|
+
*
|
|
4
|
+
* 运行时承担以下职责:
|
|
5
|
+
* 1. 维护当前项目、当前模型、项目列表、模型列表、用户等全局状态;
|
|
6
|
+
* 2. 提供 `request` 通用请求方法,自动注入 projectKey、自动处理响应;
|
|
7
|
+
* 3. 通过 Vue 的 `provide/inject` 把上下文注入到组件树。
|
|
8
|
+
*/
|
|
9
|
+
import { type App, type InjectionKey } from 'vue';
|
|
10
|
+
import type { Router } from 'vue-router';
|
|
11
|
+
import type { ClientExtensions, ElpisClientContext, RequestAdapterOption } from './types';
|
|
12
|
+
/**
|
|
13
|
+
* 客户端上下文的注入键。
|
|
14
|
+
*
|
|
15
|
+
* 使用 `InjectionKey<ElpisClientContext>` 既保留了强类型推断,又避免了字符串键可能导致的命名冲突。
|
|
16
|
+
*/
|
|
17
|
+
export declare const clientContextKey: InjectionKey<ElpisClientContext>;
|
|
18
|
+
/** 客户端扩展(自定义控件 / 壳层 / 页面)的注入键,与 context 注入键分离便于按需注入。 */
|
|
19
|
+
export declare const clientExtensionsKey: InjectionKey<ClientExtensions>;
|
|
20
|
+
/**
|
|
21
|
+
* 在 Vue 组件中获取 ElpisClientContext。
|
|
22
|
+
*
|
|
23
|
+
* 必须由 `createAdminApp` 创建的应用内调用(即上下文已被 `provide` 注入到根组件),
|
|
24
|
+
* 否则会直接抛错,避免后续 `undefined.xxx` 这种难排查的运行时异常。
|
|
25
|
+
*
|
|
26
|
+
* @returns 当前应用上下文。
|
|
27
|
+
* @throws 当上下文未注入时抛出错误。
|
|
28
|
+
*/
|
|
29
|
+
export declare function useElpisContext(): ElpisClientContext;
|
|
30
|
+
/**
|
|
31
|
+
* 创建客户端上下文实例。
|
|
32
|
+
*
|
|
33
|
+
* 该函数返回一个完整的 `ElpisClientContext`:
|
|
34
|
+
* - 内部通过 `ref/computed` 维护响应式状态;
|
|
35
|
+
* - `request` 方法会拦截同源 `/api/` 请求并自动注入 `projectKey`;
|
|
36
|
+
* - 支持业务侧注入自定义 `RequestAdapter`,用于 Mock、代理、统一前缀等场景。
|
|
37
|
+
*
|
|
38
|
+
* @param config 启动配置(任意键值对集合)。
|
|
39
|
+
* @param extensions 客户端扩展集合(自定义控件、壳层页面等)。
|
|
40
|
+
* @param router vue-router 实例,用于从 URL 中读取 projectKey。
|
|
41
|
+
* @param adapter 可选的请求适配器(函数或带 request 方法的对象)。
|
|
42
|
+
* @returns 构造好的上下文对象。
|
|
43
|
+
*/
|
|
44
|
+
export declare function createClientContext(config: Record<string, unknown>, extensions: ClientExtensions, router: Router, adapter?: RequestAdapterOption): ElpisClientContext;
|
|
45
|
+
/**
|
|
46
|
+
* 把已经构造好的 `ElpisClientContext` 安装到 Vue 应用上。
|
|
47
|
+
*
|
|
48
|
+
* 这里仅做 `app.provide(clientContextKey, context)`,业务组件即可通过 `useElpisContext()` 拿到。
|
|
49
|
+
* 函数化抽离是为了与 `createAdminApp` 解耦:测试中可以单独构造上下文并安装到 mock 应用。
|
|
50
|
+
*
|
|
51
|
+
* @param app Vue 应用实例。
|
|
52
|
+
* @param context 客户端上下文。
|
|
53
|
+
*/
|
|
54
|
+
export declare function installClientContext(app: App, context: ElpisClientContext): void;
|
|
55
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/client/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAyB,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,KAAK,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAEV,gBAAgB,EAChB,kBAAkB,EAElB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAAkC,CAAC;AACjG,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAAC,gBAAgB,CAC5B,CAAC;AAEpC;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,kBAAkB,CAMpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,kBAAkB,CAsGpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAEhF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 客户端公开的 JSON Schema 视图类型。
|
|
3
|
+
*
|
|
4
|
+
* 这里不能直接复用 contracts 中基于 Element Plus props 的 DSL 类型,否则生成的
|
|
5
|
+
* framework/client 声明会把 Element Plus 内部类型传递给业务项目。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* JSON Schema 中允许出现的标量值类型。
|
|
9
|
+
*
|
|
10
|
+
* 与标准 JSON 类似,支持 string / number / boolean / null,以及任意深度的数组与对象;
|
|
11
|
+
* 该类型用于描述 schema 中 `default` 等字段的值,避免在客户端引入 contracts 中的 DSL 类型。
|
|
12
|
+
*/
|
|
13
|
+
export type JsonSchemaValue = string | number | boolean | null | JsonSchemaValue[] | {
|
|
14
|
+
[key: string]: JsonSchemaValue;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* el-col 栅格属性的精简声明。
|
|
18
|
+
*
|
|
19
|
+
* 这里不复用 Element Plus 自身的 `ColProps`,原因有两个:
|
|
20
|
+
* 1. 客户端需要保持对 UI 库版本升级的解耦;
|
|
21
|
+
* 2. 业务侧只需关心"想用什么响应式断点占多少列",无需了解 el-col 实现细节。
|
|
22
|
+
*
|
|
23
|
+
* 通过 `[key: string]: unknown` 透传未声明字段,给后续版本升级 / 业务定制留出余地。
|
|
24
|
+
*/
|
|
25
|
+
export interface SchemaFormColProps {
|
|
26
|
+
/** 栅格占位数(0~24)。 */
|
|
27
|
+
span?: number;
|
|
28
|
+
/** 栅格左侧偏移列数。 */
|
|
29
|
+
offset?: number;
|
|
30
|
+
/** 栅格向右移动列数(用于排序)。 */
|
|
31
|
+
push?: number;
|
|
32
|
+
/** 栅格向左移动列数(用于排序)。 */
|
|
33
|
+
pull?: number;
|
|
34
|
+
/** <768px 响应式断点配置。 */
|
|
35
|
+
xs?: number | string | Record<string, number | string>;
|
|
36
|
+
/** ≥768px 响应式断点配置。 */
|
|
37
|
+
sm?: number | string | Record<string, number | string>;
|
|
38
|
+
/** ≥992px 响应式断点配置。 */
|
|
39
|
+
md?: number | string | Record<string, number | string>;
|
|
40
|
+
/** ≥1200px 响应式断点配置。 */
|
|
41
|
+
lg?: number | string | Record<string, number | string>;
|
|
42
|
+
/** ≥1920px 响应式断点配置。 */
|
|
43
|
+
xl?: number | string | Record<string, number | string>;
|
|
44
|
+
/** 透传未知字段,便于业务侧扩展。 */
|
|
45
|
+
[key: string]: unknown;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* schema-form 中单个字段的渲染选项。
|
|
49
|
+
*
|
|
50
|
+
* 该结构是"控件渲染"维度的最小集合:
|
|
51
|
+
* - `visible` 控制字段是否展示;
|
|
52
|
+
* - `comType` 决定使用哪个控件(基础控件枚举或业务侧注册的自定义控件);
|
|
53
|
+
* - `colProps` 覆盖全局栅格配置;
|
|
54
|
+
* - `required` 标记字段是否必填(ajv 校验依赖此字段而非 schema.required)。
|
|
55
|
+
*/
|
|
56
|
+
export interface SchemaFormFieldOption {
|
|
57
|
+
/** 字段是否可见;为 false 时不渲染。 */
|
|
58
|
+
visible: boolean;
|
|
59
|
+
/** 控件类型,可选 Element Plus 内置控件或 `extensions.controls` 注册的自定义控件。 */
|
|
60
|
+
comType?: string;
|
|
61
|
+
/** 该字段专属的 el-col 栅格配置,未指定时回退到表单全局 `colProps`。 */
|
|
62
|
+
colProps?: Partial<SchemaFormColProps>;
|
|
63
|
+
/** 字段是否必填;为 true 时会同时反映到 schema 顶层 `required` 数组与 ajv 校验。 */
|
|
64
|
+
required?: boolean;
|
|
65
|
+
/** 字段默认值。 */
|
|
66
|
+
default?: JsonSchemaValue;
|
|
67
|
+
/** 透传未知字段,便于业务侧扩展。 */
|
|
68
|
+
[key: string]: unknown;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* schema-table 中单个列的渲染选项。
|
|
72
|
+
*
|
|
73
|
+
* - `visible` 控制列是否展示;
|
|
74
|
+
* - `filter` 标记是否需要启用筛选;
|
|
75
|
+
* - `toFixed` 控制数值类列保留的小数位数。
|
|
76
|
+
*/
|
|
77
|
+
export interface TableColumnOption {
|
|
78
|
+
/** 列是否可见;为 false 时不渲染该列。 */
|
|
79
|
+
visible: boolean;
|
|
80
|
+
/** 是否启用列筛选(前端筛选或后端筛选由具体实现决定)。 */
|
|
81
|
+
filter?: boolean;
|
|
82
|
+
/** 数值类列保留的小数位数;非数值列可忽略。 */
|
|
83
|
+
toFixed?: number;
|
|
84
|
+
/** 透传未知字段,便于业务侧扩展。 */
|
|
85
|
+
[key: string]: unknown;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* DTO schema 的单个 property 基础结构。
|
|
89
|
+
*
|
|
90
|
+
* 这是对原始 JSON Schema property 的"扩展形态":除 JSON Schema 关键字外还允许挂载业务标签 `label`,
|
|
91
|
+
* 业务侧可以根据需要继续追加未知字段。
|
|
92
|
+
*/
|
|
93
|
+
export interface DtoSchemaPropertyBase {
|
|
94
|
+
/** JSON Schema 的 type,可以是单个字符串或字符串数组(多类型)。 */
|
|
95
|
+
type?: string | string[] | undefined;
|
|
96
|
+
/** 字段展示名(中文),用于渲染 label 与错误信息中文回填。 */
|
|
97
|
+
label: string;
|
|
98
|
+
/** 单选 / 多选 / 段控件等下拉选项枚举值的来源。 */
|
|
99
|
+
oneOf?: unknown[] | undefined;
|
|
100
|
+
/** 数组元素的 schema(当 type 为 array 时使用)。 */
|
|
101
|
+
items?: unknown;
|
|
102
|
+
/** 默认值。 */
|
|
103
|
+
default?: JsonSchemaValue | undefined;
|
|
104
|
+
/** 透传未知字段,便于业务侧扩展。 */
|
|
105
|
+
[key: string]: unknown;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 通用 DTO property 类型:`基础结构 + option`。
|
|
109
|
+
*
|
|
110
|
+
* 泛型 `TConfig` 让 TableSchema / SchemaFormSchema 等复用同一形状的同时持有各自专属的 option 类型。
|
|
111
|
+
* `option` 中可携带 `required?: boolean`,与 schema 顶层 `required` 数组合并后参与校验。
|
|
112
|
+
*/
|
|
113
|
+
export type DtoSchemaProperty<TConfig extends object = Record<string, unknown>> = DtoSchemaPropertyBase & {
|
|
114
|
+
option: TConfig & {
|
|
115
|
+
required?: boolean;
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* DTO schema 顶层结构:标准 JSON Schema 的 object 形态。
|
|
120
|
+
*/
|
|
121
|
+
export type DtoSchema<TConfig extends object> = {
|
|
122
|
+
type: 'object';
|
|
123
|
+
properties: Record<string, DtoSchemaProperty<TConfig>>;
|
|
124
|
+
};
|
|
125
|
+
/** 表格场景使用的 DTO schema,每个 property.option 为 `TableColumnOption`。 */
|
|
126
|
+
export type TableSchema = DtoSchema<TableColumnOption>;
|
|
127
|
+
/** 表单场景使用的 DTO schema,每个 property.option 为 `SchemaFormFieldOption`。 */
|
|
128
|
+
export type SchemaFormSchema = DtoSchema<SchemaFormFieldOption>;
|
|
129
|
+
//# sourceMappingURL=schema-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-types.d.ts","sourceRoot":"","sources":["../../src/client/schema-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* schema 解析工具集合。
|
|
3
|
+
*
|
|
4
|
+
* 该模块负责把后端返回的 `SchemaModuleConfig`(含 table / search / 各业务组件的 option)
|
|
5
|
+
* 转换为前端可以直接渲染的 `ViewSchema` / `SchemaViewData`,是"配置驱动渲染"的关键环节。
|
|
6
|
+
*
|
|
7
|
+
* 主要能力:
|
|
8
|
+
* - `resolveSchemaOptions`:从 JSON Schema 的 `oneOf` / `items.oneOf` 中提取 `{label, value}[]`;
|
|
9
|
+
* - `buildSchemaViewData`:装配表格、搜索表单、各业务组件的视图数据;
|
|
10
|
+
* - `validateControlReferences`:校验 schema 中引用的自定义控件是否已在 extensions 中注册;
|
|
11
|
+
* - `resolveMenuPath` / `findMenuTrail` / `findMenu` / `firstModule`:菜单路径相关工具。
|
|
12
|
+
*/
|
|
13
|
+
import { type MenuItemType, type SchemaModuleConfig } from '@ynight/contracts';
|
|
14
|
+
import type { ClientExtensions, SchemaViewData } from './types';
|
|
15
|
+
/**
|
|
16
|
+
* 从 JSON Schema property 中推导控件的 `options` 候选项。
|
|
17
|
+
*
|
|
18
|
+
* 两种来源都会被识别:
|
|
19
|
+
* 1. property 自身带 `oneOf`(适用于顶层枚举);
|
|
20
|
+
* 2. property 是数组类型,且 `items.oneOf` 提供枚举(适用于数组枚举)。
|
|
21
|
+
*
|
|
22
|
+
* 每条 oneOf 项必须含 `const`(唯一值),同时 `title` 可作为 label 展示名,
|
|
23
|
+
* 否则降级为 `String(value)`。
|
|
24
|
+
*
|
|
25
|
+
* @param property JSON Schema property(支持 oneOf / items.oneOf)。
|
|
26
|
+
* @returns `{ label, value }[]`;没有合法 oneOf 时返回空数组。
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveSchemaOptions(property: {
|
|
29
|
+
oneOf?: unknown;
|
|
30
|
+
items?: unknown;
|
|
31
|
+
}): Array<{
|
|
32
|
+
label: string;
|
|
33
|
+
value: string | number | boolean;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* 装配 schema 模块的完整视图数据。
|
|
37
|
+
*
|
|
38
|
+
* 该函数是 dashboard 渲染 schema 模块的核心入口:它会构造表格 schema、搜索表单 schema,
|
|
39
|
+
* 以及 CreateForm / UpdateForm / DetailView 三个业务组件的 schema,并校验控件引用合法。
|
|
40
|
+
*
|
|
41
|
+
* @param menu 当前菜单项(限定为 module 形态)。
|
|
42
|
+
* @param extensions 客户端扩展集合,用于校验自定义控件是否注册。
|
|
43
|
+
* @returns 视图渲染所需的全部数据。
|
|
44
|
+
* @throws 当菜单不是 schema 模块或引用了未注册的控件时抛出错误。
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildSchemaViewData(menu: Extract<MenuItemType, {
|
|
47
|
+
menuType: 'module';
|
|
48
|
+
}>, extensions: ClientExtensions): SchemaViewData;
|
|
49
|
+
/**
|
|
50
|
+
* 校验 schema 中引用的自定义控件是否已在 `extensions.controls` 中注册。
|
|
51
|
+
*
|
|
52
|
+
* 校验范围:search / CreateForm / UpdateForm / DetailView 四个场景的 option.comType。
|
|
53
|
+
* Element Plus 内置控件(出现在 `SchemaFormControlType` 枚举中)会被直接放行。
|
|
54
|
+
*
|
|
55
|
+
* @param module 模块配置。
|
|
56
|
+
* @param extensions 客户端扩展集合。
|
|
57
|
+
* @throws 当字段引用了未注册的控件时抛出错误(含字段名与控件名)。
|
|
58
|
+
*/
|
|
59
|
+
export declare function validateControlReferences(module: SchemaModuleConfig, extensions: ClientExtensions): void;
|
|
60
|
+
/**
|
|
61
|
+
* 根据菜单项返回对应的 dashboard 路由 path。
|
|
62
|
+
*
|
|
63
|
+
* - 分组菜单:递归取第一个子模块的 path;
|
|
64
|
+
* - 自定义模块:使用 `moduleConfig.path`;
|
|
65
|
+
* - iframe 模块:固定 `/iframe`;
|
|
66
|
+
* - schema 模块:固定 `/schema`;
|
|
67
|
+
* - 其他(sider 等):统一归并到 `/sider`。
|
|
68
|
+
*
|
|
69
|
+
* @param menu 菜单项。
|
|
70
|
+
* @returns 路由 path(不含 base 前缀)。
|
|
71
|
+
*/
|
|
72
|
+
export declare function resolveMenuPath(menu: MenuItemType): string;
|
|
73
|
+
/**
|
|
74
|
+
* 在菜单树中查找所有满足 matches 的菜单,并保留分组/侧栏祖先。
|
|
75
|
+
*
|
|
76
|
+
* 通过"匹配命中则终止下钻"的策略保证深层菜单不会越过自身所属侧栏;
|
|
77
|
+
* 因此返回的数组总是 [祖先..., 命中菜单]。
|
|
78
|
+
*
|
|
79
|
+
* @param menus 菜单树根节点。
|
|
80
|
+
* @param matches 命中判定函数。
|
|
81
|
+
* @returns 从根到命中菜单的完整路径(不含匹配失败时的空数组)。
|
|
82
|
+
*/
|
|
83
|
+
export declare function findMenuTrail(menus: MenuItemType[], matches: (menu: MenuItemType) => boolean): MenuItemType[];
|
|
84
|
+
/**
|
|
85
|
+
* 按 key 在菜单树中查找菜单。
|
|
86
|
+
*
|
|
87
|
+
* 搜索范围覆盖分组(递归 subMenu)与侧栏(递归 moduleConfig.menu),
|
|
88
|
+
* 其他模块类型不展开。
|
|
89
|
+
*
|
|
90
|
+
* @param menus 菜单树根节点。
|
|
91
|
+
* @param key 菜单 key。
|
|
92
|
+
* @returns 命中则返回菜单对象,否则返回 undefined。
|
|
93
|
+
*/
|
|
94
|
+
export declare function findMenu(menus: MenuItemType[], key: string): MenuItemType | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* 返回菜单树中的第一个 module 类型菜单。
|
|
97
|
+
*
|
|
98
|
+
* 深度优先遍历:遇到 MODULE 立即返回,否则对分组递归。
|
|
99
|
+
* 用于 `resolveMenuPath` 在分组菜单下寻找落地页。
|
|
100
|
+
*
|
|
101
|
+
* @param menus 菜单树根节点。
|
|
102
|
+
* @returns 第一个 module 菜单,若整棵树均无 module 则返回 undefined。
|
|
103
|
+
*/
|
|
104
|
+
export declare function firstModule(menus: MenuItemType[]): MenuItemType | undefined;
|
|
105
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/client/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAyB,MAAM,SAAS,CAAC;AAgBvF;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAClC,CAAC,CAwBD;AA6DD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,EACnD,UAAU,EAAE,gBAAgB,GAC3B,cAAc,CAyBhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,gBAAgB,GAC3B,IAAI,CA0BN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAiB1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,GACvC,YAAY,EAAE,CAkBhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAsBrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,SAAS,CAY3E"}
|