Files
taiji-pda-v0/CODE_REVIEW.md
T
xiaohei 4448468157 优化代码:修复重复文件、统一认证函数、添加租户角色管理和管理员列表功能
- 删除重复文件: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 方法
- 更新登录方法的角色类型定义,支持所有角色类型
2025-12-28 13:43:07 +00:00

7.7 KiB
Raw Blame History

代码审查报告 - 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.tsx
    • app/admin/login/page.tsx
    • app/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 中明确忽略不使用的锁定文件

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 个登录页面(建议抽取组件)

🎯 优先级建议

高优先级(立即处理)

  1. ✅ 删除重复文件 (components/ui/use-toast.ts, components/ui/use-mobile.tsx)
  2. ✅ 统一 getAuthToken() 函数(删除 api-client.ts 中的重复)
  3. ✅ 创建 clearAllTokens() 工具函数
  4. ✅ 修复 Toast 延迟时间

中优先级(近期处理)

  1. ⚠️ 抽取登录页面公共组件
  2. ⚠️ 统一 localStorage 访问(使用工具函数)
  3. ⚠️ 选择并保留单一包管理器锁定文件
  4. ⚠️ 更新 TypeScript 配置

低优先级(长期优化)

  1. 📝 拆分 api-client.ts 为多个模块
  2. 📝 移除未使用的依赖
  3. 📝 改进类型定义
  4. 📝 修复 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 修复记录

  1. ✅ 删除重复文件

    • 删除了 components/ui/use-mobile.tsx(保留 hooks/use-mobile.ts)
    • components/ui/use-toast.ts 已不存在(可能之前已删除)
  2. ✅ 统一 getAuthToken() 函数

    • 在 lib/api-client.ts 中导入 getAuthToken 和 clearAllTokens 从 @/lib/auth
    • 删除了 api-client.ts 中重复的 getAuthToken() 定义(第 11-21 行)
  3. ✅ 创建 clearAllTokens() 工具函数

    • 在 lib/auth.ts 中添加了 clearAllTokens() 函数
    • 在 lib/api-client.ts 的 login() 和 logout() 方法中使用该函数替换重复代码
  4. ✅ 修复 Toast 延迟时间

    • 将 hooks/use-toast.ts 中的 TOAST_REMOVE_DELAY 从 1000000ms(约16分钟)改为 5000ms(5秒)

报告生成时间: 2025-01-27