Files
spark-store/docs/ranking-honor-plan.md
T
xiyidaiwa b89c001401 refactor: 基于 upstream/Erotica 重新整合本地功能(来源选择/合并详情/计数/窗口/首页)
将本地在 upstream !408(已安装应用合并+统计)之上的后续改动重新整合到最新 upstream/Erotica:
- 已安装应用:卸载/打开按 APM/Spark 来源选择;计数总数=APM+Spark 包数(双来源计为独立包)
- 查看详情:已安装页复用所有应用页合并详情视图(单来源优先已装类型,双来源自动模式)
- 窗口:恢复阈值改为 1600x900,过大回退默认尺寸并居中,不自动最大化
- 首页推荐:致谢卡片移至其他内容下方,加大标题/卡片/致谢间距
- 隐藏排行榜/荣耀榜侧栏入口(代码保留,v-if=false)
- 新增 scripts/test-build.sh 测试打包脚本(版本末段+1 加 -test)并更新 AGENTS.md

冲突文件(index.ts/App.vue/InstalledAppsModal.vue)均取本地完整实现(为上游版本的超集)。
2026-08-03 11:06:28 +08:00

11 KiB
Raw Blame History

排行榜与星火荣耀榜 · 项目规划文档

状态:草图设计已确认,待实现 分支:Erotica 日期:2026-07-30 关联预览原型:ranking-preview.html(仓库根目录,仅用于设计预览,不入库)


1. 项目背景与目标

在「已安装应用」模块重构(来源标签化、统计徽章、搜索、来源筛选、APM 置顶)完成后,本次规划聚焦于首页与发现页的内容重组

  • 将原本散落在「首页推荐」中的下载排行独立为「排行榜」一级页面,并补充应用更新排行
  • 新增**「星火荣耀榜」**页面,表彰应用贡献者与近期更新贡献者;
  • 精简「首页推荐」页:移除精选板块(区域2)与下载排行(区域3),仅保留精选链接(区域1),并在区域1 顶部加入致谢说明。

预期成果:形成「首页推荐(轻量入口)— 排行榜(下载/更新)— 荣耀榜(贡献者荣誉)」三层递进的发现体系,强化社区贡献者认同感。


2. 数据可行性核查(代码已确认)

字段 来源 结论
app.downloadCount 现有 apmRanking / sparkRankingApp.vue 11641250,异步逐应用拉 download-times.txt 直接复用,无需新增请求
app.update App.vue:886appJson.Update 映射,格式 "2026-01-26 17:34:15",同格式可直接 localeCompare 倒序 列表已含,可直接排序
app.contributor App.vue:884appJson.Contributor 映射 列表已含,无需详情请求

结论:荣耀榜/更新榜所需字段均已在列表加载阶段填充,聚合逻辑可基于已加载的 apps 实时计算,不引入额外网络请求。


3. 任务总览(优先级 + 阶段)

任务ID 名称 类型 优先级 阶段 关联模块
F1 排行榜页(RankingView 新功能 P0 待实现 App.vue, AppSidebar, HomeView(移除区域3)
F1.1 应用下载排行(Spark/APM 双榜) 新功能 P0 待实现 复用 apmRanking/sparkRanking
F1.2 应用更新排行(Spark/APM 双榜) 新功能 P0 待实现 appsupdate 字段)
F2 星火荣耀榜页(HonorView 新功能 P0 待实现 App.vue, AppSidebar
F2.1 贡献荣耀榜(按来源聚合 contributor 新功能 P0 待实现 appscontributor 字段)
F2.2 更新荣耀榜(最近更新应用 contributor 聚合) 新功能 P0 待实现 appsupdate+contributor
F2.3 致谢说明卡片 新功能 P1 待实现 HonorView / HomeView 复用
F3 侧边栏导航入口 新功能 P0 待实现 AppSidebar.vue, App.vue
M1 首页推荐页改造(去区域2/3,区域1加致谢) 修改现有 P0 待实现 HomeView.vue
M2 App.vue 视图路由与数据编排 修改现有 P0 待实现 App.vue
M3 榜单聚合工具函数 重构/提取 P1 待优化 新增 util 或 App.vue 内 computed
O1 边加载边更新体验优化 优化 P2 待优化 HonorViewcomputed + watch
O2 榜单条数/来源可配置 优化 P2 待优化 RankingView/HonorView props
O3 空状态与加载失败兜底 优化 P1 待优化 RankingView/HonorView
R1 类型安全与 lint 修复 修复 P1 待修复 全部新增组件
R2 与现有列表加载/更新逻辑的一致性校验 修复 P1 待修复 App.vue, install-manager

4. 详细任务分解

4.1 新功能模块

F1 · 排行榜页(RankingView.vue

F1.1 应用下载排行

  • 改动描述:新增 RankingView 组件,区块一展示「应用下载排行」,内部按来源分为 Spark 下载榜 / APM 下载榜两栏,各取下载量前 10 名。复用现有 apmRanking / sparkRanking 数据(由 App.vue 传入),列表项沿用 AppCardcompact 样式,并在左侧加排名序号(前 3 名用金/银/铜配色)。
  • 预期目标:与现有首页下载排行视觉一致,且独立成页后信息更聚焦。
  • 关联模块App.vue(传入 apmRanking/sparkRanking)、AppCard.vueAppSidebar.vue(入口)。
  • 备注:当前首页区域3 的展示可直接迁移,避免重复实现。

F1.2 应用更新排行

  • 改动描述:区块二展示「应用更新排行」,按来源分为 Spark 更新榜 / APM 更新榜两栏,各取 app.update 倒序前 10 名;列表项复用 AppCard compact 样式,副信息显示版本与更新时间(替换下载量徽章)。
  • 预期目标:让用户快速了解近期活跃更新的应用。
  • 关联模块App.vueapps 全量数据)、AppCard.vue
  • 备注:排序用 update.localeCompare 倒序(格式统一可行)。

F2 · 星火荣耀榜页(HonorView.vue

F2.1 贡献荣耀榜

  • 改动描述:区块一展示「贡献荣耀榜」,按来源分为 Spark / APM 两栏,各取 app.contributor 出现次数前 10 名(聚合基于已加载 apps,实时计算)。列表项显示排名、贡献者名(去除 <email> 后缀)、上榜应用数徽章。
  • 预期目标:表彰对星火生态贡献最多的开发者/维护者。
  • 关联模块App.vueapps)、HonorView.vue

F2.2 更新荣耀榜

  • 改动描述:区块二展示「更新荣耀榜」,按来源分为 Spark / APM 两栏;取最近更新(按 update 倒序)的前 30 个应用,聚合其 contributor 出现次数,取前 10 名展示。
  • 预期目标:突出近期持续维护应用的贡献者。
  • 关联模块App.vueapps)、HonorView.vue
  • 备注:与 F1.2 同源(最近更新应用列表),可共享计算。

F2.3 致谢说明卡片

  • 改动描述:在荣耀榜页顶部加入美化后的致谢卡片(渐变琥珀背景 + 图标 + 文案「致每一位星火贡献者…🎉」);同一卡片样式也用于首页推荐区域1(见 M1)。
  • 预期目标:强化社区归属感,视觉与整体风格统一。
  • 关联模块HonorView.vueHomeView.vue(复用同一段模板/组件)。

F3 · 侧边栏导航入口

  • 改动描述:在 AppSidebar.vue 新增「排行榜」「荣耀榜」两个一级入口,点击分别 selectTab('ranking') / selectTab('honor'),激活态沿用 .sidebar-tab-active 样式。
  • 预期目标:用户可从侧边栏直达新页面。
  • 关联模块AppSidebar.vueApp.vueactiveTab 状态)。

4.2 需要修改的现有模块

M1 · 首页推荐页改造(HomeView.vue

  • 改动描述:移除模板中的区域2·精选板块recommendSections 应用列表区块)与区域3·下载排行apmRanking/sparkRanking 区块)及其对应 propsrecommendSectionsapmRankingsparkRankingrankingLoading);在区域1(精选链接 homelinks 网格)顶部插入致谢说明卡片(F2.3 同款)。
  • 预期目标:首页回归轻量入口定位,下载排行/精选板块职责移交排行榜页与「全部应用」。
  • 关联模块HomeView.vueApp.vue(停止向 HomeView 传 ranking/recommend 数据,或保留 recommend 供「全部应用」使用——需确认 recommendSections 是否仍被其他入口复用)。
  • 备注⚠️ 需确认 recommendSections 是否仅首页使用;若「全部应用」等也依赖,则不能简单删除数据加载。

M2 · App.vue 视图路由与数据编排

  • 改动描述:主内容区新增 v-else-if="activeTab === 'ranking'"<RankingView>v-else-if="activeTab === 'honor'"<HonorView>;将现有 apmRanking/sparkRanking 改传 RankingView;荣耀榜所需的全量 appscomputed 形式实时传入 HonorView(支撑"边加载边更新")。
  • 预期目标:打通新页面路由与数据流。
  • 关联模块App.vueRankingView.vueHonorView.vue

M3 · 榜单聚合工具函数(待优化阶段)

  • 改动描述:将"按来源取 Top N""聚合 contributor 次数"等逻辑提取为独立 util 函数(如 src/modules/ranking.ts),供 RankingView/HonorView 复用,避免组件中重复实现。
  • 预期目标:提升可维护性、便于单元测试。
  • 关联模块:新增 src/modules/ranking.ts

5. 阶段划分与执行顺序

阶段一 · 待实现(P0,核心交付)

  1. M2 App.vue 路由骨架 + F3 侧边栏入口(打通页面切换)
  2. F1 RankingViewF1.1 下载榜 → F1.2 更新榜)
  3. F2 HonorViewF2.1 贡献榜 → F2.2 更新榜 → F2.3 致谢)
  4. M1 HomeView 首页改造(去区域2/3 + 区域1 致谢)

阶段二 · 待优化(P1–P2,体验打磨)

  • O3 空状态/加载失败兜底(榜单为空、apps 未加载时友好提示)
  • M3 / O2 聚合工具提取、榜单条数可配置(当前固定 10)
  • O1 边加载边更新:用 computed + watch(apps) 实时刷新,进入荣耀榜即开始聚合,无需手动定时器

阶段三 · 待修复(P1,质量保障)

  • R1 全部新增组件通过 vue-tsc 类型检查与 ESLint(严格模式,禁用 any
  • R2 校验与现有列表加载(loadCategories/refreshInstalledApps)、更新逻辑的一致性,避免重复遍历导致的性能问题(全量 apps 聚合建议在 computed 中记忆化)

6. 风险与待确认项

  1. 推荐数据归属recommendSections 是否仅首页使用?若「全部应用」等入口复用,M1 删除区域2 时需保留数据加载逻辑,仅移除模板渲染。
  2. 荣耀榜数据范围:确认基于"已加载 apps"即可满足需求(用户已确认"只基于已加载应用"),无需分页/全量后端接口。
  3. 榜单条数:当前统一为 10 条(用户确认),后续是否需要在 UI 上可切换(O2)。
  4. 贡献者字段格式contributor 形如 name<email>,聚合与展示时需统一去除 <...> 取显示名;多个贡献者是否以 ; 分隔需抽样确认。
  5. storeFilter 影响:下载榜已按 Spark/APM 分榜;更新榜/荣耀榜按来源分布已实现。若 storeFilter==='spark' 仅显示 Spark 榜,需在主内容区做来源过滤。

7. 验收标准

  • 侧边栏出现「排行榜」「荣耀榜」入口,点击正确切换页面
  • 排行榜页:下载榜(Spark/APM)与更新榜(Spark/APM)各显示 Top 10,视觉与现有 AppCard 一致
  • 荣耀榜页:贡献荣耀榜、更新荣耀榜各按来源 Top 10,且随 apps 加载实时更新;顶部致谢卡片正确显示
  • 首页推荐:仅保留区域1(精选链接)+ 致谢卡片,区域2/3 已移除
  • 全部新增/修改通过 npm run lintvue-tsc 类型检查
  • 打包(dpkg-buildpackage)成功,功能在 GUI 环境自测通过

本文档基于 ranking-preview.html 设计原型与代码核查结论编写,作为后续开发与迭代的执行依据。