1
0

refactor: 迁移 UI 组件库从 Ant Design 至 TDesign

- 替换 antd 为 tdesign-react 作为主要 UI 组件库
- 引入 Recharts 替代 @ant-design/charts 实现图表功能
- 移除主题系统相关代码(ThemeContext、themes 目录)
- 更新所有组件以适配 TDesign 组件 API
- 更新测试用例以匹配新的组件实现
- 新增 TDesign 和 Recharts 集成规范文档
This commit is contained in:
2026-04-17 18:22:13 +08:00
parent 6eeb38c15e
commit 2b1c5e96c3
55 changed files with 1622 additions and 2541 deletions

View File

@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-04-17

View File

@@ -0,0 +1,346 @@
## Context
**当前状态**
- 前端使用Ant Design 6.3.5作为UI框架
- 实现了6套自定义主题系统default、dark、mui、shadcn、bootstrap、glass
- 使用@ant-design/charts进行数据可视化
- 使用antd-style进行动态样式管理
- 完整的供应商管理和统计功能
**约束条件**
- 必须保持所有业务功能不变
- 图表功能必须保留
- Settings页面路由必须保留即使暂时为空
- 使用bun作为唯一包管理器
- 遵循项目现有代码规范(中文注释、测试覆盖)
**利益相关者**
- 前端开发团队:维护成本降低
- 产品用户UI风格变化功能保持不变
## Goals / Non-Goals
**Goals:**
- 完全迁移到TDesign React组件库统一设计系统
- 移除复杂的多主题系统,简化代码架构
- 使用Recharts替代@ant-design/charts实现数据可视化
- 保持所有业务功能完整可用
- 确保测试覆盖率不降低
- 优化bundle体积移除未使用的主题系统
**Non-Goals:**
- 不实现新的业务功能
- 不保留Ant Design相关代码或依赖
- 不实现侧边栏折叠功能(接受简化)
- 不实现主题切换功能使用TDesign默认主题
- 不优化后端API或数据结构
## Decisions
### 1. 图表库选择Recharts
**决策**使用Recharts替代@ant-design/charts
**理由**
- React原生JSX语法与TDesign风格一致
- TypeScript支持优秀类型定义完整
- 文档清晰社区活跃1.8M周下载量)
- Bundle体积适中~370KB vs ECharts ~1MB
- shadcn/ui生态默认选择现代化设计
- 声明式组件,易于维护和测试
**替代方案**
- **ECharts**功能强大但体积大1MB需要wrapper非React原生
- **Chart.js**最流行但非React原生需要react-chartjs-2 wrapper
- **Visx**:最灵活但学习曲线陡峭,适合高度定制场景
**实现**
```tsx
// UsageChart.tsx
import { LineChart, Line, XAxis, YAxis, CartesianGrid, ResponsiveContainer, Tooltip } from 'recharts';
<ResponsiveContainer width="100%" height={300}>
<LineChart data={chartData}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="date" />
<YAxis />
<Tooltip />
<Line type="monotone" dataKey="requestCount" stroke="#0052D9" strokeWidth={2} />
</LineChart>
</ResponsiveContainer>
```
### 2. 主题系统:完全移除
**决策**删除所有主题相关代码使用TDesign默认主题
**理由**
- 多主题系统增加维护成本和代码复杂度
- TDesign默认主题已满足企业级应用需求
- 简化迁移过程,降低风险
- 减少bundle体积移除antd-style和主题配置
**实现**
- 删除`src/contexts/ThemeContext.tsx`
- 删除`src/themes/`整个目录
- App.tsx移除ThemeProvider直接使用TDesign ConfigProvider
- Settings页面简化为空页面
### 3. 布局组件:简化侧边栏
**决策**:移除侧边栏折叠功能,使用固定宽度侧边栏
**理由**
- TDesign Menu组件没有内置折叠功能
- 自定义实现增加复杂度和维护成本
- 固定宽度侧边栏满足当前业务需求
- 简化迁移过程,降低风险
**实现**
```tsx
// AppLayout.tsx
<Layout.Aside width="232px">
<div style={{ height: 64 }}>AI Gateway</div>
<Menu value={location.pathname} items={menuItems} onChange={({ value }) => navigate(value)} />
</Layout.Aside>
```
### 4. 图标系统TDesign Icons
**决策**使用tdesign-icons-react图标库
**理由**
- 与TDesign组件库配套风格一致
- 支持按需导入优化bundle体积
- 提供完整的图标集合
**映射方案**
```tsx
// Ant Design → TDesign
CloudServerOutlined CloudServerIcon (ServerIcon)
BarChartOutlined ChartLineIcon (ChartIcon)
SettingOutlined SettingIcon
```
**注意**具体图标名称需要在安装tdesign-icons-react后确认根据实际可用图标选择最接近的。
### 5. 栅格系统:保持不变
**决策**继续使用Row/Col栅格系统
**理由**
- TDesign提供完整的Row/Col组件
- API与Ant Design完全兼容
- 无需修改现有栅格代码
- 保持响应式布局能力
**实现**直接替换import路径即可
```tsx
// import { Row, Col } from 'antd';
import { Row, Col } from 'tdesign-react';
```
### 6. 表单组件Dialog替代Modal
**决策**使用TDesign Dialog组件替代Ant Design Modal
**理由**
- Dialog是TDesign的标准弹窗组件
- API相似迁移成本低
- 支持所有必要功能(确认、取消、加载状态)
**API映射**
```tsx
// Ant Design Modal → TDesign Dialog
title header
open visible
onOk onConfirm
onCancel onClose ()
okText confirmBtn
cancelText cancelBtn
destroyOnHidden destroyOnClose
Form.Item Form.FormItem
```
### 7. 迁移策略:渐进式文件替换
**决策**:按模块逐个替换,保持项目可运行
**理由**
- 降低风险,便于调试
- 可以逐步验证每个模块的功能
- 出现问题容易定位和回滚
**顺序**
1. 依赖安装与配置(基础)
2. App.tsx主题移除入口
3. AppLayout布局迁移导航
4. 表单组件迁移ProviderForm、ModelForm
5. 表格组件迁移ProviderTable、ModelTable、StatsTable
6. 统计组件迁移StatCards、UsageChart
7. Settings页面简化
8. 测试文件更新
## Risks / Trade-offs
### 风险1图标名称不匹配
**风险**TDesign可能没有与Ant Design完全对应的图标名称
**缓解**
- 安装tdesign-icons-react后立即确认可用图标
- 选择语义最接近的图标
- 必要时使用通用图标如CloudIcon、ChartIcon、SettingIcon
- 在design.md中记录最终选择的图标映射
### 风险2组件API差异导致功能缺失
**风险**TDesign组件API与Ant Design不完全一致可能影响功能
**缓解**
- 逐个组件对比API文档
- 编写详细的迁移映射表
- 每个模块迁移后立即测试验证
- 保留原有业务逻辑只替换UI组件
### 风险3样式差异影响用户体验
**风险**TDesign默认样式与Ant Design不同用户可能不适应
**缓解**
- 迁移后进行完整UI验收测试
- 必要时通过ConfigProvider调整主题配置
- 记录样式差异点,统一调整
### 风险4测试覆盖率下降
**风险**:迁移过程中测试可能失败或被跳过
**缓解**
- 迁移前确保所有测试通过
- 每个模块迁移后立即更新对应测试
- 删除主题相关测试,其他测试必须保留
- 迁移后运行完整测试套件,确保覆盖率不降低
### 风险5DatePicker日期格式处理
**风险**TDesign DatePicker的日期格式处理可能与Ant Design不同
**缓解**
- 对比两个组件的日期格式API
- 测试日期范围选择功能
- 确保与后端API的日期格式兼容
## Migration Plan
### 阶段1依赖准备0.5小时)
1. 安装新依赖:
```bash
cd frontend
bun add tdesign-react tdesign-icons-react recharts
```
2. 移除旧依赖:
```bash
bun remove antd @ant-design/icons @ant-design/charts antd-style
```
3. 引入TDesign全局样式
```tsx
// src/main.tsx
import 'tdesign-react/es/style/index.css';
```
### 阶段2主题系统移除0.5小时)
1. 删除`src/contexts/ThemeContext.tsx`
2. 删除`src/themes/`整个目录
3. 修改`src/App.tsx`
- 移除ThemeProvider导入和使用
- 替换为TDesign ConfigProvider
4. 删除主题相关测试文件
### 阶段3布局与导航迁移1小时
1. 修改`src/components/AppLayout/index.tsx`
- 替换Layout组件Sider→Aside
- 替换Menu组件
- 替换图标(@ant-design/icons→tdesign-icons-react
- 移除折叠功能相关代码
- 移除主题相关逻辑
2. 更新AppLayout测试
### 阶段4表单组件迁移1.5小时)
1. 修改`src/pages/Providers/ProviderForm.tsx`
- Modal→Dialog
- Form.Item→Form.FormItem
- Input、Switch组件替换
2. 修改`src/pages/Providers/ModelForm.tsx`
- 同上处理
3. 更新表单测试
### 阶段5表格组件迁移1小时
1. 修改`src/pages/Providers/ProviderTable.tsx`
- Table、Card、Button、Tag、Popconfirm、Space替换
2. 修改`src/pages/Providers/ModelTable.tsx`
- 同上处理
3. 修改`src/pages/Stats/StatsTable.tsx`
- Table、Card、Select、Input、DatePicker替换
4. 更新表格测试
### 阶段6统计组件迁移1小时
1. 修改`src/pages/Stats/StatCards.tsx`
- Row、Col、Card、Statistic替换
2. 修改`src/pages/Stats/UsageChart.tsx`
- Card保持
- @ant-design/charts→recharts重写
3. 更新统计测试
### 阶段7Settings页面简化0.5小时)
1. 修改`src/pages/Settings/index.tsx`
- 移除主题设置相关代码
- 简化为空页面提示
2. 更新Settings测试
### 阶段8测试与修复2小时
1. 运行完整测试套件:`bun test`
2. 修复失败的测试
3. 运行E2E测试`bun test:e2e`
4. 手动验收测试:
- 供应商管理完整流程
- 统计数据展示
- 图表交互
- 响应式布局
### 阶段9样式微调1小时
1. 检查UI一致性
2. 调整间距、颜色等细节
3. 确认图标显示正确
4. 最终验收
### 回滚策略
如果迁移过程中出现严重问题:
1. 恢复package.json到迁移前状态
2. 恢复所有源代码文件
3. 重新安装依赖:`bun install`
4. 运行测试确认回滚成功
**注意**建议在迁移前创建Git分支便于回滚。
## Open Questions
1. **TDesign图标名称确认**
- 需要安装tdesign-icons-react后确认具体图标名称
- 如果没有CloudServer/ChartLine/Setting图标选择哪个替代
- 是否需要自定义SVG图标
2. **DatePicker日期格式兼容性**
- TDesign DatePicker的日期格式是否与后端API兼容
- RangePicker的API是否完全兼容
- 是否需要额外的日期处理逻辑?
3. **ConfigProvider全局配置**
- 是否需要配置TDesign的全局属性
- 是否需要自定义主题token
- 国际化配置是否需要调整?
4. **性能影响评估**
- 新bundle体积是否可接受
- Recharts渲染性能是否满足需求
- 是否需要代码分割优化?
5. **用户验收标准**
- UI风格变化的接受度如何
- 是否需要用户参与验收测试?
- 是否需要提供UI变更说明文档

View File

@@ -0,0 +1,75 @@
## Why
当前前端使用Ant Design作为UI框架存在多套自定义主题系统导致维护复杂度高且与项目长期技术规划不一致。迁移到TDesign可以统一设计系统简化代码架构降低维护成本同时保持企业级UI组件库的完整功能。
## What Changes
**BREAKING** 完全移除Ant Design相关依赖迁移到TDesign React组件库
- **移除依赖**
- `antd``@ant-design/icons``@ant-design/charts``antd-style`
- 多主题系统6套主题配置
- ThemeContext及相关代码
- **新增依赖**
- `tdesign-react`TDesign React组件库
- `tdesign-icons-react`TDesign图标库
- `recharts`:图表可视化库(替代@ant-design/charts
- **组件迁移**
- LayoutSider→Aside、Menu、Table、Form、Dialog替代Modal
- Button、Card、Statistic、Tag、Select、Input、Switch、Space
- Row/Col栅格系统API兼容
- DatePicker、Tooltip、Popconfirm
- **功能简化**
- 移除侧边栏折叠功能
- 移除多主题切换使用TDesign默认主题
- Settings页面简化为空页面保留路由待后续扩展
- **图表重写**
- UsageChart从@ant-design/charts迁移到Recharts
- 使用LineChart组件重新实现请求趋势图
## Capabilities
### New Capabilities
- `tdesign-integration`: TDesign组件库集成与配置包括ConfigProvider全局配置、样式引入、图标系统
- `recharts-integration`: Recharts图表库集成用于数据可视化展示
### Modified Capabilities
<!-- 无现有spec需要修改这是全新的UI框架迁移 -->
## Impact
**代码影响**
- `src/App.tsx`移除ThemeProvider使用TDesign ConfigProvider
- `src/components/AppLayout/`Layout和Menu组件重写
- `src/pages/Providers/`:所有表单和表格组件更新
- `src/pages/Stats/`:图表重写,统计组件更新
- `src/pages/Settings/`:简化为空页面
- `src/contexts/ThemeContext.tsx`:删除
- `src/themes/`:整个目录删除
- 所有测试文件:更新组件引用
**依赖影响**
- 移除antd、@ant-design/icons、@ant-design/charts、antd-style
- 新增tdesign-react、tdesign-icons-react、recharts
- 保留:@tanstack/react-query、react-router、react、react-dom
**API影响**
- 组件API变更Modal→Dialog属性名不同
- 图标API变更@ant-design/icons到tdesign-icons-react
- 图表API变更@ant-design/charts到recharts声明式组件
**用户体验影响**
- UI视觉风格变化Ant Design → TDesign
- 移除主题切换功能
- 移除侧边栏折叠功能
- 保持所有业务功能不变
**测试影响**
- 所有组件单元测试需要更新
- 主题相关测试删除
- E2E测试需要验证UI交互

View File

@@ -0,0 +1,112 @@
# Recharts Integration
集成Recharts图表库实现数据可视化功能替代@ant-design/charts。
## ADDED Requirements
### Requirement: Recharts依赖集成
系统SHALL正确集成Recharts图表库作为数据可视化的基础依赖。
#### Scenario: 安装Recharts依赖
- **WHEN** 依赖安装完成
- **THEN** package.json中SHALL存在recharts依赖
- **AND** recharts版本SHALL为2.x最新稳定版
- **AND** Recharts组件SHALL可正常导入使用
### Requirement: UsageChart图表重写
系统SHALL使用Recharts重新实现UsageChart组件保持原有功能。
#### Scenario: 折线图渲染
- **WHEN** UsageChart组件接收统计数据
- **THEN** SHALL使用Recharts的LineChart组件渲染
- **AND** X轴SHALL显示日期数据
- **AND** Y轴SHALL显示请求数据
- **AND** 图表SHALL支持鼠标悬停显示详情Tooltip
- **AND** 图表SHALL包含网格线CartesianGrid
#### Scenario: 响应式图表容器
- **WHEN** 图表渲染
- **THEN** SHALL使用ResponsiveContainer包裹
- **AND** 图表宽度SHALL自适应容器宽度
- **AND** 图表高度SHALL为固定300px
#### Scenario: 空数据状态处理
- **WHEN** 统计数据为空数组
- **THEN** SHALL显示"暂无数据"提示
- **AND** 不SHALL渲染图表组件
#### Scenario: 数据格式转换
- **WHEN** 接收UsageStats数组数据
- **THEN** SHALL按日期聚合计数
- **AND** 数据SHALL按日期升序排序
- **AND** 数据格式SHALL适配Recharts要求
### Requirement: 图表样式配置
系统SHALL配置Recharts图表样式确保视觉一致性。
#### Scenario: 图表颜色配置
- **WHEN** 图表渲染
- **THEN** 折线颜色SHALL为TDesign主色#0052D9
- **AND** 线条宽度SHALL为2px
- **AND** 数据点样式SHALL正常显示
#### Scenario: 网格线配置
- **WHEN** 图表渲染
- **THEN** 网格线SHALL使用虚线样式strokeDasharray="3 3"
- **AND** 网格线SHALL不遮挡数据线
### Requirement: 移除Ant Design Charts
系统SHALL完全移除@ant-design/charts的使用。
#### Scenario: 移除Line组件
- **WHEN** 迁移完成
- **THEN** UsageChart中SHALL不存在@ant-design/charts的Line组件
- **AND** UsageChart中SHALL不存在任何@ant-design/charts导入
#### Scenario: 移除配置对象模式
- **WHEN** 图表实现
- **THEN** SHALL使用Recharts声明式组件模式
- **AND** 不SHALL使用Ant Design Charts的配置对象模式xField、yField等
### Requirement: 图表交互功能
系统SHALL保持图表的基本交互功能。
#### Scenario: 鼠标悬停提示
- **WHEN** 用户鼠标悬停在数据点上
- **THEN** SHALL显示Tooltip提示框
- **AND** 提示框SHALL显示日期和请求数
- **AND** 提示框SHALL不遮挡图表内容
#### Scenario: 平滑曲线效果
- **WHEN** 折线渲染
- **THEN** SHALL使用monotone类型平滑曲线
- **AND** 曲线SHALL自然流畅
- **AND** 数据点SHALL准确对应
### Requirement: 图表性能
系统SHALL确保图表渲染性能满足要求。
#### Scenario: 大数据量渲染
- **WHEN** 统计数据包含大量数据点(>100
- **THEN** 图表SHALL在1秒内完成渲染
- **AND** 交互响应SHALL流畅无卡顿
#### Scenario: 组件重渲染优化
- **WHEN** 父组件重新渲染
- **THEN** 图表组件SHALL避免不必要的重渲染
- **AND** 数据未变化时SHALL保持稳定
### Requirement: 图表测试覆盖
系统SHALL为Recharts图表组件提供完整的测试覆盖。
#### Scenario: 组件渲染测试
- **WHEN** 运行单元测试
- **THEN** UsageChart测试SHALL验证正常渲染
- **AND** UsageChart测试SHALL验证空数据状态
- **AND** UsageChart测试SHALL验证数据格式转换
#### Scenario: 数据处理测试
- **WHEN** 运行单元测试
- **THEN** 测试SHALL覆盖日期聚合逻辑
- **AND** 测试SHALL覆盖数据排序逻辑
- **AND** 测试SHALL验证边界情况

View File

@@ -0,0 +1,120 @@
# TDesign Integration
集成TDesign React组件库提供统一的UI设计系统和组件支持。
## ADDED Requirements
### Requirement: TDesign全局配置
系统SHALL正确配置TDesign ConfigProvider作为全局配置容器确保所有TDesign组件使用统一的配置。
#### Scenario: 应用启动时加载TDesign配置
- **WHEN** 应用初始化启动
- **THEN** ConfigProvider组件SHALL包裹整个应用
- **AND** TDesign全局样式SHALL被正确引入
- **AND** 所有TDesign组件SHALL使用统一配置
#### Scenario: 移除Ant Design配置
- **WHEN** 迁移完成
- **THEN** 应用中SHALL不存在Ant Design的ConfigProvider
- **AND** 应用中SHALL不存在ThemeProvider
- **AND** 应用中SHALL不存在任何Ant Design全局配置
### Requirement: TDesign组件替换
系统SHALL将所有Ant Design组件替换为对应的TDesign组件保持功能完整性。
#### Scenario: 布局组件替换
- **WHEN** 使用Layout组件
- **THEN** SHALL使用TDesign的Layout组件
- **AND** Layout.Sider SHALL替换为Layout.Aside
- **AND** Layout.Header SHALL保持不变
- **AND** Layout.Content SHALL保持不变
#### Scenario: 表单组件替换
- **WHEN** 使用表单相关组件
- **THEN** Modal SHALL替换为Dialog
- **AND** Form.Item SHALL替换为Form.FormItem
- **AND** Input、Select、Switch SHALL使用TDesign版本
- **AND** 表单验证功能SHALL保持完整
#### Scenario: 数据展示组件替换
- **WHEN** 使用数据展示组件
- **THEN** Table、Card、Statistic、Tag SHALL使用TDesign版本
- **AND** 组件功能SHALL保持不变
- **AND** 组件API SHALL兼容原有使用方式
#### Scenario: 导航组件替换
- **WHEN** 使用导航组件
- **THEN** Menu SHALL使用TDesign版本
- **AND** 菜单项配置SHALL正确映射
- **AND** 路由导航功能SHALL保持正常
### Requirement: TDesign图标系统
系统SHALL使用tdesign-icons-react作为图标库替换@ant-design/icons。
#### Scenario: 图标导入替换
- **WHEN** 使用图标组件
- **THEN** SHALL从tdesign-icons-react导入
- **AND** SHALL不从@ant-design/icons导入任何图标
- **AND** 图标显示SHALL正常
#### Scenario: 图标语义匹配
- **WHEN** 替换图标
- **THEN** 新图标SHALL与原图标语义相近
- **AND** CloudServerOutlined SHALL替换为语义相近的TDesign图标
- **AND** BarChartOutlined SHALL替换为语义相近的TDesign图标
- **AND** SettingOutlined SHALL替换为语义相近的TDesign图标
### Requirement: 栅格系统兼容
系统SHALL保持Row/Col栅格系统的使用确保响应式布局功能正常。
#### Scenario: 栅格组件替换
- **WHEN** 使用Row和Col组件
- **THEN** SHALL使用TDesign的Row和Col组件
- **AND** 响应式配置xs、sm、md、lg、xlSHALL保持有效
- **AND** gutter配置SHALL正常工作
- **AND** 布局效果SHALL与迁移前一致
### Requirement: 主题系统移除
系统SHALL完全移除多主题系统使用TDesign默认主题。
#### Scenario: 删除主题相关代码
- **WHEN** 迁移完成
- **THEN** ThemeContext SHALL被删除
- **AND** themes目录 SHALL被删除
- **AND** 所有主题相关导入SHALL被移除
#### Scenario: 使用TDesign默认主题
- **WHEN** 应用运行
- **THEN** SHALL使用TDesign默认视觉风格
- **AND** 不SHALL提供主题切换功能
- **AND** UI风格SHALL统一一致
### Requirement: 依赖管理
系统SHALL正确管理npm依赖确保无冗余依赖。
#### Scenario: 移除Ant Design依赖
- **WHEN** 依赖安装完成
- **THEN** package.json中SHALL不存在antd
- **AND** package.json中SHALL不存在@ant-design/icons
- **AND** package.json中SHALL不存在@ant-design/charts
- **AND** package.json中SHALL不存在antd-style
#### Scenario: 添加TDesign依赖
- **WHEN** 依赖安装完成
- **THEN** package.json中SHALL存在tdesign-react
- **AND** package.json中SHALL存在tdesign-icons-react
- **AND** 依赖版本SHALL为最新稳定版
### Requirement: Settings页面简化
系统SHALL保留Settings页面路由但简化页面内容为空状态。
#### Scenario: Settings页面访问
- **WHEN** 用户访问/settings路由
- **THEN** 页面SHALL正常加载
- **AND** 页面SHALL显示空状态提示
- **AND** 不SHALL显示主题设置相关内容
#### Scenario: Settings路由保留
- **WHEN** 应用路由配置
- **THEN** /settings路由SHALL存在
- **AND** Settings页面组件SHALL存在

View File

@@ -0,0 +1,129 @@
# Implementation Tasks
## 1. 依赖管理
- [x] 1.1 安装TDesign相关依赖tdesign-react、tdesign-icons-react、recharts
- [x] 1.2 移除Ant Design相关依赖antd、@ant-design/icons、@ant-design/charts、antd-style
- [x] 1.3 验证依赖安装正确,无冲突
## 2. 全局配置
- [x] 2.1 在main.tsx引入TDesign全局样式tdesign-react/es/style/index.css
- [x] 2.2 修改App.tsx移除ThemeProvider包裹
- [x] 2.3 在App.tsx添加TDesign ConfigProvider包裹
- [x] 2.4 删除src/contexts/ThemeContext.tsx文件
- [x] 2.5 删除src/themes整个目录
## 3. 布局与导航迁移
- [x] 3.1 修改AppLayout组件替换Layout相关导入antd→tdesign-react
- [x] 3.2 将Layout.Sider替换为Layout.Aside
- [x] 3.3 移除侧边栏折叠功能相关代码collapsed状态、onCollapse回调
- [x] 3.4 设置固定侧边栏宽度232px
- [x] 3.5 替换图标导入(@ant-design/icons→tdesign-icons-react
- [x] 3.6 确认并选择合适的TDesign图标CloudServer、ChartLine、Setting
- [x] 3.7 修改Menu组件属性value、items、onChange
- [x] 3.8 移除主题相关逻辑isDark、effectiveThemeId
- [x] 3.9 移除theme.useToken()相关代码
- [x] 3.10 更新AppLayout测试文件
## 4. 表单组件迁移
- [x] 4.1 修改ProviderForm组件导入antd→tdesign-react
- [x] 4.2 将Modal替换为Dialogtitle→header、open→visible、onOk→onConfirm
- [x] 4.3 调整Dialog按钮属性okText→confirmBtn、cancelBtn
- [x] 4.4 将Form.Item替换为Form.FormItem
- [x] 4.5 将Form onFinish替换为onSubmit
- [x] 4.6 替换Input、Input.Password、Switch组件
- [x] 4.7 验证表单验证规则正常工作
- [x] 4.8 修改ModelForm组件执行相同迁移步骤
- [x] 4.9 更新ProviderForm测试文件
- [x] 4.10 更新ModelForm测试文件
## 5. 表格组件迁移
- [x] 5.1 修改ProviderTable组件导入antd→tdesign-react
- [x] 5.2 替换Table、Card、Button、Tag、Popconfirm、Space、Tooltip组件
- [x] 5.3 调整Button属性variant、color→theme
- [x] 5.4 验证Table expandable配置正常工作
- [x] 5.5 修改ModelTable组件执行相同迁移步骤
- [x] 5.6 修改StatsTable组件导入
- [x] 5.7 替换DatePicker.RangePicker组件
- [x] 5.8 验证日期范围选择功能正常
- [x] 5.9 更新ProviderTable测试文件
- [x] 5.10 更新ModelTable测试文件
- [x] 5.11 更新StatsTable测试文件
## 6. 统计组件迁移
- [x] 6.1 修改StatCards组件导入antd→tdesign-react
- [x] 6.2 替换Row、Col、Card、Statistic组件
- [x] 6.3 验证栅格响应式配置正常工作
- [x] 6.4 修改UsageChart组件导入
- [x] 6.5 移除@ant-design/charts的Line组件导入
- [x] 6.6 添加Recharts相关导入LineChart、Line、XAxis、YAxis、CartesianGrid、ResponsiveContainer、Tooltip
- [x] 6.7 重写图表渲染逻辑使用Recharts声明式组件
- [x] 6.8 配置图表样式stroke="#0052D9"、strokeWidth={2}
- [x] 6.9 配置网格线strokeDasharray="3 3"
- [x] 6.10 验证图表响应式容器正常工作
- [x] 6.11 验证空数据状态显示正确
- [x] 6.12 更新StatCards测试文件
- [x] 6.13 更新UsageChart测试文件
## 7. Settings页面简化
- [x] 7.1 修改Settings页面导入antd→tdesign-react
- [x] 7.2 移除主题设置相关代码useTheme、themeOptions、Select、Switch
- [x] 7.3 简化为空页面,显示"设置功能开发中..."提示
- [x] 7.4 使用Card组件包裹提示内容
- [x] 7.5 更新Settings测试文件
## 8. 其他页面调整
- [x] 8.1 修改Providers/index.tsx移除Typography导入如有
- [x] 8.2 修改Stats/index.tsx移除主题相关逻辑
- [x] 8.3 检查并更新所有页面的组件导入
## 9. 测试文件更新
- [x] 9.1 删除src/__tests__/contexts/ThemeContext.test.tsx
- [x] 9.2 删除src/__tests__/themes整个目录
- [x] 9.3 更新src/__tests__/components/AppLayout.test.tsx
- [x] 9.4 更新src/__tests__/components/ProviderForm.test.tsx
- [x] 9.5 更新src/__tests__/components/ModelForm.test.tsx
- [x] 9.6 更新src/__tests__/components/ProviderTable.test.tsx
- [x] 9.7 更新src/__tests__/components/ModelTable.test.tsx
- [x] 9.8 更新src/__tests__/components/StatCards.test.tsx
- [x] 9.9 更新src/__tests__/components/UsageChart.test.tsx
- [x] 9.10 更新src/__tests__/components/StatsTable.test.tsx
- [x] 9.11 更新src/__tests__/pages/Settings.test.tsx
- [x] 9.12 运行完整测试套件,确保所有测试通过
## 10. 验收测试
- [x] 10.1 运行单元测试bun test
- [x] 10.2 运行测试覆盖率bun test:coverage
- [x] 10.3 运行E2E测试bun test:e2e
- [x] 10.4 手动测试供应商管理完整流程(添加、编辑、删除)
- [x] 10.5 手动测试模型管理完整流程
- [x] 10.6 手动测试统计数据展示
- [x] 10.7 手动测试图表交互(悬停、响应式)
- [x] 10.8 手动测试响应式布局(不同屏幕尺寸)
- [x] 10.9 手动测试Settings页面访问
- [x] 10.10 验证所有路由导航正常
## 11. 样式微调
- [x] 11.1 检查UI整体一致性
- [x] 11.2 调整组件间距(如有必要)
- [x] 11.3 调整颜色配置(如有必要)
- [x] 11.4 确认图标显示正确且风格统一
- [x] 11.5 确认表单布局美观
- [x] 11.6 确认表格样式清晰
## 12. 文档更新
- [x] 12.1 更新README.md中的技术栈说明
- [x] 12.2 记录图标映射关系
- [x] 12.3 记录组件API差异点
- [x] 12.4 更新开发文档(如有)