{percentLabel}
{window.resetLabel}
diff --git a/src/router/MainRoutes.tsx b/src/router/MainRoutes.tsx
new file mode 100644
index 0000000..ee01d80
--- /dev/null
+++ b/src/router/MainRoutes.tsx
@@ -0,0 +1,32 @@
+import { Navigate, useRoutes, type Location } from 'react-router-dom';
+import { DashboardPage } from '@/pages/DashboardPage';
+import { SettingsPage } from '@/pages/SettingsPage';
+import { ApiKeysPage } from '@/pages/ApiKeysPage';
+import { AiProvidersPage } from '@/pages/AiProvidersPage';
+import { AuthFilesPage } from '@/pages/AuthFilesPage';
+import { OAuthPage } from '@/pages/OAuthPage';
+import { QuotaPage } from '@/pages/QuotaPage';
+import { UsagePage } from '@/pages/UsagePage';
+import { ConfigPage } from '@/pages/ConfigPage';
+import { LogsPage } from '@/pages/LogsPage';
+import { SystemPage } from '@/pages/SystemPage';
+
+const mainRoutes = [
+ { path: '/', element:
},
+ { path: '/dashboard', element:
},
+ { path: '/settings', element:
},
+ { path: '/api-keys', element:
},
+ { path: '/ai-providers', element:
},
+ { path: '/auth-files', element:
},
+ { path: '/oauth', element:
},
+ { path: '/quota', element:
},
+ { path: '/usage', element:
},
+ { path: '/config', element:
},
+ { path: '/logs', element:
},
+ { path: '/system', element:
},
+ { path: '*', element:
},
+];
+
+export function MainRoutes({ location }: { location?: Location }) {
+ return useRoutes(mainRoutes, location);
+}
diff --git a/src/services/api/oauth.ts b/src/services/api/oauth.ts
index 5e48472..456aafd 100644
--- a/src/services/api/oauth.ts
+++ b/src/services/api/oauth.ts
@@ -9,8 +9,7 @@ export type OAuthProvider =
| 'anthropic'
| 'antigravity'
| 'gemini-cli'
- | 'qwen'
- | 'iflow';
+ | 'qwen';
export interface OAuthStartResponse {
url: string;
@@ -30,7 +29,7 @@ export interface IFlowCookieAuthResponse {
type?: string;
}
-const WEBUI_SUPPORTED: OAuthProvider[] = ['codex', 'anthropic', 'antigravity', 'gemini-cli', 'iflow'];
+const WEBUI_SUPPORTED: OAuthProvider[] = ['codex', 'anthropic', 'antigravity', 'gemini-cli'];
const CALLBACK_PROVIDER_MAP: Partial
> = {
'gemini-cli': 'gemini'
};
diff --git a/src/styles/global.scss b/src/styles/global.scss
index 3eb2ce7..14ed595 100644
--- a/src/styles/global.scss
+++ b/src/styles/global.scss
@@ -15,6 +15,15 @@ body {
transition: background-color $transition-normal, color $transition-normal;
}
+html.modal-open,
+body.modal-open {
+ overflow: hidden;
+}
+
+body.modal-open .content {
+ overflow: hidden;
+}
+
// 滚动条样式
::-webkit-scrollbar {
width: 8px;
diff --git a/src/styles/layout.scss b/src/styles/layout.scss
index c9a7710..bb452ba 100644
--- a/src/styles/layout.scss
+++ b/src/styles/layout.scss
@@ -348,6 +348,7 @@
flex-direction: column;
min-width: 0;
overflow-y: auto;
+ scrollbar-gutter: stable;
height: 100%;
&.content-logs {
diff --git a/src/types/oauth.ts b/src/types/oauth.ts
index 35892b2..edcc95f 100644
--- a/src/types/oauth.ts
+++ b/src/types/oauth.ts
@@ -9,8 +9,7 @@ export type OAuthProvider =
| 'anthropic'
| 'antigravity'
| 'gemini-cli'
- | 'qwen'
- | 'iflow';
+ | 'qwen';
// OAuth 流程状态
export interface OAuthFlow {
diff --git a/src/types/quota.ts b/src/types/quota.ts
index 14a8deb..ac32a50 100644
--- a/src/types/quota.ts
+++ b/src/types/quota.ts
@@ -37,6 +37,7 @@ export interface GeminiCliQuotaState {
export interface CodexQuotaWindow {
id: string;
label: string;
+ labelKey?: string;
usedPercent: number | null;
resetLabel: string;
}
diff --git a/src/utils/constants.ts b/src/utils/constants.ts
index ef2594c..eb1b650 100644
--- a/src/utils/constants.ts
+++ b/src/utils/constants.ts
@@ -42,16 +42,14 @@ export const OAUTH_CARD_IDS = [
'anthropic-oauth-card',
'antigravity-oauth-card',
'gemini-cli-oauth-card',
- 'qwen-oauth-card',
- 'iflow-oauth-card'
+ 'qwen-oauth-card'
];
export const OAUTH_PROVIDERS = {
CODEX: 'codex',
ANTHROPIC: 'anthropic',
ANTIGRAVITY: 'antigravity',
GEMINI_CLI: 'gemini-cli',
- QWEN: 'qwen',
- IFLOW: 'iflow'
+ QWEN: 'qwen'
} as const;
// API 端点