HaniBlindBox/.kiro/specs/order-management-frontend/design.md
2026-01-17 20:21:30 +08:00

363 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Design Document: 订单管理模块前端迁移
## Overview
本设计文档描述订单管理模块从老项目PHP ThinkPHP + Layui迁移到新项目ASP.NET Core + Vue 3 + Element Plus的技术方案。订单管理模块是后台管理系统的核心业务模块包含购买订单、发货订单、回收订单、卡单订单等多种订单类型的管理功能。
### 技术栈
- 前端框架Vue 3 + TypeScript
- UI组件库Element Plus
- 状态管理Pinia
- HTTP客户端Axios
- 后端框架ASP.NET Core (.NET 10)
- 数据库SQL Server
## Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ 前端应用层 │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 购买订单页面 │ │ 发货订单页面 │ │ 回收订单页面 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 卡单订单页面 │ │ 综合订单页面 │ │
│ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 组件层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ SearchForm │ │ OrderTable │ │ DetailDialog│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ShippingDialog│ │ PrizeList │ │
│ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ API层 │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ api/business/order.ts ││
│ └─────────────────────────────────────────────────────────────┘│
├─────────────────────────────────────────────────────────────────┤
│ 后端API层 │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ OrderController ││
│ └─────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘
```
## Components and Interfaces
### 1. 页面组件
#### 1.1 购买订单页面 (BuyOrderPage)
- 路径:`views/business/order/buy.vue`
- 功能:展示购买订单列表,支持搜索、分页、查看详情、导出
#### 1.2 发货订单页面 (ShippingOrderPage)
- 路径:`views/business/order/shipping.vue`
- 功能:展示发货订单列表,支持搜索、分页、查看详情、发货操作、取消发货、导出
#### 1.3 回收订单页面 (RecoveryOrderPage)
- 路径:`views/business/order/recovery.vue`
- 功能:展示回收订单列表,支持搜索、分页、查看详情、导出
#### 1.4 卡单订单页面 (StuckOrderPage)
- 路径:`views/business/order/stuck.vue`
- 功能:展示卡单订单列表,支持搜索、分页
#### 1.5 综合订单页面 (OrderListPage)
- 路径:`views/business/order/list.vue`
- 功能:展示综合订单列表,支持多条件搜索、分页、查看详情、导出
### 2. 公共组件
#### 2.1 订单搜索表单 (OrderSearchForm)
- 路径:`views/business/order/components/OrderSearchForm.vue`
- Props
- `type`: 订单类型buy/shipping/recovery/stuck/list
- `modelValue`: 搜索条件对象
- Events
- `search`: 触发搜索
- `reset`: 重置搜索条件
#### 2.2 订单表格 (OrderTable)
- 路径:`views/business/order/components/OrderTable.vue`
- Props
- `type`: 订单类型
- `data`: 订单数据列表
- `loading`: 加载状态
- `total`: 总记录数
- `page`: 当前页码
- `pageSize`: 每页大小
- Events
- `page-change`: 页码变化
- `view-detail`: 查看详情
- `ship`: 发货操作
- `cancel-ship`: 取消发货
#### 2.3 订单详情弹窗 (OrderDetailDialog)
- 路径:`views/business/order/components/OrderDetailDialog.vue`
- Props
- `visible`: 是否显示
- `orderId`: 订单ID
- Events
- `close`: 关闭弹窗
#### 2.4 发货订单详情弹窗 (ShippingDetailDialog)
- 路径:`views/business/order/components/ShippingDetailDialog.vue`
- Props
- `visible`: 是否显示
- `sendId`: 发货记录ID
- Events
- `close`: 关闭弹窗
- `shipped`: 发货成功
#### 2.5 发货操作弹窗 (ShipDialog)
- 路径:`views/business/order/components/ShipDialog.vue`
- Props
- `visible`: 是否显示
- `sendId`: 发货记录ID
- Events
- `close`: 关闭弹窗
- `success`: 发货成功
#### 2.6 回收订单详情弹窗 (RecoveryDetailDialog)
- 路径:`views/business/order/components/RecoveryDetailDialog.vue`
- Props
- `visible`: 是否显示
- `recoveryId`: 回收记录ID
- Events
- `close`: 关闭弹窗
### 3. API接口
#### 3.1 订单API模块
- 路径:`api/business/order.ts`
```typescript
// 接口类型定义
interface OrderListRequest {
page: number
pageSize: number
userId?: number
mobile?: string
orderNum?: string
startDate?: string
endDate?: string
status?: number
orderType?: number
}
interface OrderListResponse {
id: number
orderNum: string
userId: number
userNickname?: string
userMobile?: string
userUid?: string
goodsId: number
goodsTitle?: string
goodsImgUrl?: string
orderType: number
orderTotal: number
discount: number
discountTotal: number
weChatPayment: number
balancePayment: number
integralPayment: number
scorePayment: number
couponPayment?: number
num: number
prizeNum: number
status: number
statusName: string
payType: number
payTypeName: string
createdAt: string
payTime?: string
}
interface ShippingOrderListRequest {
page: number
pageSize: number
userId?: number
mobile?: string
sendNum?: string
startDate?: string
endDate?: string
status?: number
}
interface ShippingOrderResponse {
id: number
userId: number
userNickname?: string
userMobile?: string
userUid?: string
sendNum: string
freight: number
status: number
statusName: string
count: number
name?: string
receiverMobile?: string
address?: string
message?: string
courierNumber?: string
courierName?: string
courierCode?: string
deliveryStatus: number
deliveryStatusName: string
createdAt: string
payTime?: string
sendTime?: string
receiveTime?: string
prizes: ShippingPrizeDto[]
}
interface ShipOrderRequest {
courierName: string
courierNumber: string
courierCode?: string
}
// API函数
export function getOrderList(params: OrderListRequest): Promise<PagedResult<OrderListResponse>>
export function getOrderDetail(id: number): Promise<OrderDetailResponse>
export function getStuckOrders(params: OrderListRequest): Promise<PagedResult<OrderListResponse>>
export function getRecoveryOrders(params: OrderListRequest): Promise<PagedResult<RecoveryOrderResponse>>
export function getShippingOrders(params: ShippingOrderListRequest): Promise<PagedResult<ShippingOrderResponse>>
export function getShippingOrderDetail(id: number): Promise<ShippingOrderResponse>
export function shipOrder(id: number, data: ShipOrderRequest): Promise<void>
export function cancelShippingOrder(id: number): Promise<void>
export function exportOrders(params: OrderExportRequest): Promise<Blob>
```
## Data Models
### 1. 订单状态枚举
```typescript
enum OrderStatus {
Unpaid = 0, // 待支付
Paid = 1, // 已支付
Cancelled = 2 // 已取消
}
```
### 2. 发货状态枚举
```typescript
enum ShippingStatus {
Unpaid = 0, // 待支付
Pending = 1, // 待发货
Shipped = 2, // 已发货
Received = 3, // 已签收
Cancelled = 4 // 已取消
}
```
### 3. 订单项状态枚举
```typescript
enum OrderItemStatus {
Pending = 0, // 待处理
Recovered = 1, // 已回收
Shipped = 2 // 已发货
}
```
### 4. 支付方式枚举
```typescript
enum PayType {
Unpaid = 0, // 未支付
WeChat = 1, // 微信支付
Alipay = 2 // 支付宝
}
```
## Correctness Properties
*A property is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.*
### Property 1: 搜索参数正确传递
*For any* 搜索条件对象当用户提交搜索时API调用应该正确传递所有非空的搜索参数到后端。
**Validates: Requirements 1.2, 3.2, 4.2, 6.2, 7.2**
### Property 2: 分页参数正确传递
*For any* 页码和页大小组合当用户切换分页时API调用应该正确传递page和pageSize参数且page >= 1pageSize > 0。
**Validates: Requirements 1.3**
### Property 3: 发货信息验证
*For any* 发货表单输入,当物流公司名称或快递单号为空字符串或纯空白字符串时,表单验证应该失败并阻止提交。
**Validates: Requirements 5.4**
### Property 4: API响应格式一致性
*For any* API调用响应数据应该符合定义的TypeScript接口类型包含所有必需字段。
**Validates: Requirements 8.2, 8.3, 8.4, 8.5, 8.6**
### Property 5: 错误响应格式一致性
*For any* API调用失败错误响应应该包含统一格式的错误信息code和message字段
**Validates: Requirements 8.7**
## Error Handling
### 1. API错误处理
- 网络错误:显示"网络连接失败,请检查网络"
- 401未授权跳转到登录页面
- 403无权限显示"您没有权限执行此操作"
- 404未找到显示"请求的资源不存在"
- 500服务器错误显示"服务器错误,请稍后重试"
- 业务错误:显示后端返回的错误信息
### 2. 表单验证错误
- 必填字段为空:显示"xxx不能为空"
- 格式错误:显示具体的格式要求
### 3. 操作确认
- 取消发货:弹出确认对话框"确定要取消发货吗?取消后奖品将返回用户盒柜"
- 导出数据:大数据量时显示加载提示
## Testing Strategy
### 1. 单元测试
- 测试搜索表单组件的参数收集逻辑
- 测试表格组件的数据展示逻辑
- 测试发货表单的验证逻辑
- 测试API模块的请求构造逻辑
### 2. 属性测试
使用 fast-check 库进行属性测试每个属性测试运行至少100次迭代。
- **Property 1**: 搜索参数正确传递
- 生成随机搜索条件对象
- 验证API调用参数包含所有非空字段
- **Property 2**: 分页参数正确传递
- 生成随机页码和页大小
- 验证API调用参数正确
- **Property 3**: 发货信息验证
- 生成随机字符串(包括空字符串、纯空白字符串、正常字符串)
- 验证验证函数的返回值正确
- **Property 4**: API响应格式一致性
- 模拟API响应数据
- 验证响应数据符合接口定义
- **Property 5**: 错误响应格式一致性
- 模拟各种错误响应
- 验证错误处理逻辑正确
### 3. 集成测试
- 测试完整的订单查询流程
- 测试完整的发货操作流程
- 测试导出功能