---
name: pg-tier1-admin-storefront
description: 'Tier 1 Admin/Storefront 分离执行指南(PG-101~PG-111)。Dashboard、商品管理、AI 商品助手。触发词:"Admin 分离", "Tier 1", "PG-101"~"PG-111", "AI 商品".'
---
# Tier 1: Admin/Storefront 分离执行指南
> **目标**:建立卖家管理后台,实现 Admin 和 Storefront 的清晰分离,引入 AI 商品创建助手。
> **触发词**:"Admin 分离"、"Tier 1"、"PG-101"~"PG-111"
## 执行前检查
1. 读取 `docs/PROFESSIONAL_GRADE_ROADMAP.md` Section 5 — Admin 架构设计
2. 读取 Section 9 → Tier 1 进度,找到第一个 ⏳ 的任务
3. 确认 Tier 0 核心任务(PG-001 ~ PG-005)已完成或不阻塞
## AI-First 原则
Tier 1 的核心 AI 功能是 **PG-110 AI 商品创建助手**(V1 差异化)。AI 基础设施组件(`AIGenerateButton`、`AIStreamingText`、AI 后端代理)在此任务中首次建立,供后续 Tier 复用。
## 独立站 + TG 兼容
- Admin 组件通过 `isStandalone` 环境变量兼容 SaaS 和独立站
- 卖家管理后台在桌面端优先,但基本操作(如确认订单)需移动端可用
- PG-007(OpenClaw/Agent 集成)在 V1.1 评估,视工作量可提前
## 依赖关系
```
PG-101 (AdminLayout) ← 多数 Tier 1 任务都依赖此项
├── PG-102 (商品管理) ← 依赖 PG-101
├── PG-105 (Dashboard) ← 依赖 PG-101
├── PG-106 (订单增强) ← 依赖 PG-101
├── PG-107 (设置迁移) ← 依赖 PG-101
└── PG-108 (Onboarding) ← 依赖 PG-101
独立任务(不依赖 PG-101,可并行或提前):
PG-109 (结账优惠券) ← 依赖 Tier 0 PG-001 (Checkout)
PG-110 (AI 商品创建) ← 独立,V1 核心 AI 功能,建立 AI 基础设施
PG-111 (移动端卖家) ← 依赖 PG-101
PG-007 (Agent 集成) ← V1.1,独立于 AdminLayout
```
---
## PG-101: Admin Layout + 路由
### 创建文件
```
apps/web/src/
├── components/admin/
│ ├── AdminLayout.tsx ← 侧边栏 + 内容区布局
│ ├── AdminSidebar.tsx ← 侧边栏导航
│ └── AdminHeader.tsx ← Admin 顶部栏
├── app/admin/
│ └── page.tsx ← Dashboard 占位页(PG-105 完善)
```
### AdminLayout 设计
```tsx
// 结构:固定侧边栏 + 滚动内容区
```
### 侧边栏导航项
| 图标 | 标签 | 路由 | 说明 |
| --------------- | --------- | ------------------ | -------- |
| LayoutDashboard | Dashboard | `/admin` | 总览 |
| Package | Products | `/admin/products` | 商品管理 |
| ShoppingCart | Orders | `/admin/orders` | 订单管理 |
| BarChart3 | Analytics | `/admin/analytics` | 数据分析 |
| Settings | Settings | `/admin/settings` | 设置 |
底部:
| 图标 | 标签 | 行为 |
|---|---|---|
| ExternalLink | View Store | 新标签页打开 `/store/{myPeerID}` |
| HelpCircle | Help | 打开文档链接 |
### 路由注册
在 `apps/web/src/routes.tsx` 中添加 `/admin/*` 路由组,使用 `AdminLayout` 包装。
### 响应式
- 桌面端(≥1024px):固定侧边栏 240px
- 平板端(768-1023px):收缩侧边栏(仅图标)
- 移动端(<768px):隐藏侧边栏,汉堡菜单触发
### 认证保护
Admin 路由必须验证登录状态:
- 未登录 → 跳转到 `/login`
- 已登录但无卖家身份 → 显示引导页("创建你的店铺")
---
## PG-102: 商品管理页
### 路由
`/admin/products` → 商品列表管理
### 功能
1. **商品列表**
- 表格视图(桌面)/ 卡片列表(移动)
- 列:缩略图、标题、状态(活跃/草稿/下架)、价格、库存、更新时间
- 排序:标题、价格、库存、更新时间
2. **搜索和筛选**
- 关键词搜索
- 状态筛选(全部/活跃/草稿)
- 类型筛选(实物/数字/服务/RWA)
3. **批量操作**
- 多选 checkbox
- 批量删除、批量下架
4. **操作入口**
- "添加商品" 按钮 → `/admin/products/new`(或复用 `/listing/new` 带 `?from=admin` 回调)
- 行内 "编辑" → `/listing/edit/{slug}?from=admin`
- 行内 "预览" → 新标签页 `/product/{slug}`
- 行内 "复制"、"删除"
### 数据来源
复用 `productDataService.getMyListings()` 获取当前卖家商品列表。
---
## PG-105: 卖家 Dashboard
### 路由
`/admin/` → Dashboard 总览
### 指标卡片(第一行)
| 指标 | 数据源 | 说明 |
| ---------- | ------------- | ------------------ |
| 总销售额 | 订单 API 聚合 | 所有已完成订单金额 |
| 新订单数 | 订单 API 过滤 | 最近 7 天新订单 |
| 活跃商品数 | 商品 API 计数 | 已发布商品总数 |
| 平均评分 | Profile API | 店铺平均评分 |
### 最近订单列表
显示最近 5-10 条订单,包含:订单号、买家名、金额、状态、时间。
"查看全部" → `/admin/orders`
### 热门商品
显示前 5 个销量最高的商品。
"查看全部" → `/admin/products`
### 快捷操作
- 添加新商品
- 查看店铺
- 处理待办订单
---
## PG-106: 订单管理增强
### 在 `/admin/orders` 复用现有订单组件
- 复用 `OrderTable`(桌面)和 `OrderListCompact`(移动),但增强功能
- 默认只显示"销售"标签(卖家视角),隐藏"购买"标签
- 增加批量操作(多选 → 批量确认/批量发货)
- 增加导出功能(CSV/JSON)
- 增加日期范围筛选
---
## PG-107: 现有设置页迁入 Admin
将以下页面映射到 Admin 路由:
| 现有路由 | Admin 路由 | 说明 |
| ---------------------------- | ---------------------------- | ------------ |
| `/settings/store` | `/admin/settings` | 店铺设置主页 |
| `/settings/store/policies` | `/admin/settings/policies` | 政策设置 |
| `/settings/store/shipping` | `/admin/settings/shipping` | 配送设置 |
| `/settings/store/moderators` | `/admin/settings/moderators` | 仲裁人设置 |
| `/settings/page-profile` | `/admin/settings/profile` | 店铺资料 |
### 实施方式
- 创建 Admin 路由指向同一页面组件(或包装组件使用 AdminLayout)
- 保留旧路由作为重定向(向后兼容)
- 逐步引导用户使用 `/admin/settings/` 入口
---
## PG-108: 卖家 Onboarding 引导
### 问题
新卖家注册后进入 Admin,看到空白的 Dashboard,不知道下一步做什么。
### 实施步骤
1. **Onboarding 状态管理**
- 在 userStore 中跟踪 `onboardingCompleted` 状态
- 首次进入 `/admin/` 时检测是否完成 onboarding
2. **引导流程组件** — `OnboardingWizard`
- Step 1: 设置店铺(名称、头像、简介)— 复用现有 Profile 编辑组件
- Step 2: 创建第一个商品 — 简化版表单(标题、图片、价格、描述)
- Step 3: 预览店铺效果 — 嵌入预览 + "发布到市场"/"继续完善" 选项
- 进度指示器(1/3、2/3、3/3)
- "跳过"选项(不强制)
3. **Dashboard 空状态集成**
- 未完成 onboarding 时显示引导入口
- 完成后显示"下一步建议"卡片(邀请买家、SEO 优化、促销活动)
### 关键文件
| 文件 | 修改内容 |
| ---------------------------------------------------- | ---------------------------- |
| `apps/web/src/components/admin/OnboardingWizard.tsx` | 新建 |
| `apps/web/src/app/admin/page.tsx` | 根据 onboarding 状态条件渲染 |
| `packages/core/stores/userStore.ts` | 新增 onboarding 状态 |
---
## PG-109: 结账优惠券
### 问题
卖家可以在商品编辑页创建优惠券(`CouponEditor`),但买家在结账时无法输入优惠码。
> 从 Tier 2 移到 Tier 1:创建端已有,应用端缺失导致整个优惠券功能闭环断裂。
### Desktop 参考
```
Purchase.vue 中的 Coupons 组件:
- 输入框 + "Apply" 按钮
- 显示在 hasCoupons(listing) 为 true 时
- 成功后显示折扣金额
```
### 实施步骤
1. **CouponInput 组件** — 输入框 + "Apply" 按钮
2. 在 checkout 页面集成(订单摘要区域)
3. 调用 API 验证优惠码 → 显示折扣金额
4. 提交订单时传入 coupon codes
5. 错误处理(无效码、过期、不适用)
---
## PG-110: AI 商品创建助手
### 目标
让卖家用最少输入创建高质量的商品页面。这是 Mobazha 的**核心 AI 差异化功能**。
### 用户场景
```
场景 A:图片驱动
卖家上传 3 张商品图片
→ AI 自动识别商品类型
→ 生成标题、描述、标签、分类建议
→ 卖家微调后发布
场景 B:文字驱动
卖家输入简短描述("手工皮革钱包,意大利植鞣革")
→ AI 扩写为完整的商品描述(卖点、材质、尺寸建议)
→ 生成 SEO 优化的标题和标签
场景 C:混合
卖家上传图片 + 输入关键词
→ AI 综合生成所有字段
```
### 实施步骤
1. **AI 基础设施**(首次建立,后续 Tier 复用)
- `packages/core/services/ai/client.ts` — AI 服务客户端(多供应商抽象)
- `packages/core/services/ai/streaming.ts` — SSE 流式输出处理
- 后端 AI 代理端点(hosting 或独立 AI 微服务)
2. **AIGenerateButton 组件**
- 通用"AI 生成"按钮(✨ 图标 + "AI 生成"文字)
- 点击后显示加载动画 → 流式输出结果到目标字段
- 可用于标题、描述、标签等任何文本字段旁
3. **商品创建页集成**
- 标题字段旁:`AIGenerateButton` → 从图片/描述生成标题
- 描述字段旁:`AIGenerateButton` → 从标题/图片生成详细描述
- 标签字段:AI 自动建议(从描述提取)
- 分类字段:AI 自动建议(从标题/描述推断)
- 全部字段保持可编辑,AI 只是建议
4. **图片分析**(如 AI 供应商支持 Vision)
- 上传首张图片后 → 调用 Vision API → 返回商品识别结果
- 结果用于自动填充标题/描述草稿
5. **Fallback**
- AI 不可用时 `AIGenerateButton` 显示 disabled 状态 + tooltip
- 手动输入流程不受影响
### 关键文件
| 文件 | 修改内容 |
| ------------------------------------------------- | ------------------ |
| `packages/core/services/ai/client.ts` | 新建 AI 服务客户端 |
| `packages/core/services/ai/streaming.ts` | 新建流式处理 |
| `apps/web/src/components/ai/AIGenerateButton.tsx` | 新建通用 AI 按钮 |
| `apps/web/src/components/ai/AIStreamingText.tsx` | 新建流式文字 |
| `apps/web/src/app/listing/new/page.tsx` | 集成 AI 生成 |
| `apps/web/src/app/listing/edit/[slug]/page.tsx` | 集成 AI 生成 |
---
## PG-111: 移动端卖家体验
### 问题
卖家在手机上管理店铺体验差:
- 商品创建长表单无移动端导航
- Admin 布局未针对移动端优化
- 无法直接用手机拍照上传商品图片
### 实施步骤
1. **商品创建移动端 Tab 导航**
- 将左侧栏导航改为移动端 Tab Bar / Stepper
- 各 Section 可滑动切换或点击跳转
- 进度指示(1/5、2/5...)
2. **Admin Layout 移动端适配**
- 侧边栏 → 底部 Tab 或汉堡菜单
- Dashboard 卡片单列堆叠
- 表格 → 卡片列表视图切换
- 快捷操作浮动按钮(FAB)
3. **手机拍照上传**
- 图片上传按钮增加"拍照"选项(`capture="environment"`)
- 拍照后自动压缩到合适尺寸
- 结合 PG-110:拍照→AI 自动识别→生成描述
---
## 完成后更新
1. 更新 `docs/PROFESSIONAL_GRADE_ROADMAP.md` Section 9 — 状态改 ✅ + 日期
2. 更新 `docs/migrations/status.md`
3. 新增路由更新 `apps/web/src/routes.tsx`
4. 新增 i18n key 更新 `packages/core/i18n/locales/en.ts`(admin.nav.\* 等)
5. 运行 `pnpm validate:quick`