Vue3电商项目实战-个人中心模块9【19-订单详情-取消订单、20-订单详情-确认收货、21-再次购买】

文章介绍了在电商应用中处理订单的三个关键功能:1)如何在订单详情页面实现取消订单,引入并使用`useCancelOrder`方法;2)添加确认收货功能,通过`useConfirmOrder`进行封装;3)详细阐述了再次购买的流程,包括检查订单状态并调用`findOrderRepurchase`API获取结算信息,以及根据订单ID决定结算商品。所有操作涉及Vue组件、路由跳转和API交互。
摘要由CSDN通过智能技术生成


19-订单详情-取消订单

完成订单详情的取消订单

src/views/member/order/index.vue

// 封装逻辑-取消订单
+ export const useCancelOrder = () => {

src/views/member/order/components/order-action.vue

import OrderCancel from './order-cancel'
import { useCancelOrder } from '../index'
  setup () {
+    return { orderStatus, ...useCancelOrder() }
  }
    <!-- 取消订单组件 -->
    <Teleport to="#dailog">
      <OrderCancel ref="orderCancelCom" />
    </Teleport>
      <template v-if="order.orderState===1">
        <XtxButton @click="$router.push('/member/pay?id='+order.id)" type="primary" size="small">立即付款</XtxButton>
+       <XtxButton @click="onCancelOrder(order)" type="gray" size="small">取消订单</XtxButton>
      </template>

20-订单详情-确认收货

完成订单详情的确认收货

src/views/member/order/index.vue

// 封装逻辑-确认收货
+ export const useConfirmOrder = () => {

src/views/member/order/components/order-action.vue

+import { useCancelOrder, useConfirmOrder } from '../index'
  setup () {
+    return { orderStatus, ...useCancelOrder(), ...useConfirmOrder() }
  }
        <XtxButton @click="onConfirmOrder(order)" type="primary" size="small">确认收货</XtxButton>

21-再次购买

目的:完成再次购买

大致步骤:

  • 当你点击再次购物车,传递订单ID到结算页面
  • 在结算页码根据地址栏是否又订单ID来判断结算方式
    • 没有ID:结算购物车种选中的商品
    • 如有ID:结算该订单ID下的商品
      • 提供一个API函数去生成结算信息

落的代码:

src/api/order.js 订单商品结算函数

/**
 * 获取再次购买的订单结算信息
 * @param {String} id - 订单ID
 * @returns
 */
export const findOrderRepurchase = (id) => {
  return request(`/member/order/repurchase/${id}`, 'get')
}

所有的再次购买跳转到结算页面

order-item.vue

        <p v-if="[2,3,4,5].includes(order.orderState)"><a @click="$router.push(`/member/checkout?orderId=${order.id}`)" href="javascript:;">再次购买</a></p>

detail-action.vue

     <template v-if="order.orderState===2">
+        <XtxButton @click="$router.push(`/member/checkout?orderId=${order.id}`)" type="plain" size="small">再次购买</XtxButton>
      </template>
      <template v-if="order.orderState===3">
        <XtxButton @click="onConfirmOrder(order)" type="primary" size="small">确认收货</XtxButton>
+        <XtxButton @click="$router.push(`/member/checkout?orderId=${order.id}`)" type="plain" size="small">再次购买</XtxButton>
      </template>
      <template v-if="order.orderState===4">
        <XtxButton type="primary" size="small">评价商品</XtxButton>
+        <XtxButton @click="$router.push(`/member/checkout?orderId=${order.id}`)" type="plain" size="small">再次购买</XtxButton>
        <XtxButton type="gray" size="small">申请售后</XtxButton>
      </template>
      <template v-if="order.orderState===5">
        <XtxButton type="primary" size="small">查看评价</XtxButton>
+        <XtxButton @click="$router.push(`/member/checkout?orderId=${order.id}`)" type="plain" size="small">再次购买</XtxButton>
        <XtxButton type="gray" size="small">申请售后</XtxButton>
      </template>

来到结算页码,区分下结算场景 src/views/member/pay/checkout.vue

    const route = useRoute()
    if (route.query.orderId) {
      // 再次购买结算
      findOrderRepurchase(route.query.orderId).then(data => {
        checkoutInfo.value = data.result
        // 设置订单商品数据
        order.goods = data.result.goods.map(({ skuId, count }) => ({ skuId, count }))
      })
    } else {
      // 购物车结算
      findOrderPre().then(data => {
        checkoutInfo.value = data.result
        // 设置订单商品数据
        order.goods = data.result.goods.map(({ skuId, count }) => ({ skuId, count }))
      })
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值