- 删除重复文件:components/ui/use-toast.ts 和 components/ui/use-mobile.tsx - 统一 getAuthToken() 函数,在 api-client.ts 中导入并删除重复定义 - 创建 clearAllTokens() 工具函数,统一 token 清除逻辑 - 修复 Toast 延迟时间(从 1000000ms 改为 5000ms) - 修复 TypeScript 类型错误:在 applicationForm 中添加 providerId 字段 - 修复登录路径:使用 super_admin 角色登录超级管理员 - 移除登录前的后端可达性检查(避免浏览器环境问题) - 在管理用户对话框中添加租户角色修改功能(租户/计费管理员/运营管理员) - 移除管理用户对话框中的用户数字段(用户层面不应显示用户数) - 在设置页面添加当前渠道管理员列表显示功能 - 添加获取和创建渠道管理员的 API 方法 - 更新登录方法的角色类型定义,支持所有角色类型
7.7 KiB
7.7 KiB
代码审查报告 - Taiji Pad v0
📋 执行摘要
本报告详细分析了项目中存在的问题、代码重复和可优化的地方。
🔴 严重问题
1. 重复文件(需要立即删除)
1.1 use-toast.ts 重复
- 位置:
hooks/use-toast.ts✅ (正在使用)components/ui/use-toast.ts❌ (未使用,应删除)
- 状态: 所有文件都从
@/hooks/use-toast导入,components/ui/use-toast.ts未被引用 - 建议: 删除
components/ui/use-toast.ts
1.2 use-mobile.ts 重复
- 位置:
hooks/use-mobile.ts✅ (正在使用)components/ui/use-mobile.tsx❌ (未使用,应删除)
- 状态: 所有文件都从
@/hooks/use-mobile导入,components/ui/use-mobile.tsx未被引用 - 建议: 删除
components/ui/use-mobile.tsx
🟡 代码重复问题
2. 函数重复定义
2.1 getAuthToken() 函数重复
- 位置:
lib/auth.ts(第3-13行)lib/api-client.ts(第11-21行)
- 问题: 两个文件定义了完全相同的函数
- 建议:
- 保留
lib/auth.ts中的版本 - 在
lib/api-client.ts中导入:import { getAuthToken } from '@/lib/auth' - 删除
api-client.ts中的重复定义
- 保留
3. 登录页面代码重复
3.1 三个登录页面高度重复
- 文件:
app/login/page.tsxapp/admin/login/page.tsxapp/channel/login/page.tsx
- 重复内容:
- 表单结构(邮箱、密码输入框)
- 密码显示/隐藏切换逻辑
- 语言切换组件
- localStorage token 清除逻辑(第60-68行几乎完全相同)
- 错误处理逻辑
- Toast 通知逻辑
- 建议:
- 创建共享组件
components/auth/LoginForm.tsx - 创建共享 hook
hooks/use-login.ts - 三个页面只保留布局和角色特定的配置
- 创建共享组件
4. localStorage 操作重复
4.1 Token 清除逻辑重复
在以下文件中重复出现相同的 token 清除代码:
lib/api-client.ts(第123-128行, 第192-197行)app/admin/login/page.tsx(第63-68行)app/channel/login/page.tsx(第60-65行)app/admin/dashboard/page.tsx(第602-607行)app/channel/dashboard/page.tsx(第573-578行)
建议: 在 lib/auth.ts 中添加统一函数:
export function clearAllTokens(): void {
if (typeof window !== "undefined") {
localStorage.removeItem("auth_token")
localStorage.removeItem("channel_token")
localStorage.removeItem("admin_token")
localStorage.removeItem("refresh_token")
localStorage.removeItem("user")
localStorage.removeItem("api_key")
}
}
4.2 直接使用 localStorage 而非工具函数
多个文件直接使用 localStorage.getItem() 而不是通过 lib/auth.ts 的工具函数:
app/admin/dashboard/page.tsx(多处)app/channel/dashboard/page.tsx(多处)app/admin/dashboard/components/ChannelsTab.tsx(多处)
建议: 统一使用 lib/auth.ts 中的工具函数
🟢 可优化项
5. 配置和依赖问题
5.1 包管理器锁定文件重复
- 问题: 同时存在
package-lock.json和pnpm-lock.yaml - 建议:
- 如果使用 pnpm,删除
package-lock.json - 如果使用 npm,删除
pnpm-lock.yaml - 在
.gitignore中明确忽略不使用的锁定文件
- 如果使用 pnpm,删除
5.2 TypeScript 配置过时
- 问题:
tsconfig.json中target: "ES6"过于保守 - 建议: 更新为
"ES2020"或"ES2022"以使用现代 JavaScript 特性
5.3 Next.js 配置问题
- 问题:
next.config.mjs中ignoreBuildErrors: true隐藏了类型错误 - 建议: 修复类型错误,移除该选项(或仅在开发环境使用)
5.4 Toast 延迟时间异常
- 问题:
hooks/use-toast.ts中TOAST_REMOVE_DELAY = 1000000(约16分钟) - 建议: 改为合理的值,如
5000(5秒)
6. 代码组织优化
6.1 API Client 文件过大
- 问题:
lib/api-client.ts有 1464 行,包含所有 API 方法 - 建议:
- 按模块拆分:
lib/api/auth.ts,lib/api/user.ts,lib/api/admin.ts,lib/api/channel.ts - 创建统一的 API 客户端基类
- 使用命名空间或类继承组织代码
- 按模块拆分:
6.2 未使用的依赖
- 问题:
package.json中包含大量 Radix UI 组件,可能未全部使用 - 建议:
- 运行
npx depcheck检查未使用的依赖 - 移除未使用的包以减少 bundle 大小
- 运行
7. 类型安全
7.1 缺少类型定义
- 问题: 多处使用
any类型 - 建议:
- 为 API 响应创建明确的类型定义
- 在
lib/api-client.ts中定义APIResponse<T>的泛型使用
7.2 类型文件位置
- 问题:
app/admin/dashboard/types.ts类型定义分散 - 建议: 创建统一的
types/目录组织类型定义
📊 统计数据
- 重复文件: 2 个
- 重复函数: 1 个 (
getAuthToken) - 重复代码块:
- 登录页面: ~150 行重复代码
- Token 清除逻辑: ~30 行重复代码
- localStorage 直接访问: ~20 处
- 可优化文件:
lib/api-client.ts: 1464 行(建议拆分)- 3 个登录页面(建议抽取组件)
🎯 优先级建议
高优先级(立即处理)
- ✅ 删除重复文件 (
components/ui/use-toast.ts,components/ui/use-mobile.tsx) - ✅ 统一
getAuthToken()函数(删除api-client.ts中的重复) - ✅ 创建
clearAllTokens()工具函数 - ✅ 修复 Toast 延迟时间
中优先级(近期处理)
- ⚠️ 抽取登录页面公共组件
- ⚠️ 统一 localStorage 访问(使用工具函数)
- ⚠️ 选择并保留单一包管理器锁定文件
- ⚠️ 更新 TypeScript 配置
低优先级(长期优化)
- 📝 拆分
api-client.ts为多个模块 - 📝 移除未使用的依赖
- 📝 改进类型定义
- 📝 修复 Next.js 配置中的类型错误忽略
📝 实施建议
第一步:清理重复文件
# 删除未使用的重复文件
rm components/ui/use-toast.ts
rm components/ui/use-mobile.tsx
第二步:统一认证工具函数
在 lib/auth.ts 中添加:
clearAllTokens()函数- 确保
getAuthToken()被正确导出
在 lib/api-client.ts 中:
- 导入
getAuthToken和clearAllTokens从@/lib/auth - 删除重复定义
第三步:重构登录页面
创建共享组件和 hook,减少重复代码。
✅ 检查清单
- 删除
components/ui/use-toast.ts✅ 已完成 - 删除
components/ui/use-mobile.tsx✅ 已完成 - 统一
getAuthToken()函数 ✅ 已完成 - 创建
clearAllTokens()函数 ✅ 已完成 - 修复 Toast 延迟时间 ✅ 已完成(从 1000000ms 改为 5000ms)
- 统一 localStorage 访问
- 抽取登录页面公共代码
- 选择单一包管理器
- 更新 TypeScript 配置
- 拆分 API Client
- 检查并移除未使用依赖
🎉 已完成的修复
2025-01-27 修复记录
-
✅ 删除重复文件
- 删除了
components/ui/use-mobile.tsx(保留hooks/use-mobile.ts) components/ui/use-toast.ts已不存在(可能之前已删除)
- 删除了
-
✅ 统一
getAuthToken()函数- 在
lib/api-client.ts中导入getAuthToken和clearAllTokens从@/lib/auth - 删除了
api-client.ts中重复的getAuthToken()定义(第 11-21 行)
- 在
-
✅ 创建
clearAllTokens()工具函数- 在
lib/auth.ts中添加了clearAllTokens()函数 - 在
lib/api-client.ts的login()和logout()方法中使用该函数替换重复代码
- 在
-
✅ 修复 Toast 延迟时间
- 将
hooks/use-toast.ts中的TOAST_REMOVE_DELAY从 1000000ms(约16分钟)改为 5000ms(5秒)
- 将
报告生成时间: 2025-01-27