info.vue 5.2 KB
<template>
  <div style="background: #f7f7f7;">
    <headerNav title="订单详情"/>
    <van-steps :active="active">
      <van-step>提交订单</van-step>
      <van-step>配送中</van-step>
      <van-step>交易完成</van-step>
    </van-steps>
    <van-cell v-if="orderInfo.status >= 2 "
              class="logistics"
              :to="`/user/order/logistics/${orderInfo.id}`"
              :title="latestLogisticsDetail.logisticsInformation"
              :label="latestLogisticsDetail.logisticsTimeText"
              icon="logistics"
              is-link
    />
    <div style="height:15px;"></div>
    <van-cell-group>
      <van-cell
        center
        :border="false"
      >
        <template>
          <div>{{recipient.name}} {{recipient.mobile}}</div>
          <div>{{recipient.address}}</div>
        </template>
      </van-cell>
    </van-cell-group>

    <div style="height:15px;"></div>
    <div v-for="(product,i) in products" :key="i">
      <product-card :product='product'/>
    </div>
    <div style="height:15px;"></div>
    <van-cell-group>
      <van-cell title="订单编号" :value="orderInfo.orderNo"/>
      <van-cell title="下单时间" :value="orderInfo.createTimeText"/>
      <van-cell title="订单状态" :value="orderInfo.statusText"/>
    </van-cell-group>
    <div style="height:15px;"></div>
    <van-cell-group class="total">
      <van-cell title="商品总额" :value="orderInfo.buyPrice / 100.0"/>
      <van-cell title="运费" :value="'+' + orderInfo.logisticsPrice / 100.0"/>
      <van-cell title="折扣" :value="- orderInfo.discountPrice / 100.0"/>
      <van-cell title="实付金额" :value="orderInfo.presentPrice / 100.0" style="font-weight: 700;"/>
    </van-cell-group>
    <div class="footer">
      <div class="munu">
        <router-link v-if="orderInfo.hasOrderReturn === -1 " :to="'/user/aftersale/apply/'+orderId">
          <van-button size="small">申请售后</van-button>
        </router-link>
        <router-link v-if="orderInfo.hasOrderReturn !== -1" :to="'/user/aftersale/detail/'+orderId">
          <van-button size="small">查看进度</van-button>
        </router-link>
        <van-button v-if="orderInfo.status === 3 " size="small" v-on:click="clickConfirmReceiving(orderId)">确认收货</van-button>
        <van-button v-if="orderInfo.status === 1 " size="small" type="danger" @click="goPay(orderInfo.id)">支付</van-button>
      </div>
    </div>
  </div>
</template>

<script>

  import moment from 'moment';
  import { getOrderInfo, confirmReceiving } from '../../../api/order';

  export default {
    data() {
      return {
        active: 0,
        orderId: 0,
        orderInfo: {},
        recipient: {},
        latestLogisticsDetail: {},
        products: [
          {
            imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
            title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
            price: '499',
            quantity: 2
          },
        ]
      }
    },
    methods: {
      clickConfirmReceiving(orderId) {
        confirmReceiving(orderId).then(res => {
          this.queryOrderPage(this.queryParams)
        })
      },
      goPay(itemId) {
        this.$router.push('/pay?appId=POd4RC6a&orderId=' + itemId + '&returnUrl=' + encodeURI('/user/order/info/' + itemId));
      },
    },
    mounted() {
      const { id } = this.$route.params;
      this.orderId = id;
      getOrderInfo(id).then(res => {
        const { status, recipient, latestLogisticsDetail, orderItems} = res;
        // 提交订单、配送中、交易成功
        if ([1, 2].indexOf(status) !== -1) {
          this.active = 0
        } else if (status === 3) {
          this.active = 1
        } else if (status >= 4) {
          this.active = 2
        }

        // 收件人信息
        this.recipient = recipient;

        // 订单info
        this.orderInfo = {
          ...res,
          createTimeText: moment(res.createTime).format("YYYY-MM-DD HH:mm"),
        };

        // 最新物流信息
        let logisticsTimeText = '';
        if (latestLogisticsDetail) {
          logisticsTimeText = moment(latestLogisticsDetail.logisticsTime).format("YYYY-MM-DD HH:mm");
        }

        this.latestLogisticsDetail = {
          ...latestLogisticsDetail,
          logisticsTimeText: logisticsTimeText,
        }

        this.products = orderItems.map(item => {
          return {
            ...item,
            picUrls: [item.skuImage],
          }
        })
      })
    }
  }
</script>

<style lang="less">
  .logistics {
    margin-top: 15px;

    i {
      line-height: 60px;
      font-size: 20px;
    }

    .van-cell__title span {
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
    }

    .van-cell__label {
      color: #999;
    }
  }

  .total {
    .van-cell__value {
      color: red;
    }
  }

  .footer {
    height: 50px;

    .munu {
      position: fixed;
      height: 49px;
      border-top: 1px solid #e5e5e5;
      bottom: 0;
      background: #fff;
      width: 100%;
      line-height: 24px;
      text-align: right;

      .van-button {
        margin-right: 10px;
      }
    }
  }
</style>