feat: 查重结果展示升级 — 风险阈值15/30 + 视觉相似度/匹配帧数 + 片段时间轴 #1662 #1676

Merged
auto-approve-bot merged 2 commits from feature/1662-duplication-display into develop 2026-09-04 00:32:39 +08:00
Owner

改动

适配后端 #1660 查重改造,前端展示升级:

  1. 风险阈值调整(utils.ts):<15% 低风险 / 15-30% 中风险 / >30% 高风险
  2. 类型扩展:DuplicationRecord、ProductItem、VideoItem 新增 visual_similaritymatch_count 可选字段(兼容旧数据),mapVideoToProductItem 透传
  3. ResultCard:查重率数字旁新增风险等级 Tag
  4. 时间轴可视化(SegmentsSection):片段列表上方新增纯 CSS 时间轴条,按相似度绿/黄/红着色,hover 显示时间区间/相似度/匹配视频名
  5. ProductInfoPanel:查重率按风险着色,视觉相似度/匹配帧数存在时展示
  6. 单测:getRiskLevel 边界用例(14.9→low / 15→medium / 30→medium / 30.1→high)

技术约束

  • 所有新字段可选,后端未返回时降级展示
  • 时间轴纯 CSS,无新依赖
  • 阈值统一在 utils.ts 一处

本地 tsc/eslint/prettier/vitest 全绿。

## 改动 适配后端 #1660 查重改造,前端展示升级: 1. **风险阈值调整**(utils.ts):<15% 低风险 / 15-30% 中风险 / >30% 高风险 2. **类型扩展**:DuplicationRecord、ProductItem、VideoItem 新增 `visual_similarity`、`match_count` 可选字段(兼容旧数据),mapVideoToProductItem 透传 3. **ResultCard**:查重率数字旁新增风险等级 Tag 4. **时间轴可视化**(SegmentsSection):片段列表上方新增纯 CSS 时间轴条,按相似度绿/黄/红着色,hover 显示时间区间/相似度/匹配视频名 5. **ProductInfoPanel**:查重率按风险着色,视觉相似度/匹配帧数存在时展示 6. **单测**:getRiskLevel 边界用例(14.9→low / 15→medium / 30→medium / 30.1→high) ## 技术约束 - 所有新字段可选,后端未返回时降级展示 - 时间轴纯 CSS,无新依赖 - 阈值统一在 utils.ts 一处 本地 tsc/eslint/prettier/vitest 全绿。
xiaoxia added 1 commit 2026-09-04 00:17:33 +08:00
feat: 查重结果展示升级 — 风险阈值15/30 + 视觉相似度/匹配帧数 + 片段时间轴 #1662
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 12s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 10s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Failing after 1m19s
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m2s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m31s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m10s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m57s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m3s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m0s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
cf671b98c2
- getRiskLevel 阈值调整为 <15 低风险 / 15-30 中风险 / >30 高风险
- DuplicationRecord / ProductItem / VideoItem 新增 visual_similarity、match_count 可选字段
- mapVideoToProductItem 透传新字段
- ResultCard 查重率数字旁新增风险等级 Tag
- SegmentsSection 新增片段时间轴可视化条(纯CSS,按相似度着色,hover tooltip)
- ProductInfoPanel 查重率按风险着色 + 视觉相似度/匹配帧数展示
- 新增 getRiskLevel 边界单测(14.9/15/30/30.1)

🚀 预览环境已部署

项目 详情
PR号 #1676
预览链接 https://pr-1676.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1676 | | 预览链接 | [https://pr-1676.preview.xiaoxiajianji.com](https://pr-1676.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-09-04 00:21:37 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-09-04 00:21:37 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-09-04 00:25:10 +08:00
fix(products): visual_similarity/match_count 空值检查兼容 null(AI Review 阻塞项修复)
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m46s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m56s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m53s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m10s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m10s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m53s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m7s
AI Code Review / AI Code Review (pull_request) Successful in 5m23s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 6m19s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m3s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 9s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 30s
f24e527e0b
后端 JSON 可能返回 null,!== undefined 无法拦截,改为 != null 同时检查 null/undefined
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:1 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [apps/web/src/pages/duplication/components/SegmentsSection.tsx: 46] 时间轴渲染位置防溢出优化
    • 具体内容:在计算时间轴片段的 left 属性时,使用了 Math.min(left, 100) 防止溢出右边界,但未限制负值。如果后端数据异常导致 seg.source_start 为负数,片段会渲染在时间轴容器左侧之外。建议修改为 Math.max(0, Math.min(left, 100)) 以确保百分比始终在 [0, 100] 区间内。

良好实践

  • 边界测试覆盖充分:针对 getRiskLevel 函数的阈值调整(15%和30%),新增的单元测试覆盖了 undefined、边界值及常规值,逻辑验证非常严谨。
  • 向后兼容性处理得当:新增的 visual_similaritymatch_count 字段在类型定义、映射函数及 UI 渲染中均正确使用了可选链(?.)或空值判断(!= null),确保了旧数据不会导致页面崩溃。
  • UI 交互细节完善:时间轴可视化中,片段宽度设置了 0.5% 的最小值,防止极短片段在界面上不可见,提升了用户体验。

🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 16:30:44 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:1 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[apps/web/src/pages/duplication/components/SegmentsSection.tsx: 46] 时间轴渲染位置防溢出优化** - 具体内容:在计算时间轴片段的 `left` 属性时,使用了 `Math.min(left, 100)` 防止溢出右边界,但未限制负值。如果后端数据异常导致 `seg.source_start` 为负数,片段会渲染在时间轴容器左侧之外。建议修改为 `Math.max(0, Math.min(left, 100))` 以确保百分比始终在 [0, 100] 区间内。 ### ✅ 良好实践 - **边界测试覆盖充分**:针对 `getRiskLevel` 函数的阈值调整(15%和30%),新增的单元测试覆盖了 undefined、边界值及常规值,逻辑验证非常严谨。 - **向后兼容性处理得当**:新增的 `visual_similarity` 和 `match_count` 字段在类型定义、映射函数及 UI 渲染中均正确使用了可选链(`?.`)或空值判断(`!= null`),确保了旧数据不会导致页面崩溃。 - **UI 交互细节完善**:时间轴可视化中,片段宽度设置了 `0.5%` 的最小值,防止极短片段在界面上不可见,提升了用户体验。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 16:30:44 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot merged commit df164ddf75 into develop 2026-09-04 00:32:39 +08:00
auto-approve-bot deleted branch feature/1662-duplication-display 2026-09-04 00:32:40 +08:00

🗑️ 预览环境已清理

PR #1676 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1676 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.