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:
2026-06-02 17:50:58 +08:00
parent b5dca1bfb1
commit 31737286b9
34 changed files with 363 additions and 255 deletions

View 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,
};
}