// src/hooks/useAuth.ts import { useState } from './useState'; import { useEffect } from './useEffect'; import { useMenuStore } from '@/stores/menuStore'; import { usePermissionStore } from '@/stores/permissionStore'; import router from '@/router'; const TOKEN_KEY = 'MY_APP_AUTH_TOKEN'; function createAuth() { const [token, setToken] = useState(window.localStorage.getItem(TOKEN_KEY)); useEffect(() => { const newToken = token.value; if (newToken) { window.localStorage.setItem(TOKEN_KEY, newToken); } else { window.localStorage.removeItem(TOKEN_KEY); } }, [token]); const isLoggedIn = () => !!token.value; /** * 登录:保存 token → 拉取菜单+权限 → 动态注册路由 → 跳转首页 */ const login = async (newToken: string) => { setToken(newToken); const { loadMenu, homePath } = useMenuStore(); const { loadPermissions } = usePermissionStore(); // 并行拉取菜单和权限 await Promise.all([loadMenu(), loadPermissions()]); // 跳转到首页(动态路由已注册完成) router.push(homePath.value); }; /** * 退出:清除 token → 清除菜单+权限 → 清除动态路由 → 跳转登录页 */ const logout = () => { setToken(null); const { clearMenu } = useMenuStore(); const { clearPermissions } = usePermissionStore(); clearMenu(); clearPermissions(); router.push('/login'); }; return { token, isLoggedIn, login, logout, }; } export const auth = createAuth();