279 lines
7.1 KiB
Markdown
279 lines
7.1 KiB
Markdown
# 订单详情页面按钮设计分析
|
||
|
||
## 当前按钮设计
|
||
|
||
### 现有按钮逻辑
|
||
|
||
<augment_code_snippet path="src/views/shop/shopOrder/components/orderInfo.vue" mode="EXCERPT">
|
||
````vue
|
||
<!-- 发货按钮:已付款且未发货时显示 -->
|
||
<a-button
|
||
v-if="form.payStatus === 1 && form.deliveryStatus === 10"
|
||
type="primary"
|
||
@click="handleDelivery"
|
||
>
|
||
发货
|
||
</a-button>
|
||
|
||
<!-- 取消订单按钮:未完成且未取消时显示 -->
|
||
<a-button
|
||
v-if="form.orderStatus === 0"
|
||
@click="handleCancelOrder"
|
||
danger
|
||
>
|
||
取消订单
|
||
</a-button>
|
||
|
||
<!-- 删除订单按钮:已取消或已完成时显示 -->
|
||
<a-button
|
||
v-if="form.orderStatus === 1 || form.orderStatus === 2"
|
||
@click="handleDeleteOrder"
|
||
danger
|
||
>
|
||
删除订单
|
||
</a-button>
|
||
````
|
||
</augment_code_snippet>
|
||
|
||
## 问题分析
|
||
|
||
### 1. 🚨 **逻辑不完整**
|
||
|
||
**问题:** 当前按钮显示逻辑没有覆盖所有订单状态
|
||
|
||
**具体问题:**
|
||
- 退款相关状态(orderStatus: 3,4,5,6,7)没有对应的操作按钮
|
||
- 未付款订单(payStatus: 0)没有相应的操作选项
|
||
- 已发货但未收货的订单缺少相关操作
|
||
|
||
### 2. 🔄 **状态判断不准确**
|
||
|
||
**问题:** 按钮显示条件与实际业务流程不匹配
|
||
|
||
**具体问题:**
|
||
- 取消订单按钮只检查 `orderStatus === 0`,但应该考虑支付状态
|
||
- 删除按钮条件过于简单,没有考虑退款状态
|
||
- 发货按钮没有考虑订单是否已被取消
|
||
|
||
### 3. 🎯 **缺少关键操作**
|
||
|
||
**问题:** 缺少重要的订单管理功能
|
||
|
||
**缺少的功能:**
|
||
- 退款处理按钮
|
||
- 退款审核按钮
|
||
- 订单修改按钮
|
||
- 重新发货按钮
|
||
- 确认收货按钮(管理员代操作)
|
||
|
||
## 订单状态完整定义
|
||
|
||
根据代码分析,订单状态字段定义如下:
|
||
|
||
### payStatus(支付状态)
|
||
- `0`: 未付款
|
||
- `1`: 已付款
|
||
- `3`: 未付款,占场中
|
||
|
||
### orderStatus(订单状态)
|
||
- `0`: 未使用/未完成
|
||
- `1`: 已完成
|
||
- `2`: 已取消
|
||
- `3`: 取消中
|
||
- `4`: 退款申请中
|
||
- `5`: 退款被拒绝
|
||
- `6`: 退款成功
|
||
- `7`: 客户端申请退款
|
||
|
||
### deliveryStatus(发货状态)
|
||
- `10`: 未发货/未核销
|
||
- `20`: 已发货/已核销
|
||
- `30`: 部分发货/部分核销
|
||
|
||
## 改进建议
|
||
|
||
### 1. 完善按钮显示逻辑
|
||
|
||
```vue
|
||
<template #extra>
|
||
<a-space>
|
||
<!-- 未付款状态的操作 -->
|
||
<template v-if="form.payStatus === 0">
|
||
<!-- 取消订单 -->
|
||
<a-button
|
||
v-if="form.orderStatus === 0"
|
||
@click="handleCancelOrder"
|
||
danger
|
||
>
|
||
取消订单
|
||
</a-button>
|
||
|
||
<!-- 修改订单 -->
|
||
<a-button
|
||
v-if="form.orderStatus === 0"
|
||
@click="handleEditOrder"
|
||
>
|
||
修改订单
|
||
</a-button>
|
||
</template>
|
||
|
||
<!-- 已付款状态的操作 -->
|
||
<template v-if="form.payStatus === 1">
|
||
<!-- 发货按钮 -->
|
||
<a-button
|
||
v-if="form.deliveryStatus === 10 && !isCancelledStatus(form.orderStatus)"
|
||
type="primary"
|
||
@click="handleDelivery"
|
||
>
|
||
发货
|
||
</a-button>
|
||
|
||
<!-- 确认收货(管理员代操作) -->
|
||
<a-button
|
||
v-if="form.deliveryStatus === 20 && form.orderStatus === 0"
|
||
type="primary"
|
||
@click="handleConfirmReceive"
|
||
>
|
||
确认收货
|
||
</a-button>
|
||
</template>
|
||
|
||
<!-- 退款相关操作 -->
|
||
<template v-if="isRefundStatus(form.orderStatus)">
|
||
<!-- 同意退款 -->
|
||
<a-button
|
||
v-if="form.orderStatus === 4 || form.orderStatus === 7"
|
||
type="primary"
|
||
@click="handleApproveRefund"
|
||
>
|
||
同意退款
|
||
</a-button>
|
||
|
||
<!-- 拒绝退款 -->
|
||
<a-button
|
||
v-if="form.orderStatus === 4 || form.orderStatus === 7"
|
||
danger
|
||
@click="handleRejectRefund"
|
||
>
|
||
拒绝退款
|
||
</a-button>
|
||
|
||
<!-- 重新处理退款 -->
|
||
<a-button
|
||
v-if="form.orderStatus === 5"
|
||
@click="handleRetryRefund"
|
||
>
|
||
重新处理
|
||
</a-button>
|
||
</template>
|
||
|
||
<!-- 删除订单 -->
|
||
<a-button
|
||
v-if="canDeleteOrder(form)"
|
||
@click="handleDeleteOrder"
|
||
danger
|
||
>
|
||
删除订单
|
||
</a-button>
|
||
|
||
<!-- 关闭按钮 -->
|
||
<a-button @click="updateVisible(false)">
|
||
关闭
|
||
</a-button>
|
||
</a-space>
|
||
</template>
|
||
```
|
||
|
||
### 2. 添加辅助判断函数
|
||
|
||
```typescript
|
||
// 判断是否为取消状态
|
||
const isCancelledStatus = (orderStatus?: number) => {
|
||
return [2, 3].includes(orderStatus || 0);
|
||
};
|
||
|
||
// 判断是否为退款相关状态
|
||
const isRefundStatus = (orderStatus?: number) => {
|
||
return [4, 5, 6, 7].includes(orderStatus || 0);
|
||
};
|
||
|
||
// 判断是否可以删除订单
|
||
const canDeleteOrder = (order: ShopOrder) => {
|
||
// 已完成、已取消、退款成功的订单可以删除
|
||
return [1, 2, 6].includes(order.orderStatus || 0);
|
||
};
|
||
|
||
// 判断是否可以取消订单
|
||
const canCancelOrder = (order: ShopOrder) => {
|
||
// 未完成且未付款的订单可以取消
|
||
return order.orderStatus === 0 && order.payStatus === 0;
|
||
};
|
||
```
|
||
|
||
### 3. 按订单状态分类的操作矩阵
|
||
|
||
| 订单状态 | 支付状态 | 发货状态 | 可用操作 |
|
||
|---------|---------|---------|---------|
|
||
| 未完成(0) | 未付款(0) | - | 取消订单、修改订单 |
|
||
| 未完成(0) | 已付款(1) | 未发货(10) | 发货、申请退款 |
|
||
| 未完成(0) | 已付款(1) | 已发货(20) | 确认收货、申请退款 |
|
||
| 已完成(1) | 已付款(1) | 已发货(20) | 删除订单、申请退款 |
|
||
| 已取消(2) | - | - | 删除订单 |
|
||
| 取消中(3) | - | - | 等待处理 |
|
||
| 退款申请中(4) | 已付款(1) | - | 同意退款、拒绝退款 |
|
||
| 退款被拒绝(5) | 已付款(1) | - | 重新处理、删除订单 |
|
||
| 退款成功(6) | 已付款(1) | - | 删除订单 |
|
||
| 客户端申请退款(7) | 已付款(1) | - | 同意退款、拒绝退款 |
|
||
|
||
### 4. 用户体验优化
|
||
|
||
#### 按钮分组和优先级
|
||
```vue
|
||
<a-space>
|
||
<!-- 主要操作(蓝色按钮) -->
|
||
<a-button type="primary" v-if="...">主要操作</a-button>
|
||
|
||
<!-- 次要操作(默认按钮) -->
|
||
<a-button v-if="...">次要操作</a-button>
|
||
|
||
<!-- 危险操作(红色按钮) -->
|
||
<a-button danger v-if="...">危险操作</a-button>
|
||
|
||
<!-- 关闭按钮(始终显示) -->
|
||
<a-button @click="updateVisible(false)">关闭</a-button>
|
||
</a-space>
|
||
```
|
||
|
||
#### 操作确认和提示
|
||
- 所有危险操作都应该有确认对话框
|
||
- 操作成功后显示明确的提示信息
|
||
- 操作失败时显示具体的错误原因
|
||
|
||
#### 权限控制
|
||
```typescript
|
||
// 根据用户角色显示不同的操作按钮
|
||
const userRole = getCurrentUserRole();
|
||
const canApproveRefund = userRole.includes('ADMIN') || userRole.includes('FINANCE');
|
||
```
|
||
|
||
## 实施建议
|
||
|
||
### 阶段一:修复现有问题
|
||
1. 完善按钮显示逻辑
|
||
2. 添加缺失的操作按钮
|
||
3. 修复状态判断错误
|
||
|
||
### 阶段二:功能增强
|
||
1. 添加退款处理功能
|
||
2. 实现订单修改功能
|
||
3. 添加批量操作支持
|
||
|
||
### 阶段三:用户体验优化
|
||
1. 优化按钮布局和样式
|
||
2. 添加操作权限控制
|
||
3. 完善错误处理和用户提示
|
||
|
||
## 总结
|
||
|
||
当前的订单详情页面按钮设计存在逻辑不完整、状态判断不准确、缺少关键操作等问题。建议按照上述分析进行系统性的改进,以提供更完整、更准确、更用户友好的订单管理体验。
|