# 萌芽小店 · 前端(mengyastore-frontend) 基于 **Vue 3 + Vite** + **Tailwind CSS(Vite 插件)** 的数字商品前端:商店、结算(含扫码收款演示)、管理后台、收藏、订单、聊天、PWA。 ## 技术依赖 | 包 | 用途 | |----|------| | vue ^3.x | 框架 | | vite ^5.x | 构建 | | @tailwindcss/vite | 工具类样式 | | vue-router ^4.x | 路由 | | pinia ^2.x | 状态(与 reactive 并存) | | axios ^1.6 | HTTP | | markdown-it ^14 | 商品描述 | | vite-plugin-pwa | PWA | ## 目录结构 ``` src/ ├── assets/ │ ├── styles.css # 全局样式、.ghost / .page-card / . form-field 等 │ └── payment/ # 支付宝/微信收款码 PNG(import 进 CheckoutPage) ├── router/index.js # 路由;维护模式 beforeEach ├── modules/ │ ├── shared/ │ │ ├── api.js # API 封装(含 fetchSystemStatus) │ │ ├── auth.js # 登录态、getLoginUrl │ │ ├── fulfillment.js # isFixedFulfillment、stockLabel、isSoldOutProduct │ │ └── useWishlist.js │ ├── store/ │ │ ├── StorePage.vue │ │ ├── ProductDetail.vue │ │ ├── CheckoutPage.vue # 响应式布局、支付渠道 Tab、订单号复制、收款图 │ │ └── components/ProductCard.vue │ ├── admin/ │ │ ├── AdminPage.vue # 侧边栏:商品/订单/聊天/设置/系统状态 │ │ └── components/ │ │ ├── AdminProductModal.vue # 发货方式:卡密 | 固定内容 │ │ ├── AdminProductTable.vue │ │ ├── AdminOrderTable.vue │ │ ├── AdminChatPanel.vue │ │ ├── AdminMaintenanceRow.vue │ │ ├── AdminSMTPRow.vue │ │ └── AdminSystemStatusPanel.vue │ ├── user/MyOrdersPage.vue │ ├── wishlist/WishlistPage.vue │ ├── maintenance/MaintenancePage.vue │ ├── auth/AuthCallback.vue │ └── chat/ChatWidget.vue └── App.vue # 顶栏:桌面横排导航;移动端汉堡菜单 + 下拉面板 ``` ## 路由 | 路径 | 组件 | 说明 | |------|------|------| | `/` | StorePage | 商品列表 | | `/product/:id` | ProductDetail | 详情 | | `/checkout/:id` | CheckoutPage | 结算(路径参数为商品 id) | | `/my/orders` | MyOrdersPage | 我的订单(建议登录) | | `/wishlist` | WishlistPage | 收藏 | | `/admin` | AdminPage | 管理后台(token) | | `/auth/callback` | AuthCallback | OAuth 回调 | | `/maintenance` | MaintenancePage | 维护中 | ### 路由守卫 - 请求 `GET /api/site/maintenance`;维护中时跳转 `/maintenance`。 - 豁免:`/maintenance`、`/wishlist`、`/admin`、`/auth/callback`(与 `router/index.js` 保持一致)。 ## 认证 1. 「萌芽账号登录」→ SproutGate 登录页,`callback` 回指本站。 2. Token 存 `localStorage`,`authState` 共享用户信息。 3. 需登录接口带 `Authorization: Bearer `。 ## 功能要点 ### 商品与库存展示 - API 字段 **`fulfillmentType`**:`card` | `fixed`。 - **`fixed`**:列表/详情/卡片显示库存为 **「不限」**,不按 `quantity===0` 售罄。 - 工具函数:`modules/shared/fulfillment.js`。 ### 管理后台 · 商品 - **卡密**:多行输入,逐条对应 `codes`。 - **固定内容**:大文本 `fixedContent`;保存后无需维护条数。 ### 结算页(CheckoutPage) - 栅格与表单单列适配窄屏。 - 下单成功后:应付金额、支付宝/微信/赞赏 **本地图片** 切换、`订单号` **一键复制**、可选展开服务端 `qrCodeUrl`。 - 数量上限:卡密=min(库存, 每账号限购);固定内容=仅每账号限购(若设置)。 ### 顶栏(App.vue) - `md` 及以上:横向按钮。 - 以下:汉堡按钮 + 全宽大标题项 + 遮罩;Escape 关闭;打开时锁 body 滚动。 ### 系统状态 - `AdminSystemStatusPanel` 调用 `GET /api/admin/system-status`,展示后端/API、MySQL、Redis、RabbitMQ(需管理 Token)。 ### PWA - `vite-plugin-pwa`:`registerType: 'autoUpdate'`,构建后生成 SW;根组件有更新 Toast 与 `SplashScreen`。 ## 开发命令 ```bash npm install npm run dev # :5173 npm run build # dist/ npm run preview ``` ### 环境变量 开发示例(`.env.development`): ```env VITE_API_BASE_URL=http://localhost:8080 ``` 生产部署设置实际 API 基地址(或同源反代可不设)。 ## 部署(静态资源) ```nginx location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://127.0.0.1:8080; } ``` --- 字体与色板以 `src/assets/styles.css` 及 Tailwind 主题为准;文档若与代码不一致,以仓库当前实现为准。