yangyin
2024-11-20 c007150566688c9cda80c7aecd784c9300dfab36
src/utils/storage.ts
@@ -1,4 +1,4 @@
import { accessSessionKey, getSessionKey, getUserNameKey, userNameKey } from './request';
/**
 * window.localStorage 浏览器永久缓存
@@ -14,23 +14,54 @@
      return `${__NEXT_NAME__}:${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));
   get(key: string, win = window) {
      let json = <string>win.localStorage.getItem(Local.setKey(key));
      return 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,32 @@
      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);
   },
};
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);
   },
};