# 订单筛选逻辑对比

## 修改前后对比

### 移动端筛选逻辑

#### 修改前（复杂的前端筛选）

```typescript
// 原有的复杂筛选逻辑
const getOrderStatusParams = (index: string | number) => {
  let params: ShopOrderParam = {};
  params.userId = Taro.getStorageSync('UserId');

  const indexStr = String(index);
  switch (indexStr) {
    case '1': // 待付款
      params.payStatus = 0; // 0表示未付款
      break;
    case '2': // 待发货
      params.payStatus = 1; // 1表示已付款
      params.deliveryStatus = 10; // 10表示未发货
      break;
    case '3': // 待收货
      params.deliveryStatus = 20; // 20表示已发货
      break;
    case '4': // 已完成
      params.orderStatus = 1; // 1表示已完成
      break;
    case '5': // 已取消
      // 对于已取消的订单，获取所有数据然后在前端筛选
      break;
    case '0': // 全部
    default:
      // 全部订单，不添加额外的筛选条件
      break;
  }
  return params;
};

// 前端二次筛选
const filterOrdersByTab = (orders: OrderWithGoods[], tabIndex: number) => {
  const indexStr = String(tabIndex);
  return orders.filter(order => {
    switch (indexStr) {
      case '1': // 待付款
        return !order.payStatus && !isCancelledOrder(order);
      case '2': // 待发货
        return order.payStatus && order.deliveryStatus === 10 && !isCancelledOrder(order);
      case '3': // 待收货
        return order.deliveryStatus === 20 && !isCancelledOrder(order);
      case '4': // 已完成
        return order.orderStatus === 1;
      case '5': // 已取消
        return isCancelledOrder(order);
      case '0': // 全部
      default:
        return true;
    }
  });
};

// 复杂的取消状态判断
const isCancelledOrder = (order: ShopOrder) => {
  const cancelledStatuses = [2, 3, 4, 6, 7];
  return cancelledStatuses.includes(order.orderStatus || 0);
};
```

#### 修改后（统一的后端筛选）

```typescript
// 简化的统一筛选逻辑
const tabs = [
  {
    index: 0,
    statusFilter: undefined // 全部
  },
  {
    index: 1,
    statusFilter: 0 // 待付款
  },
  {
    index: 2,
    statusFilter: 1 // 待发货
  },
  {
    index: 3,
    statusFilter: 3 // 待收货
  },
  {
    index: 4,
    statusFilter: 5 // 已完成
  },
  {
    index: 5,
    statusFilter: 6 // 已取消/已退款
  }
];

const getOrderStatusParams = (index: string | number) => {
  let params: ShopOrderParam = {};
  params.userId = Taro.getStorageSync('UserId');

  const currentTab = tabs.find(tab => tab.index === Number(index));
  if (currentTab && currentTab.statusFilter !== undefined) {
    params.statusFilter = currentTab.statusFilter;
  }

  return params;
};

// 不再需要前端二次筛选，直接使用后端返回的数据
```

### 后台管理系统筛选逻辑

#### 修改前

```typescript
// 注释不够清晰
// 根据文档，statusFilter的值对应：
// -1全部，0待付款，1待发货，2待核销，3待收货，4待评价，5已完成，6已退款，7已删除
switch (activeKey.value) {
  case 'all':
    filterParams.statusFilter = -1; // 使用-1表示全部
    break;
  // ... 其他case
}
```

#### 修改后

```typescript
// 更清晰的注释和实现
// 根据后端 statusFilter 的值对应：
// undefined全部，0待付款，1待发货，2待核销，3待收货，4待评价，5已完成，6已退款，7已删除
switch (activeKey.value) {
  case 'all':
    // 全部订单：不传statusFilter参数
    // filterParams.statusFilter = undefined; // 不设置该字段
    break;
  // ... 其他case保持一致
}
```

## 主要改进点

### 1. 性能优化

| 方面 | 修改前 | 修改后 |
|------|--------|--------|
| 数据筛选位置 | 前端 + 后端 | 纯后端 |
| 网络传输 | 传输所有数据再筛选 | 只传输筛选后的数据 |
| 前端处理 | 复杂的二次筛选逻辑 | 直接使用后端数据 |
| 查询效率 | 低（多次查询+前端筛选） | 高（单次精确查询） |

### 2. 代码复杂度

| 方面 | 修改前 | 修改后 |
|------|--------|--------|
| 筛选逻辑行数 | ~80行 | ~20行 |
| 筛选条件数量 | 多个字段组合 | 单个statusFilter |
| 维护难度 | 高（前后端都要维护） | 低（只需维护后端） |
| 出错概率 | 高（逻辑复杂） | 低（逻辑简单） |

### 3. 一致性保证

| 方面 | 修改前 | 修改后 |
|------|--------|--------|
| 前端移动端 | 自定义筛选逻辑 | 使用statusFilter |
| 后台管理系统 | 使用statusFilter | 使用statusFilter |
| 数据一致性 | 可能不一致 | 完全一致 |
| 维护成本 | 高（两套逻辑） | 低（统一逻辑） |

## 具体的筛选条件对比

### 待付款订单

**修改前（移动端）：**
```typescript
// 后端查询
params.payStatus = 0;

// 前端再筛选
return !order.payStatus && !isCancelledOrder(order);
```

**修改后：**
```typescript
// 只需后端查询
params.statusFilter = 0; // 对应 pay_status = false
```

### 待发货订单

**修改前（移动端）：**
```typescript
// 后端查询
params.payStatus = 1;
params.deliveryStatus = 10;

// 前端再筛选
return order.payStatus && order.deliveryStatus === 10 && !isCancelledOrder(order);
```

**修改后：**
```typescript
// 只需后端查询
params.statusFilter = 1; // 对应 pay_status = true AND delivery_status = 10
```

### 已取消订单

**修改前（移动端）：**
```typescript
// 后端查询所有数据
// 无特定筛选条件

// 前端复杂筛选
const isCancelledOrder = (order: ShopOrder) => {
  const cancelledStatuses = [2, 3, 4, 6, 7];
  return cancelledStatuses.includes(order.orderStatus || 0);
};
return isCancelledOrder(order);
```

**修改后：**
```typescript
// 只需后端查询
params.statusFilter = 6; // 对应 order_status = 6 (已退款)
```

## 迁移建议

1. **立即可用**：新的移动端组件已经创建，可以直接使用
2. **逐步替换**：可以先在新功能中使用，再逐步替换现有页面
3. **测试验证**：建议先在测试环境验证各个筛选条件的正确性
4. **性能监控**：关注查询性能的改善情况

## 注意事项

1. **移动端显示逻辑**：虽然筛选使用statusFilter，但显示的状态文本仍可以根据业务需求自定义
2. **特殊状态处理**：某些复杂的状态组合可能需要在显示层面进行适配
3. **向后兼容**：确保现有功能不受影响
