89 lines
2.9 KiB
JavaScript
89 lines
2.9 KiB
JavaScript
/**
|
|
* 用户缓存管理
|
|
* 负责用户登录状态的本地存储和管理
|
|
*/
|
|
|
|
import { CACHE_CONFIG } from '../config/index.js';
|
|
|
|
export class UserCache {
|
|
/**
|
|
* 保存用户登录状态
|
|
* @param {Object} userData - 用户数据
|
|
* @param {string} userData.customerid - 客户ID
|
|
* @param {string} userData.mobile - 手机号
|
|
* @param {string} userData.sessionid - 会话ID
|
|
* @param {string} userData.loginPhone - 登录时使用的手机号
|
|
* @param {Object} userData.formData - 表单数据
|
|
*/
|
|
static saveUserSession(userData) {
|
|
const sessionData = {
|
|
// 兼容 customerid 和 customerId 两种字段名
|
|
customerid: userData.customerid || userData.customerId,
|
|
mobile: userData.mobile,
|
|
// 兼容 sessionid 和 sessionId 两种字段名
|
|
sessionid: userData.sessionid || userData.sessionId,
|
|
loginTime: Date.now(),
|
|
loginPhone: userData.loginPhone || '', // 保存登录时使用的手机号
|
|
formData: userData.formData || null // 保存表单数据
|
|
};
|
|
|
|
console.log('[UserCache] 保存登录状态:', sessionData);
|
|
localStorage.setItem(CACHE_CONFIG.KEYS.USER_SESSION, JSON.stringify(sessionData));
|
|
}
|
|
|
|
/**
|
|
* 获取用户登录状态
|
|
* @returns {Object|null} - 用户会话数据,如果不存在或已过期则返回 null
|
|
*/
|
|
static getUserSession() {
|
|
try {
|
|
const sessionStr = localStorage.getItem(CACHE_CONFIG.KEYS.USER_SESSION);
|
|
if (!sessionStr) return null;
|
|
|
|
const sessionData = JSON.parse(sessionStr);
|
|
const now = Date.now();
|
|
|
|
// 检查缓存是否过期
|
|
if (now - sessionData.loginTime > CACHE_CONFIG.USER_SESSION_DURATION) {
|
|
this.clearUserSession();
|
|
return null;
|
|
}
|
|
|
|
return sessionData;
|
|
} catch (error) {
|
|
console.error('[UserCache] 获取用户缓存失败:', error);
|
|
this.clearUserSession();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 清除用户登录状态
|
|
*/
|
|
static clearUserSession() {
|
|
localStorage.removeItem(CACHE_CONFIG.KEYS.USER_SESSION);
|
|
console.log('[UserCache] 已清除用户登录状态');
|
|
}
|
|
|
|
/**
|
|
* 检查用户是否已登录
|
|
* @returns {boolean} - 是否已登录
|
|
*/
|
|
static isLoggedIn() {
|
|
const session = this.getUserSession();
|
|
return session !== null && (session.sessionid || session.loginPhone);
|
|
}
|
|
|
|
/**
|
|
* 获取脱敏的手机号
|
|
* @returns {string|null} - 脱敏后的手机号
|
|
*/
|
|
static getMaskedPhone() {
|
|
const session = this.getUserSession();
|
|
if (!session || !session.loginPhone) return null;
|
|
|
|
const phone = session.loginPhone;
|
|
return phone.substring(0, 3) + '****' + phone.substring(7);
|
|
}
|
|
}
|