完整代码就不写了, 主要是使用localStorage存储; cookie也是可以的,需要传入清除时间,请自行查找资料
interface ICookie {
cname:string;
value:string;
endTime?: string|number; //是number时为时间戳
}
const setCookie= ({cname, value, endTime}:ICookie) => {
let date:any = 0
if(endTime) {
date = formatDate(endTime);
}
let obj:any = JSON.parse(localStorage.noticeCookie||'{}');
obj[cname] = {
cname,
value: base64.encode(value),
time: date,
}
localStorage.noticeCookie = JSON.stringify(obj);
}
// 获取cookie,传入key以获取value
const getCookie = (cname='') => {
const obj:any = JSON.parse(localStorage.noticeCookie||'{}');
removeCookie(obj, cname);
return obj[cname]?base64.decode(get(obj[cname], 'value')):'';
}
const removeCookie = (obj:any={}, cname) => {
for(let key in obj) {
const endTime = get(obj[key], 'time') || 0;
if(!timeFlag(endTime)) {
obj[key] && delete obj[key]
}
}
localStorage.noticeCookie = JSON.stringify(obj);
}
const timeFlag= (endTime) => {
let date:any = formatDate(endTime);
const nowTime = formatDate();
console.log(Number(date)>nowTime,Number(date),nowTime)
return Number(date)>nowTime;
}
const closeModal = (item: any = {}) => {
const key0 = get(item, 'NOTICE_ID', '');
const key = base64.encode(key0);
const endTime = item.TIME_END;
setCookie({
cname: `closeNotice${key}`,
value: 'N',
endTime,
})
onClickClose && onClickClose();
};
const showModal = item => {
const key0 = get(item, 'NOTICE_ID', '');
const key = base64.encode(key0);
const endTime = item.TIME_END;
if (item.TYPE === 'POP' && key) { // 组件内自定义存储数据判断
console.log(getCookie(`closeNotice${key}`),'getCookie(`closeNotice${key}`)')
if (getCookie(`closeNotice${key}`) !== 'N') {
setCookie({
cname: `closeNotice${key}`,
value: isShow ? 'Y':'N',
endTime,
})
}
else {
closeModal();
}
}
};
// 使用moment方法将时间转换为时间戳:
function formatDate(endTime?:string|number) {
let date:any = new Date();
if(endTime) {
date = moment(endTime).unix() * 1000
}
return date;
}