refactor(admin): 合并管理后台并移除 apps/agent
- 平台与代理共用 apps/admin,统一登录 manage/auth/login - 按 userType 展示菜单,修复 token 循环跳转 - 删除独立 apps/agent 前端工程 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
84
apps/admin/src/stores/auth.ts
Normal file
84
apps/admin/src/stores/auth.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import { ref, computed } from 'vue';
|
||||
|
||||
export type StaffUserType = 'ADMIN' | 'AGENT';
|
||||
|
||||
export interface StaffUser {
|
||||
id: string;
|
||||
username: string;
|
||||
userType: StaffUserType;
|
||||
locale?: string;
|
||||
role?: string;
|
||||
}
|
||||
|
||||
const TOKEN_KEY = 'manage_token';
|
||||
const USER_KEY = 'manage_user';
|
||||
|
||||
function loadUser(): StaffUser | null {
|
||||
try {
|
||||
const raw = localStorage.getItem(USER_KEY);
|
||||
return raw ? (JSON.parse(raw) as StaffUser) : null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function migrateLegacyTokens() {
|
||||
if (localStorage.getItem(TOKEN_KEY)) return;
|
||||
const legacyAdmin = localStorage.getItem('admin_token');
|
||||
const legacyAgent = localStorage.getItem('agent_token');
|
||||
if (legacyAdmin) {
|
||||
localStorage.setItem(TOKEN_KEY, legacyAdmin);
|
||||
localStorage.setItem(USER_KEY, JSON.stringify({ userType: 'ADMIN' }));
|
||||
localStorage.removeItem('admin_token');
|
||||
return;
|
||||
}
|
||||
if (legacyAgent) {
|
||||
localStorage.setItem(TOKEN_KEY, legacyAgent);
|
||||
localStorage.setItem(USER_KEY, JSON.stringify({ userType: 'AGENT' }));
|
||||
localStorage.removeItem('agent_token');
|
||||
}
|
||||
}
|
||||
|
||||
migrateLegacyTokens();
|
||||
|
||||
const token = ref(localStorage.getItem(TOKEN_KEY) || '');
|
||||
const user = ref<StaffUser | null>(loadUser());
|
||||
|
||||
export function clearStaffSession() {
|
||||
token.value = '';
|
||||
user.value = null;
|
||||
localStorage.removeItem(TOKEN_KEY);
|
||||
localStorage.removeItem(USER_KEY);
|
||||
localStorage.removeItem('admin_token');
|
||||
localStorage.removeItem('agent_token');
|
||||
}
|
||||
|
||||
export function useAuthStore() {
|
||||
const isAdmin = computed(() => user.value?.userType === 'ADMIN');
|
||||
const isAgent = computed(() => user.value?.userType === 'AGENT');
|
||||
const portalLabel = computed(() => (isAdmin.value ? '平台后台' : '代理后台'));
|
||||
|
||||
function setSession(newToken: string, newUser: StaffUser) {
|
||||
token.value = newToken;
|
||||
user.value = newUser;
|
||||
localStorage.setItem(TOKEN_KEY, newToken);
|
||||
localStorage.setItem(USER_KEY, JSON.stringify(newUser));
|
||||
localStorage.removeItem('admin_token');
|
||||
localStorage.removeItem('agent_token');
|
||||
}
|
||||
|
||||
function logout() {
|
||||
clearStaffSession();
|
||||
}
|
||||
|
||||
return {
|
||||
token,
|
||||
user,
|
||||
isAdmin,
|
||||
isAgent,
|
||||
portalLabel,
|
||||
setSession,
|
||||
logout,
|
||||
clearStaffSession,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user