@done-coding/admin-core 0.3.1-alpha.0 → 0.4.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 (79) hide show
  1. package/es/bridge/index.mjs +83 -27
  2. package/es/components/app-layout/AppBody.vue.mjs +7 -0
  3. package/es/components/app-layout/AppBody.vue2.mjs +89 -0
  4. package/es/components/app-layout/AppBreadcrumb.vue.mjs +7 -0
  5. package/es/components/app-layout/AppBreadcrumb.vue2.mjs +58 -0
  6. package/es/components/app-layout/AppFooter.vue.mjs +7 -0
  7. package/es/components/app-layout/AppFooter.vue2.mjs +17 -0
  8. package/es/components/app-layout/AppHeader.vue.mjs +7 -0
  9. package/es/components/app-layout/AppHeader.vue2.mjs +99 -0
  10. package/es/components/app-layout/AppLayout.vue.mjs +7 -0
  11. package/es/components/app-layout/AppLayout.vue2.mjs +130 -0
  12. package/es/components/app-layout/AppPage.vue.mjs +7 -0
  13. package/es/components/app-layout/AppPage.vue2.mjs +39 -0
  14. package/es/components/app-layout/AppSidebar.vue.mjs +7 -0
  15. package/es/components/app-layout/AppSidebar.vue2.mjs +97 -0
  16. package/es/components/app-layout/index.mjs +32 -0
  17. package/es/components/display/ActionBtnGroup.vue.mjs +61 -0
  18. package/es/components/display/ActionBtnGroup.vue2.mjs +4 -0
  19. package/es/components/display/index.mjs +13 -11
  20. package/es/components/misc/ActionBtn.vue.mjs +84 -65
  21. package/es/components/misc/ActionConfirm.vue.mjs +1 -1
  22. package/es/components/misc/ActionConfirm.vue2.mjs +77 -71
  23. package/es/components/misc/SelectModule.vue.mjs +55 -0
  24. package/es/components/misc/SelectModule.vue2.mjs +4 -0
  25. package/es/components/modal/ConfirmModal.vue.mjs +1 -1
  26. package/es/components/modal/ConfirmModal.vue2.mjs +13 -12
  27. package/es/components/modal/modal-shelf-hierarchy.mjs +4 -6
  28. package/es/components/table/ToolbarButtons.vue.mjs +10 -40
  29. package/es/index.mjs +165 -132
  30. package/es/inject/key.mjs +15 -6
  31. package/es/router/guard/index.mjs +31 -0
  32. package/es/router/guard/login.mjs +4 -0
  33. package/es/router/guard/permission.mjs +4 -0
  34. package/es/store/app.mjs +103 -0
  35. package/es/store/router-permission.mjs +65 -0
  36. package/es/store/user.mjs +52 -52
  37. package/es/style.css +1 -1
  38. package/package.json +2 -2
  39. package/types/bridge/index.d.ts +180 -76
  40. package/types/components/app-layout/AppBody.vue.d.ts +45 -0
  41. package/types/components/app-layout/AppBreadcrumb.vue.d.ts +25 -0
  42. package/types/components/app-layout/AppFooter.vue.d.ts +2 -0
  43. package/types/components/app-layout/AppHeader.vue.d.ts +55 -0
  44. package/types/components/app-layout/AppLayout.vue.d.ts +76 -0
  45. package/types/components/app-layout/AppPage.vue.d.ts +54 -0
  46. package/types/components/app-layout/AppSidebar.vue.d.ts +51 -0
  47. package/types/components/app-layout/index.d.ts +27 -0
  48. package/types/components/app-layout/types.d.ts +43 -0
  49. package/types/components/display/ActionBtnGroup.vue.d.ts +16 -0
  50. package/types/components/display/TabsHeader.vue.d.ts +8 -8
  51. package/types/components/display/index.d.ts +10 -1
  52. package/types/components/display/types.d.ts +42 -1
  53. package/types/components/misc/ActionBtn.vue.d.ts +17 -23
  54. package/types/components/misc/ActionConfirm.vue.d.ts +56 -27
  55. package/types/components/misc/SelectModule.vue.d.ts +2 -0
  56. package/types/components/misc/index.d.ts +2 -1
  57. package/types/components/misc/types.d.ts +35 -26
  58. package/types/components/modal/ConfirmModal.vue.d.ts +19 -2
  59. package/types/components/modal/modal-shelf-hierarchy.d.ts +1 -1
  60. package/types/components/table/TableToolbar.vue.d.ts +8 -8
  61. package/types/components/table/types.d.ts +10 -12
  62. package/types/helpers/index.d.ts +10 -3
  63. package/types/index.d.ts +4 -1
  64. package/types/inject/key.d.ts +25 -0
  65. package/types/router/guard/index.d.ts +21 -0
  66. package/types/router/guard/login.d.ts +5 -0
  67. package/types/router/guard/permission.d.ts +5 -0
  68. package/types/router/guard/types.d.ts +15 -0
  69. package/types/router/index.d.ts +1 -0
  70. package/types/store/app.d.ts +149 -0
  71. package/types/store/index.d.ts +2 -0
  72. package/types/store/router-permission.d.ts +80 -0
  73. package/types/store/user.d.ts +11 -9
  74. /package/es/{helpers → bridge}/route.mjs +0 -0
  75. /package/es/{helpers → bridge}/state.mjs +0 -0
  76. /package/es/{helpers → bridge}/storage.mjs +0 -0
  77. /package/types/{helpers → bridge}/route.d.ts +0 -0
  78. /package/types/{helpers → bridge}/state.d.ts +0 -0
  79. /package/types/{helpers → bridge}/storage.d.ts +0 -0
@@ -1,5 +1,6 @@
1
1
  import { InjectionKey } from 'vue';
2
2
  import { ModalLevel, ShelfController } from '../components/modal';
3
+ import { AppLayoutAppStoreSlice, AppLayoutUserStoreSlice, AppLayoutBridgeSlice } from '../components/app-layout';
3
4
 
4
5
  /**
5
6
  * body 视口高度
@@ -28,3 +29,27 @@ export declare function getModalShelfInjectionKey(level: ModalLevel): InjectionK
28
29
  * setup 期一次性 provide number(不响应式);Symbol.for 跨包/chunk/ESM 实例唯一(同上)。
29
30
  */
30
31
  export declare const TABS_MAIN_VISUAL_LEVEL: InjectionKey<number>;
32
+ /**
33
+ * AppLayout 族 app store 窄化消费契约 inject key。
34
+ * ---
35
+ * AppLayout(唯一 `useAppStore()` 调用方)provide;子组件
36
+ * (AppBody / AppHeader / AppSidebar / AppFooter)inject 自取。
37
+ * Symbol.for 保证跨包同一性(同 BODY_CONTENT_VIEWPORT_HEIGHT)。
38
+ */
39
+ export declare const APP_LAYOUT_APP_STORE_KEY: InjectionKey<AppLayoutAppStoreSlice>;
40
+ /**
41
+ * AppLayout 族 user store 窄化消费契约 inject key。
42
+ * ---
43
+ * AppLayout 集中 provide;AppHeader inject 自取(取 userInfo / isLogin / logout 等)。
44
+ * Symbol.for 保证跨包同一性。
45
+ */
46
+ export declare const APP_LAYOUT_USER_STORE_KEY: InjectionKey<AppLayoutUserStoreSlice>;
47
+ /**
48
+ * AppLayout 族 admin bridge 窄化消费契约 inject key(#7.6 期挂载)。
49
+ * ---
50
+ * AppLayout 通过 `props.adminBridge` 接收注入后 provide;子组件
51
+ * (AppBody/AppHeader/AppSidebar/AppLayout 内菜单派生)inject 自取 12 readonly
52
+ * 配置属性 + getRoutes / generateRouteMetaRawTree 派生方法。
53
+ * Symbol.for 保证跨包同一性(同 APP_LAYOUT_APP_STORE_KEY / APP_LAYOUT_USER_STORE_KEY)。
54
+ */
55
+ export declare const APP_LAYOUT_BRIDGE_KEY: InjectionKey<AppLayoutBridgeSlice>;
@@ -0,0 +1,21 @@
1
+ import { Router } from 'vue-router';
2
+ import { checkLogin } from './login';
3
+ import { checkPermission } from './permission';
4
+ import { CreateGuardOptions } from './types';
5
+
6
+ /**
7
+ * 路由守卫工厂——给 router 装登录守卫 + 权限守卫 + document.title 写入。
8
+ *
9
+ * 1:1 镜像原 app `router/guard/index.ts` 行为:
10
+ * - beforeEach: checkLogin → 跳 loginPath;checkPermission → 跳 noPermissionPath
11
+ * - beforeResolve: document.title = to.meta.title
12
+ *
13
+ * @example
14
+ * createGuard(router, {
15
+ * bridge: appAdminBridge,
16
+ * useRoutePermission,
17
+ * });
18
+ */
19
+ export declare const createGuard: (router: Router, options: CreateGuardOptions) => void;
20
+ export { checkLogin, checkPermission };
21
+ export type { CreateGuardOptions, GuardBridgeSlice, GuardRoutePermissionStore, } from './types';
@@ -0,0 +1,5 @@
1
+ import { RouteLocationNormalized } from 'vue-router';
2
+ import { GuardRoutePermissionStore } from './types';
3
+
4
+ /** 登录检测壳子——复用 store.checkNeedGoToLoginPage */
5
+ export declare const checkLogin: (to: RouteLocationNormalized, store: GuardRoutePermissionStore) => Promise<boolean>;
@@ -0,0 +1,5 @@
1
+ import { RouteLocationNormalized } from 'vue-router';
2
+ import { GuardRoutePermissionStore } from './types';
3
+
4
+ /** 权限检测壳子——复用 store.checkNeedGoToAuthPage */
5
+ export declare const checkPermission: (to: RouteLocationNormalized, store: GuardRoutePermissionStore) => Promise<boolean>;
@@ -0,0 +1,15 @@
1
+ import { RouteLocationNormalized } from 'vue-router';
2
+ import { AdminBridge } from '../../bridge';
3
+
4
+ /** guard 仅依赖 bridge 的路径配置切片(Pick 表达 → 必 type alias,无法 interface) */
5
+ export type GuardBridgeSlice = Pick<AdminBridge, "APP_ROUTER_PATHS_CONFIG">;
6
+ /** guard 仅依赖 route-permission store 的 2 个 check 方法 */
7
+ export interface GuardRoutePermissionStore {
8
+ checkNeedGoToLoginPage: (route: RouteLocationNormalized) => boolean;
9
+ checkNeedGoToAuthPage: (route: Pick<RouteLocationNormalized, "path">) => boolean;
10
+ }
11
+ /** createGuard 入参 */
12
+ export interface CreateGuardOptions {
13
+ bridge: GuardBridgeSlice;
14
+ useRoutePermission: () => GuardRoutePermissionStore;
15
+ }
@@ -0,0 +1 @@
1
+ export * from './guard';
@@ -0,0 +1,149 @@
1
+ import { AdminBridge } from '../bridge';
2
+
3
+ /**
4
+ * createAppStore 工厂依赖(#A 期,与 createUserStore deps 收敛单字段 `{ bridge }` 范式对齐)。
5
+ *
6
+ * 业务无泛型消费——layout/theme 配置全经 bridge 12 readonly 属性直读,业务 shape
7
+ * 不渗透 core;UserInfo / LoginParams 双泛型纯透传给入参 `AdminBridge` 签名
8
+ * (避免 app 侧具体类型 bridge 赋给 `AdminBridge<unknown,unknown>` 时的逆变位置
9
+ * 类型冲突,与 createUserStore 范式对齐),core setup 内 [MUST NOT] 消费双泛型字段。
10
+ * #C 期:删第 3 泛型 RefreshTokenParams 透传(bridge 签名已删第 3 泛型)。
11
+ */
12
+ export interface CreateAppStoreDeps<UserInfo = unknown, LoginParams = unknown> {
13
+ /** app 侧 admin bridge 单例(注入而非 core 持单例,守规则 8;layout/theme/persist storage 全经此读) */
14
+ bridge: AdminBridge<UserInfo, LoginParams>;
15
+ }
16
+ /**
17
+ * app store 工厂下沉 core。
18
+ *
19
+ * 返回 `defineStore("APP", setup, { persist })` 结果(store id 保持 `"APP"`;
20
+ * core 工厂无状态,store 实例由 app 侧 pinia 管理,规则 8)。setup 内 1:1 镜像
21
+ * 原 `packages/app/src/store/app.ts` 全部运行时行为(layout/theme/persist/
22
+ * watch isDarkTheme DOM class 切换),[MUST NOT] 重构 / 精简 / 调整顺序。
23
+ *
24
+ * persist storage 走 `bridge.getStorage()` 惰性代理(沿用 app 端 appPersistStorage
25
+ * 范式)——defineStore 第三参在模块求值时执行,此时尚 pre-init,直接
26
+ * `bridge.getStorage()` 会同步 throw;包惰性代理使 bridge 解析推迟到每次 persist
27
+ * 读写时(届时已 post-init),行为字节等价。
28
+ *
29
+ * @example
30
+ * export const useAppStore = createAppStore({ bridge: appAdminBridge });
31
+ */
32
+ export declare function createAppStore<UserInfo = unknown, LoginParams = unknown>(deps: CreateAppStoreDeps<UserInfo, LoginParams>): import('pinia').StoreDefinition<"APP", Pick<{
33
+ name: globalThis.Ref<string, string>;
34
+ isDarkTheme: globalThis.ComputedRef<boolean>;
35
+ theme: globalThis.ComputedRef<import('../bridge').AppThemeColor>;
36
+ extractLevel1ToHeader: globalThis.Ref<boolean, boolean>;
37
+ showHeader: globalThis.ComputedRef<boolean>;
38
+ showFooter: globalThis.ComputedRef<boolean>;
39
+ showSidebar: globalThis.ComputedRef<boolean>;
40
+ showBreadcrumb: globalThis.ComputedRef<boolean>;
41
+ keepAlive: globalThis.ComputedRef<boolean | undefined>;
42
+ headerStyle: globalThis.ComputedRef<{
43
+ height: string;
44
+ backgroundColor: string;
45
+ color: string;
46
+ }>;
47
+ footerStyle: globalThis.ComputedRef<{
48
+ height: string;
49
+ backgroundColor: string;
50
+ }>;
51
+ sidebarStyle: globalThis.ComputedRef<{
52
+ width: string;
53
+ paddingTop: string;
54
+ backgroundColor: string;
55
+ color: string;
56
+ }>;
57
+ bodyStyle: globalThis.ComputedRef<{
58
+ paddingLeft: string;
59
+ paddingTop: string;
60
+ backgroundColor: string;
61
+ }>;
62
+ bodyShimPadding: globalThis.ComputedRef<number>;
63
+ bodyShimStyle: globalThis.ComputedRef<{
64
+ minHeight: string;
65
+ padding: string;
66
+ }>;
67
+ sidebarIsCollapse: globalThis.ComputedRef<boolean>;
68
+ changeSidebarCollapseStatus: (status: boolean) => void;
69
+ changeSidebarHasMenusStatus: (status: boolean) => void;
70
+ changeIsDarkTheme: (status: boolean) => void;
71
+ }, "name" | "extractLevel1ToHeader">, Pick<{
72
+ name: globalThis.Ref<string, string>;
73
+ isDarkTheme: globalThis.ComputedRef<boolean>;
74
+ theme: globalThis.ComputedRef<import('../bridge').AppThemeColor>;
75
+ extractLevel1ToHeader: globalThis.Ref<boolean, boolean>;
76
+ showHeader: globalThis.ComputedRef<boolean>;
77
+ showFooter: globalThis.ComputedRef<boolean>;
78
+ showSidebar: globalThis.ComputedRef<boolean>;
79
+ showBreadcrumb: globalThis.ComputedRef<boolean>;
80
+ keepAlive: globalThis.ComputedRef<boolean | undefined>;
81
+ headerStyle: globalThis.ComputedRef<{
82
+ height: string;
83
+ backgroundColor: string;
84
+ color: string;
85
+ }>;
86
+ footerStyle: globalThis.ComputedRef<{
87
+ height: string;
88
+ backgroundColor: string;
89
+ }>;
90
+ sidebarStyle: globalThis.ComputedRef<{
91
+ width: string;
92
+ paddingTop: string;
93
+ backgroundColor: string;
94
+ color: string;
95
+ }>;
96
+ bodyStyle: globalThis.ComputedRef<{
97
+ paddingLeft: string;
98
+ paddingTop: string;
99
+ backgroundColor: string;
100
+ }>;
101
+ bodyShimPadding: globalThis.ComputedRef<number>;
102
+ bodyShimStyle: globalThis.ComputedRef<{
103
+ minHeight: string;
104
+ padding: string;
105
+ }>;
106
+ sidebarIsCollapse: globalThis.ComputedRef<boolean>;
107
+ changeSidebarCollapseStatus: (status: boolean) => void;
108
+ changeSidebarHasMenusStatus: (status: boolean) => void;
109
+ changeIsDarkTheme: (status: boolean) => void;
110
+ }, "showHeader" | "keepAlive" | "bodyShimPadding" | "isDarkTheme" | "theme" | "showFooter" | "showSidebar" | "showBreadcrumb" | "headerStyle" | "footerStyle" | "sidebarStyle" | "bodyStyle" | "bodyShimStyle" | "sidebarIsCollapse">, Pick<{
111
+ name: globalThis.Ref<string, string>;
112
+ isDarkTheme: globalThis.ComputedRef<boolean>;
113
+ theme: globalThis.ComputedRef<import('../bridge').AppThemeColor>;
114
+ extractLevel1ToHeader: globalThis.Ref<boolean, boolean>;
115
+ showHeader: globalThis.ComputedRef<boolean>;
116
+ showFooter: globalThis.ComputedRef<boolean>;
117
+ showSidebar: globalThis.ComputedRef<boolean>;
118
+ showBreadcrumb: globalThis.ComputedRef<boolean>;
119
+ keepAlive: globalThis.ComputedRef<boolean | undefined>;
120
+ headerStyle: globalThis.ComputedRef<{
121
+ height: string;
122
+ backgroundColor: string;
123
+ color: string;
124
+ }>;
125
+ footerStyle: globalThis.ComputedRef<{
126
+ height: string;
127
+ backgroundColor: string;
128
+ }>;
129
+ sidebarStyle: globalThis.ComputedRef<{
130
+ width: string;
131
+ paddingTop: string;
132
+ backgroundColor: string;
133
+ color: string;
134
+ }>;
135
+ bodyStyle: globalThis.ComputedRef<{
136
+ paddingLeft: string;
137
+ paddingTop: string;
138
+ backgroundColor: string;
139
+ }>;
140
+ bodyShimPadding: globalThis.ComputedRef<number>;
141
+ bodyShimStyle: globalThis.ComputedRef<{
142
+ minHeight: string;
143
+ padding: string;
144
+ }>;
145
+ sidebarIsCollapse: globalThis.ComputedRef<boolean>;
146
+ changeSidebarCollapseStatus: (status: boolean) => void;
147
+ changeSidebarHasMenusStatus: (status: boolean) => void;
148
+ changeIsDarkTheme: (status: boolean) => void;
149
+ }, "changeSidebarCollapseStatus" | "changeSidebarHasMenusStatus" | "changeIsDarkTheme">>;
@@ -1 +1,3 @@
1
1
  export * from './user';
2
+ export * from './app';
3
+ export * from './router-permission';
@@ -0,0 +1,80 @@
1
+ import { RouteLocationNormalizedLoaded } from 'vue-router';
2
+ import { AdminBridge } from '../bridge';
3
+
4
+ /**
5
+ * createRoutePermissionStore 工厂依赖(#B 期;与 createUserStore / createAppStore
6
+ * deps 范式对齐——bridge 经 init 注入,业务 hook / 业务路径常量经 deps 注入)。
7
+ *
8
+ * `useUserStore` 采用 hook 注入(方案 A)——业务层传入 createUserStore 实例化结果,
9
+ * core setup 内调 `useUserStore()` 取响应式 store 实例。方案 B(store 实例注入)
10
+ * 在 createRoutePermissionStore 模块求值期调 hook 会 throw "pinia not active",故采纳 A。
11
+ * Hook 返回的 store 实例形状用结构最小约束 `{ isLogin, havePermissionByPath, noApiLogout }`
12
+ * 表达——避免 core 反向耦合 createUserStore 三泛型 + 与 createUserStore 返回的具体
13
+ * store 结构自动结构兼容(业务侧零摩擦传入 useUserStore)。
14
+ *
15
+ * `paths` 4 业务路径经 deps 注入而非 bridge schema——业务路径非通用 layout config,
16
+ * 不内化到 bridge(产研统筹勘察结论;保 bridge schema 0 扩张)。
17
+ *
18
+ * 双泛型 `<UserInfo, LoginParams>` 纯透传给入参 `AdminBridge` 签名(避免 app 侧
19
+ * 具体类型 bridge 赋给 `AdminBridge<unknown,unknown>` 时的逆变位置类型冲突,
20
+ * 与 createUserStore / createAppStore 范式对齐),core setup 内 [MUST NOT] 消费双泛型字段。
21
+ * #C 期:删第 3 泛型 RefreshTokenParams 透传(bridge 签名已删第 3 泛型)。
22
+ */
23
+ export interface CreateRoutePermissionStoreDeps<UserInfo = unknown, LoginParams = unknown> {
24
+ /** app 侧 admin bridge 单例(注入而非 core 持单例,守规则 8;APP_ROUTER_META_DEFAULT_CONFIG 经此直读 + register goToLogin 经此注册) */
25
+ bridge: AdminBridge<UserInfo, LoginParams>;
26
+ /**
27
+ * 业务侧 createUserStore 实例化结果(hook 形态)。
28
+ * core setup 内调 `useUserStore()` 取响应式 store 实例;本字段仅约束最小消费面,
29
+ * [MUST NOT] 扩展为全 user store API surface(保 core 对 UserInfo shape 不透明)。
30
+ */
31
+ useUserStore: () => {
32
+ isLogin: boolean;
33
+ havePermissionByPath: (path: string) => boolean;
34
+ noApiLogout: () => void;
35
+ };
36
+ /**
37
+ * 4 业务路径常量(业务路径非通用 layout config,[MUST NOT] 内化到 bridge schema)。
38
+ * core 不知具体路径值,经 deps 注入;业务层在 packages/app/src/router/config.ts 维护。
39
+ */
40
+ paths: {
41
+ /** 登录路径 */
42
+ login: string;
43
+ /** 无权限路径 */
44
+ noPermission: string;
45
+ /** 登录免检路径列表 */
46
+ loginNoCheck: string[];
47
+ /** 权限免检路径列表 */
48
+ authNoCheck: string[];
49
+ };
50
+ }
51
+ /**
52
+ * 路由权限 store 泛型工厂下沉 core。
53
+ *
54
+ * 返回 `defineStore("ROUTE_PERMISSION", setup)` 结果(store id 保持 `"ROUTE_PERMISSION"`;
55
+ * core 工厂无状态,store 实例由 app 侧 pinia 管理,规则 8)。setup 内 1:1 镜像原
56
+ * `packages/app/src/store/router-permission.ts` 全部 139 行运行时行为
57
+ * (checkRouteNeedLogin / checkNeedGoToLoginPage / needGoToLoginPage /
58
+ * checkNeedGoToAuthPage / needGoToAuthPage / goToLoginPage / register goToLogin /
59
+ * 2 watch redirect),[MUST NOT] 重构 / 精简 / 调整顺序。
60
+ *
61
+ * `bridge.APP_ROUTER_META_DEFAULT_CONFIG` 直读取代原 `from "@/config"` import;
62
+ * `getRoutePermissionKey` 走 `@/utils` 复用。
63
+ *
64
+ * @example
65
+ * export const useRoutePermission = createRoutePermissionStore({
66
+ * bridge: appAdminBridge,
67
+ * useUserStore,
68
+ * paths: { login: loginPath, noPermission: noPermissionPath, loginNoCheck: loginNoCheckPath, authNoCheck: authNoCheckPath },
69
+ * });
70
+ */
71
+ export declare function createRoutePermissionStore<UserInfo = unknown, LoginParams = unknown>(deps: CreateRoutePermissionStoreDeps<UserInfo, LoginParams>): import('pinia').StoreDefinition<"ROUTE_PERMISSION", Pick<{
72
+ checkNeedGoToAuthPage: (routeInfo: Pick<RouteLocationNormalizedLoaded, "path">) => boolean;
73
+ checkNeedGoToLoginPage: (routeInfo: RouteLocationNormalizedLoaded) => boolean;
74
+ }, never>, Pick<{
75
+ checkNeedGoToAuthPage: (routeInfo: Pick<RouteLocationNormalizedLoaded, "path">) => boolean;
76
+ checkNeedGoToLoginPage: (routeInfo: RouteLocationNormalizedLoaded) => boolean;
77
+ }, never>, Pick<{
78
+ checkNeedGoToAuthPage: (routeInfo: Pick<RouteLocationNormalizedLoaded, "path">) => boolean;
79
+ checkNeedGoToLoginPage: (routeInfo: RouteLocationNormalizedLoaded) => boolean;
80
+ }, "checkNeedGoToAuthPage" | "checkNeedGoToLoginPage">>;
@@ -7,13 +7,15 @@ import { RoutePermission } from '../types';
7
7
  *
8
8
  * 业务类型 shape 经泛型 `<UserInfo, LoginParams>` 注入(core 不锁 shape,规则 8);
9
9
  * 运行时配置 + 注入面全部经 `bridge`——`getAppConfig` / `getRoutes` / 4 业务 api /
10
- * `getUserInfoInitFn()`(用户信息空保底工厂,替代 0fd94cc `userInfoInit` deps 字段)/
11
- * `getUserInfoAccess()`(token/refreshToken 取写访问器,core 对 UserInfo 不透明)。
12
- * permission 不入访问器——core route-permission-tree 经固定约定路径 `"permission"`
13
- * 读(用户终锁 4,design D-a 记账)。
10
+ * `getUserInfoInitFn()`(用户信息空保底工厂,替代 0fd94cc `userInfoInit` deps 字段)。
11
+ *
12
+ * #C 期:删 `userInfoAccess` access pattern + `buildRefreshTokenParams` deps,
13
+ * token / refresh_token / permission 三字段对称为固定字面字符串经 lodash path 读写
14
+ * (与 permission design D-a 同模式),refreshTokenApi 直传 refreshToken string 由
15
+ * 业务方 wrap 内自打包业务 shape。
14
16
  */
15
17
  export interface CreateUserStoreDeps<UserInfo, LoginParams = unknown> {
16
- /** app 侧 admin bridge 单例(注入而非 core 持单例,守规则 8;userInfoInit/userInfoAccess 经 bridge.init 注入,本工厂经 bridge.getUserInfoInitFn()/getUserInfoAccess() 读) */
18
+ /** app 侧 admin bridge 单例(注入而非 core 持单例,守规则 8;getUserInfoInitFn 经 bridge.init 注入,本工厂经 bridge.getUserInfoInitFn() 读) */
17
19
  bridge: AdminBridge<UserInfo, LoginParams>;
18
20
  }
19
21
  /**
@@ -36,7 +38,7 @@ export declare function createUserStore<UserInfo, LoginParams = unknown>(deps: C
36
38
  login: (params: LoginParams) => Promise<void>;
37
39
  logout: () => Promise<void>;
38
40
  noApiLogout: () => void;
39
- getInfo: () => Promise<UserInfo>;
41
+ getInfo: () => Promise<Partial<UserInfo>>;
40
42
  havePermissionByPath: (path: string) => boolean;
41
43
  havePermissionByKey: (key?: RoutePermission["key"]) => boolean;
42
44
  }, never>, Pick<{
@@ -46,17 +48,17 @@ export declare function createUserStore<UserInfo, LoginParams = unknown>(deps: C
46
48
  login: (params: LoginParams) => Promise<void>;
47
49
  logout: () => Promise<void>;
48
50
  noApiLogout: () => void;
49
- getInfo: () => Promise<UserInfo>;
51
+ getInfo: () => Promise<Partial<UserInfo>>;
50
52
  havePermissionByPath: (path: string) => boolean;
51
53
  havePermissionByKey: (key?: RoutePermission["key"]) => boolean;
52
- }, "userInfo" | "token" | "isLogin">, Pick<{
54
+ }, "token" | "userInfo" | "isLogin">, Pick<{
53
55
  userInfo: ComputedRef<UserInfo>;
54
56
  token: ComputedRef<string | undefined>;
55
57
  isLogin: ComputedRef<boolean>;
56
58
  login: (params: LoginParams) => Promise<void>;
57
59
  logout: () => Promise<void>;
58
60
  noApiLogout: () => void;
59
- getInfo: () => Promise<UserInfo>;
61
+ getInfo: () => Promise<Partial<UserInfo>>;
60
62
  havePermissionByPath: (path: string) => boolean;
61
63
  havePermissionByKey: (key?: RoutePermission["key"]) => boolean;
62
64
  }, "login" | "logout" | "noApiLogout" | "getInfo" | "havePermissionByPath" | "havePermissionByKey">>;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes