重构客户端登录页并更新品牌图标
This commit is contained in:
@@ -39,6 +39,7 @@ import {
|
||||
syncConfigToServer,
|
||||
normalizeServerHost,
|
||||
loginAndRegister,
|
||||
isLoggedIn as checkIsLoggedIn,
|
||||
} from "./services/core/auth";
|
||||
import {
|
||||
APP_DISPLAY_NAME,
|
||||
@@ -49,6 +50,7 @@ import type { QuickInitConfig } from "@shared/types/quickInit";
|
||||
import type { UpdateState } from "@shared/types/updateTypes";
|
||||
import { t, getCurrentLang } from "./services/core/i18n";
|
||||
import SetupWizard from "./components/setup/SetupWizard";
|
||||
import LoginPage from "./components/setup/LoginPage";
|
||||
import SetupDependencies from "./components/setup/SetupDependencies";
|
||||
import ClientPage from "./components/pages/ClientPage";
|
||||
import SettingsPage from "./components/pages/SettingsPage";
|
||||
@@ -187,6 +189,9 @@ function App() {
|
||||
// 初始化向导状态
|
||||
// ============================================
|
||||
const [isSetupComplete, setIsSetupComplete] = useState<boolean | null>(null);
|
||||
const [isLoggedIn, setIsLoggedIn] = useState<boolean | null>(null);
|
||||
const [loginStep1Config, setLoginStep1Config] =
|
||||
useState<Step1Config>(DEFAULT_STEP1_CONFIG);
|
||||
const setupJustCompleted = useRef(false);
|
||||
// 内存变量:标记服务是否由登录流程启动(不持久化)
|
||||
const loginStartedRef = useRef(false);
|
||||
@@ -392,6 +397,10 @@ function App() {
|
||||
const checkSetup = async () => {
|
||||
try {
|
||||
const completed = await setupService.isSetupCompleted();
|
||||
const step1 = await setupService.getStep1Config();
|
||||
setLoginStep1Config(step1);
|
||||
const loggedIn = await checkIsLoggedIn();
|
||||
setIsLoggedIn(loggedIn);
|
||||
|
||||
// 每次启动优先读取 quick init 配置
|
||||
if (completed) {
|
||||
@@ -411,6 +420,7 @@ function App() {
|
||||
} catch (error) {
|
||||
log.error("Failed to check setup status:", error);
|
||||
setIsSetupComplete(true);
|
||||
setIsLoggedIn(false);
|
||||
}
|
||||
};
|
||||
checkSetup();
|
||||
@@ -445,6 +455,8 @@ function App() {
|
||||
// ============================================
|
||||
const handleAuthChange = useCallback(async () => {
|
||||
const user = await authService.getAuthUser();
|
||||
const loggedIn = await checkIsLoggedIn();
|
||||
setIsLoggedIn(loggedIn);
|
||||
if (user) {
|
||||
setUsername(
|
||||
user.displayName || user.username || t("Claw.App.defaultUsername"),
|
||||
@@ -459,6 +471,29 @@ function App() {
|
||||
loginStartedRef.current = true;
|
||||
}, []);
|
||||
|
||||
const ensureDefaultLoginConfig = useCallback(async () => {
|
||||
const currentConfig = await setupService.getStep1Config();
|
||||
const nextConfig: Step1Config = {
|
||||
...DEFAULT_STEP1_CONFIG,
|
||||
...currentConfig,
|
||||
serverHost: currentConfig.serverHost || DEFAULT_STEP1_CONFIG.serverHost,
|
||||
workspaceDir:
|
||||
currentConfig.workspaceDir || DEFAULT_STEP1_CONFIG.workspaceDir,
|
||||
};
|
||||
await setupService.saveStep1Config(nextConfig);
|
||||
setLoginStep1Config(nextConfig);
|
||||
return nextConfig;
|
||||
}, []);
|
||||
|
||||
const handleFullscreenLoginSuccess = useCallback(async () => {
|
||||
await setupService.completeStep2();
|
||||
await setupService.completeSetup();
|
||||
setupJustCompleted.current = true;
|
||||
setIsSetupComplete(true);
|
||||
await handleAuthChange();
|
||||
setAuthRefreshTrigger((v) => v + 1);
|
||||
}, [handleAuthChange]);
|
||||
|
||||
// ============================================
|
||||
// 主界面下必需依赖检查:仅当存在「未安装」或「错误」时进入依赖安装
|
||||
// 版本以当前真实安装为准,outdated 不触发(用户可在依赖 Tab 手动升级)
|
||||
@@ -1106,7 +1141,8 @@ function App() {
|
||||
// ============================================
|
||||
if (
|
||||
isSetupComplete === null ||
|
||||
(isSetupComplete && needsRequiredDepsReinstall === null)
|
||||
isLoggedIn === null ||
|
||||
(isLoggedIn && isSetupComplete && needsRequiredDepsReinstall === null)
|
||||
) {
|
||||
return (
|
||||
<I18nContext.Provider value={i18nContextValue}>
|
||||
@@ -1120,6 +1156,20 @@ function App() {
|
||||
);
|
||||
}
|
||||
|
||||
if (!isLoggedIn) {
|
||||
return (
|
||||
<I18nContext.Provider value={i18nContextValue}>
|
||||
<ConfigProvider theme={currentTheme}>
|
||||
<LoginPage
|
||||
step1Config={loginStep1Config}
|
||||
onLoginStart={ensureDefaultLoginConfig}
|
||||
onLoginSuccess={handleFullscreenLoginSuccess}
|
||||
/>
|
||||
</ConfigProvider>
|
||||
</I18nContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
// ============================================
|
||||
// 渲染:初始化向导
|
||||
// ============================================
|
||||
|
||||
Reference in New Issue
Block a user