feat(article): 文章列表添加日期热力图、分类和标签筛选#33
Conversation
This reverts commit a396262.
|
@claude review 一下代码。 |
|
@claude 请 review 这个 PR。 |
1 similar comment
|
@claude 请 review 这个 PR。 |
|
Claude finished @Tespera's task in 2m 0s —— View job PR Code Reviewfeat(article): 文章列表添加日期热力图、分类和标签筛选
整体实现思路清晰,与闪念页面的交互模式保持一致。发现 2 个 Bug、1 个 i18n 国际化问题,以及若干代码质量建议,详见下文。 🐛 Bug1.
|
| 优先级 | 问题 | 文件 |
|---|---|---|
| 🔴 高 | :label prop 不存在,会产生 Vue 警告 |
index.vue:13, ContributionGraph.vue |
| 🔴 高 | 标签「全部」按钮文案错误(allArticles vs allTags) |
index.vue:103, 11 个 locale 文件 |
| 🟡 中 | ContributionGraph 硬编码中文 locale/星期,复用场景下影响其他语言用户 |
ContributionGraph.vue |
| 🟢 低 | resetFilters → resetPagination 重命名 |
useArticleList.ts:21 |
建议修复前两个高优先级问题后再合并。
|
@claude review 一下代码。 |
|
Claude finished @Tespera's task in 2m 19s —— View job PR Code Reviewfeat(article): 文章列表添加日期热力图、分类和标签筛选
整体实现结构清晰,与闪念页面的交互模式一致,侧边栏复用思路正确。发现 3 个 Bug(其中 2 个高优先级)、1 个全局副作用问题,以及若干代码质量建议。 🐛 Bug1.
|
| 优先级 | 问题 | 位置 |
|---|---|---|
| 🔴 高 | :label prop 不存在,产生 Vue 运行时警告 |
index.vue:14, ContributionGraph.vue |
| 🔴 高 | 标签「全部」按钮 i18n key 错误(allArticles → allTags) |
index.vue:103, 11 个 locale 文件 |
| 🟡 中 | dayjs.locale('zh-cn') 全局副作用影响非中文用户 |
ContributionGraph.vue:85 |
| 🟡 中 | 星期/tooltip 硬编码中文,复用场景下影响其他语言 | ContributionGraph.vue:51,99 |
| 🟢 低 | resetFilters → resetPagination 重命名 |
useArticleList.ts:21 |
| 🟢 低 | 两个 flex-1 侧边栏区域高度分配不均 |
index.vue:53,86 |
| 🟢 低 | 重复注释 `` | ContributionGraph.vue:61-62 |
建议修复前两个高优先级问题后再合并。
|
@claude review 代码。 |
|
Claude finished @Tespera's task in 3m 31s —— View job PR Code Review
总体结论整体方案结构清晰,与闪念页面的交互模式保持一致,筛选互斥逻辑和 computed 计算的设计都很干净。发现 2 个阻塞级问题(会影响所有非中文用户的显示)需要修复后再合并,另有若干建议项。 问题清单🔴 阻塞(必须修)1. 标签区域「全部」按钮使用了错误的 i18n key — <button @click="setSelectedTag(null)">
{{ t('article.allArticles') }}
</button>分类区域同类按钮正确使用了
2. <ContributionGraph
:data="heatmapData" :label="t('article.createAt')"
@day-click="setSelectedDate" />
interface Props {
data: Record<string, number>
}传入未声明的 🟡 建议修改3. // 模块顶层执行,影响整个应用
dayjs.locale('zh-cn')
4. 星期标题与 tooltip 硬编码中文 — const weekDays = ['一', '二', '三', '四', '五', '六', '日'] // 中文硬编码:title="`${day.date}: ${day.count} 条记录`" Legend 区域已通过 🟢 可选(锦上添花)5. const resetFilters = () => {
currentPage.value = 1 // 实际只重置了分页,不清除任何筛选条件
}函数名暗示清除所有筛选,实际只把分页重置到第 1 页。建议改名为 6. 两个 当分类和标签均有数据时,两个 7. 重复注释 — 连续两个相同注释,删掉一个即可。 踩坑维度核查
做得好的地方
建议修复问题 1(i18n key 错误)和问题 2( |
PR #33 描述过简且漏写了删除 Gitee 平台的改动,易导致漏审与回归。 评审时逐项核对描述的完整性/准确性/规范性/充分性,删除功能、移除 平台、改默认行为等高回归风险改动漏写按 🔴 级指出;描述不合格时 在评审结论末尾按 PR 模板给出可直接替换的完整描述。
|
@claude review 一下代码。 |
|
Claude finished @Tespera's task in 2m 47s —— View job PR Code Review
总体结论整体实现结构清晰,筛选互斥逻辑和 computed 设计干净,与闪念页面的交互模式保持一致。但有 2 个阻塞级 Bug(其中一个会直接影响全部非中文用户的 i18n 显示),以及 1 个全局副作用问题需关注。 问题清单🔴 阻塞(必须修)1. 标签区域「全部」按钮误用 <button @click="setSelectedTag(null)">
{{ t('article.allArticles') }}
</button>分类区域的同类按钮正确使用了
2. <ContributionGraph
:data="heatmapData" :label="t('article.createAt')"
@day-click="setSelectedDate" />
interface Props {
data: Record<string, number>
}传入未声明的 🟡 建议修改3. // 模块顶层执行,修改全局 dayjs locale
dayjs.locale('zh-cn')
正确做法是使用局部 locale: 4. 星期标题与 tooltip 硬编码中文 — // 星期标题全部硬编码为中文
const weekDays = ['一', '二', '三', '四', '五', '六', '日']:title="`${day.date}: ${day.count} 条记录`"Legend 区域已正确使用 🟢 可选(锦上添花)5. const resetFilters = () => {
currentPage.value = 1 // 实际只重置分页,不清除任何筛选条件
}函数名 6. 两个 <div v-if="categoryStats.length > 0" class="flex-1 overflow-y-auto ...">
<div v-if="tagStats.length > 0" class="flex-1 overflow-y-auto ...">当分类和标签均有数据时,两个 7. 连续两个相同注释,删掉一个即可。 踩坑维度核查
建议的 PR 描述补充PR 描述整体合格,但 UI 改动按项目规范需附前后截图,目前缺失,建议在描述中补充热力图侧边栏的前后对比截图。此外,描述未提及 做得好的地方
建议修复问题 1( |
问题描述
现有文章列表页只有关键词搜索,无法按日期、分类、标签筛选。文章数量增多后定位某篇文章很不方便,而闪念页面已有完善的筛选交互(热力图、标签云、时间快捷筛选),值得参考。
解决方案
ContributionGraph组件,点击某天按日期筛选文章改动范围
frontend/src/views/articles/list/index.vue- 添加左侧边栏布局、筛选条件标签frontend/src/views/articles/list/composables/useArticleList.ts- 新增日期/标签/分类/时间筛选状态和逻辑,热力图/标签/分类统计数据计算frontend/src/locales/*.json(11个语言文件) - 新增todayArticles、monthArticles、allArticles、allCategories四个 i18n 键测试
已在本地验证:热力图日历点击某天可按日期筛选;今日/本月快捷筛选正常工作;分类和标签云点击可筛选,计数正确;筛选互斥逻辑正常(选标签清除日期,选日期清除标签等);筛选条件标签显示正确且可单独清除;分页在筛选后正常工作。
关联 Issue: #21。
分支已推送至 origin/feat/article-filter。
Closes #21