feat: 增强标签云组件支持搜索和展开功能
- 将 TagCloud 改造为客户端组件,添加实时搜索功能 - 新增 getTopTags 函数获取热门标签(按项目数量排序) - 支持展开/收起查看所有标签,提升大量标签场景下的用户体验 - 添加标签相关中英文翻译文本 - 新增 scripts/list-tags.js 辅助脚本用于标签统计分析
This commit is contained in:
@@ -156,3 +156,28 @@ export async function getTagsWithProjectCounts(): Promise<TagWithProjectCount[]>
|
||||
|
||||
return tags.filter(tag => tag._count.projects > 0)
|
||||
}
|
||||
|
||||
export async function getTopTags(limit: number = 10): Promise<TagWithProjectCount[]> {
|
||||
const tags = await prisma.tag.findMany({
|
||||
include: {
|
||||
_count: {
|
||||
select: { projects: true }
|
||||
}
|
||||
},
|
||||
where: {
|
||||
projects: {
|
||||
some: {} // 只返回有项目的标签
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// 按项目数量降序、名称升序排序
|
||||
return tags
|
||||
.filter(tag => tag._count.projects > 0)
|
||||
.sort((a, b) => {
|
||||
const countDiff = b._count.projects - a._count.projects
|
||||
if (countDiff !== 0) return countDiff
|
||||
return a.name.localeCompare(b.name, 'zh')
|
||||
})
|
||||
.slice(0, limit)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user