# UIDesign.md:小红书 / 抖音热榜评论抓取 + AI 分析报告工具 > 版本:v1.1 > 状态:MVP 设计稿(已审阅) > 最后更新:2025-07-10 > 关联文档:DevelopmentPlan.md / FeatureSummary.md ## 1. 文档信息 - 文档阶段:UIDesign(界面与交互设计文档) - 需求与技术依据:`PRD.md`、`FeatureSummary.md`、`DevelopmentPlan.md` - 视觉风格:工程化、简洁、信息密度高,以数据看板、表格和轻量报告为主 - 技术实现前提:FastAPI Jinja2 模板 + Bootstrap 5 CDN + 简单 CSS + 原生 JS;HTMX 作为 P1 局部刷新增强方案 - 目标用户:内部演示、开发联调、产品/数据分析同事查看抓取与分析结果 ## 2. 设计原则与全局规范 ### 2.1 设计原则 - 信息优先:核心数据,包括进度、状态、评论样本数、情绪分布和导出入口,必须在第一视觉层级。 - 状态透明:任务的等待、运行、成功、失败、AI 样本不足和分析失败必须通过统一 Badge、颜色和文案展示。 - 极简交互:避免复杂弹窗和多步引导,抓取、查看、导出等操作入口扁平化呈现。 - 调试友好:MVP 是工程演示工具,允许在详情页保留原始 JSON 调试入口,但不作为正式用户功能。 - 移动端可读:不依赖 Hover 作为主信息通道,错误原因和状态说明应直接可见。 ### 2.2 全局样式规范 推荐直接使用 Bootstrap 5 CDN,降低 4 天 MVP 开发复杂度。 主色调: - Primary(主要操作/高亮):`#0d6efd` - Success(成功/正向情绪):`#198754` - Danger(失败/负向情绪/错误):`#dc3545` - Warning(运行中/中性情绪/分析不足):`#ffc107` - Secondary(次要信息/未知状态):`#6c757d` 版式: - 顶部固定导航栏。 - 主体内容区居中,最大宽度建议 `1200px`。 - 页面主体使用 Bootstrap `.container`。 - 模块使用 Card、Table、Accordion、Alert、Badge、Progress Bar 等基础组件。 - 不做复杂营销式视觉设计,优先保证密集信息下的可读性和操作效率。 ## 3. 路由与接口总表 ### 页面路由(返回 HTML,由 Jinja2 渲染) | 方法 | 路径 | 用途 | 对应模板 | |---|---|---|---| | GET | `/` | 首页 / 任务列表页 | `index.html` | | GET | `/tasks/{task_id}` | 任务详情页(热点与内容条目列表) | `tasks/detail.html` | | GET | `/hotspots/{hotspot_id}/report` | 热点级汇总报告页 | `hotspots/report.html` | | GET | `/items/{item_id}` | 内容条目详情页 | `items/detail.html` | ### API 接口(返回 JSON,供前端 JS 调用) | 方法 | 路径 | 用途 | 返回格式 | |---|---|---|---| | POST | `/api/tasks` | 创建抓取任务 | JSON `{task_id, status}` | | GET | `/api/tasks/{task_id}` | 查询任务最新状态 | JSON | ### 局部刷新接口(返回 HTML Fragment,供 HTMX 调用) | 方法 | 路径 | 用途 | 返回格式 | |---|---|---|---| | GET | `/partials/tasks` | 刷新任务列表表格行 | HTML Fragment(`task_rows.html`) | ### 导出接口(返回文件流) | 方法 | 路径 | 用途 | 返回格式 | |---|---|---|---| | GET | `/api/export/items/{item_id}/comments.csv` | 导出内容条目评论明细 CSV | File | | GET | `/api/export/items/{item_id}/report.md` | 导出内容条目分析报告 Markdown | File | | GET | `/api/export/hotspots/{hotspot_id}/report.md` | 导出热点汇总报告 Markdown | File | | GET | `/api/export/hotspots/{hotspot_id}/comments.csv` | 导出热点下全部评论汇总 CSV | File | ## 4. 状态枚举与 UI 映射规范 所有模板中的状态展示统一依据以下枚举值映射,禁止在模板中硬编码中文状态文案。 ### Task.status | 后端值 | 中文展示 | Badge 样式 | |---|---|---| | `pending` | 等待中 | `bg-secondary` | | `running` | 运行中 | `bg-warning text-dark` | | `success` | 已完成 | `bg-success` | | `failed` | 失败 | `bg-danger` | ### Task.analysis_status | 后端值 | 中文展示 | Badge 样式 | 说明 | |---|---|---|---| | `normal` | — | 不展示 | 正常,无需提示 | | `insufficient` | ⚠️ AI 样本不足 | `bg-warning text-dark` | 展示 Alert 提示 | | `failed` | ⚠️ AI 分析失败 | `bg-danger` | 展示 Alert 提示 | ### Item.status | 后端值 | 中文展示 | 样式 | |---|---|---| | `pending` | 等待抓取 | `text-secondary` | | `crawling` | 抓取中 | `text-warning` | | `analyzing` | 分析中 | `text-info` | | `success` | 已分析 | `text-success` | | `crawl_failed` | 抓取失败 | `text-danger` | | `analysis_failed` | 分析失败 | `text-danger` | ### Comment.analysis_status | 后端值 | 中文展示 | 说明 | |---|---|---| | `success` | — | 正常,无需特殊标注 | | `insufficient` | 样本不足 | 灰色斜体提示 | | `failed` | 解析失败 | 红色文字 | | `skipped` | 未分析 | 灰色文字 | ### sentiment(情绪倾向) | 后端值 | 中文展示 | Badge 样式 | |---|---|---| | `positive` | 正向 | `bg-success` | | `neutral` | 中性 | `bg-warning text-dark` | | `negative` | 负向 | `bg-danger` | | `unknown` | 未知 | `bg-secondary` | ## 5. 面包屑导航与页面标题规范 ### 各页面面包屑路径 | 页面 | 面包屑层级 | |---|---| | `/` | 首页 | | `/tasks/{task_id}` | 首页 › 任务 \#{task_id} | | `/hotspots/{hotspot_id}/report` | 首页 › 任务 \#{task_id} › 热点 \#{rank}:{title} › 汇总报告 | | `/items/{item_id}` | 首页 › 任务 \#{task_id} › 热点 \#{rank}:{title} › {item_title} | 面包屑使用 Bootstrap 的 `