import { EncryptionParams } from '/@/utils/cipher/aesEncryption'; export interface CreateStorageParams extends EncryptionParams { storage: Storage; hasEncrypt: boolean; } const defaultTime = 60 * 60 * 24 * 7; export const createStorage = ({ prefixKey = '', storage = sessionStorage } = {}) => { /** *缓存类 *构造参数可以传入 sessionStorage,localStorage, * @class Cache * @example */ const WebStorage = class WebStorage { private storage: Storage; private prefixKey?: string; /** * * @param {*} storage */ constructor() { this.storage = storage; this.prefixKey = prefixKey; } private getKey(key: string) { return `${this.prefixKey}${key}`.toUpperCase(); } /** * * 设置缓存 * @param {string} key 缓存键 * @param {*} value 缓存值 * @expire 过期时间 单位秒 * @memberof Cache */ set(key: string, value: any, expire: number | null = defaultTime) { const stringData = JSON.stringify({ value, expire: expire !== null ? new Date().getTime() + expire * 1000 : null, }); this.storage.setItem(this.getKey(key), stringData); } /** * *读取缓存 * @param {string} key 缓存键 * @returns 缓存值 * @memberof Cache */ get(key: string, def: any = null): any { const item = this.storage.getItem(this.getKey(key)); if (item) { try { const data = JSON.parse(item); const { value, expire } = data; if (expire === null || expire >= new Date().getTime()) { return value; } this.remove(this.getKey(key)); } catch (e) { return def; } } return def; } /** * *删除缓存 * @param {string} key 缓存键 * @memberof Cache */ remove(key: string) { this.storage.removeItem(this.getKey(key)); } /** * *删除该实例所有缓存 * @memberof Cache */ clear(): void { this.storage.clear(); } /** * 添加cookie * @param name cookie名字 * @param value cookie内容 * @param day 过期时间 * 如果过期时间未设置,默认管理浏览器自动删除 * 例子: * cookieData.set('name','value',) */ setCookie(name: string, value: any, expire: number | null = defaultTime) { document.cookie = this.getKey(name) + '=' + value + '; Max-Age=' + expire; } /** * 根据名字获取cooki值 * @param name cookie名 * @returns {*} cookie值 */ getCookie(name: string) { const arr = document.cookie.split('; '); for (let i = 0; i < arr.length; i++) { const arr2 = arr[i].split('='); if (arr2[0] === this.getKey(name)) { return arr2[1]; } } return ''; } /** * 根据cookie名字删除cookie * @param name cookie名字 */ removeCookie(key: string) { this.setCookie(key, 1, -1); } clearCookie(): void { const keys = document.cookie.match(/[^ =;]+(?==)/g); if (keys) { for (let i = keys.length; i--; ) { document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString(); } } } }; return new WebStorage(); };