refactor: 前端登录/权限/界面状态迁移至 zustand

This commit is contained in:
2026-08-04 14:41:27 +08:00
parent ce1dcc07ea
commit f07ffdc64c
39 changed files with 970 additions and 211 deletions

View File

@@ -8,6 +8,9 @@
import { expect } from 'vitest';
import { CREDENTIALS } from './fixtures';
import { BASE } from './setup';
import { usePermissionStore } from '../store/permission/permissionStore';
import { useUserStore } from '../store/user/userStore';
import type { UserInfo } from '../store/user/userTypes';
// ── Types ───────────────────────────────────────────────────────────
@@ -37,8 +40,10 @@ export async function loginAs(
expect(res.status).toBe(201);
const json = (await res.json()) as ApiResponse<{ token: string; user: Record<string, unknown> }>;
expect(json.code).toBe(0);
localStorage.setItem('token', json.data.token);
localStorage.setItem('user', JSON.stringify(json.data.user));
useUserStore.getState().setSession(json.data.token, json.data.user as unknown as UserInfo);
usePermissionStore
.getState()
.writePermissions((json.data.user.permissions ?? []) as string[]);
return json.data;
}
@@ -46,15 +51,14 @@ export async function loginAs(
* Logout: clear localStorage.
*/
export function logout(): void {
localStorage.removeItem('token');
localStorage.removeItem('user');
localStorage.removeItem('permissions');
useUserStore.getState().logout();
usePermissionStore.getState().clearPermissions();
}
// ── API helpers (authenticated) ─────────────────────────────────────
function authHeaders(): Record<string, string> {
const token = localStorage.getItem('token');
const token = useUserStore.getState().token;
return {
'Content-Type': 'application/json',
...(token ? { Authorization: `Bearer ${token}` } : {}),

View File

@@ -3,6 +3,10 @@
* Runs once before all tests.
*/
import { beforeAll, afterEach } from 'vitest';
import { useAppStore } from '../store/app/appStore';
import { usePermissionStore } from '../store/permission/permissionStore';
import { useSettingsStore } from '../store/settings/settingsStore';
import { useUserStore } from '../store/user/userStore';
// Base URL: the Vite dev server proxies /api → localhost:3003
const BASE = 'http://localhost:3002';
@@ -18,6 +22,17 @@ afterEach(() => {
localStorage.removeItem('token');
localStorage.removeItem('user');
localStorage.removeItem('permissions');
useUserStore.getState().logout();
usePermissionStore.getState().clearPermissions();
useAppStore.setState({
sidebarCollapsed: false,
mobileDrawerOpen: false,
menuOpenKeys: [],
aiChatOpen: false,
aiWorking: false,
routeDockTabs: [],
});
useSettingsStore.setState({ aiChat: { deepThinking: false } });
});
export { BASE };