gongxiangp2/.kiro/specs/ui-fixes/2025-12-21-功能修复记录.md

3.7 KiB
Raw Blame History

2025-12-21 功能修复记录

修复背景

用户反馈:收藏/点赞/编辑/下载功能一个有用的都没有,且素材详情页面的图片展示方式也是和正式系统的不一样。

修复原则

  1. 逐字逐句对比反编译文件和当前代码
  2. 只参考项目根目录的反编译文件(shadow_page_full.js等)
  3. 确保与正式环境表现完全一致

已修复的问题

1. 下载功能优化

问题:下载成功后调用fetchMaterials()刷新整个列表,导致页面跳动和性能问题

修复:

  • 文件:app/page.tsx
  • 修改:下载成功后直接更新本地状态的downloadCount,而不是重新请求整个列表
  • 与反编译文件一致:
    // 反编译文件中的实现
    h((t) => t.map((t) => t.id === e ? { ...t, downloadCount: (t.downloadCount || 0) + 1 } : t))
    

2. 素材列表previewUrl fallback逻辑

问题:当素材没有previewUrl时,没有正确fallback到videoCoverUrl或displayImages[0]

修复:

  • 文件:app/api/materials/route.ts
  • 修改:添加previewUrl的fallback逻辑
  • Fallback顺序(与反编译文件一致):
    1. material.previewUrl
    2. material.videoCoverUrl
    3. material.displayImages[0](如果存在)

代码:

// 处理previewUrl的fallback逻辑(与反编译文件一致)
let previewUrl = material.previewUrl || material.videoCoverUrl || '';
if (!previewUrl && material.displayImages) {
  const displayImagesArray = parseDisplayImages(material.displayImages);
  if (displayImagesArray.length > 0) {
    previewUrl = displayImagesArray[0];
  }
}

3. 单个素材查询previewUrl fallback逻辑

问题:单个素材查询(通过uploadId)时也没有正确的fallback逻辑

修复:

  • 文件:app/api/materials/route.ts
  • 修改:在单个素材查询时也添加相同的previewUrl fallback逻辑

已验证的功能(之前修复)

1. 收藏功能 ✅

  • 前端使用正确的字段名isFavorited
  • 后端使用findFirst而不是findUnique查询收藏状态
  • 数据库表结构:id主键 + @@unique([materialId, userId])唯一约束

2. 点赞功能 ✅

  • 后端使用findFirst而不是findUnique查询点赞状态
  • 数据库表结构:id主键 + @@unique([materialId, userId])唯一约束

3. 详情页布局 ✅

  • 所有素材类型统一使用左右布局
  • 详情页/模特类型:显示多张displayImages
  • 其他类型:显示单张previewUrl

4. 首页滚动 ✅

  • 使用useCallback优化fetchMaterials
  • 支持append参数控制是追加还是重置数据
  • 懒加载时不会返回顶部

待测试的功能

1. 编辑功能

  • API已存在:PUT /api/materials/[id]
  • 前端路由:/edit/[id]
  • 需要测试:编辑后是否正确更新素材信息

2. 详情页图片展示

  • 需要测试:详情页/模特类型是否正确显示多张displayImages
  • 需要测试:其他类型是否正确显示单张previewUrl
  • 需要测试:previewUrl fallback逻辑是否生效

部署状态

  • ✅ 已部署到影子系统(192.168.58.20:5320)
  • ⏳ 待测试所有功能
  • ⏳ 待部署到正式系统(192.168.58.20:4320)

下一步

  1. 在影子系统测试所有功能:
    • 收藏/取消收藏
    • 点赞/取消点赞
    • 编辑素材信息
    • 下载素材
    • 详情页图片展示
  2. 如果测试通过,使用deploy-shadow-to-prod.ps1覆盖正式系统
  3. 验证正式系统的数据完整性(98用户、1,525素材等)

参考文件

  • 反编译文件:shadow_page_full.js
  • 正式数据库报告:正式环境数据库完整报告.md
  • 部署方案:影子系统覆盖正式系统部署方案.md
  • Steering文档:.kiro/steering/项目配置与开发规范.md