# 全部订单 — 前端技术方案

> **依据：** 《全部订单功能需求.md》v1.1、《全部订单技术方案.md》v1.0.3  
> **前端规范：** `doc/前端设计/前端设计.md`  
> **范围：** 仅 **ruoyi-ui 商家端** 当前店铺订单列表、检索、详情、整单发货、物流更新、送达登记、删除已关闭单；**不** 创建订单、**不** 手工关闭。  
> **实现状态：** 页面与 API 封装已落地，待菜单配置及 `/agri/seller/order` 联调。

---

## 1. 技术栈与写法约定

| 项 | 说明 |
|----|------|
| 框架 | Vue 2 + Element UI |
| 请求 | `@/utils/request` + `sellerShopHeaders()` 携带 **`X-Shop-Id`** |
| 参考页面 | `agri/seller/goods/index.vue`（页签+检索+列表）、`agri/member/orders.vue`（订单列展示） |
| 布局 | 检索 `el-card` + `<br/>` + 列表 `el-card` + `border` 表格 |
| 详情 | 右侧 `el-drawer`（与商品详情一致） |
| 店铺切换 | **仅 Navbar**；业务页不展示店铺选择器 |

---

## 2. 文件清单

| 类型 | 路径 | 说明 |
|------|------|------|
| 列表页 | `ruoyi-ui/src/views/agri/seller/order/index.vue` | 页签、检索、列表、履约弹窗 |
| 详情抽屉 | `ruoyi-ui/src/views/agri/seller/order/detail.vue` | 分区展示、物流时间轴、操作按钮 |
| 订单 API | `ruoyi-ui/src/api/agri/seller/order.js` | list、detail、ship、logistics、delivered、remove |
| 店铺上下文 | `api/agri/seller/context.js` + `utils/sellerShop.js` | X-Shop-Id |

**组件 name（keep-alive）：** `AgriSellerOrder`

---

## 3. 菜单与路由

| 菜单名称 | 组件路径 | 路由 path（建议） | 权限标识 |
|----------|----------|-------------------|----------|
| 全部订单 | `agri/seller/order/index` | `seller/order` | `agri:seller:order:list` |

**上级菜单：** 店铺经营管理端 → **订单管理**

| 按钮权限 | 标识 | 说明 |
|----------|------|------|
| 列表 | `agri:seller:order:list` | 页签列表 |
| 详情 | `agri:seller:order:query` | 查看详情抽屉 |
| 发货/物流/送达 | `agri:seller:order:ship` | 去发货、更新物流、商品到货 |
| 删除 | `agri:seller:order:remove` | 已关闭 → 已删除 |

> 与平台 `agri:order:*` **不可混用**。

---

## 4. 页面结构

```text
全部订单
├── 检索区（el-card）
│   ├── 订单编号 orderNo
│   ├── 商品名称 goodsName
│   ├── 发货状态 shipStatus（0待支付/1待发货/2已发货）
│   ├── 收货人 consigneeName、收货手机 consigneeMobile、收货地址 consigneeAddress
│   ├── 配送方式 deliveryType（1物流/2商家配送）
│   └── 下单时间 beginTime～endTime（daterange）
├── 列表区（el-card + border 表格）
│   ├── 状态页签：全部 | 待发货 | 已发货 | 已关闭 | 已完成 | 已删除
│   ├── 列：订单信息、订单金额、会员名称、收货人信息、配送方式、订单状态、操作
│   └── 分页
├── 详情抽屉 detail.vue
│   ├── 基本信息 / 商品明细 / 收货 / 物流 / 关闭信息 / 物流节点时间轴
│   └── 操作：去发货、更新物流、商品到货、删除（按状态显隐）
├── 发货弹窗（待发货 · 整单）
├── 更新物流弹窗（已发货）
└── 商品到货弹窗（已发货）
```

**不提供：** 页内店铺选择、手工关闭、代确认收货、拆单/部分发货。

---

## 5. 状态页签与 Query

| 页签 | `statusTab` | 传参 `orderStatus` | 说明 |
|------|-------------|-------------------|------|
| 全部 | `all` | 不传 | 含待支付；**排除** 已删除（后端 `!= '5'`） |
| 待发货 | `1` | `1` | 可「去发货」 |
| 已发货 | `2` | `2` | 可更新物流、商品到货 |
| 已关闭 | `4` | `4` | 可删除 |
| 已完成 | `3` | `3` | 只读 |
| 已删除 | `5` | `5` | 只读审计 |

页签与高级检索 **AND** 组合；切换页签重置 `pageNum=1` 并刷新列表。

**深链：** 支持 `?orderStatus=1` 等路由参数预设页签（供后续「发货管理」跳转）。

---

## 6. 店铺上下文（X-Shop-Id）

| 步骤 | 说明 |
|------|------|
| `created` | `GET /agri/seller/context` → `setSellerShopContext` |
| 列表/详情/履约 | `sellerShopHeaders()` |
| Navbar 切店 | `location.reload()` 整页刷新 |

---

## 7. API 封装

**模块：** `ruoyi-ui/src/api/agri/seller/order.js`

| 方法 | HTTP | 路径 |
|------|------|------|
| `listSellerOrder(query)` | GET | `/agri/seller/order/list` |
| `getSellerOrder(orderId)` | GET | `/agri/seller/order/{orderId}` |
| `shipSellerOrder(orderId, data)` | POST | `/agri/seller/order/{orderId}/ship` |
| `logisticsSellerOrder(orderId, data)` | POST | `/agri/seller/order/{orderId}/logistics` |
| `deliveredSellerOrder(orderId, data)` | POST | `/agri/seller/order/{orderId}/delivered` |
| `delSellerOrder(orderId)` | DELETE | `/agri/seller/order/{orderId}` |

### 7.1 列表 Query 参数

与 `SellerOrderQuery` 对齐：`orderStatus`、`orderNo`、`goodsName`、`shipStatus`、`consigneeName`、`consigneeMobile`、`consigneeAddress`、`deliveryType`、`beginTime`、`endTime`、`pageNum`、`pageSize`。

### 7.2 列表行 `OrderListRowVO`

| 字段 | 界面 |
|------|------|
| orderNo, createTime, items[], itemCount | 「订单信息」列 |
| payAmount, freightAmount | 「订单金额」 |
| memberNickName | 会员名称 |
| consigneeName/Mobile/Address | 收货人（手机已脱敏） |
| deliveryTypeLabel | 配送方式 |
| orderStatus, orderStatusLabel | 状态 Tag |

首行商品 +「共 N 件」展示多商品摘要。

### 7.3 详情 `OrderDetailVO`

分区：基本信息、商品明细表、收货信息、物流信息（按 deliveryType 显隐字段）、关闭信息、**traceList 时间轴（倒序，后端已排序）**。

---

## 8. 操作与状态矩阵

| orderStatus | 列表/详情操作 |
|-------------|---------------|
| `0` 待支付 | 仅详情（**全部**页签可见） |
| `1` 待发货 | 详情、去发货 |
| `2` 已发货 | 详情、更新物流、商品到货 |
| `3` 已完成 | 仅详情 |
| `4` 已关闭 | 详情、删除 |
| `5` 已删除 | 仅详情 |

权限：`v-hasPermi` 控制按钮显隐。

---

## 9. 履约弹窗

### 9.1 去发货 `OrderShipDTO`

| 字段 | 规则 |
|------|------|
| shipTime | 必填，默认当前时间 |
| deliveryType | `1` 物流 / `2` 商家配送 |
| deliveryType=1 | logisticsCompany + trackingNo 必填 |
| deliveryType=2 | vehicleNo + courierName + courierMobile（11 位手机）必填 |
| shipRemark | 选填 |
| 发货商品 | 只读表格，整单展示；文案提示不可拆单 |

打开弹窗前 `GET` 详情拉取 `items`。

### 9.2 更新物流 `OrderLogisticsDTO`

| 字段 | 规则 |
|------|------|
| traceTime | 必填 |
| content | 必填（运输状态描述） |

### 9.3 商品到货 `OrderDeliveredDTO`

| 字段 | 规则 |
|------|------|
| traceTime | 必填 |
| content | 选填 |

弹窗底部提示：登记送达 **不替代** 买家确认收货。

### 9.4 删除

`$modal.confirm` 二次确认 → `DELETE /{orderId}` → 刷新列表；若详情打开则关闭抽屉。

---

## 10. 状态展示

前端本地映射（后端亦返回 `orderStatusLabel`）：

| 值 | 文案 | Tag |
|----|------|-----|
| 0 | 待支付 | warning |
| 1 | 待发货 | primary |
| 2 | 已发货 | default |
| 3 | 已完成 | success |
| 4 | 已关闭 | info |
| 5 | 已删除 | info |

后续可接入字典 `biz_order_status`、`biz_delivery_type`（与后端常量一致）。

---

## 11. 与平台 / 其他模块

| 关联 | 说明 |
|------|------|
| 平台订单管理 | 同源状态机；平台代发货后商家端不可重复发货 |
| 会员管理 | 会员名只读；不展示累计消费 |
| 商品列表 | 明细为下单快照 |
| 发货管理（待建） | 可深链 `seller/order?orderStatus=1` |
| Navbar 切店 | 整页 reload，列表随店刷新 |

---

## 12. 联调检查清单

- [ ] 菜单：`agri/seller/order/index`，权限 `agri:seller:order:*`
- [ ] **全部** 页签含待支付且仅可查看
- [ ] 待发货整单发货后进入「已发货」页签
- [ ] 物流/送达多次追加 trace，主状态仍为已发货
- [ ] 仅已关闭可删除，删除后在「已删除」可见
- [ ] 检索 + 页签组合过滤正确
- [ ] 切店后列表仅为新店订单
- [ ] 无 ship/remove 权限时按钮隐藏

---

## 13. 修订记录

| 版本 | 说明 |
|------|------|
| **v1.0** | 首版；对齐功能需求 v1.0、后端技术方案 v1.0.2；列表/详情/三种履约弹窗/删除 |

---

*文档版本：v1.0 · 关联《全部订单功能需求.md》v1.0、《全部订单技术方案.md》v1.0.2*
