Files
mp-vue/docs/ORDER_DETAIL_BUTTON_ANALYSIS.md

7.1 KiB
Raw Blame History

订单详情页面按钮设计分析

当前按钮设计

现有按钮逻辑

<augment_code_snippet path="src/views/shop/shopOrder/components/orderInfo.vue" mode="EXCERPT">

<!-- 发货按钮已付款且未发货时显示 -->
<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. 完善按钮显示逻辑

<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. 添加辅助判断函数

// 判断是否为取消状态
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. 用户体验优化

按钮分组和优先级

<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>

操作确认和提示

  • 所有危险操作都应该有确认对话框
  • 操作成功后显示明确的提示信息
  • 操作失败时显示具体的错误原因

权限控制

// 根据用户角色显示不同的操作按钮
const userRole = getCurrentUserRole();
const canApproveRefund = userRole.includes('ADMIN') || userRole.includes('FINANCE');

实施建议

阶段一:修复现有问题

  1. 完善按钮显示逻辑
  2. 添加缺失的操作按钮
  3. 修复状态判断错误

阶段二:功能增强

  1. 添加退款处理功能
  2. 实现订单修改功能
  3. 添加批量操作支持

阶段三:用户体验优化

  1. 优化按钮布局和样式
  2. 添加操作权限控制
  3. 完善错误处理和用户提示

总结

当前的订单详情页面按钮设计存在逻辑不完整、状态判断不准确、缺少关键操作等问题。建议按照上述分析进行系统性的改进,以提供更完整、更准确、更用户友好的订单管理体验。