refactor(frontend): 重构状态管理使用Zustand替代Context API

feat(auth): 添加账户锁定功能及自动解锁机制
feat(user): 在用户模型中添加lockedUntil字段
feat(api): 实现账户锁定逻辑和剩余尝试次数提示

perf(3d): 优化3D场景状态管理性能
perf(floorplan): 优化平面图状态管理性能

chore(deps): 添加zustand依赖
chore(config): 更新安全配置锁定时间为3分钟

docs: 更新部分组件注释
style: 调整登录页面样式
This commit is contained in:
zhang1106
2026-05-08 11:17:29 +08:00
parent 03e320af9e
commit 2826a00192
33 changed files with 2026 additions and 1442 deletions
+7 -17
View File
@@ -46,9 +46,8 @@ import {
useLocation,
useNavigate,
} from 'react-router-dom';
import { useAuth } from './context/AuthContext';
import { ConfigProvider, useConfig } from './context/ConfigContext';
import { Scene3DProvider } from './context/Scene3DContext';
import { useAuth } from './hooks/useAuth';
import { useConfig } from './hooks/useConfig';
import { useDesignTokens } from './hooks/useDesignTokens';
import useIdleTimeout from './hooks/useIdleTimeout';
import { SWRConfig, swrConfig } from './hooks/useSWR';
@@ -143,10 +142,9 @@ const ProtectedRoute = ({ component: Component }) => (
</PrivateRoute>
);
// 默认空闲超时配置
const DEFAULT_IDLE_CONFIG = {
timeout: 30 * 60 * 1000, // 30分钟
warningTime: 60 * 1000, // 60秒
timeout: 30 * 60 * 1000,
warningTime: 60 * 1000,
};
const AppLayout = ({ children }) => {
@@ -159,7 +157,6 @@ const AppLayout = ({ children }) => {
const location = useLocation();
const designTokens = useDesignTokens();
// 获取空闲超时配置
useEffect(() => {
const fetchIdleConfig = async () => {
try {
@@ -176,7 +173,6 @@ const AppLayout = ({ children }) => {
fetchIdleConfig();
}, []);
// 启用空闲超时检测
useIdleTimeout({
timeout: idleConfig.timeout,
warningTime: idleConfig.warningTime,
@@ -674,9 +670,7 @@ const ThemeConfig = () => {
title="3D 可视化加载失败"
subTitle="3D 场景在加载过程中遇到错误,可能是浏览器不支持 WebGL 或模型文件加载失败"
>
<Scene3DProvider>
<Rack3DVisualization />
</Scene3DProvider>
<Rack3DVisualization />
</ErrorBoundary>
</PrivateRoute>
}
@@ -691,11 +685,7 @@ const ThemeConfig = () => {
};
function App() {
return (
<ConfigProvider>
<ThemeConfig />
</ConfigProvider>
);
return <ThemeConfig />;
}
export default App;
export default App;