Files
frontend_v2/.workbuddy/memory/2026-08-08.md
toom1996 5a8dbf41cb
Some checks failed
deploy / deploy (push) Has been cancelled
update
2026-08-11 22:29:47 +08:00

6.3 KiB
Raw Permalink Blame History

2026-08-08

走秀数据分类设计(进行中,尚未落地)

  • 用户希望给 brand_runway 加分类:地理(国家/城市)、系列(季节/类型如 Resort/春季巡游)、时间(year)。
  • 现状:brand_runway 仅有 year,无 city/country/season/type 字段。source_url 形如 vogue.com/fashion-shows/fall-2017-ready-to-wear/fendi/... 不含城市,无法自动解析城市。
  • 采样确认 title 为 Vogue 标准格式,系列+季节+年份 100% 可正则解析 ^(Spring|Fall|Resort|Pre-Fall)\s+(\d{4})\s*(.*)$(已验证 600 条)。
  • 三维模型:① 地理(国家→城市→地区)② 系列(collection_type: rtw/menswear/couture/resort/pre_fall × season: spring/fall)③ 时间(year)。
  • 用户修正:城市 ≠ 品牌总部城市(Fendi 总部罗马但 RTW 在米兰走;Valentino 意牌在巴黎走;Resort/早秋满世界巡演)。
    • 主系列(rtw/menswear/couture)城市 = 「品牌所属时装周城市」映射(非总部,更准),内置主流品牌映射表自动填充。
    • Resort/Pre-Fall 为巡演系列,城市不固定,UI 归「巡演/Cruise」桶,不硬绑城市。
    • country/region 由 city→country 推导。
  • 待用户确认是否落地(字段+迁移+回填脚本+API 筛选+前端筛选器)。

网络抓取城市可行性实测(结论:不现实)

  • 实测拉取 Vogue 真实秀场页(vogue.com/fashion-shows/fall-2017-ready-to-wear/fendi/slideshow/collection, 5.8MB):
    • title 仅 "Fendi Fall 2017 Ready-to-Wear Fashion Show",无城市;正文 city 命中全是误命中(Romee Strijd 模特名 / model-romee-strijd.jpg / 文案)。
    • 唯一结构化片段 {"name":"New York City","score":1}/{"name":"Rome","score":1} 是相关实体联想,非秀场城市,不可信。
    • Vogue 现 URL 已去掉城市段,无法反推。
  • 数据集 total=25206 条;逐页爬 25k 需 ~14h(礼貌速率)+ Cloudflare/封禁/ToS 风险 → 不现实。
  • 现实方案:品牌→所属时装周城市映射表(非总部,准确捕捉 Fendi→Milan 等),主系列秒级批量回填;Resort/Pre-Fall 归「巡演/Cruise」桶不绑城市。

落地:三维分类 + 筛选(已完成)

  • 用户选「暂不做城市维度」,只做 系列+季节+年份 三维与筛选。
  • models.go: BrandRunway 加 collection_type/season/season_code 三字段。
  • main.go: migrateSchema 加三列 + backfillRunwayClassification()(单条 UPDATE CASE 解析 title 回填,幂等);仅处理 collection_type='' 行。重启后端实测 25206 行 ~338ms 完成。
  • handlers/public_article.go: PublicListArticles 加 ?collection_type=&season=&season_code=&year= 筛选,响应含三字段。
  • 前端: data.ts RawArticle 增可选三字段; articles.astro 加 #typefilter/#seasonfilter 两组 chips,loadBackend() 带参重拉。
  • npm run build 通过;dist/articles 含筛选条,JS 含 collection_type 参数。
  • 分布: rtw 15203 / menswear 4061 / couture 672 / resort 2894 / pre_fall 2376;spring 9140 / fall 9049。

首页发布会面板优化(已完成)

  • 用户要求:① 首页也展示「系列 + 季节」标签;② 优化发布会面板更吸引人。
  • data.ts: ArticleCard 增加 collection_type/season_code 两字段(mapArticle 透传);新增 SERIES_LABELS + seriesLabel()(rtw→成衣 RTW / menswear→男装 / couture→高定 / resort→度假 / pre_fall→早秋)。
  • index.astro 发布会面板重构:
    • 区块标题 RUNWAY ARCHIVE / 走秀档案 + 「全部走秀 →」(链 /articles)。
    • 系列快速筛选条 #seriesbar(全部/成衣/男装/高定/度假/早秋),前端按 data-ct 本地过滤 Hero + 网格,纯本地无请求;空结果显示 #showempty
    • 精选 Hero(取 shows[0]):大图 + 品牌大字 + 系列/季节 chip + 查看全部 N 张,形成视觉焦点。
    • 网格卡片(剩余 shows)品牌名下方加 prod-meta 行: [系列中文] + [season_code 如 FW16] 小 chip。
    • 卡片底部改纯 CTA(去掉原 AW16 season 文本与 new/hot 徽标,改由系列/季节 chip 表达)。
    • JS 同步:ensurePanelData 透传 collection_type/season_code;cardHTML 渲染 prod-meta(此路径首页当前为死路径,仅保持一致)。
  • npm run build 通过;dist/index.html 校验:sec-head/seriesbar/feat/prod-meta/prod-chip 均在,真实 season_code(SS16/FW16/PF16…)与中文系列标签分布正确,Hero 显示 FENDI。
  • 预览: http://localhost:4420/ (构建需带 PUBLIC_API_BASE 才能让 SSR 首页拉到真实数据;Docker 生产因 PUBLIC_API_BASE 为空、index.astro 用顶层 await getShows 会导致首页空——属既有行为,非本次引入)。

首页 feat 竖版拼图 + 查看更多 + /shows 页(已完成)

  • 用户要求:① 首页走秀栏加「查看更多」;② 加一个「所有走秀」页面;③ feat 图都是竖版,问能否改成多竖版或更好创意。
  • feat 创意:用同一场秀自己的 gallery(loadArticlesWithImages 带 with_images=5,每秀最多5张 own looks)做「左侧大竖图 + 右侧 3 张竖版 rail」编辑拼图(aspect 3/4),比混排不同秀更好——保留单一焦点秀场且尊重竖版比例。优于用户提的"多竖版混排"。
  • index.astro 改动:
    • 前端 matter 计算 feat = shows[0]featRail = gallery.slice(1,4)(不足则退化为 [img])。
    • feat 块重写为 feat-main(竖图 + feat-fill 渐变浮层含品牌/系列/季节/CTA) + feat-rail(3 个竖版 rail-item)。
    • CSS: 删旧 .feat hero(4:3),加 .feat-main/.feat-fill/.feat-ovl/.feat-rail/.feat-rail-item(全部 3:4 竖版)。
    • 网格下加 #showmore 按钮 + .showmore CSS。
    • JS: 系列筛选 IIFE 重构为 seriesApply() 暴露 homeFType;新增 load-more IIFE(fetch ?page=2..&size=8&with_images=5 追加到 #showgrid,带 homeFType,无更多显示「没有更多了」)。
    • sec-more「全部走秀 →」href 改 /shows。
  • 新建 src/pages/shows.astro(所有走秀页):基于 articles.astro,标题「All Runway」;保留系列/季节/品牌筛选 + 三视图(Grid/Magazine/Timeline);新增分页 Load More(page/total/busy,append 模式,后端 ?page=&size=30&with_images=5);SSR getShows(30) 覆盖;cardTemplate 用 data-ct 与 date 字段,去掉 fmtDate 依赖。
  • npm run build 通过(11 页);dist 校验:首页 feat-main/feat-rail/3 rail-item/showmore 均在(共4竖图),系列标签分布正确;/shows 含 All Runway + loadmore + 30 SSR 卡片。
  • 后端验证:page=2 size=8 with_images=5 返回 8 行带 images;collection_type=resort 筛选正确。
  • 预览: http://localhost:4430/http://localhost:4430/shows/