[修复] 资源ID冲突/场景浏览丢失/投票统计等若干数据与UI问题(已本地验证) - #3
Closed
rthdfd wants to merge 1 commit into
Closed
Conversation
- seed.ts: mk() 生成 id 冲突时追加 hash;seedResources 导出时统一去重,保证全部资源 id 唯一(文心一言/智谱清言/讯飞星火/可灵AI/百度千帆等详情页恢复可访问) - data.ts: 场景过滤改用 resolveScenarios(与首页场景树一致),场景页恢复 114 条丢失资源;投票统计修复本地+云端双计,保留未上云兜底 - Icon.tsx: size 显式传给图标组件(此前全站图标尺寸失效);补充 GitBranch 图标 - DetailView.tsx: 官方徽章文案 "收藏" → "官方" - ResourceCard.tsx: 标签 chips 移动端2个+N/桌面3个,修复重复渲染与移动端丢失 - MobileTabBar.tsx: 移动端底部导航补充排行榜入口 - useHashRoute.ts: 非法百分号编码不再导致路由解析崩溃 - eslint.config.js: 忽略 docs/public 构建产物 - index.html: 移除无效的 en hreflang 声明(SPA 语言由 localStorage 记忆) - 新增 supabase/migrations/0004_harden_anon_writes.sql: 服务端强制 created_at,评论昵称长度上限(保留匿名投票/评论/投稿/反馈能力)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
本PR由deepseek提交
说明
您好!我们对 OpenBox 做了一次全面代码审查,发现了一些小问题并已在本分支修复。所有改动均已本地验证通过(
tsc类型检查、生产构建、250 条资源数据一致性校验),不改变任何现有功能设计——匿名投票(评价)、评论区(用户反馈)、匿名投稿、失效反馈等社区能力全部保留,仅修复缺陷本身。如果某处修复与您的预期不符,欢迎直接指出,我们随时调整。1. [数据] 资源 ID 冲突导致详情页打开错误内容
原因:
src/data/seed.ts的mk()用cur-${subType}-${name}生成 id,中文名会被正则替换成纯连字符,导致多个资源共用同一 id:通义千问 / 文心一言 / 智谱清言 / 讯飞星火的 id 都是cur-ai-apps-----即梦 AI / 可灵 AI的 id 都是cur-ai-apps----aicurated.ts中阿里云百炼 / 百度千帆的 id 都是手写的ob-api-由于
getResource()用find()只返回第一个匹配,文心一言、智谱清言、讯飞星火、可灵 AI、百度千帆的详情页会打开错误的内容;同时 Reactkey={r.id}冲突、收藏/投票/评论按 id 关联时数据互相串。修复:
mk()内维护已用 id 集合,冲突项追加稳定的内容 hash(djb2)后缀seedResources导出时统一去重兜底,重复 id 追加序号验证:修复后 250 条资源 id 全部唯一,5 个受影响的资源均可正确打开详情页。
2. [数据] 场景浏览页丢失 114 条资源,首页计数与场景页严重不符
原因:
curated.ts中 118 条资源显式声明scenarios: [];而src/lib/data.ts的场景过滤直接用r.scenarios.includes(sc)判断(空数组即被排除),首页场景树却用resolveScenarios()(空数组会回退到子类型默认映射)。两者判定不一致导致:修复:场景过滤改用与首页相同的
resolveScenarios()判定。验证后各场景页与首页计数完全一致,恢复全部资源。3. [数据] 验证投票统计双计
原因:
submitVerification()同时写 localStorage 和 Supabase 表;getVerificationStats()先把本地票计入基数,再遍历云端行(含自己刚投的那条)又计一次 → 自己投 1 票显示 2 票。修复:本地投票记录增加
synced标记——云端写入成功则统计以云端为准(不再重复计本地);云端写入失败时本地票仍作兜底计入。既消除双计,又保留离线/降级能力。4. [后端] 匿名写接口温和加固(保留匿名能力)
原因:
0001-0003迁移中 verifications / comments / submissions / reports 的 insert 策略均为with check(true),且created_at可由客户端任意指定,存在伪造验证时间、超长昵称撑库等滥用空间。修复(新增
0004_harden_anon_writes.sql,幂等可重复执行):created_at = now()(客户端传的时间一律覆盖)5. [UI] 全站图标尺寸失效
原因:
Icon.tsx把sizeprop 解构后没有传给 lucide 图标组件,所有图标固定 24px,调用方的size={18}等全部无效。修复:
<Cmp size={size} {...props} />显式传递。顺带补充了GitBranch图标(此前 Footer/关于页的 GitHub 链接图标静默回退为地球图标)。6. [UI] 详情页官方徽章文案错误
原因:
DetailView.tsx中官方资源徽章误用了t('detail.favorite')("收藏"),应为"官方"(FeaturedCard中是正确的,此处为笔误)。修复:改用
t('common.official')。7. [UI] 资源卡标签重复渲染 / 移动端丢失
原因:
ResourceCard.tsx中两组标签 chips 的响应式类写重了——桌面端前 2 个与前 3 个标签同时渲染(重复显示),移动端则全部隐藏只剩 "+N"。修复:移动端显示前 2 个标签 + 溢出计数,桌面端显示前 3 个,两组互斥。
8. [UI] 移动端缺少排行榜入口
原因:排行榜链接只在桌面导航(
sm:flex)中,移动端底部 Tab 没有该项,手机用户无法访问完整排行榜页。修复:
MobileTabBar增加排行榜 Tab(首页/搜索/排行榜/收藏/投稿/关于)。9. [工程] 其他小问题
eslint.config.js的 ignores 补充docs、public(此前npm run lint会输出一堆压缩产物噪音)index.html声明了hreflang="en"指向?lang=en,但本站为 hash 路由 SPA、语言由 localStorage 记忆,该参数不生效,已移除避免搜索引擎把同一页面当多语言收录useHashRoute对非法百分号编码(如手输#/search?q=%zz)会抛异常,已加 try-catch 容错未改动(仅建议,供参考)
src/data/curated.ts存在 8 组 URL 重复收录(如 硅基流动/OpenRouter/阿里云百炼 等同一站点出现两次),考虑到数据维护可能有意保留不同描述,本次未删改数据,如需要可另行处理invite-mobile分类目前 0 条资源,分类页为空,可考虑补充内容或暂时隐藏验证情况
tsc -b --noEmitnpm run build(vite 8)npm run lint感谢维护者的付出,OpenBox 的架构设计(配置驱动分类、社区验证闭环)非常清晰,希望这份 PR 能帮上忙。