1
0

refactor: 统计页面改名为"总览"并提升至侧边栏首位

将侧边栏"用量统计"菜单项改名为"总览",移至第一位,
默认路由重定向从 /providers 改为 /stats
This commit is contained in:
2026-05-07 15:05:45 +08:00
parent e4c96da8a9
commit fb9f6d1d00
7 changed files with 26 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
# Nex Frontend
AI 网关管理前端,提供供应商配置和用量统计界面。
AI 网关管理前端,提供供应商配置和总览界面。
## 技术栈
@@ -97,7 +97,7 @@ frontend/
│ │ └── useVersion.ts
│ ├── pages/
│ │ ├── Providers/ # 供应商管理(含内嵌模型管理)
│ │ ├── Stats/ # 用量统计
│ │ ├── Stats/ # 总览
│ │ ├── Settings/ # 设置(开发中)
│ │ ├── About/ # 关于页面(品牌与版本信息)
│ │ └── NotFound.tsx
@@ -199,7 +199,7 @@ bun run test:e2e
- **统一模型 ID**:显示格式为 `provider_id/model_name`,用于跨协议模型识别,支持一键复制
- **UUID 自动生成**:创建模型时后端自动生成 UUID无需手动输入 ID
### 用量统计
### 总览
- 查看统计数据
- 按供应商筛选

View File

@@ -18,7 +18,7 @@ test.describe('侧边栏', () => {
test('应显示导航菜单项', async ({ page }) => {
const aside = page.locator('aside')
await expect(aside.getByText('供应商管理')).toBeVisible()
await expect(aside.getByText('用量统计')).toBeVisible()
await expect(aside.getByText('总览')).toBeVisible()
})
})
@@ -28,14 +28,14 @@ test.describe('页面导航', () => {
await expect(page.getByRole('heading', { name: '供应商管理' })).toBeVisible()
})
test('应能切换到用量统计', async ({ page }) => {
await page.locator('aside').getByText('用量统计').click()
await expect(page.getByRole('heading', { name: '用量统计' })).toBeVisible()
test('应能切换到总览', async ({ page }) => {
await page.locator('aside').getByText('总览').click()
await expect(page.getByRole('heading', { name: '总览' })).toBeVisible()
})
test('应能切换回供应商管理', async ({ page }) => {
await page.locator('aside').getByText('用量统计').click()
await expect(page.getByRole('heading', { name: '用量统计' })).toBeVisible()
await page.locator('aside').getByText('总览').click()
await expect(page.getByRole('heading', { name: '总览' })).toBeVisible()
await page.locator('aside').getByText('供应商管理').click()
await expect(page.getByRole('heading', { name: '供应商管理' })).toBeVisible()
@@ -51,10 +51,10 @@ test.describe('页面导航', () => {
})
test('应在刷新后保持当前页面', async ({ page }) => {
await page.locator('aside').getByText('用量统计').click()
await expect(page.getByRole('heading', { name: '用量统计' })).toBeVisible()
await page.locator('aside').getByText('总览').click()
await expect(page.getByRole('heading', { name: '总览' })).toBeVisible()
await page.reload()
await expect(page.getByRole('heading', { name: '用量统计' })).toBeVisible()
await expect(page.getByRole('heading', { name: '总览' })).toBeVisible()
})
})

View File

@@ -41,7 +41,7 @@ test.describe('统计概览', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/stats')
await expect(page.getByRole('heading', { name: '用量统计' })).toBeVisible()
await expect(page.getByRole('heading', { name: '总览' })).toBeVisible()
})
test('应显示正确的总请求量', async ({ page }) => {
@@ -99,7 +99,7 @@ test.describe('统计筛选', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/stats')
await expect(page.getByRole('heading', { name: '用量统计' })).toBeVisible()
await expect(page.getByRole('heading', { name: '总览' })).toBeVisible()
})
test('按供应商筛选', async ({ page }) => {

View File

@@ -31,7 +31,7 @@ describe('AppLayout', () => {
renderWithRouter(<AppLayout />)
expect(screen.getAllByText('供应商管理').length).toBeGreaterThan(0)
expect(screen.getAllByText('用量统计').length).toBeGreaterThan(0)
expect(screen.getAllByText('总览').length).toBeGreaterThan(0)
})
it('renders settings menu item', () => {

View File

@@ -20,7 +20,7 @@ export function AppLayout() {
const getPageTitle = () => {
if (location.pathname === '/providers') return '供应商管理'
if (location.pathname === '/stats') return '用量统计'
if (location.pathname === '/stats') return '总览'
if (location.pathname === '/settings') return '设置'
if (location.pathname === '/about') return '关于'
return APP_NAME
@@ -73,12 +73,12 @@ export function AppLayout() {
}
style={{ height: '100%' }}
>
<MenuItem value='/stats' icon={<ChartLineIcon />}>
</MenuItem>
<MenuItem value='/providers' icon={<ServerIcon />}>
</MenuItem>
<MenuItem value='/stats' icon={<ChartLineIcon />}>
</MenuItem>
<MenuItem value='/settings' icon={<SettingIcon />}>
</MenuItem>

View File

@@ -14,7 +14,7 @@ export function AppRoutes() {
<Suspense fallback={<Loading />}>
<Routes>
<Route element={<AppLayout />}>
<Route index element={<Navigate to='/providers' replace />} />
<Route index element={<Navigate to='/stats' replace />} />
<Route path='providers' element={<ProvidersPage />} />
<Route path='stats' element={<StatsPage />} />
<Route path='settings' element={<SettingsPage />} />