feat(mall): classic B2B2C PC storefront with fixed mock API layer

- Mock adapter implementing @vmall/shared ApiClient (localStorage-persisted
  cart/orders/invoices), runtime switch via mockApi flag (default on)
- Fixed bilingual mock catalog: 3-level categories, 24 products w/ SKUs,
  stores, brands, banners, floors, seckill/collective/integral, comments,
  coupons, addresses, seeded orders/shipments/invoices
- B2B2C mall shell: top bar, logo/search/cart header, dark nav + category
  mega-menu, value-prop footer, back-to-top; 1200px grid, #ca151e theme
- UI primitives replacing element-plus: carousel, pagination, breadcrumb,
  qty stepper, rating stars, modal, tabs, step bar, product card
- Pages: home floors, search (filters/sort/paging), goods detail (SKU
  picker, store rail, review tabs), cart -> checkout -> pay -> success,
  auth pages, user center (dashboard/orders/addresses/favorites/coupons/
  invoices), stores, seckill, collective, integral
- i18n split into per-domain locale modules (en+zh)
- OpenSpec change mall-pc-storefront-replica archived; all specs green
This commit is contained in:
Chengdong Zhang
2026-09-17 19:13:29 +08:00
parent 997c312cda
commit 21e99bb52b
111 changed files with 9458 additions and 1035 deletions
+82
View File
@@ -0,0 +1,82 @@
export default {
en: {
marketing: {
seckillTitle: "Flash sale",
seckillBreadcrumb: "Flash sale",
currentSession: "Now",
upcoming: "Coming soon",
ended: "Ended",
countdown: "Ends in {time}",
seckillPrice: "Flash price",
originalPrice: "Original price",
progress: "Sold {n}%",
buyNow: "Grab now",
noSeckillProducts: "No flash-sale products right now.",
collectiveTitle: "Group deals",
collectiveBreadcrumb: "Group deals",
collectiveBannerAlt: "Group deal promotion",
peopleGroup: "{n} people group",
peopleJoined: "{n} people joined",
joinGroup: "View deal",
noCollectiveProducts: "No group deals right now.",
integralTitle: "Points mall",
integralBreadcrumb: "Points mall",
integralBannerAlt: "Points mall promotion",
loginPrompt: "Sign in to see your points",
pointsBalance: "My points",
customize: "Personal customization",
shipping: "Ships within 24 hours",
support: "Priority support",
recommendation: "Popular rewards",
points: "{n} points",
marketPrice: "Market price",
stock: "Stock {n}",
redeem: "Redeem now",
redeemed: "Redeemed",
mockNotice: "Demo redemption completed",
login: "Sign in",
register: "Create account",
noIntegralProducts: "No rewards available right now.",
},
},
zh: {
marketing: {
seckillTitle: "限时秒杀",
seckillBreadcrumb: "秒杀活动",
currentSession: "正在进行",
upcoming: "即将开始",
ended: "已结束",
countdown: "距结束 {time}",
seckillPrice: "秒杀价",
originalPrice: "原价",
progress: "已抢 {n}%",
buyNow: "马上抢",
noSeckillProducts: "当前暂无秒杀商品。",
collectiveTitle: "拼团购",
collectiveBreadcrumb: "拼团",
collectiveBannerAlt: "拼团活动",
peopleGroup: "{n}人团",
peopleJoined: "{n}人已拼",
joinGroup: "查看详情",
noCollectiveProducts: "当前暂无拼团商品。",
integralTitle: "积分商城",
integralBreadcrumb: "积分商城",
integralBannerAlt: "积分商城活动",
loginPrompt: "登录后查看您的积分",
pointsBalance: "我的积分",
customize: "私人定制",
shipping: "24小时发货",
support: "优先客服",
recommendation: "热门推荐",
points: "{n}积分",
marketPrice: "市场价",
stock: "库存 {n}",
redeem: "立即兑换",
redeemed: "已兑换",
mockNotice: "模拟兑换成功",
login: "登录",
register: "注册",
noIntegralProducts: "当前暂无积分商品。",
},
},
} as const;