update
Some checks failed
deploy / deploy (push) Has been cancelled

This commit is contained in:
toom1996
2026-08-11 22:29:47 +08:00
commit 5a8dbf41cb
62 changed files with 9514 additions and 0 deletions

View File

@ -0,0 +1,21 @@
# 2026-08-07
## 模块门禁 + 导航收敛(发布会模块聚焦)
- 新增 src/components/ComingSoon.astro 编辑风占位组件propsmodule / moduleZh / note
- portfolio / latest-projects / about / contact / login / register 改为使用 Layout + ComingSoon 的「暂未上线」占位页(旧 URL 仍可访问,导航已移除入口)。
- Layout.astro 导航收敛为纯发布会模块:仅 Home / Brands / Shows移除 auth-slot、页脚 Categories、Color Studio Tools、About/Contact 链接;页脚 manifesto 改为走秀档案口径;保留 back-to-top。
- login/register 由 standalone 页改为套 Layout顺带修复此前字体变量未定义问题。
- `npm run build` 通过10 页全部生成;静态预览 :4400 验证占位页与导航收敛生效。
- 决策:用户选择「首页 + 品牌 + 走秀」为发布会模块范围,其余「占位页 + 移除导航」。
## 修正header 不动23:47
- 用户明确「header 别动呀」,故将 Layout.astro 整体还原为原样(顶部导航 Portfolio/Latest/About/Contact + Login/Signup、页脚 Categories/Color Studio Tools/About/Contact 全部恢复)。
- 门禁改为**仅靠 6 个 ComingSoon 占位页**实现:导航链接保留不动,点击 Portfolio/Latest/About/Contact/Login/Register 才看到「暂未上线」。
- 重新 `npm run build` 通过。
## 首页 tabbar仅「发布会」上线23:5x
- 用户澄清前说的「navbar」实为**首页 tabbar**id="tabbar",不是顶部 header
- index.astro 改造tabbar 中 **发布会(backstage) 设为默认激活 + Live 徽标**,承载原 shows 的 SSR 真实走秀卡片getShows(8));灵感(shows)/社媒(events)/街拍(street) 三个 tab 加 `data-soon="true"` + Soon 灰徽标,点击仅切换显示 ComingSoon 占位(不再请求后端切片数据)。
- JS tab 点击处理:命中 `data-soon` 则跳过 `loadPanel()`,仅切面板;其余逻辑不变。
- 「品牌」tab 仍为指向 /brands 的有效链接(属于已上线发布会模块,未屏蔽)。
- `npm run build` 通过校验tabbar active/soon 标记正确、发布会面板 8 张真实卡片、其余三块含 Coming Soon。

View File

@ -0,0 +1,57 @@
# 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/ 。

View File

@ -0,0 +1,37 @@
# 项目长期记忆Project MEMORY.md
## 模块策略(重要)
- 站点按模块逐个完善。当前只上线「发布会模块」:首页 index + 品牌索引 brands + 走秀列表 articles + 走秀详情 article。
- **所有走秀页 `/shows`**(新建 2026-08-08全局走秀档案区别于 `/articles` 的品牌档案视图 ?brand_id。基于 articles.astro标题「All Runway」保留系列/季节/品牌筛选 + 三视图(Grid/Magazine/Timeline),新增分页 Load Morepage/total/busyappend 模式,后端 `?page=&size=30&with_images=5`)。首页 sec-more「全部走秀 →」指向 /shows。
- 其余模块(Portfolio / Latest Projects / About / Contact / 登录注册)为「暂未上线」占位页:直接访问旧 URL 或点击导航旧链接均渲染 ComingSoon 占位;**导航(header)保持原样未改动**(用户 2026-08-07 明确「header 别动」),门禁完全靠占位页实现。
- **首页 tabbar**index.astro, id="tabbar"):仅「发布会(backstage)」上线(默认激活 + Live 徽标,承载 getShows(8) SSR 真实卡片);「灵感(shows)/社媒(events)/街拍(street)」标 `data-soon="true"` + Soon 灰徽标,点击仅显示 ComingSoon 占位、不再请求后端「品牌」tab 仍为指向 /brands 的有效链接(属已上线模块,未屏蔽)。
- 占位实现src/components/ComingSoon.astro编辑风props: module / moduleZh / note两个按钮「浏览走秀档案 →」「返回首页」。6 个页面(portfolio / latest-projects / about / contact / login / register)改为 `<Layout><ComingSoon/></Layout>`
- login/register 原 standalone 页(未 import global.css、字体变量未定义已改为套 Layout + ComingSoon 占位页,顺带修复字体一致性;导航中 Login/Signup 链接保留,点击即见占位。
## 架构总览
- 前端:/d/project/test/test — Astro SSG + Tailwind v4。构建 `PUBLIC_API_BASE=http://localhost:8090 npm run build`;预览 `python -m http.server` 托管 dist/。
- 后端:/d/project/admin/backend — Go + Gin + GORM(MySQL):8090。路由分后台 /api/* 与公开只读 /api/public/*。
- 数据层:前端 src/lib/data.ts 统一从 /api/public/* 拉数据;后端不可达时回落内置示例。
## 关键约定
- 视觉语言黑白极简编辑风monospace + Georgia 衬线大标题 + 细线HBX / 时尚档案调性。
- 字体:全站走 Tailwind 体系font-sans / font-mono / font-serif禁止自写截断字体栈。新增页面复用项目字体变量。
- CSS 写法:能用 @apply@apply`<style>` 顶部加 `@reference "tailwindcss";`。仅保留手写:@keyframes、渐变 shimmer、!important、双时长 transition。Tailwind v4 已移除零值类mt-0 等),零值边距保持手写。
- 导航Layout.astro**保持原样未改动**Portfolio / Latest Projects / About / Contact / Login / Signup含页脚 Categories + Color Studio Tools + About/Contact 链接。门禁仅由 6 个 ComingSoon 占位页承担,导航不删任何链接(用户要求 header 别动)。
## 部署Docker + Gitea Actions
- 仅 brands.astro 构建期 SSR 取数(用 API_SSR其余页面运行时相对 /api 拉取nginx 反代 backend:8090
- 交付文件:前端 Dockerfile / nginx.conf / docker-compose.yml / deploy.sh / .gitea/workflows/deploy.yml / .env.example / DEPLOY.md后端 Dockerfile。
## 走秀数据分类brand_runway已实现 2026-08-08
- **三维分类字段**(已加,靠 title 解析回填,无需外部数据):
- `collection_type`rtw / menswear / couture / resort / pre_fall
- `season`spring / fall / nullResort/Pre-Fall 为单季season=null
- `season_code`SS26 / FW25 / RES26 / PF25派生用于排序/展示)
- **回填**main.go `backfillRunwayClassification()` 单条 `UPDATE ... CASE` 解析 titleVogue 格式 `Spring/Fall 2016 Ready-to-Wear``Pre-Fall 2016``Resort 2017``Fall 2016 Couture``Spring 2005 Menswear`),仅处理 `collection_type=''` 行(幂等)。实测 25,206 行 ~338ms 完成。
- **接口筛选**`GET /api/public/articles` 新增 `?collection_type=&season=&season_code=&year=`,响应含三字段。
- **前端筛选**articles.astro 增加「系列类型 / 季节」两组 chips`#typefilter` / `#seasonfilter`),点击经 `loadBackend()` 带参重拉。
- **首页 feat 改竖版编辑拼图**index.astro, 2026-08-08原 4:3 横图 hero 改为「左侧大竖图(feat-main, aspect 3/4) + 右侧 3 张竖版 rail(feat-rail-item, grid-rows-3)」,**用同一场秀自己的 gallery(最多5张)做多图拼图**(避免横图裁切竖版),保留系列/季节 chipfeat-fill 渐变浮层)。`feat` 整块带 `data-ct` 供系列筛选隐藏。
- **首页「查看更多」内联加载**index.astro, 2026-08-08网格下加 `#showmore` 按钮JS 分页 `fetch ?page=2..&size=8&with_images=5` 追加到 `#showgrid`,带 `homeFType` 系列筛选参数;无更多显示「没有更多了」。系列筛选 IIFE 重构为 `seriesApply()` 暴露 `homeFType`
- **地理/城市维度:用户明确暂不做**(爬 Vogue 页不可靠城市方案后续可用「品牌→所属时装周城市」映射表Resort/Pre-Fall 归巡演桶)。
- 分布实测rtw 15203 / menswear 4061 / couture 672 / resort 2894 / pre_fall 2376spring 9140 / fall 9049。