refactor: 优化代码结构并修复类型问题

- 移除未使用的TabPane组件
- 修复类型定义和导入方式
- 优化mock数据源的环境变量判断逻辑
- 更新文档结构并归档旧文件
- 添加新的UI组件和Memo组件
- 调整API路径和响应处理
This commit is contained in:
2026-03-23 12:41:35 +08:00
parent a037843851
commit 2b86715c09
363 changed files with 39305 additions and 40622 deletions

View File

@@ -0,0 +1,30 @@
# 前端文档索引
> **模块**: 03_Frontend - 前端设计与开发
> **更新日期**: 2026-03-19
---
## 核心设计
| 文档 | 描述 | 状态 |
|------|------|------|
| [01_Design](01_Design.md) | 前端设计总览 | ✅ |
| [02_Development_Guide](02_Development_Guide.md) | 前端开发指南 | ✅ |
| [03_Optimization_Guide](03_Optimization_Guide.md) | 前端优化指南 | ✅ |
| [04_Interaction_Guidelines](04_Interaction_Guidelines.md) | 交互设计规范 | ✅ |
| [05_UI_Components](05_UI_Components.md) | UI组件规范 | ✅ |
| [06_Pages_Flow](06_Pages_Flow.md) | 页面流程设计 | ✅ |
---
## 关联模块
- [架构模块](../01_Architecture/00_Architecture_Index.md)
- [后端模块](../02_Backend/00_Backend_Index.md)
---
## 最近更新
- 2026-03-19: 重构前端文档结构,统一命名规范

View File

@@ -0,0 +1,732 @@
# Frontend Design (Crawlful Hub)
> **定位**Crawlful Hub 前端架构设计文档 - 包含技术栈、目录结构、核心模块及开发规范。
> **更新日期**: 2026-03-18
> **最高优先级参考**: [Business_Blueprint.md](../00_Business/Business_Blueprint.md)
---
## 1. 技术栈 (Tech Stack)
### 1.1 当前技术栈
| 层级 | 技术 | 版本 | 用途 |
|------|------|------|------|
| **Framework** | React | 18.x | UI 框架 |
| **Language** | TypeScript | 5.x | 开发语言 |
| **Build Tool** | Umi | 4.x | 构建工具 |
| **UI Library** | Ant Design | 5.x | 组件库 |
| **State** | Redux | 4.x | 状态管理 |
| **Router** | Umi Router | 4.x | 路由管理 |
| **Testing** | Jest | 29.x | 单元测试 |
### 1.2 技术栈演进 (2026 Q4 目标)
| 层级 | 技术 | 版本 | 用途 |
|------|------|------|------|
| **Framework** | React | 19 (或 Next.js 15) | UI 框架 |
| **Language** | TypeScript | 5.x | 开发语言 |
| **Build Tool** | Vite (开发) + Rspack (生产) | - | 构建工具 |
| **UI Library** | Ant Design 5.x + 自定义组件库 | - | 组件库 |
| **State** | Zustand + TanStack Query | - | 状态管理 |
| **Router** | Umi Router 4.x | - | 路由管理 |
| **Testing** | Jest | 29.x | 单元测试 |
| **微前端** | qiankun | - | 大型模块独立部署 |
---
## 2. 目录结构 (Directory Structure)
```
dashboard/src/
├─ .umi/ # Umi 生成文件
│ ├─ core/
│ ├─ appData.json
│ └─ exports.ts
├─ components/ # 公共组件
│ ├─ ui/ # UI 组件库
│ │ ├─ Button.tsx
│ │ ├─ Card.tsx
│ │ ├─ ComponentLibrary.tsx
│ │ ├─ Input.tsx
│ │ ├─ ResponsiveLayout.tsx
│ │ └─ index.ts
│ ├─ LazyLoad.tsx # 懒加载组件
│ ├─ Table.tsx # 表格组件
│ ├─ VirtualList.tsx # 虚拟滚动组件
│ ├── README.md
│ └── index.ts
├─ models/ # 状态管理
│ ├─ StateManagement.ts # 状态管理主文件
│ ├─ global.ts # 全局状态
│ ├─ order.ts # 订单状态
│ ├─ crossBorder.ts # 跨境电商状态
├─ pages/
│ ├─ CrossBorder/
│ │ ├─ ProductManagement.tsx # 跨境商品管理
│ │ ├─ CustomsDeclaration.tsx # 清关申报
│ │ ├─ LogisticsManagement.tsx # 物流管理
│ │ ├─ PaymentManagement.tsx # 支付管理
│ │ ├─ PlatformIntegration.tsx # 平台集成
│ │ └─ index.tsx
├─ services/
│ ├─ crossBorderDataSource.ts # 跨境电商数据源
│ ├─ platformIntegrationService.ts # 平台集成服务
│ ├─ product.ts # 商品状态
│ └── index.ts
├─ pages/ # 页面组件
│ ├─ ABTest/ # A/B测试
│ ├─ Ad/ # 广告管理
│ ├─ AfterSales/ # 售后服务
│ ├─ Auth/ # 认证
│ ├─ B2B/ # B2B贸易
│ ├─ B2BTrade/ # B2B贸易
│ ├─ Blacklist/ # 黑名单管理
│ ├─ Compliance/ # 合规管理
│ ├─ Finance/ # 财务管理
│ ├─ Inventory/ # 库存管理
│ ├─ Logistics/ # 物流管理
│ ├─ Marketing/ # 营销管理
│ ├─ Merchant/ # 商户管理
│ ├─ Orders/ # 订单管理
│ ├─ Product/ # 商品管理
│ ├─ Reports/ # 报表中心
│ ├─ Return/ # 退货管理
│ ├─ Settings/ # 设置
│ ├─ Suppliers/ # 供应商管理
│ ├─ UserAsset/ # 用户资产
│ └─ index.tsx # 首页/仪表盘
├─ services/ # API 服务
│ ├─ api/ # API 客户端
│ │ ├─ client.ts
│ │ ├─ index.ts
│ │ ├─ order.ts
│ │ ├─ product.ts
│ │ └─ user.ts
│ ├─ merchantOrderService.ts # 商户订单服务
│ ├─ merchantService.ts # 商户服务
│ ├─ merchantSettlementService.ts # 商户结算服务
│ └─ merchantShopService.ts # 商户店铺服务
├─ tests/ # 测试文件
│ ├─ frontend.functional.test.ts # 前端功能测试
│ └─ frontend.integration.test.ts # 前端集成测试
└─ utils/ # 工具函数
├─ PerformanceOptimization.ts # 性能优化
├─ performance.ts # 性能相关
├─ responsive.ts # 响应式相关
└─ security.ts # 安全相关
```
---
## 3. 页面路由 (Routes)
### 3.1 路由结构
```typescript
const routes = [
// 公共路由
{ path: '/login', element: <Login /> },
// 受保护路由
{
path: '/',
element: <MainLayout />,
children: [
{ path: '/', element: <Dashboard /> },
{ path: '/products', element: <Products /> },
{ path: '/products/:id', element: <ProductDetail /> },
{ path: '/products/create', element: <ProductCreate /> },
{ path: '/products/review', element: <ProductReview /> },
{ path: '/orders', element: <Orders /> },
{ path: '/orders/:id', element: <OrderDetail /> },
{ path: '/orders/audit', element: <OrderAudit /> },
{ path: '/finance', element: <Finance /> },
{ path: '/finance/transactions', element: <Transactions /> },
{ path: '/finance/reconciliation', element: <Reconciliation /> },
{ path: '/inventory', element: <Inventory /> },
{ path: '/inventory/warehouses', element: <Warehouses /> },
{ path: '/inventory/forecast', element: <InventoryForecast /> },
{ path: '/marketing', element: <Marketing /> },
{ path: '/marketing/ads', element: <Ads /> },
{ path: '/marketing/competitors', element: <Competitors /> },
{ path: '/suppliers', element: <Suppliers /> },
{ path: '/suppliers/:id', element: <SupplierDetail /> },
{ path: '/reports', element: <Reports /> },
{ path: '/reports/profit', element: <ProfitReport /> },
{ path: '/reports/performance', element: <PerformanceReport /> },
{ path: '/settings', element: <Settings /> },
{ path: '/settings/profile', element: <ProfileSettings /> },
{ path: '/settings/tenant', element: <TenantSettings /> },
{ path: '/settings/users', element: <UserManagement /> },
]
}
];
```
### 3.2 权限路由
```typescript
// 基于角色的路由访问控制
const roleRoutes = {
ADMIN: ['*'], // 所有路由
MANAGER: ['*'], // 所有路由
OPERATOR: [
'/products',
'/orders',
'/inventory'
],
FINANCE: [
'/finance',
'/reports'
],
SOURCING: [
'/products',
'/suppliers'
],
LOGISTICS: [
'/orders',
'/inventory'
],
ANALYST: [
'/reports',
'/marketing/competitors'
]
};
```
---
## 4. 核心模块
### 4.1 商品管理模块
**功能列表**
- 商品列表展示 (分页、筛选、排序)
- 商品详情查看
- 商品创建/编辑
- 商品审核流程
- 批量操作
- 动态定价
- 套利分析
**页面组件**
- `Product/index.tsx` - 商品管理入口
- `Product/ProductDetail.tsx` - 商品详情页
- `Product/ProductPublishForm.tsx` - 商品发布表单
- `Product/MaterialUpload.tsx` - 物料上传
### 4.2 订单管理模块
**功能列表**
- 订单列表展示
- 订单详情查看
- 订单状态流转
- 批量审核
- 订单统计
- 异常订单处理
- 订单聚合分析
**页面组件**
- `Orders/index.tsx` - 订单管理入口
- `Orders/OrderList.tsx` - 订单列表页
- `Orders/OrderDetail.tsx` - 订单详情页
- `Orders/ExceptionOrder.tsx` - 异常订单处理
- `Orders/OrderAggregation.tsx` - 订单聚合分析
### 4.3 商户管理模块
**功能列表**
- 商户列表管理
- 商户订单管理
- 商户结算管理
- 商户店铺管理
**页面组件**
- `Merchant/index.tsx` - 商户管理入口
- `Merchant/MerchantManage.tsx` - 商户管理
- `Merchant/MerchantOrderManage.tsx` - 商户订单管理
- `Merchant/MerchantSettlementManage.tsx` - 商户结算管理
- `Merchant/MerchantShopManage.tsx` - 商户店铺管理
### 4.4 售后服务模块
**功能列表**
- 退货申请处理
- 退款流程管理
- 客户服务
**页面组件**
- `AfterSales/index.tsx` - 售后服务入口
- `AfterSales/ReturnApply.tsx` - 退货申请
- `AfterSales/RefundProcess.tsx` - 退款流程
- `AfterSales/CustomerService.tsx` - 客户服务
### 4.5 物流管理模块
**功能列表**
- 物流选择
- 运费计算
- 物流追踪
**页面组件**
- `Logistics/index.tsx` - 物流管理入口
- `Logistics/LogisticsSelect.tsx` - 物流选择
- `Logistics/FreightCalc.tsx` - 运费计算
- `Logistics/LogisticsTrack.tsx` - 物流追踪
### 4.6 合规管理模块
**功能列表**
- 合规检查
- 证书管理
- 证书过期提醒
**页面组件**
- `Compliance/index.tsx` - 合规管理入口
- `Compliance/ComplianceCheck.tsx` - 合规检查
- `Compliance/CertificateManage.tsx` - 证书管理
- `Compliance/CertificateExpiryReminder.tsx` - 证书过期提醒
### 4.7 黑名单管理模块
**功能列表**
- 黑名单管理
- 风险监控
**页面组件**
- `Blacklist/index.tsx` - 黑名单管理入口
- `Blacklist/BlacklistManage.tsx` - 黑名单管理
- `Blacklist/RiskMonitor.tsx` - 风险监控
### 4.8 B2B贸易模块
**功能列表**
- 企业报价
- 批量订单
- 合同管理
**页面组件**
- `B2B/index.tsx` - B2B贸易入口
- `B2B/EnterpriseQuote.tsx` - 企业报价
- `B2B/BatchOrder.tsx` - 批量订单
- `B2B/ContractManage.tsx` - 合同管理
### 4.9 广告管理模块
**功能列表**
- 广告投放管理
- ROI分析
- 广告计划
**页面组件**
- `Ad/index.tsx` - 广告管理入口
- `Ad/AdDelivery.tsx` - 广告投放
- `Ad/ROIAnalysis.tsx` - ROI分析
- `Ad/AdPlanPage.tsx` - 广告计划
### 4.10 财务管理模块
**功能列表**
- 财务概览
- 交易记录
- 对账记录
**页面组件**
- `Finance/index.tsx` - 财务管理入口
- `Finance/Transactions.tsx` - 交易记录
- `Finance/Reconciliation.tsx` - 对账记录
### 4.11 库存管理模块
**功能列表**
- 库存概览
- 仓库管理
- 库存预测
**页面组件**
- `Inventory/index.tsx` - 库存管理入口
- `Inventory/Warehouses.tsx` - 仓库管理
- `Inventory/InventoryForecast.tsx` - 库存预测
### 4.12 营销管理模块
**功能列表**
- 营销概览
- 广告管理
- 竞争对手分析
**页面组件**
- `Marketing/index.tsx` - 营销管理入口
- `Marketing/Ads.tsx` - 广告管理
- `Marketing/Competitors.tsx` - 竞争对手分析
### 4.13 供应商管理模块
**功能列表**
- 供应商列表
- 供应商详情
- 供应商产品管理
**页面组件**
- `Suppliers/index.tsx` - 供应商管理入口
- `Suppliers/SupplierDetail.tsx` - 供应商详情
### 4.14 报表中心模块
**功能列表**
- 报表概览
- 利润报表
- 绩效报表
**页面组件**
- `Reports/index.tsx` - 报表中心入口
- `Reports/ProfitReport.tsx` - 利润报表
- `Reports/PerformanceReport.tsx` - 绩效报表
### 4.15 设置模块
**功能列表**
- 设置概览
- 个人设置
- 租户设置
- 用户管理
**页面组件**
- `Settings/index.tsx` - 设置入口
- `Settings/ProfileSettings.tsx` - 个人设置
- `Settings/TenantSettings.tsx` - 租户设置
- `Settings/UserManagement.tsx` - 用户管理
### 4.16 A/B测试模块
**功能列表**
- A/B测试配置
- 测试结果分析
**页面组件**
- `ABTest/index.tsx` - A/B测试入口
- `ABTest/ABTestConfig.tsx` - A/B测试配置
- `ABTest/ABTestResults.tsx` - 测试结果分析
### 4.11 退货管理模块
**功能列表**
- 退货监控
- SKU管理
**页面组件**
- `Return/index.tsx` - 退货管理入口
- `Return/ReturnMonitor.tsx` - 退货监控
- `Return/SKUManage.tsx` - SKU管理
### 4.12 用户资产管理模块
**功能列表**
- 会员等级管理
- 积分管理
- 用户资产
**页面组件**
- `UserAsset/index.tsx` - 用户资产管理入口
- `UserAsset/MemberLevel.tsx` - 会员等级管理
- `UserAsset/PointsManage.tsx` - 积分管理
- `UserAsset/UserAssets.tsx` - 用户资产
### 4.13 多语言管理模块
**功能列表**
- 语言切换
- 翻译管理
- 多语言内容发布
- 语言资源管理
**页面组件**
- `I18n/index.tsx` - 多语言管理入口
- `I18n/LanguageSwitcher.tsx` - 语言切换组件
- `I18n/TranslationManage.tsx` - 翻译管理
- `I18n/ContentPublish.tsx` - 多语言内容发布
---
## 5. 组件规范
### 5.1 组件命名
- **页面组件**: PascalCase以功能命名 (如 `ProductList`, `OrderDetail`)
- **公共组件**: PascalCase以功能命名 (如 `DataTable`, `FilterPanel`)
- **Hooks**: camelCase`use` 开头 (如 `useProducts`, `useAuth`)
### 5.2 组件结构
```typescript
// 页面组件示例
import React from 'react';
import { useQuery } from '@tanstack/react-query';
import { Table, Button } from 'antd';
import { useProducts } from '@/hooks/useProducts';
export const Products: React.FC = () => {
const { data, isLoading } = useProducts();
const columns = [
{ title: '商品名称', dataIndex: 'title' },
{ title: '平台', dataIndex: 'platform' },
{ title: '状态', dataIndex: 'status' },
{ title: '售价', dataIndex: 'sellingPrice' },
];
return (
<div>
<h1></h1>
<Table
dataSource={data}
columns={columns}
loading={isLoading}
/>
</div>
);
};
```
### 5.3 状态管理
```typescript
// Redux Store 示例
import { createStore, combineReducers, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import { createLogger } from 'redux-logger';
// 定义状态类型
interface AppState {
user: UserState;
products: ProductState;
orders: OrderState;
loading: boolean;
error: string | null;
}
// 组合reducers
const rootReducer = combineReducers({
user: userReducer,
products: productsReducer,
orders: ordersReducer,
app: appReducer,
});
// 中间件
const middleware = [thunk];
if (process.env.NODE_ENV === 'development') {
middleware.push(createLogger());
}
// 创建store
const store = createStore(rootReducer, applyMiddleware(...middleware));
export default store;
```
---
## 6. API 集成
### 6.1 API 客户端配置
```typescript
// services/api/client.ts
import axios from 'axios';
const api = axios.create({
baseURL: process.env.API_URL || 'http://localhost:3000/api',
timeout: 30000,
});
// 请求拦截器
api.interceptors.request.use((config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// 响应拦截器
api.interceptors.response.use(
(response) => response.data,
(error) => {
if (error.response?.status === 401) {
// 处理未授权
window.location.href = '/Auth/LoginPage';
}
return Promise.reject(error);
}
);
export default api;
```
### 6.2 API 服务
```typescript
// services/api/product.ts
import api from './client';
export const productService = {
getAll: (params?: any) => {
return api.get('/products', { params });
},
getById: (id: string) => {
return api.get(`/products/${id}`);
},
create: (data: any) => {
return api.post('/products', data);
},
update: (id: string, data: any) => {
return api.put(`/products/${id}`, data);
},
delete: (id: string) => {
return api.delete(`/products/${id}`);
},
};
// services/api/order.ts
import api from './client';
export const orderService = {
getAll: (params?: any) => {
return api.get('/orders', { params });
},
getById: (id: string) => {
return api.get(`/orders/${id}`);
},
updateStatus: (id: string, status: string) => {
return api.put(`/orders/${id}/status`, { status });
},
};
```
---
## 7. 开发规范
### 7.1 代码规范
- 使用 TypeScript 严格模式
- 组件使用函数式组件 + Hooks
- 使用绝对路径导入 (`@/components/...`)
- 避免使用 `any` 类型
### 7.2 样式规范
- 使用 Ant Design 组件默认样式
- 自定义样式使用 CSS Modules 或 Tailwind
- 遵循设计系统规范
### 7.3 错误处理
```typescript
// 错误边界
import { ErrorBoundary } from 'react-error-boundary';
const ErrorFallback = ({ error }: { error: Error }) => (
<div>
<h2></h2>
<p>{error.message}</p>
</div>
);
// 使用
<ErrorBoundary FallbackComponent={ErrorFallback}>
<App />
</ErrorBoundary>
```
---
## 8. 构建与部署
### 8.1 环境变量
```env
VITE_API_URL=http://localhost:3000/api/v1
VITE_APP_NAME=Crawlful Hub
VITE_APP_VERSION=1.0.0
```
### 8.2 构建命令
```bash
npm install # 安装依赖
npm run dev # 开发模式
npm run build # 生产构建
npm run preview # 预览构建
npm run test # 运行测试
```
---
## 9. 前端发展规划
### 9.1 前端架构规划
- **微前端架构**: 采用 qiankun 实现大型模块独立部署,解决大型应用构建慢、维护难的问题
- **BFF 层**: 引入 Backend for Frontend 模式,统一接口管理,减少前端复杂度
- **多端适配**: 支持桌面端、平板端和移动端的响应式布局
- **离线能力**: 实现 PWA支持离线访问核心功能
### 9.2 页面功能扩展计划
| 模块 | 现有功能 | 计划扩展 |
|------|---------|---------|
| 商品管理 | 基础商品管理、套利分析 | 智能选品推荐、商品生命周期管理、多平台批量操作 |
| 订单管理 | 订单列表、状态流转 | 智能审单、异常订单自动处理、多渠道订单聚合 |
| 财务管理 | 基础财务概览 | 智能对账、多币种自动换算、税务报表自动生成 |
| 营销管理 | 广告投放管理 | 智能广告优化、竞品分析、多平台营销协同 |
| 库存管理 | 基础库存管理 | 智能补货建议、库存预测、多仓协同 |
| 物流管理 | 基础物流选择 | 智能物流路径规划、运费优化、实时轨迹监控 |
| 平台集成 | 基础平台连接 | 更多平台集成、API 自动同步、无 API 平台支持 |
### 9.3 组件库规划
- **基础组件**: 基于 Ant Design 5.x 扩展,统一设计规范
- **业务组件**: 封装商品、订单、财务等核心业务组件
- **智能组件**: 集成 AI 能力的智能推荐、智能分析组件
- **可视化组件**: 基于 ECharts 的数据可视化组件库
- **表单组件**: 智能表单验证、动态表单生成
### 9.4 性能优化规划
- **构建优化**: 使用 Vite + Rspack提升构建速度
- **渲染优化**: 虚拟滚动、懒加载、代码分割
- **缓存策略**: 合理使用浏览器缓存、Service Worker 缓存
- **网络优化**: HTTP/2、HTTP/3 支持,减少请求体积
- **监控体系**: 集成前端性能监控,实时预警性能问题
### 9.5 开发体验优化
- **代码生成**: 基于模板自动生成页面、组件代码
- **Mock 系统**: 完善的 Mock 数据体系,支持离线开发
- **开发工具**: 定制化 VS Code 插件,提升开发效率
- **文档体系**: 自动生成 API 文档、组件文档
---
## 10. 相关文档
- [UI Components](./UI_Components.md)
- [Pages Flow](./Pages_Flow.md)
- [API Consumption](./API_Consumption.md)
- [Backend API Specs](../02_Backend/API_Specs/)
---
*本文档基于业务蓝图设计,最后更新: 2026-03-18*

View File

@@ -0,0 +1,792 @@
# 前端开发指导文档
> **基于业务语义的UI骨架设计指南**
---
## 🎯 开发目标
**不是“纯UI铺页面”而是**带业务语义的UI骨架Business Skeleton**
**目标**:所有页面结构完整 + 所有按钮有明确业务意义 + 能挂Service
---
## 🏗️ 标准开发流程
### Step 1定义菜单结构全局
```text
Dashboard总览
Product商品 / 利润)
Orders订单
Ad广告
Inventory库存
B2B贸易
Finance结算 / 账单)
Compliance合规
Settings配置
```
**关键**:每个菜单 = 一个业务域(不是页面)
---
### Step 2定义页面骨架
#### Product 页面骨架(标准结构)
```text
顶部:筛选区(店铺 / 分类 / 状态)
中间:核心表格(商品列表)
右侧/弹窗:操作面板(编辑 / AI / 定价)
底部/侧边:数据总结(利润 / ROI
```
**目标**:把页面“分区”而不是写代码
---
### Step 3填按钮重点
#### Product 页面按钮(标准版)
**行级操作(每个商品)**
```text
编辑商品
修改价格
查看ROI
AI优化定价 🔥
上下架
```
**批量操作**
```text
批量改价
批量上架
批量分析
```
**页面级操作**
```text
创建商品
导入商品
导出数据
```
**关键**:每个按钮必须能回答“点了之后业务发生什么变化?”
---
### Step 4绑定假行为
**点击 → mock数据变化 → UI更新**
**示例**:点击【修改价格】
```text
输入新价格
→ 前端计算 ROI假数据
→ 表格实时更新
→ ROI变红/变绿
```
**意义**验证UI是不是“活的”而不是死页面
---
### Step 5统一交互规范
#### 1⃣ 所有操作必须有反馈
```text
loading → success / error
```
#### 2⃣ 所有“影响钱”的操作必须有提示
```text
修改价格 → 显示 ROI变化
```
#### 3⃣ 所有列表必须支持:
```text
分页 / 筛选 / 排序
```
#### 4⃣ 所有弹窗统一:
- 宽度
- 按钮位置
- 提交流程
**目的**让AI和你写的代码风格一致
---
### Step 6输出前端任务模板
#### 页面Product
```md
# 页面Product
## 页面结构
- 筛选区
- 商品表格
- 操作弹窗
## 表格字段
- 商品名
- 成本
- 售价
- 利润
- ROI
- 库存
## 按钮
- 创建商品
- 修改价格
- AI定价
- 上下架
## 交互
- 修改价格 → 更新ROImock
- AI定价 → loading → 返回建议价格
## 状态
- loading
- empty
- error
```
---
## 📚 参考产品结构
### 1⃣ Shopify电商后台结构
**重点**
- 商品管理
- 订单管理
- 分析面板
### 2⃣ Google Analytics数据驱动UI
**重点**
- 数据展示
- 图表交互
- 维度筛选
### 3⃣ Jungle Scout赚钱导向
**重点**
- 利润
- ROI
- 选品分析
**目标**Shopify结构 + Analytics数据 + JungleScout赚钱逻辑
---
## 📋 各页面详细设计
### Dashboard总览
**页面结构**
- 顶部:时间范围选择
- 中间核心KPI卡片
- 底部:趋势图表
**按钮**
- 刷新数据
- 导出报告
- 自定义仪表盘
**交互**
- 时间范围变化 → 所有数据更新
- 点击KPI → 跳转到详情页面
---
### Product商品 / 利润)
**页面结构**
- 顶部:筛选区(店铺 / 分类 / 状态)
- 中间:商品表格
- 右侧:操作面板
- 底部:利润总结
**按钮**
- 行级编辑、修改价格、查看ROI、AI定价、上下架
- 批量:批量改价、批量上架、批量分析
- 页面级:创建商品、导入商品、导出数据
**交互**
- 修改价格 → 更新ROImock
- AI定价 → loading → 返回建议价格
---
### Orders订单
**页面结构**
- 顶部:筛选区(状态 / 时间 / 平台)
- 中间:订单表格
- 右侧:订单详情
- 底部:订单统计
**按钮**
- 行级:查看详情、处理订单、退款
- 批量:批量发货、批量取消、批量导出
- 页面级:创建订单、导入订单、导出数据
**交互**
- 点击订单 → 显示详情
- 处理订单 → 状态更新
---
### Ad广告
**页面结构**
- 顶部:筛选区(平台 / 状态 / 时间)
- 中间:广告表格
- 右侧:广告详情
- 底部ROI分析
**按钮**
- 行级编辑、投放、暂停、查看ROI
- 批量:批量启停、批量分析
- 页面级:创建广告、导入广告、导出数据
**交互**
- 投放广告 → loading → 显示投放结果
- 查看ROI → 显示详细分析
---
### Inventory库存
**页面结构**
- 顶部:筛选区(仓库 / 状态 / 分类)
- 中间:库存表格
- 右侧:库存详情
- 底部:库存预警
**按钮**
- 行级:编辑、补货、调拨、查看详情
- 批量:批量调整、批量导出
- 页面级:创建库存、导入库存、导出数据
**交互**
- 补货 → 显示补货建议
- 调拨 → 显示调拨选项
---
### B2B贸易
**页面结构**
- 顶部:筛选区(客户 / 状态 / 时间)
- 中间:订单表格
- 右侧:订单详情
- 底部:客户统计
**按钮**
- 行级:查看详情、处理订单、生成合同
- 批量:批量处理、批量导出
- 页面级:创建订单、导入订单、导出数据
**交互**
- 生成合同 → 显示合同预览
- 处理订单 → 状态更新
---
### Finance结算 / 账单)
**页面结构**
- 顶部:筛选区(时间 / 类型 / 状态)
- 中间:账单表格
- 右侧:账单详情
- 底部:财务汇总
**按钮**
- 行级:查看详情、对账、导出
- 批量:批量对账、批量导出
- 页面级:创建账单、导入账单、导出数据
**交互**
- 对账 → 显示对账结果
- 查看详情 → 显示详细财务数据
---
### Transactions交易记录
**页面结构**
- 顶部:筛选区(时间 / 类型 / 状态)
- 中间:交易表格
- 右侧:交易详情
- 底部:交易统计
**按钮**
- 行级:查看详情、导出
- 批量:批量导出
- 页面级:导入交易、导出数据
**交互**
- 查看详情 → 显示详细交易信息
---
### Reconciliation对账记录
**页面结构**
- 顶部:筛选区(时间 / 状态)
- 中间:对账表格
- 右侧:对账详情
- 底部:对账统计
**按钮**
- 行级:查看详情、重新对账、导出
- 批量:批量对账、批量导出
- 页面级:导入对账、导出数据
**交互**
- 重新对账 → 显示对账结果
- 查看详情 → 显示详细对账信息
---
### Warehouses仓库管理
**页面结构**
- 顶部:筛选区(状态 / 类型)
- 中间:仓库表格
- 右侧:仓库详情
- 底部:仓库统计
**按钮**
- 行级:查看详情、编辑、删除
- 批量:批量导出
- 页面级:创建仓库、导入仓库、导出数据
**交互**
- 查看详情 → 显示详细仓库信息
- 编辑 → 显示编辑表单
---
### InventoryForecast库存预测
**页面结构**
- 顶部:时间范围选择
- 中间:预测图表
- 右侧:预测详情
- 底部:预测建议
**按钮**
- 刷新预测
- 导出预测
- 调整参数
**交互**
- 时间范围变化 → 预测数据更新
- 调整参数 → 重新计算预测
---
### Marketing营销管理
**页面结构**
- 顶部:时间范围选择
- 中间:营销概览卡片
- 底部:营销趋势图表
**按钮**
- 查看广告管理
- 查看竞争对手分析
- 查看营销绩效报表
**交互**
- 点击卡片 → 跳转到对应页面
- 时间范围变化 → 所有数据更新
---
### Ads广告管理
**页面结构**
- 顶部:筛选区(平台 / 状态 / 时间)
- 中间:广告表格
- 右侧:广告详情
- 底部:广告统计
**按钮**
- 行级:编辑、启动、暂停、删除
- 批量:批量启停、批量导出
- 页面级:创建广告、导入广告、导出数据
**交互**
- 启动/暂停 → 广告状态更新
- 查看详情 → 显示详细广告信息
---
### Competitors竞争对手分析
**页面结构**
- 顶部:筛选区(类别 / 时间)
- 中间:分析图表
- 右侧:竞争对手详情
- 底部:竞争对手列表
**按钮**
- 刷新分析
- 导出分析
- 添加竞争对手
**交互**
- 筛选变化 → 分析数据更新
- 查看详情 → 显示详细竞争对手信息
---
### Suppliers供应商管理
**页面结构**
- 顶部:筛选区(类别 / 状态)
- 中间:供应商表格
- 右侧:供应商详情
- 底部:供应商统计
**按钮**
- 行级:查看详情、编辑、删除
- 批量:批量导出
- 页面级:添加供应商、导入供应商、导出数据
**交互**
- 查看详情 → 跳转到供应商详情页面
- 编辑 → 显示编辑表单
---
### SupplierDetail供应商详情
**页面结构**
- 左侧:供应商信息表单
- 右侧:供应商产品列表
- 底部:历史订单和绩效评估
**按钮**
- 保存供应商信息
- 查看历史订单
- 查看绩效评估
**交互**
- 保存 → 显示保存结果
- 切换标签页 → 显示对应内容
---
### Reports报表中心
**页面结构**
- 顶部:报表类型卡片
- 中间:报表概览图表
- 底部:报表操作按钮
**按钮**
- 查看利润报表
- 查看绩效报表
- 导出所有报表
**交互**
- 点击卡片 → 跳转到对应报表页面
- 导出 → 下载报表文件
---
### ProfitReport利润报表
**页面结构**
- 顶部:筛选区(时间范围 / 类别)
- 中间:利润概览卡片
- 底部:利润明细表格和图表
**按钮**
- 导出报表
- 刷新数据
- 调整参数
**交互**
- 筛选变化 → 利润数据更新
- 查看详情 → 显示详细利润信息
---
### PerformanceReport绩效报表
**页面结构**
- 顶部:筛选区(时间范围 / 渠道)
- 中间:绩效概览卡片
- 底部:绩效明细表格和图表
**按钮**
- 导出报表
- 刷新数据
- 调整参数
**交互**
- 筛选变化 → 绩效数据更新
- 查看详情 → 显示详细绩效信息
---
### Settings设置
**页面结构**
- 顶部:设置类型卡片
- 中间:设置概览
- 底部:设置操作按钮
**按钮**
- 查看个人设置
- 查看租户设置
- 查看用户管理
**交互**
- 点击卡片 → 跳转到对应设置页面
---
### ProfileSettings个人设置
**页面结构**
- 顶部:头像上传
- 中间:个人信息表单
- 底部:密码修改表单
**按钮**
- 保存个人信息
- 修改密码
**交互**
- 保存 → 显示保存结果
- 修改密码 → 显示修改结果
---
### TenantSettings租户设置
**页面结构**
- 顶部:基本信息表单
- 底部:功能设置开关
**按钮**
- 保存基本信息
- 保存功能设置
**交互**
- 保存 → 显示保存结果
- 切换开关 → 实时更新设置
---
### UserManagement用户管理
**页面结构**
- 顶部:筛选区(角色 / 状态)
- 中间:用户表格
- 底部:用户统计
**按钮**
- 行级:编辑、删除
- 批量:批量导出
- 页面级:添加用户、导入用户、导出数据
**交互**
- 添加用户 → 显示添加用户表单
- 编辑 → 显示编辑表单
- 删除 → 显示删除确认
---
### Compliance合规
**页面结构**
- 顶部:筛选区(类型 / 状态 / 时间)
- 中间:证书表格
- 右侧:证书详情
- 底部:合规统计
**按钮**
- 行级:查看详情、更新、验证
- 批量:批量验证、批量导出
- 页面级:创建证书、导入证书、导出数据
**交互**
- 验证证书 → 显示验证结果
- 更新证书 → 显示更新表单
---
### Settings配置
**页面结构**
- 左侧:配置菜单
- 右侧:配置表单
**按钮**
- 保存配置
- 重置配置
- 导出配置
**交互**
- 保存 → 显示保存结果
- 重置 → 显示重置确认
---
## 🎨 设计规范
### 颜色系统
- 主色:#1890ff
- 成功:#52c41a
- 警告:#faad14
- 错误:#f5222d
- 信息:#1890ff
### 字体系统
- 标题16px / 20px
- 正文14px
- 小文本12px
### 布局规范
- 页面边距16px
- 卡片间距16px
- 按钮间距8px
- 输入框高度32px
### 响应式设计
- 桌面端1200px+
- 平板端768px - 1199px
- 移动端:< 768px
---
## 📝 前端任务模板
### 页面任务模板
```md
# 页面:[页面名称]
## 页面结构
- [结构1]
- [结构2]
- [结构3]
## 表格字段
- [字段1]
- [字段2]
- [字段3]
## 按钮
- [按钮1]
- [按钮2]
- [按钮3]
## 交互
- [交互1]
- [交互2]
## 状态
- loading
- empty
- error
```
### 组件任务模板
```md
# 组件:[组件名称]
## 功能描述
[组件功能描述]
## 输入属性
- [属性1]: [类型] - [描述]
- [属性2]: [类型] - [描述]
## 输出事件
- [事件1]: [描述]
- [事件2]: [描述]
## 样式规范
- [样式1]
- [样式2]
## 交互规范
- [交互1]
- [交互2]
```
---
## 🔄 开发流程
### 第一步:搭建骨架
- 定义页面结构
- 创建基础组件
- 实现布局
### 第二步:实现交互
- 绑定假数据
- 实现按钮功能
- 验证UI交互
### 第三步:对接服务
- 替换假数据
- 对接后端API
- 实现真实业务逻辑
### 第四步:优化测试
- 性能优化
- 兼容性测试
- 用户体验优化
---
## 📌 注意事项
1. **业务语义优先**每个UI元素都要有明确的业务意义
2. **一致性**:保持交互规范的一致性
3. **可扩展性**:设计时考虑未来功能扩展
4. **性能**:注意前端性能优化
5. **用户体验**:关注用户操作流程的流畅性
---
## 🎯 验收标准
- [ ] 页面结构完整
- [ ] 按钮功能明确
- [ ] 交互流畅
- [ ] 响应式适配
- [ ] 性能良好
- [ ] 代码规范
---
> **记住:你现在做的不是“页面开发”,而是在搭“业务操作台的骨架”。**

View File

@@ -0,0 +1,511 @@
# 前端优化指南 (Crawlful Hub)
> **定位**Crawlful Hub 前端优化指南 - 详细说明交互优化的具体实施方法。
> **更新日期**: 2026-03-18
> **最高优先级参考**: [Frontend_Design.md](./Frontend_Design.md)
---
## 1. 文档概述
本指南旨在提供 Crawlful Hub 前端系统的优化策略和实施方法,涵盖交互优化、性能优化、用户体验优化、响应式设计优化和可访问性优化等方面。通过本指南,开发团队可以系统性地提升前端系统的质量和用户体验。
## 2. 交互优化的重要性
良好的交互设计是提升用户体验的关键因素,它可以:
- 提高用户满意度和忠诚度
- 减少用户操作错误和挫折感
- 提升系统的易用性和可理解性
- 增加用户的使用效率和 productivity
- 增强系统的专业性和品牌形象
## 3. 具体优化策略和实施方法
### 3.1 表单交互优化
#### 3.1.1 实时验证
**实施方法**
- 使用 Ant Design Form 的 `validateTrigger` 属性设置为 `onChange`,实现实时验证
- 为每个表单项添加 `rules` 配置,定义验证规则
- 使用 `validateStatus``help` 属性提供即时反馈
**示例代码**
```tsx
<Form.Item
name="email"
label="邮箱"
rules={[
{ required: true, message: '请输入邮箱' },
{ type: 'email', message: '请输入有效的邮箱地址' }
]}
validateTrigger="onChange"
>
<Input placeholder="请输入邮箱" />
</Form.Item>
```
#### 3.1.2 自动保存
**实施方法**
- 使用 `useEffect` 监听表单数据变化
- 设置防抖函数,避免频繁保存
- 使用 `localStorage``sessionStorage` 存储草稿
- 在组件卸载时自动保存
**示例代码**
```tsx
import { debounce } from '../utils/PerformanceOptimization';
const FormWithAutoSave = () => {
const [form] = Form.useForm();
const autoSave = debounce((values) => {
localStorage.setItem('formDraft', JSON.stringify(values));
}, 1000);
useEffect(() => {
const draft = localStorage.getItem('formDraft');
if (draft) {
form.setFieldsValue(JSON.parse(draft));
}
return () => {
autoSave(form.getFieldsValue());
};
}, []);
useEffect(() => {
form.watch((values) => {
autoSave(values);
});
}, [form]);
// 表单内容...
};
```
#### 3.1.3 智能填充
**实施方法**
- 维护历史数据存储
- 根据用户输入的上下文提供智能建议
- 使用 `Select` 组件的 `showSearch``filterOption` 属性实现智能搜索
**示例代码**
```tsx
<Form.Item name="platform" label="平台">
<Select
showSearch
filterOption={(input, option) =>
option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
>
<Option value="AMAZON">Amazon</Option>
<Option value="EBAY">eBay</Option>
<Option value="SHOPIFY">Shopify</Option>
</Select>
</Form.Item>
```
### 3.2 列表交互优化
#### 3.2.1 虚拟滚动
**实施方法**
- 使用 `VirtualList` 组件处理长列表
- 设置合理的 `itemHeight``containerHeight`
- 实现数据的分批加载
**示例代码**
```tsx
import { VirtualList } from '../components/VirtualList';
const LongList = () => {
return (
<VirtualList
items={items}
itemHeight={48}
containerHeight={400}
renderItem={(item, index) => (
<div key={item.id} style={{ height: 48, padding: '12px' }}>
{item.name}
</div>
)}
keyExtractor={(item) => item.id}
/>
);
};
```
#### 3.2.2 列排序和筛选
**实施方法**
- 使用 Ant Design Table 的 `sorter``filters` 属性
- 实现服务器端排序和筛选
- 保存用户的排序和筛选偏好
**示例代码**
```tsx
const columns = [
{
title: '商品名称',
dataIndex: 'name',
sorter: (a, b) => a.name.localeCompare(b.name),
},
{
title: '平台',
dataIndex: 'platform',
filters: [
{ text: 'Amazon', value: 'AMAZON' },
{ text: 'eBay', value: 'EBAY' },
],
onFilter: (value, record) => record.platform === value,
},
// 其他列...
];
<Table columns={columns} dataSource={data} />
```
### 3.3 页面过渡优化
#### 3.3.1 加载状态
**实施方法**
- 使用骨架屏代替简单的加载动画
- 为不同类型的内容设计不同的骨架屏
- 实现渐进式加载
**示例代码**
```tsx
const SkeletonLoader = () => (
<div style={{ padding: 24 }}>
<Skeleton active paragraph={{ rows: 4 }} />
<Skeleton active paragraph={{ rows: 4 }} style={{ marginTop: 16 }} />
</div>
);
const PageWithSkeleton = () => {
const { data, isLoading } = useQuery({...});
if (isLoading) {
return <SkeletonLoader />;
}
return <PageContent data={data} />;
};
```
#### 3.3.2 错误处理
**实施方法**
- 使用错误边界捕获组件错误
- 提供清晰的错误信息和恢复方案
- 实现错误日志记录
**示例代码**
```tsx
import { ErrorBoundary } from 'react-error-boundary';
const ErrorFallback = ({ error, resetErrorBoundary }) => (
<div style={{ padding: 24, textAlign: 'center' }}>
<Alert
message="出错了"
description={error.message}
type="error"
action={
<Button size="small" type="primary" onClick={resetErrorBoundary}>
</Button>
}
/>
</div>
);
const SafeComponent = () => (
<ErrorBoundary FallbackComponent={ErrorFallback}>
<ComponentThatMightError />
</ErrorBoundary>
);
```
## 4. 性能优化
### 4.1 组件懒加载
**实施方法**
- 使用 `React.lazy``Suspense` 实现组件懒加载
- 按路由或功能模块进行代码拆分
- 预加载关键组件
**示例代码**
```tsx
import React, { lazy, Suspense } from 'react';
const LazyComponent = lazy(() => import('./LazyComponent'));
const App = () => (
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
);
```
### 4.2 图片优化
**实施方法**
- 实现图片懒加载
- 使用适当的图片格式和大小
- 支持 WebP 格式
- 实现图片压缩
**示例代码**
```tsx
import { LazyLoad } from '../components/LazyLoad';
const ImageWithLazyLoad = ({ src, alt }) => (
<LazyLoad>
<img src={src} alt={alt} />
</LazyLoad>
);
```
### 4.3 状态管理优化
**实施方法**
- 合理使用 Redux避免过度使用
- 使用 `useMemo``useCallback` 优化渲染性能
- 实现状态的细粒度管理
**示例代码**
```tsx
const ExpensiveComponent = React.memo(({ data, onUpdate }) => {
const processedData = useMemo(() => {
// expensive data processing
return processData(data);
}, [data]);
const handleUpdate = useCallback((value) => {
onUpdate(value);
}, [onUpdate]);
return <div>{processedData}</div>;
});
```
## 5. 用户体验优化
### 5.1 全局通知系统
**实施方法**
- 使用 Ant Design 的 `message``notification` 组件
- 实现统一的通知管理服务
- 支持不同类型的通知(成功、错误、警告、信息)
**示例代码**
```tsx
import { message, notification } from 'antd';
export const notify = {
success: (content) => message.success(content),
error: (content) => message.error(content),
warning: (content) => message.warning(content),
info: (content) => message.info(content),
notification: {
success: (title, content) => notification.success({ title, description: content }),
error: (title, content) => notification.error({ title, description: content }),
warning: (title, content) => notification.warning({ title, description: content }),
info: (title, content) => notification.info({ title, description: content }),
},
};
```
### 5.2 操作引导
**实施方法**
- 使用 `react-joyride` 等库实现新用户引导
- 为重要功能添加工具提示
- 实现上下文帮助
**示例代码**
```tsx
import JoyRide from 'react-joyride';
const Tour = () => {
const steps = [
{
target: '.first-element',
content: '这是第一个元素',
placement: 'bottom',
},
{
target: '.second-element',
content: '这是第二个元素',
placement: 'top',
},
];
return <JoyRide steps={steps} />;
};
```
## 6. 响应式设计优化
### 6.1 响应式布局
**实施方法**
- 使用 Ant Design 的 `Row``Col` 组件
- 结合 `useMediaQuery` 钩子实现响应式逻辑
- 为不同屏幕尺寸设计不同的布局
**示例代码**
```tsx
import { useMediaQuery } from 'react-responsive';
import { Row, Col } from 'antd';
const ResponsiveLayout = () => {
const isMobile = useMediaQuery({ maxWidth: 768 });
return (
<Row gutter={16}>
<Col xs={24} sm={12} md={8} lg={6}>
<Card>Card 1</Card>
</Col>
<Col xs={24} sm={12} md={8} lg={6}>
<Card>Card 2</Card>
</Col>
<Col xs={24} sm={12} md={8} lg={6}>
<Card>Card 3</Card>
</Col>
<Col xs={24} sm={12} md={8} lg={6}>
<Card>Card 4</Card>
</Col>
</Row>
);
};
```
### 6.2 移动端适配
**实施方法**
- 使用 `ResponsiveLayout` 组件
- 优化移动端的触摸交互
- 实现汉堡菜单和底部导航
**示例代码**
```tsx
import { ResponsiveLayout } from '../components/ui/ResponsiveLayout';
const App = () => {
return (
<ResponsiveLayout
menuItems={menuItems}
selectedKey={selectedKey}
onMenuSelect={onMenuSelect}
>
<PageContent />
</ResponsiveLayout>
);
};
```
## 7. 可访问性优化
### 7.1 键盘导航
**实施方法**
- 确保所有交互元素都可以通过键盘访问
- 实现合理的 tab 顺序
- 添加键盘快捷键
**示例代码**
```tsx
const AccessibleButton = () => {
const handleKeyDown = (e) => {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
// 执行按钮操作
}
};
return (
<button
tabIndex={0}
onKeyDown={handleKeyDown}
style={{ outline: 'none' }}
>
</button>
);
};
```
### 7.2 屏幕阅读器
**实施方法**
- 使用语义化的 HTML 元素
- 添加适当的 `aria-*` 属性
- 确保所有内容都可以被屏幕阅读器访问
**示例代码**
```tsx
<div role="region" aria-labelledby="section-title">
<h2 id="section-title"></h2>
<Table aria-label="商品列表" />
</div>
```
## 8. 最佳实践
### 8.1 代码规范
- 使用 TypeScript 严格模式
- 遵循 ESLint 和 Prettier 规范
- 保持代码的可读性和可维护性
- 编写清晰的注释
### 8.2 测试策略
- 编写单元测试和集成测试
- 使用 Jest 和 React Testing Library
- 实现端到端测试
- 定期运行测试套件
### 8.3 性能监控
- 使用 React DevTools 分析组件性能
- 实现前端性能监控
- 定期进行性能审计
- 优化关键渲染路径
## 9. 测试和监控
### 9.1 性能测试
**实施方法**
- 使用 Lighthouse 进行性能审计
- 监控首屏加载时间
- 分析关键渲染路径
- 优化资源加载
### 9.2 用户体验测试
**实施方法**
- 进行用户测试
- 收集用户反馈
- 分析用户行为数据
- 持续优化用户体验
## 10. 相关资源
- [React 官方文档](https://reactjs.org/)
- [Ant Design 官方文档](https://ant.design/)
- [Web Performance Best Practices](https://web.dev/fast/)
- [WCAG 2.1 Guidelines](https://www.w3.org/TR/WCAG21/)
- [React Performance Optimization](https://reactjs.org/docs/optimizing-performance.html)
---
*本文档基于 Crawlful Hub 前端架构设计,最后更新: 2026-03-18*

View File

@@ -0,0 +1,287 @@
# 统一交互规范
> **Crawlful Hub 前端交互设计标准**
---
## 🎯 核心原则
### 1. 所有操作必须有反馈
```text
loading → success / error
```
**实现方式**
- 使用 `BusinessLoading` 组件显示加载状态
- 使用 `BusinessMessage` 组件显示操作结果
- 操作按钮在加载期间应显示 loading 状态
### 2. 所有“影响钱”的操作必须有提示
**实现方式**
- 修改价格时显示 ROI 变化
- 批量操作前显示确认对话框
- 重要操作后显示详细的结果反馈
### 3. 所有列表必须支持
```text
分页 / 筛选 / 排序
```
**实现方式**
- 使用 `BusinessTable` 组件,默认支持分页
- 为表格添加排序功能
- 在页面顶部添加筛选栏
### 4. 所有弹窗统一
- **宽度**600px默认
- **按钮位置**:底部右侧,确认按钮在左,取消按钮在右
- **提交流程**loading → success / error → 关闭弹窗
---
## 📦 组件交互规范
### BusinessButton
**使用场景**
- 页面级操作(创建、导入、导出)
- 行级操作(编辑、删除、查看)
- 批量操作(批量修改、批量删除)
**交互规范**
- 点击按钮后显示 loading 状态
- 操作完成后显示 success/error 消息
- 禁用状态时应显示相应样式
### BusinessCard
**使用场景**
- 数据展示
- 功能模块分组
- 信息汇总
**交互规范**
- 卡片应有明确的标题
- 可添加额外操作按钮
- 卡片内容应布局合理
### BusinessTable
**使用场景**
- 商品列表
- 订单列表
- 广告列表
**交互规范**
- 支持分页默认每页10条
- 支持列排序
- 支持行选择
- 支持行操作按钮
### BusinessModal
**使用场景**
- 编辑表单
- 确认操作
- 详细信息展示
**交互规范**
- 标题应明确操作目的
- 内容区域应布局合理
- 底部按钮应符合统一位置
- 提交时显示 loading 状态
### BusinessForm
**使用场景**
- 商品创建/编辑
- 订单处理
- 广告配置
**交互规范**
- 表单验证应实时反馈
- 提交按钮应显示 loading 状态
- 错误信息应清晰可见
### BusinessMessage
**使用场景**
- 操作结果反馈
- 错误提示
- 成功提示
**交互规范**
- 消息应自动消失默认3秒
- 错误消息应使用红色
- 成功消息应使用绿色
- 警告消息应使用黄色
### BusinessLoading
**使用场景**
- API请求
- 数据加载
- 复杂计算
**交互规范**
- 应显示加载动画
- 可添加加载提示文本
- 应覆盖在操作区域
---
## 📱 页面交互规范
### Product 页面
**核心交互**
- 修改价格时实时计算 ROI
- AI定价时显示 loading 状态和建议价格
- 上下架操作应显示确认对话框
- 批量操作应显示操作结果
### Orders 页面
**核心交互**
- 订单状态更新时显示 loading 状态
- 发货操作应要求输入物流信息
- 退款操作应显示确认对话框
- 批量操作应显示操作结果
### Dashboard 页面
**核心交互**
- 时间范围选择时更新所有数据
- 点击 KPI 卡片跳转到详情页面
- 图表应支持时间范围筛选
### Ad 页面
**核心交互**
- 广告启停操作应显示确认对话框
- AI优化时显示 loading 状态和优化建议
- 批量操作应显示操作结果
### Finance 页面
**核心交互**
- 账单详情查看应显示详细的收支明细
- 导出操作应显示操作结果
- 筛选条件变化时更新数据
---
## 🎨 视觉交互规范
### 颜色系统
- **主色**#1890ff
- **成功**#52c41a
- **警告**#faad14
- **错误**#f5222d
- **信息**#1890ff
### 字体系统
- **标题**16px / 20px
- **正文**14px
- **小文本**12px
### 间距系统
- **页面边距**16px
- **卡片间距**16px
- **按钮间距**8px
- **输入框高度**32px
### 动画效果
- **按钮点击**:轻微缩放
- **弹窗出现**:淡入效果
- **加载状态**:旋转动画
- **消息提示**:滑入效果
---
## 🔧 技术实现规范
### 状态管理
- 使用 React Context API 或 Redux 管理全局状态
- 组件内部状态使用 useState
- 异步操作使用 useEffect
### 数据请求
- 使用 axios 进行 API 请求
- 统一处理请求错误
- 添加请求超时处理
### 错误处理
- 全局错误边界
- 组件级错误处理
- 用户友好的错误提示
### 性能优化
- 组件懒加载
- 数据缓存
- 防抖和节流
---
## 📋 验收标准
### 页面交互验收
- [ ] 所有操作都有 loading 状态
- [ ] 所有操作都有 success/error 反馈
- [ ] 所有列表都支持分页、筛选、排序
- [ ] 所有弹窗都符合统一规范
- [ ] 所有“影响钱”的操作都有提示
### 组件交互验收
- [ ] BusinessButton 符合交互规范
- [ ] BusinessCard 符合交互规范
- [ ] BusinessTable 符合交互规范
- [ ] BusinessModal 符合交互规范
- [ ] BusinessForm 符合交互规范
- [ ] BusinessMessage 符合交互规范
- [ ] BusinessLoading 符合交互规范
### 视觉交互验收
- [ ] 颜色使用符合规范
- [ ] 字体使用符合规范
- [ ] 间距使用符合规范
- [ ] 动画效果符合规范
---
## 🚀 实施计划
### 第一阶段:组件规范
- 实现统一的组件库
- 定义组件交互规范
- 编写组件使用文档
### 第二阶段:页面规范
- 应用组件库到所有页面
- 实现页面级交互规范
- 测试页面交互效果
### 第三阶段:系统规范
- 统一全局交互行为
- 优化用户体验
- 编写系统交互文档
---
> **统一交互规范是确保系统一致性和用户体验的关键**
> **所有前端开发必须严格遵循本规范**

View File

@@ -0,0 +1,896 @@
# UI Components (Crawlful Hub)
> **定位**Crawlful Hub 前端 UI 组件规范 - 基于 Ant Design 5.x 的组件库使用指南。
> **更新日期**: 2026-03-18
---
## 1. 设计系统
### 1.1 色彩规范
```typescript
// 主色调
const colors = {
primary: '#1890ff', // 主色
success: '#52c41a', // 成功
warning: '#faad14', // 警告
error: '#f5222d', // 错误
info: '#1890ff', // 信息
};
// 中性色
const neutral = {
textPrimary: 'rgba(0, 0, 0, 0.85)',
textSecondary: 'rgba(0, 0, 0, 0.65)',
textDisabled: 'rgba(0, 0, 0, 0.25)',
border: '#d9d9d9',
background: '#f5f5f5',
};
```
### 1.2 字体规范
```typescript
const typography = {
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial',
fontSize: {
small: '12px',
base: '14px',
medium: '16px',
large: '20px',
xlarge: '24px',
},
};
```
---
## 2. 基础组件
### 2.1 按钮 (Button)
**使用场景**
- 主操作:蓝色主按钮
- 次操作:默认按钮
- 危险操作:红色按钮
- 文字链接:链接按钮
**示例**
```tsx
import { Button, Space } from 'antd';
// 主操作
<Button type="primary"></Button>
// 次操作
<Button></Button>
// 危险操作
<Button type="primary" danger></Button>
// 图标按钮
<Button icon={<PlusOutlined />}></Button>
// 加载状态
<Button loading></Button>
```
### 2.2 表单 (Form)
**使用场景**
- 商品创建/编辑
- 订单审核
- 用户设置
**示例**
```tsx
import { Form, Input, Select, Button } from 'antd';
const ProductForm: React.FC = () => {
const [form] = Form.useForm();
const onFinish = (values: any) => {
console.log(values);
};
return (
<Form form={form} onFinish={onFinish} layout="vertical">
<Form.Item
name="title"
label="商品名称"
rules={[{ required: true }]}
>
<Input placeholder="请输入商品名称" />
</Form.Item>
<Form.Item name="platform" label="平台">
<Select>
<Select.Option value="AMAZON">Amazon</Select.Option>
<Select.Option value="EBAY">eBay</Select.Option>
<Select.Option value="SHOPIFY">Shopify</Select.Option>
</Select>
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit"></Button>
</Form.Item>
</Form>
);
};
```
### 2.3 表格 (Table)
**使用场景**
- 商品列表
- 订单列表
- 交易流水
**示例**
```tsx
import { Table, Tag } from 'antd';
const ProductTable: React.FC = () => {
const columns = [
{
title: '商品名称',
dataIndex: 'title',
key: 'title',
},
{
title: '平台',
dataIndex: 'platform',
key: 'platform',
},
{
title: '状态',
dataIndex: 'status',
key: 'status',
render: (status: string) => {
const colorMap: Record<string, string> = {
DRAFTED: 'default',
PENDING_REVIEW: 'processing',
APPROVED: 'success',
REJECTED: 'error',
};
return <Tag color={colorMap[status]}>{status}</Tag>;
},
},
{
title: '售价',
dataIndex: 'sellingPrice',
key: 'sellingPrice',
render: (price: number) => `$${price.toFixed(2)}`,
},
{
title: '操作',
key: 'action',
render: (_, record) => (
<Space>
<Button type="link"></Button>
<Button type="link"></Button>
</Space>
),
},
];
return (
<Table
columns={columns}
dataSource={products}
rowKey="id"
pagination={{ pageSize: 20 }}
/>
);
};
```
### 2.4 卡片 (Card)
**使用场景**
- 仪表盘统计卡片
- 商品信息展示
- 订单概要
**示例**
```tsx
import { Card, Statistic } from 'antd';
import { ArrowUpOutlined } from '@ant-design/icons';
// 统计卡片
<Card>
<Statistic
title="本月营收"
value={112893}
precision={2}
valueStyle={{ color: '#3f8600' }}
prefix="$"
suffix={<ArrowUpOutlined />}
/>
</Card>
// 带标题的卡片
<Card title="商品信息" extra={<a href="#"></a>}>
<p>商品名称: Product Name</p>
<p>平台: Amazon</p>
<p>状态: 已上架</p>
</Card>
```
---
## 3. 业务组件
### 3.1 自定义按钮组件 (CustomButton)
**组件定义**
```tsx
import React from 'react';
import { Button } from 'antd';
export const CustomButton: React.FC<{
type?: 'primary' | 'default' | 'dashed' | 'link' | 'text';
size?: 'small' | 'middle' | 'large';
onClick?: () => void;
children: React.ReactNode;
}> = ({ type = 'default', size = 'middle', onClick, children }) => {
return (
<Button type={type} size={size} onClick={onClick}>
{children}
</Button>
);
};
```
### 3.2 自定义卡片组件 (CustomCard)
**组件定义**
```tsx
import React from 'react';
import { Card } from 'antd';
export const CustomCard: React.FC<{
title?: string;
children: React.ReactNode;
extra?: React.ReactNode;
bordered?: boolean;
hoverable?: boolean;
}> = ({ title, children, extra, bordered = true, hoverable = true }) => {
return (
<Card
title={title}
extra={extra}
bordered={bordered}
hoverable={hoverable}
>
{children}
</Card>
);
};
```
### 3.3 自定义输入框组件 (CustomInput)
**组件定义**
```tsx
import React from 'react';
import { Input } from 'antd';
export const CustomInput: React.FC<{
placeholder?: string;
value?: string;
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
disabled?: boolean;
size?: 'small' | 'middle' | 'large';
maxLength?: number;
showCount?: boolean;
}> = ({ placeholder, value, onChange, disabled = false, size = 'middle', maxLength, showCount }) => {
return (
<Input
placeholder={placeholder}
value={value}
onChange={onChange}
disabled={disabled}
size={size}
maxLength={maxLength}
showCount={showCount}
/>
);
};
```
### 3.4 响应式布局组件 (ResponsiveLayout)
**组件定义**
```tsx
import React from 'react';
import { Layout, Row, Col, Menu, ConfigProvider } from 'antd';
import { useMediaQuery } from 'react-responsive';
const { Header, Sider, Content, Footer } = Layout;
export const ResponsiveLayout: React.FC<{
children: React.ReactNode;
menuItems: { key: string; label: string }[];
selectedKey: string;
onMenuSelect: (key: string) => void;
logo?: React.ReactNode;
headerContent?: React.ReactNode;
footerContent?: React.ReactNode;
}> = ({
children,
menuItems,
selectedKey,
onMenuSelect,
logo,
headerContent,
footerContent,
}) => {
const isMobile = useMediaQuery({ maxWidth: 768 });
const isTablet = useMediaQuery({ minWidth: 769, maxWidth: 1024 });
const isDesktop = useMediaQuery({ minWidth: 1025 });
const [collapsed, setCollapsed] = React.useState(false);
const toggleCollapse = () => {
setCollapsed(!collapsed);
};
return (
<ConfigProvider
theme={{
token: {
colorPrimary: '#1890ff',
},
}}
>
<Layout style={{ minHeight: '100vh' }}>
{!isMobile && (
<Sider
collapsible
collapsed={collapsed}
onCollapse={setCollapsed}
style={{
background: '#fff',
}}
>
<div className="logo" style={{ padding: '16px', textAlign: 'center' }}>
{logo || <div style={{ fontSize: '18px', fontWeight: 'bold' }}>Crawlful Hub</div>}
</div>
<Menu
mode="inline"
selectedKeys={[selectedKey]}
onSelect={({ key }) => onMenuSelect(key)}
items={menuItems}
style={{
height: '100%',
borderRight: 0,
}}
/>
</Sider>
)}
<Layout style={{ flex: 1 }}>
<Header
style={{
background: '#fff',
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
padding: '0 24px',
}}
>
{isMobile && (
<div style={{ display: 'flex', alignItems: 'center' }}>
<button
onClick={toggleCollapse}
style={{
background: 'none',
border: 'none',
fontSize: '18px',
cursor: 'pointer',
}}
>
</button>
<div style={{ marginLeft: '16px', fontSize: '16px', fontWeight: 'bold' }}>
Crawlful Hub
</div>
</div>
)}
{headerContent || (
<div style={{ fontSize: '14px' }}>Welcome to Crawlful Hub</div>
)}
</Header>
<Content
style={{
margin: '24px',
padding: '24px',
background: '#fff',
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
borderRadius: '4px',
minHeight: 280,
}}
>
{children}
</Content>
<Footer
style={{
textAlign: 'center',
background: '#fff',
borderTop: '1px solid #f0f0f0',
}}
>
{footerContent || 'Crawlful Hub ©2026 Created by AI'}
</Footer>
</Layout>
</Layout>
</ConfigProvider>
);
};
```
### 3.5 响应式网格组件 (ResponsiveGrid)
**组件定义**
```tsx
import React from 'react';
import { Row, Col } from 'antd';
export const ResponsiveGrid: React.FC<{
children: React.ReactNode;
gutter?: number;
xs?: number;
sm?: number;
md?: number;
lg?: number;
xl?: number;
}> = ({
children,
gutter = 16,
xs = 24,
sm = 12,
md = 8,
lg = 6,
xl = 4,
}) => {
return (
<Row gutter={gutter}>
<Col xs={xs} sm={sm} md={md} lg={lg} xl={xl}>
{children}
</Col>
</Row>
);
};
```
### 3.6 响应式卡片组件 (ResponsiveCard)
**组件定义**
```tsx
import React from 'react';
import { useMediaQuery } from 'react-responsive';
export const ResponsiveCard: React.FC<{
title?: string;
children: React.ReactNode;
extra?: React.ReactNode;
className?: string;
}> = ({ title, children, extra, className }) => {
const isMobile = useMediaQuery({ maxWidth: 768 });
return (
<div
className={className}
style={{
background: '#fff',
borderRadius: '8px',
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
padding: isMobile ? '16px' : '24px',
marginBottom: '16px',
}}
>
{title && (
<div
style={{
fontSize: '16px',
fontWeight: 'bold',
marginBottom: '16px',
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
}}
>
{title}
{extra}
</div>
)}
{children}
</div>
);
};
```
### 3.7 响应式导航栏组件 (ResponsiveNavbar)
**组件定义**
```tsx
import React from 'react';
import { useMediaQuery } from 'react-responsive';
export const ResponsiveNavbar: React.FC<{
brand: React.ReactNode;
items: { label: string; href: string; active?: boolean }[];
onItemClick: (href: string) => void;
}> = ({ brand, items, onItemClick }) => {
const isMobile = useMediaQuery({ maxWidth: 768 });
const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false);
return (
<nav
style={{
background: '#fff',
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
padding: '0 24px',
}}
>
<div
style={{
maxWidth: '1200px',
margin: '0 auto',
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
height: '64px',
}}
>
<div style={{ display: 'flex', alignItems: 'center' }}>{brand}</div>
{!isMobile ? (
<div style={{ display: 'flex', gap: '24px' }}>
{items.map((item, index) => (
<a
key={index}
href={item.href}
onClick={(e) => {
e.preventDefault();
onItemClick(item.href);
}}
style={{
color: item.active ? '#1890ff' : '#333',
textDecoration: 'none',
fontSize: '14px',
fontWeight: item.active ? 'bold' : 'normal',
}}
>
{item.label}
</a>
))}
</div>
) : (
<div>
<button
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
style={{
background: 'none',
border: 'none',
fontSize: '18px',
cursor: 'pointer',
}}
>
</button>
{mobileMenuOpen && (
<div
style={{
position: 'absolute',
top: '64px',
right: '0',
left: '0',
background: '#fff',
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',
padding: '16px',
zIndex: 1000,
}}
>
{items.map((item, index) => (
<a
key={index}
href={item.href}
onClick={(e) => {
e.preventDefault();
onItemClick(item.href);
setMobileMenuOpen(false);
}}
style={{
display: 'block',
padding: '8px 0',
color: item.active ? '#1890ff' : '#333',
textDecoration: 'none',
fontSize: '14px',
fontWeight: item.active ? 'bold' : 'normal',
}}
>
{item.label}
</a>
))}
</div>
)}
</div>
)}
</div>
</nav>
);
};
```
### 3.8 状态徽章组件 (StatusBadge)
**组件定义**
```tsx
import { Badge } from 'antd';
interface StatusBadgeProps {
status: string;
type: 'product' | 'order' | 'payment';
}
const statusMap: Record<string, Record<string, { color: string; text: string }>> = {
product: {
DRAFTED: { color: 'default', text: '草稿' },
PENDING_REVIEW: { color: 'processing', text: '待审核' },
APPROVED: { color: 'success', text: '已通过' },
REJECTED: { color: 'error', text: '已拒绝' },
LISTED: { color: 'success', text: '已上架' },
DELISTED: { color: 'default', text: '已下架' },
},
order: {
PULLED: { color: 'default', text: '已拉取' },
PENDING_REVIEW: { color: 'processing', text: '待审核' },
CONFIRMED: { color: 'success', text: '已确认' },
SHIPPED: { color: 'blue', text: '已发货' },
DELIVERED: { color: 'success', text: '已送达' },
},
payment: {
PENDING: { color: 'warning', text: '待支付' },
COMPLETED: { color: 'success', text: '已完成' },
FAILED: { color: 'error', text: '失败' },
REFUNDED: { color: 'default', text: '已退款' },
},
};
export const StatusBadge: React.FC<StatusBadgeProps> = ({ status, type }) => {
const config = statusMap[type]?.[status] || { color: 'default', text: status };
return <Badge status={config.color as any} text={config.text} />;
};
```
### 3.9 筛选面板组件 (FilterPanel)
**组件定义**
```tsx
import { Form, Input, Select, DatePicker, Button, Space } from 'antd';
interface FilterPanelProps {
onFilter: (values: any) => void;
onReset: () => void;
}
export const FilterPanel: React.FC<FilterPanelProps> = ({ onFilter, onReset }) => {
const [form] = Form.useForm();
return (
<Form form={form} layout="inline" onFinish={onFilter}>
<Form.Item name="keyword" label="关键词">
<Input placeholder="搜索..." allowClear />
</Form.Item>
<Form.Item name="platform" label="平台">
<Select allowClear style={{ width: 120 }}>
<Select.Option value="AMAZON">Amazon</Select.Option>
<Select.Option value="EBAY">eBay</Select.Option>
<Select.Option value="SHOPIFY">Shopify</Select.Option>
</Select>
</Form.Item>
<Form.Item name="dateRange" label="日期">
<DatePicker.RangePicker />
</Form.Item>
<Form.Item>
<Space>
<Button type="primary" htmlType="submit"></Button>
<Button onClick={() => { form.resetFields(); onReset(); }}></Button>
</Space>
</Form.Item>
</Form>
);
};
```
### 3.10 数据表格组件 (DataTable)
**组件定义**
```tsx
import { Table, TableProps } from 'antd';
interface DataTableProps<T> extends TableProps<T> {
loading?: boolean;
pagination?: {
current: number;
pageSize: number;
total: number;
};
onPageChange?: (page: number, pageSize: number) => void;
}
export function DataTable<T extends object>({
loading,
pagination,
onPageChange,
...tableProps
}: DataTableProps<T>) {
return (
<Table<T>
{...tableProps}
loading={loading}
pagination={pagination ? {
...pagination,
showSizeChanger: true,
showTotal: (total) => `${total}`,
onChange: onPageChange,
} : false}
scroll={{ x: 'max-content' }}
/>
);
}
```
---
## 4. 图表组件
### 4.1 利润趋势图
**使用 Ant Design Charts**
```tsx
import { Line } from '@ant-design/charts';
const ProfitChart: React.FC = () => {
const data = [
{ date: '2026-03-01', profit: 1000 },
{ date: '2026-03-02', profit: 1200 },
{ date: '2026-03-03', profit: 900 },
// ...
];
const config = {
data,
xField: 'date',
yField: 'profit',
smooth: true,
point: {
size: 5,
shape: 'diamond',
},
label: {
style: {
fill: '#aaa',
},
},
};
return <Line {...config} />;
};
```
### 4.2 订单分布图
```tsx
import { Pie } from '@ant-design/charts';
const OrderDistributionChart: React.FC = () => {
const data = [
{ type: 'Amazon', value: 400 },
{ type: 'eBay', value: 300 },
{ type: 'Shopify', value: 300 },
];
const config = {
data,
angleField: 'value',
colorField: 'type',
radius: 0.8,
label: {
type: 'outer',
},
};
return <Pie {...config} />;
};
```
---
## 5. 布局组件
### 5.1 主布局 (MainLayout)
```tsx
import { Layout, Menu } from 'antd';
import { Outlet, useNavigate } from 'react-router-dom';
const { Header, Sider, Content } = Layout;
const MainLayout: React.FC = () => {
const navigate = useNavigate();
const menuItems = [
{ key: '/', label: '仪表盘', icon: <DashboardOutlined /> },
{ key: '/products', label: '商品管理', icon: <ShoppingOutlined /> },
{ key: '/orders', label: '订单管理', icon: <FileTextOutlined /> },
{ key: '/finance', label: '财务管理', icon: <DollarOutlined /> },
{ key: '/inventory', label: '库存管理', icon: <InboxOutlined /> },
{ key: '/marketing', label: '营销广告', icon: <BarChartOutlined /> },
{ key: '/suppliers', label: '供应商', icon: <TeamOutlined /> },
{ key: '/reports', label: '报表分析', icon: <PieChartOutlined /> },
{ key: '/settings', label: '系统设置', icon: <SettingOutlined /> },
];
return (
<Layout style={{ minHeight: '100vh' }}>
<Sider theme="light">
<div style={{ height: 64, padding: 16 }}>Crawlful Hub</div>
<Menu
mode="inline"
items={menuItems}
onClick={({ key }) => navigate(key)}
/>
</Sider>
<Layout>
<Header style={{ background: '#fff', padding: '0 24px' }}>
{/* Header content */}
</Header>
<Content style={{ margin: 24, padding: 24, background: '#fff' }}>
<Outlet />
</Content>
</Layout>
</Layout>
);
};
```
---
## 6. 表单校验规则
```typescript
// utils/validators.ts
export const validators = {
required: (message: string) => ({ required: true, message }),
email: { type: 'email', message: '请输入有效的邮箱地址' },
price: (min: number = 0) => ({
validator: (_: any, value: number) => {
if (value >= min) return Promise.resolve();
return Promise.reject(new Error(`价格不能低于 ${min}`));
},
}),
url: { type: 'url', message: '请输入有效的URL' },
};
```
---
## 7. 相关文档
- [Frontend Design](./Frontend_Design.md)
- [Pages Flow](./Pages_Flow.md)
- [Ant Design 官方文档](https://ant.design/)
---
*本文档基于 Ant Design 5.x最后更新: 2026-03-18*

View File

@@ -0,0 +1,476 @@
# Pages Flow (Crawlful Hub)
> **定位**Crawlful Hub 前端页面流转文档 - 描述各模块页面间的跳转关系和数据流。
> **更新日期**: 2026-03-18
> **最高优先级参考**: [Business_ClosedLoops.md](../00_Business/Business_ClosedLoops.md)
---
## 1. 页面流转总览
```
登录页 (/Auth/LoginPage)
仪表盘 (Dashboard) (/)
├──► 商品管理 (/Product)
│ ├── 商品列表 ──► 商品详情 (/Product/ProductDetail)
│ │ ├── 编辑商品
│ │ └── 审核商品
│ ├── 创建商品 (/Product/ProductPublishForm)
│ └── 物料上传 (/Product/MaterialUpload)
├──► 订单管理 (/Orders)
│ ├── 订单列表 (/Orders/OrderList) ──► 订单详情 (/Orders/OrderDetail)
│ │ └── 状态流转
│ ├── 异常订单处理 (/Orders/ExceptionOrder)
│ └── 订单聚合分析 (/Orders/OrderAggregation)
├──► 商户管理 (/Merchant)
│ ├── 商户管理 (/Merchant/MerchantManage)
│ ├── 商户订单管理 (/Merchant/MerchantOrderManage)
│ ├── 商户结算管理 (/Merchant/MerchantSettlementManage)
│ └── 商户店铺管理 (/Merchant/MerchantShopManage)
├──► 售后服务 (/AfterSales)
│ ├── 退货申请 (/AfterSales/ReturnApply)
│ ├── 退款流程 (/AfterSales/RefundProcess)
│ └── 客户服务 (/AfterSales/CustomerService)
├──► 物流管理 (/Logistics)
│ ├── 物流选择 (/Logistics/LogisticsSelect)
│ ├── 运费计算 (/Logistics/FreightCalc)
│ └── 物流追踪 (/Logistics/LogisticsTrack)
├──► 合规管理 (/Compliance)
│ ├── 合规检查 (/Compliance/ComplianceCheck)
│ ├── 证书管理 (/Compliance/CertificateManage)
│ └── 证书过期提醒 (/Compliance/CertificateExpiryReminder)
├──► 黑名单管理 (/Blacklist)
│ ├── 黑名单管理 (/Blacklist/BlacklistManage)
│ └── 风险监控 (/Blacklist/RiskMonitor)
├──► B2B贸易 (/B2B)
│ ├── 企业报价 (/B2B/EnterpriseQuote)
│ ├── 批量订单 (/B2B/BatchOrder)
│ └── 合同管理 (/B2B/ContractManage)
├──► 广告管理 (/Ad)
│ ├── 广告投放 (/Ad/AdDelivery)
│ ├── ROI分析 (/Ad/ROIAnalysis)
│ └── 广告计划 (/Ad/AdPlanPage)
├──► 财务管理 (/Finance)
│ ├── 交易记录 (/Finance/Transactions)
│ └── 对账记录 (/Finance/Reconciliation)
├──► 库存管理 (/Inventory)
│ ├── 仓库管理 (/Inventory/Warehouses)
│ └── 库存预测 (/Inventory/InventoryForecast)
├──► 营销管理 (/Marketing)
│ ├── 广告管理 (/Marketing/Ads)
│ └── 竞争对手分析 (/Marketing/Competitors)
├──► 供应商管理 (/Suppliers)
│ └── 供应商详情 (/Suppliers/SupplierDetail)
├──► 报表中心 (/Reports)
│ ├── 利润报表 (/Reports/ProfitReport)
│ └── 绩效报表 (/Reports/PerformanceReport)
├──► 设置 (/Settings)
│ ├── 个人设置 (/Settings/ProfileSettings)
│ ├── 租户设置 (/Settings/TenantSettings)
│ └── 用户管理 (/Settings/UserManagement)
├──► A/B测试 (/ABTest)
│ ├── A/B测试配置 (/ABTest/ABTestConfig)
│ └── 测试结果分析 (/ABTest/ABTestResults)
├──► 退货管理 (/Return)
│ ├── 退货监控 (/Return/ReturnMonitor)
│ └── SKU管理 (/Return/SKUManage)
└──► 用户资产管理 (/UserAsset)
├── 会员等级管理 (/UserAsset/MemberLevel)
├── 积分管理 (/UserAsset/PointsManage)
└── 用户资产 (/UserAsset/UserAssets)
```
---
## 2. 商品管理模块
### 2.1 页面流转图
```
商品列表页 (/products)
├──► 创建商品 (/products/create) ──► 返回列表
├──► 商品详情 (/products/:id)
│ ├── 编辑 ──► 编辑页 (/products/:id/edit)
│ └── 审核 ──► 审核弹窗
└──► 商品审核 (/products/review)
```
### 2.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 商品列表 | `/products` | 展示所有商品,支持筛选、排序、分页 | product:read |
| 商品详情 | `/products/:id` | 展示商品详细信息,支持编辑、删除 | product:read |
| 创建商品 | `/products/create` | 表单创建新商品 | product:create |
| 编辑商品 | `/products/:id/edit` | 编辑商品信息 | product:update |
| 商品审核 | `/products/review` | 审核待上架商品 | product:review |
### 2.3 数据流
```
商品列表页
├── 加载数据: GET /api/v1/products
├── 筛选操作
│ ├── 平台筛选
│ ├── 状态筛选
│ └── 关键词搜索
├── 分页操作
│ └── GET /api/v1/products?page={n}
└── 批量操作
├── 批量审核
└── 批量删除
```
---
## 3. 订单管理模块
### 3.1 页面流转图
```
订单列表页 (/orders)
├──► 订单详情 (/orders/:id)
│ ├── 状态流转
│ ├── 编辑信息
│ └── 查看账单
└──► 订单审核 (/orders/audit)
```
### 3.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 订单列表 | `/orders` | 展示所有订单,支持筛选 | order:read |
| 订单详情 | `/orders/:id` | 展示订单详细信息 | order:read |
| 订单审核 | `/orders/audit` | 批量审核订单 | order:audit |
### 3.3 状态流转
```
订单详情页
├── 当前状态: PULLED
│ └── 操作: 审核 ──► PENDING_REVIEW
├── 当前状态: PENDING_REVIEW
│ └── 操作: 确认 ──► CONFIRMED
├── 当前状态: CONFIRMED
│ └── 操作: 分配 ──► ALLOCATED
├── 当前状态: ALLOCATED
│ └── 操作: 准备发货 ──► READY_TO_SHIP
├── 当前状态: READY_TO_SHIP
│ └── 操作: 发货 ──► SHIPPED
├── 当前状态: SHIPPED
│ └── 操作: 送达 ──► DELIVERED
└── 当前状态: DELIVERED
└── 操作: 关闭 ──► CLOSED
```
---
## 4. 财务管理模块
### 4.1 页面流转图
```
财务概览 (/finance)
├──► 交易流水 (/finance/transactions)
│ └── 查看详情
└──► 利润对账 (/finance/reconciliation)
└── 查看对账结果
```
### 4.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 财务概览 | `/finance` | 展示财务关键指标 | finance:read |
| 交易流水 | `/finance/transactions` | 查看所有交易记录 | finance:read |
| 利润对账 | `/finance/reconciliation` | 执行利润对账 | finance:reconcile |
### 4.3 数据流
```
财务概览页
├── 加载统计数据: GET /api/v1/finance/stats
├── 图表数据
│ ├── 营收趋势图
│ ├── 利润分布图
│ └── 平台占比图
└── 快捷操作
├── 查看交易流水
└── 执行利润对账
```
---
## 5. 库存管理模块
### 5.1 页面流转图
```
库存概览 (/inventory)
├──► 仓库管理 (/inventory/warehouses)
│ ├── 创建仓库
│ └── 编辑仓库
└──► 库存预测 (/inventory/forecast)
└── 查看预测结果
```
### 5.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 库存概览 | `/inventory` | 展示库存总览 | inventory:read |
| 仓库管理 | `/inventory/warehouses` | 管理仓库信息 | inventory:manage |
| 库存预测 | `/inventory/forecast` | 查看库存预测 | inventory:read |
---
## 6. 营销广告模块
### 6.1 页面流转图
```
营销概览 (/marketing)
├──► 广告管理 (/marketing/ads)
│ ├── 创建广告
│ └── 广告报表
└──► 竞品监控 (/marketing/competitors)
└── 竞品详情
```
### 6.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 营销概览 | `/marketing` | 展示营销关键指标 | marketing:read |
| 广告管理 | `/marketing/ads` | 管理广告投放 | marketing:manage |
| 竞品监控 | `/marketing/competitors` | 监控竞品动态 | marketing:read |
---
## 7. 供应商管理模块
### 7.1 页面流转图
```
供应商列表 (/suppliers)
├──► 创建供应商
└──► 供应商详情 (/suppliers/:id)
├── 编辑信息
└── 查看交易记录
```
### 7.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 供应商列表 | `/suppliers` | 展示所有供应商 | supplier:read |
| 供应商详情 | `/suppliers/:id` | 展示供应商详细信息 | supplier:read |
---
## 8. 报表分析模块
### 8.1 页面流转图
```
报表中心 (/reports)
├──► 利润报表 (/reports/profit)
└──► 绩效报表 (/reports/performance)
```
### 8.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 报表中心 | `/reports` | 展示所有报表入口 | report:read |
| 利润报表 | `/reports/profit` | 查看利润分析报表 | report:read |
| 绩效报表 | `/reports/performance` | 查看绩效分析报表 | report:read |
---
## 9. 系统设置模块
### 9.1 页面流转图
```
设置首页 (/settings)
├──► 个人设置 (/settings/profile)
├──► 租户设置 (/settings/tenant)
└──► 用户管理 (/settings/users)
├── 创建用户
└── 编辑用户
```
### 9.2 页面说明
| 页面 | 路径 | 功能 | 权限 |
|------|------|------|------|
| 设置首页 | `/settings` | 设置导航 | - |
| 个人设置 | `/settings/profile` | 修改个人信息 | - |
| 租户设置 | `/settings/tenant` | 管理租户配置 | tenant:manage |
| 用户管理 | `/settings/users` | 管理系统用户 | user:manage |
---
## 10. 全局交互
### 10.1 导航菜单
```
侧边栏菜单
├── 仪表盘
├── 商品管理
├── 订单管理
├── 商户管理
├── 售后服务
├── 物流管理
├── 合规管理
├── 黑名单管理
├── B2B贸易
├── 广告管理
├── A/B测试
├── 退货管理
└── 用户资产管理
```
### 10.2 面包屑导航
```
首页 / 商品管理 / 商品详情
首页 / 订单管理 / 订单列表
首页 / 商户管理 / 商户管理
首页 / 售后服务 / 退货申请
首页 / 物流管理 / 物流追踪
首页 / 合规管理 / 合规检查
首页 / 黑名单管理 / 风险监控
首页 / B2B贸易 / 企业报价
首页 / 广告管理 / ROI分析
首页 / A/B测试 / 测试结果分析
首页 / 退货管理 / 退货监控
首页 / 用户资产管理 / 会员等级管理
```
### 10.3 快捷操作
| 操作 | 触发方式 | 说明 |
|------|----------|------|
| 全局搜索 | Ctrl + K | 快速搜索商品、订单、商户等 |
| 通知中心 | 顶部图标 | 查看系统通知、待办事项 |
| 个人菜单 | 头像下拉 | 个人设置、退出登录、切换租户 |
| 主题切换 | 顶部图标 | 切换深色/浅色主题 |
| 语言切换 | 顶部图标 | 切换系统语言 |
| 帮助中心 | 顶部图标 | 查看系统文档、常见问题 |
### 10.4 交互优化
#### 10.4.1 表单交互
- **实时验证**:表单输入时实时验证,提供即时反馈
- **自动保存**:重要表单自动保存草稿,防止数据丢失
- **智能填充**:根据历史数据和上下文自动填充表单字段
- **批量操作**:支持表单数据的批量编辑和导入导出
#### 10.4.2 列表交互
- **虚拟滚动**:长列表使用虚拟滚动,提升性能
- **列排序**:支持点击列头排序
- **列筛选**:支持按列筛选数据
- **列调整**:支持调整列宽和显示/隐藏列
- **批量选择**:支持复选框批量选择和操作
#### 10.4.3 页面过渡
- **加载状态**:使用骨架屏代替简单的加载动画
- **页面切换**:平滑的页面切换动画
- **错误处理**:友好的错误提示和恢复方案
- **成功反馈**:操作成功后的明确反馈
#### 10.4.4 响应式交互
- **移动端适配**:针对移动设备优化的交互体验
- **触摸友好**:增大触摸区域,支持手势操作
- **自适应布局**:根据屏幕尺寸自动调整布局
### 10.5 用户体验考虑
#### 10.5.1 可访问性
- **键盘导航**:支持全键盘操作
- **屏幕阅读器**:兼容屏幕阅读器
- **颜色对比度**符合WCAG标准的颜色对比度
#### 10.5.2 性能优化
- **懒加载**:非关键资源懒加载
- **缓存策略**:合理的缓存策略减少请求
- **预加载**:预测用户行为,预加载相关资源
#### 10.5.3 反馈机制
- **操作反馈**:所有用户操作都有明确的反馈
- **进度指示**:长时间操作显示进度条
- **错误提示**:清晰的错误提示和解决方案
#### 10.5.4 引导机制
- **新用户引导**:首次使用时的功能引导
- **功能提示**:重要功能的使用提示
- **上下文帮助**:在适当位置提供帮助信息
---
## 11. 相关文档
- [Frontend Design](./Frontend_Design.md)
- [UI Components](./UI_Components.md)
- [Business ClosedLoops](../00_Business/Business_ClosedLoops.md)
---
*本文档基于业务闭环设计,最后更新: 2026-03-18*