wujingjing
2025-04-14 1df71bdd7fc5b35be1447c9cc574bf610666f436
src/utils/storage.ts
@@ -1,4 +1,5 @@
import { STORED_ACCOUNT_KEY } from '../layout/component/login/login';
import { accessSessionKey, getSessionKey, getUserNameKey, userNameKey, domainPrefix } from './request';
/**
 * window.localStorage 浏览器永久缓存
@@ -11,26 +12,56 @@
   // 查看 v2.4.3版本更新日志
   setKey(key: string) {
      // @ts-ignore
      return `${__NEXT_NAME__}:${key}`;
      return `${__NEXT_NAME__}:${domainPrefix}${key}`;
   },
   // 设置永久缓存
   set<T>(key: string, val: T) {
      window.localStorage.setItem(Local.setKey(key), JSON.stringify(val));
   set<T>(key: string, val: T, win = window) {
      win.localStorage.setItem(Local.setKey(key), JSON.stringify(val));
   },
   // 获取永久缓存
   get(key: string) {
      let json = <string>window.localStorage.getItem(Local.setKey(key));
      return JSON.parse(json);
   get(key: string, win = window) {
      let json = <string>win.localStorage.getItem(Local.setKey(key));
      return json === 'undefined' ? null : JSON.parse(json);
   },
   // 移除永久缓存
   remove(key: string) {
      window.localStorage.removeItem(Local.setKey(key));
   remove(key: string, win = window) {
      win.localStorage.removeItem(Local.setKey(key));
   },
   // 移除全部永久缓存
   clear() {
      window.localStorage.clear();
   },
};
//#region ====================== 缓存带时间 ======================
type CacheValue<T> = {
   // 过期时间,时间戳
   expiredTime: number;
   value: T;
};
export const LocalPlus = {
   // 设置
   set<T>(key: string, val: T, expireDay: number) {
      const expireMs = expireDay * 24 * 60 * 60 * 1000;
      const cacheValue: CacheValue<T> = {
         expiredTime: new Date().getTime() + expireMs,
         value: val,
      };
      Local.set(key, cacheValue);
   },
   // 获取,过期则清除
   get(key: string) {
      const cacheValue: CacheValue<any> = Local.get(key);
      if (!cacheValue?.expiredTime) return null;
      if (new Date().getTime() > cacheValue.expiredTime) {
         Local.remove(key);
         return null;
      }
      return cacheValue.value;
   },
};
//#endregion
/**
 * window.sessionStorage 浏览器临时缓存
@@ -42,7 +73,6 @@
export const Session = {
   // 设置临时缓存
   set<T>(key: string, val: T) {
      window.sessionStorage.setItem(Local.setKey(key), JSON.stringify(val));
   },
   // 获取临时缓存
@@ -59,3 +89,33 @@
      window.sessionStorage.clear();
   },
};
export const WinLoginInfo = {
   set(session: string, name: string, win: any = window) {
      const sessionKey = getSessionKey(win);
      const userNameKey = getUserNameKey(win);
      Local.set(sessionKey, session, win);
      Local.set(userNameKey, name, win);
   },
   remove(win: any = window) {
      const sessionKey = getSessionKey(win);
      const userNameKey = getUserNameKey(win);
      Local.remove(sessionKey, win);
      Local.remove(userNameKey, win);
      Local.remove(STORED_ACCOUNT_KEY, win);
   },
};
export const LoginInfo = {
   set(session: string, name: string) {
      WinLoginInfo.set(session, name, window);
      // for (let i = 0; i < window.frames.length; i++) {
      //    const win = window.frames[i] as any;
      //    WinLoginInfo.set(session, name, win);
      // }
   },
   remove() {
      WinLoginInfo.remove(window);
   },
};