登录注册、手机号、邮箱

This commit is contained in:
2025-11-03 13:37:55 +08:00
parent 16754b527e
commit 35aee59178
26 changed files with 4292 additions and 163 deletions

View File

@@ -24,13 +24,45 @@ export interface AuthState {
routesLoaded: boolean;
}
// 从localStorage恢复状态的辅助函数
// 存储工具函数
const StorageUtil = {
// 保存数据根据rememberMe选择存储方式
setItem(key: string, value: string, rememberMe = false) {
if (rememberMe) {
localStorage.setItem(key, value);
} else {
sessionStorage.setItem(key, value);
}
},
// 获取数据优先从localStorage其次sessionStorage
getItem(key: string): string | null {
return localStorage.getItem(key) || sessionStorage.getItem(key);
},
// 删除数据(从两个存储中都删除)
removeItem(key: string) {
localStorage.removeItem(key);
sessionStorage.removeItem(key);
},
// 清除所有认证相关数据
clearAuth() {
const keys = ['token', 'loginDomain', 'menus', 'permissions', 'rememberMe'];
keys.forEach(key => {
localStorage.removeItem(key);
sessionStorage.removeItem(key);
});
}
};
// 从存储恢复状态的辅助函数
function getStoredState(): Partial<AuthState> {
try {
const token = localStorage.getItem('token');
const loginDomainStr = localStorage.getItem('loginDomain');
const menusStr = localStorage.getItem('menus');
const permissionsStr = localStorage.getItem('permissions');
const token = StorageUtil.getItem('token');
const loginDomainStr = StorageUtil.getItem('loginDomain');
const menusStr = StorageUtil.getItem('menus');
const permissionsStr = StorageUtil.getItem('permissions');
return {
token: token || null,
@@ -40,7 +72,7 @@ function getStoredState(): Partial<AuthState> {
routesLoaded: false, // 路由始终需要重新加载
};
} catch (error) {
console.error('从localStorage恢复状态失败:', error);
console.error('从存储恢复状态失败:', error);
return {
token: null,
loginDomain: null,
@@ -111,50 +143,57 @@ const authModule: Module<AuthState, any> = {
mutations: {
// 设置登录信息
SET_LOGIN_DOMAIN(state, loginDomain: LoginDomain) {
SET_LOGIN_DOMAIN(state, payload: { loginDomain: LoginDomain; rememberMe?: boolean }) {
const { loginDomain, rememberMe = false } = payload;
state.loginDomain = loginDomain;
state.token = loginDomain.token || null;
state.menus = loginDomain.menus || [];
state.permissions = loginDomain.permissions || [];
// 持久化到localStorage
// 持久化到存储根据rememberMe选择localStorage或sessionStorage
if (state.token) {
localStorage.setItem('token', state.token);
StorageUtil.setItem('token', state.token, rememberMe);
}
if (loginDomain) {
localStorage.setItem('loginDomain', JSON.stringify(loginDomain));
StorageUtil.setItem('loginDomain', JSON.stringify(loginDomain), rememberMe);
}
if (state.menus.length > 0) {
localStorage.setItem('menus', JSON.stringify(state.menus));
StorageUtil.setItem('menus', JSON.stringify(state.menus), rememberMe);
}
if (state.permissions.length > 0) {
localStorage.setItem('permissions', JSON.stringify(state.permissions));
StorageUtil.setItem('permissions', JSON.stringify(state.permissions), rememberMe);
}
// 保存rememberMe标记
StorageUtil.setItem('rememberMe', String(rememberMe), rememberMe);
},
// 设置Token
SET_TOKEN(state, token: string | null) {
state.token = token;
const rememberMe = StorageUtil.getItem('rememberMe') === 'true';
if (token) {
localStorage.setItem('token', token);
StorageUtil.setItem('token', token, rememberMe);
} else {
localStorage.removeItem('token');
StorageUtil.removeItem('token');
}
},
// 设置菜单
SET_MENUS(state, menus: SysMenu[]) {
state.menus = menus;
const rememberMe = StorageUtil.getItem('rememberMe') === 'true';
if (menus.length > 0) {
localStorage.setItem('menus', JSON.stringify(menus));
StorageUtil.setItem('menus', JSON.stringify(menus), rememberMe);
}
},
// 设置权限
SET_PERMISSIONS(state, permissions: SysPermission[]) {
state.permissions = permissions;
const rememberMe = StorageUtil.getItem('rememberMe') === 'true';
if (permissions.length > 0) {
localStorage.setItem('permissions', JSON.stringify(permissions));
StorageUtil.setItem('permissions', JSON.stringify(permissions), rememberMe);
}
},
@@ -171,11 +210,8 @@ const authModule: Module<AuthState, any> = {
state.permissions = [];
state.routesLoaded = false;
// 清除localStorage
localStorage.removeItem('token');
localStorage.removeItem('loginDomain');
localStorage.removeItem('menus');
localStorage.removeItem('permissions');
// 清除所有认证相关存储(localStorage和sessionStorage
StorageUtil.clearAuth();
}
},
@@ -188,8 +224,12 @@ const authModule: Module<AuthState, any> = {
return Promise.reject(result.message);
}
const loginDomain = result.data;
// 保存登录信息
commit('SET_LOGIN_DOMAIN', loginDomain);
// 保存登录信息传递rememberMe参数
commit('SET_LOGIN_DOMAIN', {
loginDomain,
rememberMe: loginParam.rememberMe || false
});
// 生成动态路由
await dispatch('generateRoutes');