3.9 KiB
3.9 KiB
2026-08-29 工作日志
前端列表页重构 + 详情路由统一(17:00–17:45)
用户要求:① 所有文章详情集成到 /item(含 street 详情);② 之前分析过的列表页抽象(共享 CSS / 共享 Alpine 工具 / 品牌弹窗组件)一并落地。
现状核对(重要:大部分已提前落地)
- 排查发现 RunwayLooks.astro 与 StreetSnaps.astro 的
<script>已抽成共享工具(import@/lib/looks-grid,getCardSlots→makeCardSlots、pageList→buildPageList、SPIN_SVG从工具导入),且 RunwayLooks 的重复toggleBrand(selectedBrands 数组误写)已删除;品牌弹窗已抽成src/components/BrandModal.astro。 - 详情路由:
cn/item/[id].astro与en/item/[id].astro已实现「先 article 后 street 回落」统一渲染;RunwayLooks 卡片链接已用ROUTES.item→/item/。
本次实际改动
- 共享 CSS:新建
src/styles/look-grid.css,集中两列表页重复的卡片/网格/分页/侧栏/spinner/骨架/动画样式(类名保留.shows*/.snaps*,keyframes 统一为looksProg/looksShim)。用 node 脚本剥离两个组件内部<style>块,frontmatter 各import "@/styles/look-grid.css"。 - 路由统一:
src/lib/routes.ts将article/streetSnap两个工厂函数都改为(id)=>/item/${id}(原article还是旧的/article?id=死路径)。 - 删遗留旧详情页:
cn|en/street-snaps/[id].astro、cn|en/article.astro(?id= 旧详情,全仓无任何内链)。runway-looks/[id]早就被删。 - 验证:
npm run build通过(BUILD_EXIT=0);详情组件回链指向列表页/street-snaps、/runway-looks(仍存在),api.ts 内/api/v1/public/...是后端地址未动;全仓无悬空引用。
余留(已解决)
src/components/pages/article.astro(Article组件)已删除(见下方清理)。ROUTES.article与ROUTES.item现为同义重复,保留article仅为语义兼容(暂未动)。
清理孤儿代码(18:50)
用户要求删除没用的页面/css/js。排查全仓引用后执行:
- 删 9 个孤儿组件/资源:
components/pages/下 8 个(About/Contact/LatestProjects/Portfolio/Login/Register/AuthForm/article,全是 ComingSoon 占位或旧详情组件,无任何页面 import、也不是真实路由)+components/LanguageDetector.astro(Layout 里被注释掉的死 import)。并移除空的components/pages/目录 +assets/astro.svg、assets/background.svg(Astro 脚手架残留,全仓零引用)。 - 修隐藏 bug:
ComingSoon.astro引用了ROUTES.articles(routes.ts 从未定义该 key)→ 改为ROUTES.runwayLooks(真实路由),否则「浏览走秀档案」按钮指向 undefined。 - 清 Layout 死引用:删除
import LanguageDetector与<!-- TODO <LanguageDetector /> -->。 - 本次保留(未动):
ComingSoon(Index 在用)、looks-grid.ts(两列表页 import)、global.css(Layout 引用)、Breadcrumb/BrandModal/Item/StreetSnap等都在用。 - 未动 header 导航:导航仍链到
/about/contact/portfolio/latest-projects/login/register,但这些路由根本不存在(占位组件已删、也从未有真实页面)→ 是死链。按用户「header 别动」旧约束未删导航项,待用户决定是否一并移除。 - 验证:
npm run buildBUILD_EXIT=0;read_lints Layout/ComingSoon 均 0;全仓 grepLanguageDetector|components/pages|ROUTES.articles|astro.svg|background.svg零命中。
删冗余 ROUTES.article(19:00)
ROUTES.article(routes.ts 里(id)=>/item/${id})全仓只有定义、零引用(另几处article:是 Item.astro / api.ts 的数据字段,无关),与ROUTES.item完全同义 → 按用户要求删除。保留streetSnap(同样指向 /item,暂未动)。- 验证:
npm run buildBUILD_EXIT=0;read_lints routes.ts 0。