@done-coding/admin-core 0.0.1-alpha.0

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 (116) hide show
  1. package/README.md +48 -0
  2. package/docs/TECH_SNAPSHOT.md +146 -0
  3. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/RETROSPECTIVE.md +63 -0
  4. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/design.md +575 -0
  5. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/landing-authorizations/2026-05-09-080900-/346/234/2371-/345/205/245/345/256/236/346/226/275/346/216/210/346/235/203.md +107 -0
  6. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/project-orchestration.md +58 -0
  7. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/requirements.md +238 -0
  8. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/tasks.md +290 -0
  9. package/es/_virtual/_plugin-vue_export-helper.mjs +9 -0
  10. package/es/components/display/WatchSize.vue.mjs +50 -0
  11. package/es/components/display/WatchSize.vue2.mjs +4 -0
  12. package/es/components/display/index.mjs +12 -0
  13. package/es/components/form/FormItem.vue.mjs +7 -0
  14. package/es/components/form/FormItem.vue2.mjs +145 -0
  15. package/es/components/form/FormMain.vue.mjs +142 -0
  16. package/es/components/form/FormMain.vue2.mjs +4 -0
  17. package/es/components/form/FormRadioGroup.vue.mjs +36 -0
  18. package/es/components/form/FormRadioGroup.vue2.mjs +4 -0
  19. package/es/components/form/FormSearch.vue.mjs +7 -0
  20. package/es/components/form/FormSearch.vue2.mjs +132 -0
  21. package/es/components/form/FormSelect.vue.mjs +65 -0
  22. package/es/components/form/FormSelect.vue2.mjs +4 -0
  23. package/es/components/form/FormTree.vue.mjs +34 -0
  24. package/es/components/form/FormTree.vue2.mjs +4 -0
  25. package/es/components/form/FormVerifyCode.vue.mjs +72 -0
  26. package/es/components/form/FormVerifyCode.vue2.mjs +4 -0
  27. package/es/components/form/FormVerifyImage.vue.mjs +7 -0
  28. package/es/components/form/FormVerifyImage.vue2.mjs +60 -0
  29. package/es/components/form/index.mjs +32 -0
  30. package/es/components/form/utils.mjs +147 -0
  31. package/es/components/list-page/ListPage.vue.mjs +7 -0
  32. package/es/components/list-page/ListPage.vue2.mjs +194 -0
  33. package/es/components/list-page/index.mjs +14 -0
  34. package/es/components/menu/MenuItemSub.vue.mjs +60 -0
  35. package/es/components/menu/MenuItemSub.vue2.mjs +4 -0
  36. package/es/components/menu/MenuTree.vue.mjs +87 -0
  37. package/es/components/menu/MenuTree.vue2.mjs +4 -0
  38. package/es/components/menu/index.mjs +12 -0
  39. package/es/components/misc/TriggerAutoImport.vue.mjs +10 -0
  40. package/es/components/misc/TriggerAutoImport.vue2.mjs +4 -0
  41. package/es/components/misc/index.mjs +12 -0
  42. package/es/components/modal/ConfirmModal.vue.mjs +8 -0
  43. package/es/components/modal/ConfirmModal.vue2.mjs +141 -0
  44. package/es/components/modal/DetailModal.vue.mjs +67 -0
  45. package/es/components/modal/DetailModal.vue2.mjs +4 -0
  46. package/es/components/modal/index.mjs +17 -0
  47. package/es/components/table/TableMain.vue.mjs +7 -0
  48. package/es/components/table/TableMain.vue2.mjs +204 -0
  49. package/es/components/table/index.mjs +14 -0
  50. package/es/config/list-model.mjs +13 -0
  51. package/es/config/route.mjs +4 -0
  52. package/es/helpers/form.mjs +32 -0
  53. package/es/helpers/route.mjs +60 -0
  54. package/es/helpers/state.mjs +46 -0
  55. package/es/helpers/storage.mjs +16 -0
  56. package/es/hooks/activated.mjs +42 -0
  57. package/es/hooks/feel-size.mjs +30 -0
  58. package/es/hooks/menus-dispatch.mjs +47 -0
  59. package/es/index.mjs +97 -0
  60. package/es/inject/key.mjs +6 -0
  61. package/es/style.css +1 -0
  62. package/es/utils/id.mjs +5 -0
  63. package/es/utils/router.mjs +18 -0
  64. package/es/utils/time.mjs +18 -0
  65. package/package.json +81 -0
  66. package/types/components/display/WatchSize.vue.d.ts +44 -0
  67. package/types/components/display/index.d.ts +5 -0
  68. package/types/components/form/FormItem.vue.d.ts +50 -0
  69. package/types/components/form/FormMain.vue.d.ts +51 -0
  70. package/types/components/form/FormRadioGroup.vue.d.ts +23 -0
  71. package/types/components/form/FormSearch.vue.d.ts +23 -0
  72. package/types/components/form/FormSelect.vue.d.ts +60 -0
  73. package/types/components/form/FormTree.vue.d.ts +42 -0
  74. package/types/components/form/FormVerifyCode.vue.d.ts +32 -0
  75. package/types/components/form/FormVerifyImage.vue.d.ts +22 -0
  76. package/types/components/form/index.d.ts +13 -0
  77. package/types/components/form/types.d.ts +223 -0
  78. package/types/components/form/utils.d.ts +49 -0
  79. package/types/components/list-page/ListPage.vue.d.ts +44 -0
  80. package/types/components/list-page/index.d.ts +6 -0
  81. package/types/components/list-page/types.d.ts +44 -0
  82. package/types/components/menu/MenuItemSub.vue.d.ts +19 -0
  83. package/types/components/menu/MenuTree.vue.d.ts +28 -0
  84. package/types/components/menu/index.d.ts +6 -0
  85. package/types/components/misc/TriggerAutoImport.vue.d.ts +11 -0
  86. package/types/components/misc/index.d.ts +5 -0
  87. package/types/components/modal/ConfirmModal.vue.d.ts +107 -0
  88. package/types/components/modal/DetailModal.vue.d.ts +23 -0
  89. package/types/components/modal/index.d.ts +7 -0
  90. package/types/components/modal/types.d.ts +33 -0
  91. package/types/components/table/TableMain.vue.d.ts +35 -0
  92. package/types/components/table/index.d.ts +6 -0
  93. package/types/components/table/types.d.ts +90 -0
  94. package/types/config/index.d.ts +2 -0
  95. package/types/config/list-model.d.ts +48 -0
  96. package/types/config/route.d.ts +2 -0
  97. package/types/helpers/form.d.ts +11 -0
  98. package/types/helpers/index.d.ts +4 -0
  99. package/types/helpers/route.d.ts +37 -0
  100. package/types/helpers/state.d.ts +26 -0
  101. package/types/helpers/storage.d.ts +10 -0
  102. package/types/hooks/activated.d.ts +8 -0
  103. package/types/hooks/feel-size.d.ts +10 -0
  104. package/types/hooks/index.d.ts +3 -0
  105. package/types/hooks/menus-dispatch.d.ts +33 -0
  106. package/types/index.d.ts +24 -0
  107. package/types/inject/index.d.ts +1 -0
  108. package/types/inject/key.d.ts +11 -0
  109. package/types/types/dot-path.d.ts +13 -0
  110. package/types/types/index.d.ts +3 -0
  111. package/types/types/route.d.ts +92 -0
  112. package/types/types/utility-types.d.ts +8 -0
  113. package/types/utils/id.d.ts +2 -0
  114. package/types/utils/index.d.ts +3 -0
  115. package/types/utils/router.d.ts +8 -0
  116. package/types/utils/time.d.ts +2 -0
@@ -0,0 +1,35 @@
1
+ import { TableMainProps, TableMainInstance, ElTableColumnProps } from './types';
2
+
3
+ declare const _default: <T extends Record<string, any>, SQ extends Record<string, any>, F extends Record<string, any>>(__VLS_props: Awaited<typeof __VLS_setup>["props"], __VLS_ctx?: __VLS_Prettify<Pick<Awaited<typeof __VLS_setup>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: __VLS_Prettify<__VLS_OmitKeepDiscriminatedUnion<(Partial<{}> & Omit<{
5
+ readonly onLoadingChange?: ((value: boolean) => any) | undefined;
6
+ readonly onPageChange?: ((value: number) => any) | undefined;
7
+ readonly onPageSizeChange?: ((value: number) => any) | undefined;
8
+ readonly onDataChange?: ((data: T[]) => any) | undefined;
9
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>) & TableMainProps<T, SQ, F>, keyof import('vue').VNodeProps | keyof import('vue').AllowedComponentProps>> & {} & (import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps);
10
+ expose(exposed: import('vue').ShallowUnwrapRef<TableMainInstance>): void;
11
+ attrs: any;
12
+ slots: ReturnType<() => Partial<Record<NonNullable<Uppercase<string> | Extract<keyof T, string> | undefined>, (_: {
13
+ row: T;
14
+ column: ElTableColumnProps<T, F>;
15
+ $index: number;
16
+ injectInfo: F;
17
+ exposeInfo: TableMainInstance;
18
+ }) => any>> & Partial<Record<NonNullable<"header-undefined" | `header-${Uppercase<string>}` | `header-${Extract<keyof T, string>}`>, (_: {
19
+ column: ElTableColumnProps<T, F>;
20
+ $index: number;
21
+ injectInfo: F;
22
+ exposeInfo: TableMainInstance;
23
+ }) => any>>>;
24
+ emit: {
25
+ (e: "pageChange" | "pageSizeChange", value: number): void;
26
+ (e: "dataChange", data: T[]): void;
27
+ (e: "loadingChange", value: boolean): void;
28
+ };
29
+ }>) => import('vue').VNode & {
30
+ __ctx?: Awaited<typeof __VLS_setup>;
31
+ };
32
+ export default _default;
33
+ type __VLS_Prettify<T> = {
34
+ [K in keyof T]: T[K];
35
+ } & {};
@@ -0,0 +1,6 @@
1
+ import { Plugin } from 'vue';
2
+ import { default as TableMain } from './TableMain.vue';
3
+
4
+ export * from './types';
5
+ export { TableMain };
6
+ export declare const tableInstall: Plugin;
@@ -0,0 +1,90 @@
1
+ import { ElTableColumn as ETC, TableInstance, TableProps } from 'element-plus';
2
+ import { APP_API_LIST_MODEL_KEY_CONFIG, BuildListParams } from '../../config';
3
+ import { DotToObject, UnionToIntersection } from '../../types';
4
+ import { ExtractPropTypes, VNode } from 'vue';
5
+
6
+ /**
7
+ * 表格请求参数
8
+ * ---
9
+ * 静态参数 SQ + KEY_CONFIG 推导出的 page.page / page.pageSize 嵌套
10
+ */
11
+ export type TableApiParams<
12
+ /** 静态参数 */
13
+ SQ extends Record<string, any> = Record<string, any>> = BuildListParams<typeof APP_API_LIST_MODEL_KEY_CONFIG, SQ>;
14
+ /**
15
+ * 表格响应结果
16
+ * ---
17
+ * items 列表 + page.totalRecord 总数(仅 2 字段子集,不带 page.page / page.pageSize)
18
+ */
19
+ export type TableApiResult<T extends Record<string, any> = Record<string, any>> = UnionToIntersection<DotToObject<typeof APP_API_LIST_MODEL_KEY_CONFIG.LIST_KEY, T[]> | DotToObject<typeof APP_API_LIST_MODEL_KEY_CONFIG.TOTAL_KEY, number>>;
20
+ export interface TableMainInstance {
21
+ refresh: (silent?: boolean) => void;
22
+ reload: (slice?: boolean) => void;
23
+ getTableInstance: () => TableInstance | undefined;
24
+ }
25
+ /** 表格列默认作用域 */
26
+ export interface TableColumnDefaultScope<T extends Record<string, any>, F extends Record<string, any>> {
27
+ row: T;
28
+ column: ElTableColumnProps<T, F>;
29
+ $index: number;
30
+ injectInfo: F;
31
+ exposeInfo: TableMainInstance;
32
+ }
33
+ /** 表格列组件props[$开头的属性vue报错] */
34
+ export type TableColumnComponentProps<T extends Record<string, any>, F extends Record<string, any>> = Omit<TableColumnDefaultScope<T, F>, "$index"> & {
35
+ _index: TableColumnDefaultScope<T, F>["$index"];
36
+ };
37
+ /** 表格列header作用域 */
38
+ export interface TableColumnHeaderScope<T extends Record<string, any>, F extends Record<string, any>> {
39
+ column: ElTableColumnProps<T, F>;
40
+ $index: number;
41
+ injectInfo: F;
42
+ exposeInfo: TableMainInstance;
43
+ }
44
+ export type ExtractElTableColumnProps = ExtractPropTypes<typeof ETC>;
45
+ export type ElTableColumnProps<T extends Record<string, any> = Record<string, any>,
46
+ /** 期望注入到表格列插槽上的额外内容 */
47
+ F extends Record<string, any> = {}> = Omit<ExtractPropTypes<typeof ETC>, "prop" | "columnKey" | "type"> & Partial<{
48
+ prop: Extract<keyof T, string> | `${Uppercase<string>}`;
49
+ columnKey: ElTableColumnProps<T>["prop"];
50
+ type: "default" | "selection" | "index" | "expand";
51
+ fixed: "left" | "right" | boolean;
52
+ align: "left" | "center" | "right";
53
+ headerAlign: "left" | "center" | "right";
54
+ filterPlacement: "top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end";
55
+ /** 插槽render */
56
+ render: string | Record<string, any> | ((props: TableColumnComponentProps<T, F>) => VNode);
57
+ /** 表头插槽render */
58
+ headerRender: string | Record<string, any> | ((props: TableColumnHeaderScope<T, F>) => VNode);
59
+ }>;
60
+ export interface TableMainProps<
61
+ /** 行数据结构 */
62
+ T extends Record<string, any>,
63
+ /** 静态参数 */
64
+ SQ extends Record<string, any>,
65
+ /** 期望注入到表格列插槽上的额外内容 */
66
+ F extends Record<string, any>> {
67
+ /** 展示分页器 */
68
+ showPager?: boolean;
69
+ /** 参数 */
70
+ query?: SQ;
71
+ /** 每页条数 */
72
+ pageSizeInit?: number;
73
+ pageSizeOptions?: number[];
74
+ pageLayout?: string;
75
+ rowKey: Extract<keyof T, string> | ((row: T) => string);
76
+ /** 请求api */
77
+ api: (params: TableApiParams<SQ>) => Promise<TableApiResult<T>>;
78
+ tableProps?: Omit<TableProps<T>, "data" | "maxHeight" | "rowKey"> & Record<`on${Capitalize<string>}`, (...args: any[]) => any>;
79
+ columns: ElTableColumnProps<T, F>[];
80
+ /** 最大高度 */
81
+ maxHeight?: number;
82
+ /** 表头背景色 */
83
+ headerColor?: string;
84
+ /** 精细化布局 */
85
+ refine?: boolean;
86
+ /** 精细化预留高度 */
87
+ refineReduceHeight?: number;
88
+ /** 给插槽注入的方法 */
89
+ injectInfo?: F;
90
+ }
@@ -0,0 +1,2 @@
1
+ export * from './list-model';
2
+ export * from './route';
@@ -0,0 +1,48 @@
1
+ import { DotToObject, UnionToIntersection } from '../types';
2
+
3
+ /**
4
+ * 列表 KEY 配置接口
5
+ * ---
6
+ * 约束消费方传入的 KEY_CONFIG 对象 shape,后续 BuildListModel / BuildListParams 工具基于本接口推导
7
+ */
8
+ export interface ListModelKeyConfig {
9
+ PAGE_SIZE_KEY: string;
10
+ CURRENT_PAGE_KEY: string;
11
+ TOTAL_KEY: string;
12
+ LIST_KEY: string;
13
+ }
14
+ /**
15
+ * 基于 KEY_CONFIG 联合推导完整列表响应模型
16
+ * ---
17
+ * @example
18
+ * BuildListModel<typeof APP_API_LIST_MODEL_KEY_CONFIG, User>
19
+ * -> { items: User[]; page: { page: number; pageSize: number; totalRecord: number } }
20
+ */
21
+ export type BuildListModel<KC extends ListModelKeyConfig, T> = UnionToIntersection<DotToObject<KC["LIST_KEY"], T[]> | DotToObject<KC["TOTAL_KEY"], number> | DotToObject<KC["CURRENT_PAGE_KEY"], number> | DotToObject<KC["PAGE_SIZE_KEY"], number>>;
22
+ /**
23
+ * 基于 KEY_CONFIG 联合推导列表请求参数模型
24
+ * ---
25
+ * @example
26
+ * BuildListParams<typeof APP_API_LIST_MODEL_KEY_CONFIG, { keyword?: string }>
27
+ * -> { keyword?: string } & { page: { page: number; pageSize: number } }
28
+ */
29
+ export type BuildListParams<KC extends ListModelKeyConfig, P extends Record<string, any> = Record<string, any>> = P & UnionToIntersection<DotToObject<KC["CURRENT_PAGE_KEY"], number> | DotToObject<KC["PAGE_SIZE_KEY"], number>>;
30
+ /** 应用接口列表模型配置(core 单一来源) */
31
+ export declare const APP_API_LIST_MODEL_KEY_CONFIG: Readonly<{
32
+ /** 当前页码 key */
33
+ CURRENT_PAGE_KEY: "page.page";
34
+ /** 每页条数 key */
35
+ PAGE_SIZE_KEY: "page.pageSize";
36
+ /** 总数 key */
37
+ TOTAL_KEY: "page.totalRecord";
38
+ /** 数据列表 key */
39
+ LIST_KEY: "items";
40
+ }>;
41
+ /** 应用接口列表模型 */
42
+ export type AppApiListModel<T = any> = BuildListModel<typeof APP_API_LIST_MODEL_KEY_CONFIG, T>;
43
+ /** 应用接口列表分页参数 key */
44
+ export type AppApiListPageParamsKey = typeof APP_API_LIST_MODEL_KEY_CONFIG.PAGE_SIZE_KEY | typeof APP_API_LIST_MODEL_KEY_CONFIG.CURRENT_PAGE_KEY;
45
+ /** 应用接口列表 排除分页参数的 key */
46
+ export type AppApiListNoPageParamsKey = Exclude<string, AppApiListPageParamsKey>;
47
+ /** 应用接口列表请求参数模型 */
48
+ export type AppApiListParamsModel<P extends Record<AppApiListNoPageParamsKey, any> = Record<AppApiListNoPageParamsKey, any>> = BuildListParams<typeof APP_API_LIST_MODEL_KEY_CONFIG, Partial<P>>;
@@ -0,0 +1,2 @@
1
+ /** 模块级别的路由 */
2
+ export declare const ROUTE_MODULE_LEVEL = 1;
@@ -0,0 +1,11 @@
1
+ import { FormItemRule } from 'element-plus';
2
+
3
+ /**
4
+ * 密码规则
5
+ */
6
+ export declare const passwordRule: FormItemRule;
7
+ export declare const getConfirmPasswordRule: (getPassword: () => string) => FormItemRule;
8
+ /** 选择框全选值 */
9
+ export declare const FORM_CONFIG_SELECT_ALL_VALUE: string;
10
+ /** 设置表单组件类型 */
11
+ export declare const setFormComponentType: () => void;
@@ -0,0 +1,4 @@
1
+ export * from './form';
2
+ export * from './storage';
3
+ export * from './state';
4
+ export * from './route';
@@ -0,0 +1,37 @@
1
+ import { RouteRecordRaw } from 'vue-router';
2
+ import { RouteMetaResolveRaw } from '../types';
3
+
4
+ /** 路由元信息默认配置(工厂参数最小 shape) */
5
+ export interface RouteMetaDefaultConfig {
6
+ /** 各路由[未配置情况下]默认是否展示在菜单 */
7
+ menuShow: boolean;
8
+ /** 各路由[未配置情况下]默认是否需要登录 */
9
+ needLogin: boolean;
10
+ }
11
+ /**
12
+ * 创建路由元信息解析 raw 树生成器
13
+ * ---
14
+ * 工厂模式:app 层传入 metaDefault 配置(含 menuShow / needLogin 默认值)
15
+ *
16
+ * @example
17
+ * const generateRouteMetaRawTree = createGenerateRouteMetaRawTree(APP_ROUTER_META_DEFAULT_CONFIG);
18
+ * const tree = generateRouteMetaRawTree(routes, { ... });
19
+ */
20
+ export declare const createGenerateRouteMetaRawTree: (metaDefault: RouteMetaDefaultConfig) => <T extends {
21
+ children: T[];
22
+ } = RouteMetaResolveRaw>(routesList: RouteRecordRaw[], { parentPath, parentPathList, routeLevel, sortFn, mapFn, filterFn, }?: Partial<Pick<RouteMetaResolveRaw, "parentPath" | "parentPathList" | "routeLevel"> & {
23
+ /** 排序函数 */
24
+ sortFn?: (a: T, b: T) => number;
25
+ /** 映射函数 */
26
+ mapFn: (route: Omit<RouteMetaResolveRaw, "children"> & {
27
+ children: T[];
28
+ }) => T;
29
+ /** 过滤函数 */
30
+ filterFn: (raw: Omit<RouteMetaResolveRaw, "children"> & {
31
+ children: T[];
32
+ },
33
+ /** 是否有符合过滤条件的子路由 */
34
+ haveChildren: boolean,
35
+ /** [原始配置]是否有子路由 */
36
+ haveChildrenRaw: boolean) => boolean;
37
+ }>) => T[];
@@ -0,0 +1,26 @@
1
+ export interface UseStateOptions {
2
+ /** 是否调试 */
3
+ debug: boolean;
4
+ /** 模块命名空间 */
5
+ moduleKey: string;
6
+ /** 缓存 */
7
+ cache?: boolean;
8
+ /** 缓存实现 */
9
+ storage?: Storage;
10
+ }
11
+ /**
12
+ * 创建 useState 工厂
13
+ * ---
14
+ * 工厂模式:app 层传入命名空间,core 不感知具体值
15
+ *
16
+ * @example
17
+ * const useState = createUseState("myapp");
18
+ * const moduleState = useState({ count: 0 }, { debug: true, moduleKey: "counter" });
19
+ * // cacheKey 形如 "myapp/useState/counter"
20
+ */
21
+ export declare const createUseState: (factoryNamespace: string) => <S extends Record<string, any> = Record<string, any>>(initState: S | (() => S), { debug, moduleKey, cache, storage }?: UseStateOptions) => {
22
+ state: any;
23
+ getStateInit: () => S;
24
+ resetState: () => void;
25
+ updateState: (newStateObj?: Partial<S>) => void;
26
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 创建带命名空间的 localStorage 实例
3
+ * ---
4
+ * 工厂模式:app 层传入命名空间,core 不感知具体值
5
+ *
6
+ * @example
7
+ * const myStorage = createStorageWithNamespace("myapp");
8
+ * myStorage.setItem("token", "xxx"); // 实际写入 localStorage 的 key 为 "myapp/token"
9
+ */
10
+ export declare const createStorageWithNamespace: (namespace: string) => Storage;
@@ -0,0 +1,8 @@
1
+ /** 是否激活 */
2
+ export declare const useActivated: () => {
3
+ isActivated: globalThis.Ref<boolean, boolean>;
4
+ };
5
+ /** 激活时执行时间 */
6
+ export declare const useActivatedExec: (callback: () => void) => void;
7
+ /** 激活时监听事件 */
8
+ export declare const useActivatedEvent: (bind: () => void, unbind: () => void) => void;
@@ -0,0 +1,10 @@
1
+ /** 感知元素尺寸变化 */
2
+ export declare const useFeelSize: () => {
3
+ unwatchDom: () => void;
4
+ watchDom: (dom: HTMLElement) => void;
5
+ /** 元素尺寸信息只读属性 */
6
+ sizeInfo: globalThis.ComputedRef<{
7
+ width: number;
8
+ height: number;
9
+ } | undefined>;
10
+ };
@@ -0,0 +1,3 @@
1
+ export * from './activated';
2
+ export * from './feel-size';
3
+ export * from './menus-dispatch';
@@ -0,0 +1,33 @@
1
+ import { RouteMetaResolveRaw } from '../types';
2
+
3
+ /** 应用菜单数据分发 */
4
+ export declare const useMenusDataDispatch: ({ getMenus, getMenuFlatList, getExtractLevel1ToHeader, }: {
5
+ /** 菜单树 */
6
+ getMenus: () => RouteMetaResolveRaw[];
7
+ /** 扁平化菜单列表 */
8
+ getMenuFlatList: () => RouteMetaResolveRaw[];
9
+ /** 判断是否提取1级路由模块到HEADER */
10
+ getExtractLevel1ToHeader: () => boolean;
11
+ }) => {
12
+ sidebarMenus: globalThis.ComputedRef<RouteMetaResolveRaw[]>;
13
+ headerMenus: globalThis.ComputedRef<{
14
+ children: never[];
15
+ path: string;
16
+ title: string;
17
+ routeLevel: number;
18
+ redirectToFirstChildRoute: boolean;
19
+ menuShow: boolean;
20
+ menuIcon?: import('vue').DefineComponent;
21
+ menuSort: number;
22
+ childrenRaw: import('vue-router').RouteRecordRaw[];
23
+ parentPath: string;
24
+ parentPathList: string[];
25
+ permissionKey?: string | number;
26
+ checkPermission: boolean;
27
+ permissionEditShow: boolean;
28
+ needLogin: boolean;
29
+ }[]>;
30
+ activeMenu: globalThis.ComputedRef<RouteMetaResolveRaw | undefined>;
31
+ activeModuleMenu: globalThis.ComputedRef<RouteMetaResolveRaw | undefined>;
32
+ needRedirectToFirstChildMenu: globalThis.ComputedRef<RouteMetaResolveRaw | undefined>;
33
+ };
@@ -0,0 +1,24 @@
1
+ import { Plugin } from 'vue';
2
+ import { formInstall } from './components/form';
3
+ import { menuInstall } from './components/menu';
4
+ import { displayInstall } from './components/display';
5
+ import { miscInstall } from './components/misc';
6
+ import { modalInstall } from './components/modal';
7
+ import { tableInstall } from './components/table';
8
+ import { listPageInstall } from './components/list-page';
9
+
10
+ export * from './components/form';
11
+ export * from './components/menu';
12
+ export * from './components/display';
13
+ export * from './components/misc';
14
+ export * from './components/modal';
15
+ export * from './components/table';
16
+ export * from './components/list-page';
17
+ export * from './utils';
18
+ export * from './hooks';
19
+ export * from './types';
20
+ export * from './config';
21
+ export * from './inject';
22
+ export * from './helpers';
23
+ export { formInstall, menuInstall, displayInstall, miscInstall, modalInstall, tableInstall, listPageInstall, };
24
+ export declare const installComponents: Plugin;
@@ -0,0 +1 @@
1
+ export * from './key';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * body 视口高度
3
+ * ---
4
+ * AppBody(留 app)通过 provide 写入;
5
+ * TableMain / ListPage / Page1(核内或核外消费方)通过 inject 读取;
6
+ * ---
7
+ * 使用 `Symbol.for` 全局注册表保证跨包 / 跨 chunk / 跨 ESM 实例的 Symbol 唯一性。
8
+ * `Symbol(key)` 每次调用产生新实例;vite chunk split 或多次模块 evaluate 可能
9
+ * 产生多个 Symbol → inject/provide 失配 → 列表精细化高度计算塌陷至 fallback。
10
+ */
11
+ export declare const BODY_CONTENT_VIEWPORT_HEIGHT: unique symbol;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 字符串点路径转嵌套对象类型
3
+ * ---
4
+ * @example
5
+ * DotToObject<"page.page", number> -> { page: { page: number } }
6
+ * DotToObject<"items", T[]> -> { items: T[] }
7
+ * DotToObject<"a.b.c", string> -> { a: { b: { c: string } } }
8
+ */
9
+ export type DotToObject<P extends string, V> = P extends `${infer Head}.${infer Tail}` ? {
10
+ [K in Head]: DotToObject<Tail, V>;
11
+ } : {
12
+ [K in P]: V;
13
+ };
@@ -0,0 +1,3 @@
1
+ export * from './route';
2
+ export * from './dot-path';
3
+ export * from './utility-types';
@@ -0,0 +1,92 @@
1
+ import { RouteRecordRaw } from 'vue-router';
2
+ import { DefineComponent } from 'vue';
3
+
4
+ /** 路由权限配置 */
5
+ export type RoutePermission = Partial<{
6
+ /** 是否需要登录 */
7
+ login: boolean;
8
+ /**
9
+ * 权限key
10
+ * 若为number 期望!=0
11
+ * 若为string 期望!=""
12
+ */
13
+ key: number | string;
14
+ /** 权限key使用路径 */
15
+ keyUsePath: boolean;
16
+ /** 权限编辑时是否展示 默认配置权限key就会展示 */
17
+ editShow: boolean;
18
+ }>;
19
+ /**
20
+ * 路由 meta 扩展形状(与 app 端 vue-router declaration merging 对齐)
21
+ * ---
22
+ * core 不做全局 declaration merging,仅作 core 内部类型自洽用;
23
+ * app 端仍通过自身 router-meta.d.ts 做 vue-router declaration merging,获得 vue-router RouteMeta 的扩展类型
24
+ */
25
+ export interface AppRouteMeta {
26
+ /** 页面名称 */
27
+ title: string;
28
+ /** 是否缓存 */
29
+ keepAlive?: boolean;
30
+ /** 是否重定向到第一个有权限的子路由 */
31
+ redirectToFirstChildRoute?: boolean;
32
+ /** 页面布局 */
33
+ layout?: Partial<{
34
+ header: boolean;
35
+ sidebar: boolean;
36
+ footer: boolean;
37
+ breadcrumb: boolean;
38
+ bodyShimPadding: number;
39
+ }>;
40
+ /** 菜单 */
41
+ menu?: Partial<{
42
+ show: boolean;
43
+ sort: number;
44
+ /** 图标 (element-plus 等图标实例的 DefineComponent 签名差异较大,这里用 any 兼容) */
45
+ icon: any;
46
+ }>;
47
+ /** 权限 */
48
+ permission?: RoutePermission;
49
+ }
50
+ /** 获取路由权限key入参 */
51
+ export interface GetRoutePermissionParams {
52
+ /** 路由路径 */
53
+ path: string;
54
+ /** 权限配置 */
55
+ permission: RoutePermission | undefined;
56
+ }
57
+ /** 路由元信息解析raw */
58
+ export interface RouteMetaResolveRaw {
59
+ /** 路由地址 */
60
+ path: string;
61
+ /** 页面名称 */
62
+ title: string;
63
+ /** 路由级别 */
64
+ routeLevel: number;
65
+ /**
66
+ * 是否重定向到第一个有权限的子路由
67
+ * 详见 RouteMeta.redirectToFirstChildRoute
68
+ */
69
+ redirectToFirstChildRoute: boolean;
70
+ /** 是否在菜单展示 */
71
+ menuShow: boolean;
72
+ /** 菜单icon */
73
+ menuIcon?: DefineComponent;
74
+ /** 菜单排序 */
75
+ menuSort: number;
76
+ /** 子路由原始配置 */
77
+ childrenRaw: RouteRecordRaw[];
78
+ /** 子路由元信息解析raw */
79
+ children: RouteMetaResolveRaw[];
80
+ /** 父路由地址 */
81
+ parentPath: string;
82
+ /** 父路由地址列表 */
83
+ parentPathList: string[];
84
+ /** 权限key */
85
+ permissionKey?: string | number;
86
+ /** 是否检测权限 */
87
+ checkPermission: boolean;
88
+ /** (配置权限的前提下)权限编辑时是否展示 */
89
+ permissionEditShow: boolean;
90
+ /** 是否需要登录 */
91
+ needLogin: boolean;
92
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 联合类型转交叉类型
3
+ * ---
4
+ * 用于多个 DotToObject 结果合并:
5
+ * { page: { page: number } } | { page: { pageSize: number } }
6
+ * -> { page: { page: number; pageSize: number } }
7
+ */
8
+ export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
@@ -0,0 +1,2 @@
1
+ /** 获取不重复的值[单次生命周期中] */
2
+ export declare const getId: (prefix?: string) => string;
@@ -0,0 +1,3 @@
1
+ export * from './time';
2
+ export * from './id';
3
+ export * from './router';
@@ -0,0 +1,8 @@
1
+ import { GetRoutePermissionParams } from '../types';
2
+
3
+ /** 获取路由权限key */
4
+ export declare const getRoutePermissionKey: ({ path, permission: permissionConfig, }: GetRoutePermissionParams) => string | number | undefined;
5
+ /** 扁平化路由元信息解析raw */
6
+ export declare const flatRouteMetaResolveRaw: <T extends {
7
+ children: T[];
8
+ }>(list: T[], arr?: T[]) => T[];
@@ -0,0 +1,2 @@
1
+ /** 倒计时 */
2
+ export declare const timeCountDown: (time: number, handler: (t: number) => void, endHandler: () => void) => () => void;