80 lines
2.8 KiB
TypeScript
80 lines
2.8 KiB
TypeScript
/**
|
||
* 外部系统跳转登录时透传的参数:
|
||
* theme —— 主题色,"dark-blue" => 深色,其他 => 浅色(在 LoginPage 调 setTheme 直接生效)
|
||
* ticket —— 第三方 ticket,持久化到 localStorage 供后续请求使用
|
||
* userId —— 外部用户 id,同上
|
||
* env —— 环境标识,同上
|
||
*
|
||
* 这里只暴露 ``ticket / userId / env`` 三个 storage key 和读写工具;
|
||
* theme 不存(直接走 ThemeContext,避免双源)。
|
||
*/
|
||
|
||
import { authStorageGet, authStorageSet } from "@/core/auth/scoped-storage";
|
||
import type { ThemeType } from "@/contexts/ThemeContext";
|
||
|
||
export const EXTERNAL_LOGIN_STORAGE_KEYS = {
|
||
ticket: "login.ticket",
|
||
userId: "login.userId",
|
||
env: "login.env",
|
||
/** MaxKey getTokenByOnlineTicket 返回的 token */
|
||
maxkeyOnlineToken: "login.maxkeyOnlineToken",
|
||
/** consumer /cop/userDetailToken 返回的 data 整包(JSON) */
|
||
userDetailToken: "login.userDetailToken",
|
||
} as const;
|
||
|
||
export type ExternalLoginParams = {
|
||
ticket?: string;
|
||
userId?: string;
|
||
env?: string;
|
||
};
|
||
|
||
/** 把外部跳转带来的三个参数写到 localStorage;隐私模式 / quota 异常时静默失败 */
|
||
export function persistExternalLoginParams(params: ExternalLoginParams): void {
|
||
// 嵌入(iframe)态走 sessionStorage(按标签页隔离),正常态走 localStorage —— 见 scoped-storage.ts。
|
||
if (params.ticket) {
|
||
authStorageSet(EXTERNAL_LOGIN_STORAGE_KEYS.ticket, params.ticket);
|
||
}
|
||
if (params.userId) {
|
||
authStorageSet(EXTERNAL_LOGIN_STORAGE_KEYS.userId, params.userId);
|
||
}
|
||
if (params.env) {
|
||
authStorageSet(EXTERNAL_LOGIN_STORAGE_KEYS.env, params.env);
|
||
}
|
||
}
|
||
|
||
/** 读取持久化的外部登录参数;不可用时返回空字符串 */
|
||
export function readExternalLoginParams(): Required<ExternalLoginParams> {
|
||
return {
|
||
ticket: authStorageGet(EXTERNAL_LOGIN_STORAGE_KEYS.ticket) ?? "",
|
||
userId: authStorageGet(EXTERNAL_LOGIN_STORAGE_KEYS.userId) ?? "",
|
||
env: authStorageGet(EXTERNAL_LOGIN_STORAGE_KEYS.env) ?? "",
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 把外部(URL query / 无界 props)的 ``theme`` 值映射成 ThemeContext 的
|
||
* ``'dark' | 'light'``。已知取值:
|
||
* - ``dark-blue`` → 深色
|
||
* - ``red`` → 浅色(当前默认红白主题)
|
||
* - ``blue`` → 暂无该主题,先用浅色代替(命中 else 分支)
|
||
* 其余/缺省同样回退浅色。将来若新增 blue 主题,在此扩展映射即可。
|
||
*/
|
||
export function resolveThemeFromQuery(themeParam: string | null | undefined): ThemeType {
|
||
switch (themeParam?.trim().toLowerCase()) {
|
||
case "dark":
|
||
case "dark-blue":
|
||
case "darkblue":
|
||
return "dark";
|
||
case "blue":
|
||
case "lightblue":
|
||
case "light-blue":
|
||
return "lightblue";
|
||
case "green":
|
||
case "lightgreen":
|
||
case "light-green":
|
||
return "lightgreen";
|
||
default:
|
||
return "light";
|
||
}
|
||
}
|