From ee2f4217091394a980b47e69d994a6580951dfae Mon Sep 17 00:00:00 2001 From: Zhang Chengdong Date: Thu, 17 Sep 2026 14:17:46 +0000 Subject: [PATCH] feat(mall): pin home category menu beside hero carousel Home hero becomes a 450px flex row with a pinned 240x450 category rail (ShellCategoryMenu `pinned` mode) left of the 960px center-cropped carousel; hovering a top-level category expands the mega-menu over the carousel. The header no longer collapses on scroll, and its category dropdown is now hover-only on non-home pages. OpenSpec change: openspec/changes/pin-home-category-menu BREAKING CHANGE: the header logo/search/cart bar no longer auto-hides past 200px of scroll, and the home page no longer shows the header category dropdown (it is pinned in the hero row instead). --- apps/mall/components/shell/CategoryMenu.vue | 29 +++++++++++++++- apps/mall/components/shell/SiteHeader.vue | 13 +++----- apps/mall/pages/index.vue | 12 ++++++- .../pin-home-category-menu/.openspec.yaml | 2 ++ .../pin-home-category-menu/proposal.md | 29 ++++++++++++++++ .../specs/frontend-mall/spec.md | 33 +++++++++++++++++++ .../changes/pin-home-category-menu/tasks.md | 20 +++++++++++ 7 files changed, 127 insertions(+), 11 deletions(-) create mode 100644 openspec/changes/pin-home-category-menu/.openspec.yaml create mode 100644 openspec/changes/pin-home-category-menu/proposal.md create mode 100644 openspec/changes/pin-home-category-menu/specs/frontend-mall/spec.md create mode 100644 openspec/changes/pin-home-category-menu/tasks.md diff --git a/apps/mall/components/shell/CategoryMenu.vue b/apps/mall/components/shell/CategoryMenu.vue index b83fb45..8bcd373 100644 --- a/apps/mall/components/shell/CategoryMenu.vue +++ b/apps/mall/components/shell/CategoryMenu.vue @@ -2,6 +2,8 @@ import { topCategories, childCategories } from "~/mock/data"; import { t as pick } from "@vmall/shared"; +const props = withDefaults(defineProps<{ pinned?: boolean }>(), { pinned: false }); + const { locale } = useI18n(); const open = ref(false); const hoverId = ref(null); @@ -19,7 +21,7 @@ defineExpose({ open });