## 1. 基础设施 - [x] 1.1 安装 sql.js 和 @types/sql.js 到 devDependencies(`bun add -d sql.js @types/sql.js`) - [x] 1.2 修改 `vite.config.ts` proxy target 为动态读取 `process.env.NEX_BACKEND_PORT || '9826'` - [x] 1.3 创建 `e2e/global-setup.ts`(空实现或验证临时目录存在) - [x] 1.4 创建 `e2e/global-teardown.ts`,读取 `process.env.NEX_E2E_TEMP_DIR`,用 `fs.rm` 递归删除 - [x] 1.5 创建 `e2e/fixtures.ts`,导出 `API_BASE` 常量、`seedProvider`、`seedModel`、`seedUsageStats` 函数 - [x] 1.6 重写 `playwright.config.ts`,创建临时目录、设置环境变量、配置双 webServer 数组(Go 后端 + Vite 前端) ## 2. E2E 测试重写 - [x] 2.1 重写 `e2e/providers.spec.ts`:空数据库开始,完整供应商 CRUD 验证(创建→验证→编辑→验证→删除→验证) - [x] 2.2 创建 `e2e/models.spec.ts`:beforeEach API seed 供应商,完整模型 CRUD 验证(展开行→创建模型→验证→编辑→验证→删除→验证) - [x] 2.3 重写 `e2e/stats.spec.ts`:beforeAll API seed 供应商+模型,sql.js seed 多日统计数据,验证概览卡片、表格数据、筛选功能 - [x] 2.4 创建 `e2e/navigation.spec.ts`:侧边栏渲染、页面切换、URL 持久化验证(合并 sidebar.spec.ts) - [x] 2.5 创建 `e2e/validation.spec.ts`:供应商表单必填校验、URL 格式校验、对话框行为(取消重置、连续点击) ## 3. 清理旧文件 - [x] 3.1 删除 `e2e/crud.spec.ts`(内容已拆分到 providers/models/validation) - [x] 3.2 删除 `e2e/sidebar.spec.ts`(内容已合并到 navigation) - [x] 3.3 删除 `e2e/stats-cards.spec.ts`(内容已合并到 stats) ## 4. 验证 - [ ] 4.1 运行 `bun run test:e2e` 确认所有 E2E 测试通过 - [ ] 4.2 确认临时目录在测试结束后被清理 - [ ] 4.3 运行 `bun run dev` 确认日常开发行为不受影响(proxy 仍指向 9826) - [ ] 4.4 运行 `bun run test` 确认单元测试不受影响