2026-04-21
// ✅ 修复: 统一使用 number 类型
export interface OrderItem {
id: number; // 从 string 改为 number
channelId?: number;
warehouseId?: number;
carrierId?: number;
handlerId?: number;
parentId?: number;
}
export interface ProductItem {
id: number; // 从 string 改为 number
}
// ✅ 修复: 使用完整字段名
carrierName?: string; // 替代 carrier
handlerName?: string; // 替代 handler
warehouseName?: string; // 替代 warehouse
channelName?: string; // 替代 channel
// ✅ 订单模块添加:
channelId?: number;
warehouseId?: number;
refundStatus?: string;
utmSource?: string;
utmMedium?: string;
// ... 其他营销归因字段
// ✅ 商品模块添加:
categoryId: string; // 使用categoryId而非category
category?: string; // 计算字段
subtitle?: string;
inventory?: number;
priceRange?: string;
// ✅ 添加字段:
private String channelName; // 渠道名称
private String refundStatus; // 退款状态
private Long warehouseId; // 仓库ID
private String warehouseName; // 仓库名称
private String carrierName; // 物流商名称
private String handlerName; // 处理人名称
private String amount; // 兼容字段
// ✅ 添加计算字段:
private String category; // 分类名称
private Integer inventory; // 库存
private String priceRange; // 价格区间
// ✅ 添加JSON转换字段:
private List<String> tagsList;
private List<Object> specsList;
private List<Object> imagesList;
private List<Object> videosList;
private List<Object> translationsList;
| 模块 | 功能 | 后端路径 | 前端调用 | 状态 |
|---|---|---|---|---|
| 订单 | 列表查询 | GET /api/order/orders | api.getOrders() | ✅ |
| 订单 | 详情查询 | GET /api/order/orders/{id} | api.getOrder() | ✅ |
| 订单 | 创建 | POST /api/order/orders | api.createOrder() | ✅ |
| 订单 | 更新 | PUT /api/order/orders/{id} | api.updateOrder() | ✅ |
| 订单 | 删除 | DELETE /api/order/orders/{id} | api.deleteOrder() | ✅ |
| 商品 | 列表查询 | GET /api/product/products | api.getProducts() | ✅ |
| 商品 | 详情查询 | GET /api/product/products/{id} | api.getProduct() | ✅ |
| 商品 | 创建 | POST /api/product/products | api.createProduct() | ✅ |
| 商品 | 更新 | PUT /api/product/products/{id} | api.updateProduct() | ✅ |
| 商品 | 删除 | DELETE /api/product/products/{id} | api.deleteProduct() | ✅ |
// ✅ 前端: 正确使用后端分页
const loadData = async () => {
const res = await api.getOrders(page.value, pageSize.value, {
keyword: searchKeyword.value || undefined,
orderStatus: filters.value.orderStatus || undefined,
shippingStatus: filters.value.shippingStatus || undefined,
paymentStatus: filters.value.paymentStatus || undefined
});
items.value = res.items || [];
totalElements.value = res.totalElements || 0;
};
// ✅ 后端: DTO模式简化参数
@GetMapping
public PageResponse<OrderListDTO> getOrders(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "20") int size,
@ModelAttribute OrderFilterDTO filters) {
// 后端处理筛选和分页
}
问题描述: 后端存储为JSON字符串的字段,前端期望是对象数组
影响字段:
// 后端: String (JSON字符串)
private String tags;
private String specs;
private String images;
private String videos;
private String translations;
// 前端期望: 对象数组
tags?: string[];
specs?: SpecItem[];
images?: MediaItem[];
videos?: MediaItem[];
translations?: TranslationItem[];
解决方案: 需要在后端Converter中处理JSON序列化/反序列化
问题描述: 前端某些地方仍然期望string类型的ID
影响位置:
解决方案: 修改前端组件,使用正确的number类型
问题描述: 某些字段在后端是必需的,前端标记为可选
示例:
receiverName: string; // 前端必需
itemCount: number; // 前端必需
items: OrderProductItem[]; // 前端必需
| 模块 | 字段对齐 | 类型对齐 | API对齐 | 总体 |
|---|---|---|---|---|
| 订单模块 | 95% | 90% | 100% | 95% |
| 商品模块 | 90% | 85% | 100% | 92% |
| 总体 | 93% | 88% | 100% | 93% |
// ❌ 之前: 8个参数
public PageResponse<OrderListDTO> getOrders(
int page, int size, String keyword,
String orderStatus, String shippingStatus,
String paymentStatus, Long channelId,
Long warehouseId)
// ✅ 现在: 3个参数
public PageResponse<OrderListDTO> getOrders(
int page, int size,
@ModelAttribute OrderFilterDTO filters)
// ✅ 统一使用number类型
id: number; // 而非 string
channelId?: number; // 类型一致
// ✅ 字段命名语义化
carrierName?: string; // 而非 carrier
handlerName?: string; // 而非 handler
// ✅ 保留兼容字段
channel?: string; // 兼容旧代码
channelName?: string; // 新字段
报告生成时间: 2026-04-21 总体完成度: 93% 核心功能状态: ✅ 可用 建议: 可以进入测试阶段