/** * 获取storage * @param key 保存时的key * @param hour 如果保存时使用了时间,则需要传true * @param expired 指定已过期时返回的值,过期默认返回undefined */ export const getStorage = (key: string, hour?: boolean, expired?: string) => { let data: any if (hour) { data = window.localStorage.getItem(key) try { data = JSON.parse(data) if (typeof data === 'object' && data.__value && data.__time) { // 使用了时间的 // 在当前时间后,表示没过期 if (new Date().getTime() < data.__time) { data = data.__value } else { // 过期了 data = expired || undefined } } } catch (e) { /* empty */ } } else { //保存时没传时间的,存在session里 data = window.sessionStorage.getItem(key) } try { return JSON.parse(data) } catch (e) { return data } } /** 设置 localStorage 添加对时间的控制,hour单位为小时 * hour空时使用原始sessionStorage(key,value),即关闭浏览器过期 * hour=0时,使用localStorage,即永不过期 * hour>0时localStorage添加时间控制 * */ export function setStorage(key: string, data: any, hour?: number | null): void { let newData = data if (typeof data === 'object') { newData = JSON.stringify(data) } if (hour === 0) { window.localStorage.setItem(key, newData) } else if (hour && hour > 0) { const now = new Date() const valueDate: string = JSON.stringify({ __value: data, __time: now.setSeconds(now.getSeconds() + hour * 3600) }) window.localStorage.setItem(key, valueDate) } else { window.sessionStorage.setItem(key, newData) } }