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
+93
View File
@@ -0,0 +1,93 @@
// Product browse/detail domain strings (foundation-owned base keys; extend, don't remove).
export default {
en: {
product: {
salesCount: "{n} sold",
commentCount: "{n} reviews",
home: "Home",
detail: "Product details",
currentPrice: "Sale price",
marketPrice: "Market price",
stock: "In stock: {n}",
sold: "{n} sold",
coupon: "Coupon",
coupons: "Available coupons",
claim: "Claim",
choose: "Choose",
selected: "Selected",
quantity: "Quantity",
buyNow: "Buy now",
addCart: "Add to cart",
addedCart: "Added to cart",
favorite: "Favorite",
unfavorite: "Unfavorite",
noStock: "Out of stock",
unavailable: "This combination is unavailable",
store: "Store",
quality: "Product quality",
company: "Company",
region: "Region",
rates: "Store ratings",
overall: "Overall",
service: "Service",
delivery: "Delivery",
enterStore: "Visit store",
contact: "Contact seller",
salesRank: "Best sellers",
tabsDetail: "Product details",
tabsReviews: "Customer reviews",
tabsAfterSale: "After-sales service",
description: "Description",
reviewSummary: "{rate}% positive reviews ({n} total)",
reviewAll: "All reviews",
reply: "Seller reply",
expires: "Expires {date}",
productNotFound: "Product not found",
},
},
zh: {
product: {
salesCount: "已售 {n} 件",
commentCount: "{n} 条评价",
home: "首页",
detail: "商品详情",
currentPrice: "活动价",
marketPrice: "市场价",
stock: "库存 {n} 件",
sold: "已售 {n} 件",
coupon: "优惠券",
coupons: "可用优惠券",
claim: "领取",
choose: "选择",
selected: "已选",
quantity: "数量",
buyNow: "立即购买",
addCart: "加入购物车",
addedCart: "已加入购物车",
favorite: "收藏",
unfavorite: "取消收藏",
noStock: "暂时缺货",
unavailable: "该规格暂不可用",
store: "店铺",
quality: "商品质量",
company: "公司",
region: "所在地区",
rates: "店铺评分",
overall: "描述相符",
service: "服务态度",
delivery: "物流服务",
enterStore: "进入店铺",
contact: "联系客服",
salesRank: "销售排行",
tabsDetail: "商品详情",
tabsReviews: "用户评价",
tabsAfterSale: "售后服务",
description: "商品描述",
reviewSummary: "好评率 {rate}%(共 {n} 条评价)",
reviewAll: "全部评价",
reply: "商家回复",
expires: "有效期至 {date}",
productNotFound: "商品不存在",
},
},
};