2237 lines
72 KiB
Vue
2237 lines
72 KiB
Vue
<template>
|
||
<view class="my-order v12-mx-2" ref="container" @click="handleBody">
|
||
<u-navbar
|
||
title="我的订单"
|
||
:autoBack="false"
|
||
@leftClick="goUserCenter"
|
||
:fixed="true"
|
||
:placeholder="true"
|
||
/>
|
||
<view class="m-search-wrap v12-mb-2 v12-mt-3">
|
||
<u-search
|
||
v-model="keyword"
|
||
:inputStyle="inputStyle"
|
||
:showAction="false"
|
||
:placeholder="searchPlaceholder"
|
||
shape="round"
|
||
bgColor="#FFF"
|
||
@search="changeType"
|
||
/>
|
||
</view>
|
||
<view class="order-type-tabs v12-mb-2">
|
||
<u-tabs
|
||
lineHeight="2"
|
||
lineColor="#C52733"
|
||
:activeStyle="{
|
||
color: '#C52733',
|
||
fontWeight: 'bold'
|
||
}"
|
||
:inactiveStyle="{
|
||
color: '#333',
|
||
fontSize: '28rpx',
|
||
fontWeight: 'bold'
|
||
}"
|
||
:itemStyle="{
|
||
height: '30px',
|
||
padding: '0 15px !important'
|
||
}"
|
||
:current="orderTypeTabIndex"
|
||
:list="orderTypeTabList"
|
||
@click="orderTypeTabChange"
|
||
/>
|
||
</view>
|
||
<view class="m-tab-warp">
|
||
<u-tabs
|
||
lineHeight="0"
|
||
lineColor="#FF564A"
|
||
:activeStyle="activeStyle"
|
||
:inactiveStyle="inactiveStyle"
|
||
:current="type"
|
||
:list="tabList"
|
||
@click="tabChange"
|
||
/>
|
||
</view>
|
||
<view class="list v12-ma-0" style="padding: 0rpx 0 30rpx;">
|
||
<view
|
||
v-for="(order, orderListIndex) in orderList"
|
||
:key="order.orderId || orderListIndex"
|
||
class="item"
|
||
>
|
||
<view
|
||
v-if="order.experienceOrderInfo"
|
||
class="shop-info flex jc-between ai-center"
|
||
style="padding-bottom: 0"
|
||
@click.stop="goStore(orderListIndex)"
|
||
>
|
||
<view class="flex ai-center">
|
||
<image
|
||
:src="webUrl+'/orderIcon/shop.png'"
|
||
style="width: 32rpx;height: 32rpx"
|
||
/>
|
||
<text class="name v12-font-weight-400 v12-dark-text v12-font-24">{{ order.merName || order.storeName }}</text>
|
||
<image
|
||
:src="webUrl+'/orderIcon/arrow.png'"
|
||
style="width: 24rpx;height: 24rpx; margin-top: 5rpx"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<view
|
||
v-if="getOrderStoreName(order) && !order.experienceOrderInfo"
|
||
class="shop-info flex jc-between ai-center"
|
||
style="padding-bottom: 0"
|
||
@click="handleOrderStoreClick(orderListIndex)"
|
||
>
|
||
<view class="flex ai-center">
|
||
<image
|
||
:src="webUrl+'/orderIcon/shop.png'"
|
||
style="width: 32rpx;height: 32rpx"
|
||
/>
|
||
<text class="name v12-font-weight-400 v12-dark-text v12-font-24">{{ getOrderStoreName(order) }}</text>
|
||
<image
|
||
:src="webUrl+'/orderIcon/arrow.png'"
|
||
style="width: 24rpx;height: 24rpx; margin-top: 5rpx"
|
||
/>
|
||
</view>
|
||
<view v-if="getOrderCityName(order)" class="flex ai-center">
|
||
<image
|
||
:src="webUrl+'/orderIcon/map.png'"
|
||
style="width: 28rpx;height: 28rpx"
|
||
/>
|
||
<text class="address v12-dark-text v12-font-bold v12-font-24">{{ getOrderCityName(order) }}</text>
|
||
</view>
|
||
</view>
|
||
<view v-if="order.experienceOrderInfo" class="title acea-row row-between-wrapper" style="padding: 0 0 0 16rpx !important;">
|
||
<view class="acea-row row-middle">
|
||
订单号:{{ order.orderId }}
|
||
</view>
|
||
<view
|
||
class="font-color-white statusTag"
|
||
:class="{'v12-primary': order.experienceOrderStatus === 0, 'v12-primary': order.experienceOrderStatus === 1, 'bg-color-hui': order.experienceOrderStatus === 2}"
|
||
>{{ ['待使用', '已完成', '已过期'][order.experienceOrderStatus] }}</view>
|
||
</view>
|
||
<view v-if="!order.experienceOrderInfo" class="title acea-row row-between-wrapper" style="padding: 0 0 0 16rpx !important;">
|
||
<view class="acea-row row-middle">
|
||
<text
|
||
v-if="order.combinationId || order.seckillId || order.bargainId || order.storeId"
|
||
class="sign cart-color acea-row row-center-wrapper v12-priamry-text v12-priamry-border v12-radius-40"
|
||
>
|
||
<text v-if="order.combinationId > 0">拼团</text>
|
||
<text v-if="order.seckillId > 0">秒杀</text>
|
||
<text v-if="order.bargainId > 0">砍价</text>
|
||
<text v-if="order.storeId > 0">门店</text>
|
||
</text>
|
||
{{ order.isDrawOrder === 1 ? '奖品订单号' : '订单号' }}:{{ order.orderId }}
|
||
</view>
|
||
<view
|
||
v-if="order.isTickets === 1 && parseInt(order._status._type) === 1"
|
||
class="font-color-white statusTag v12-primary"
|
||
>
|
||
待核销
|
||
</view>
|
||
<view
|
||
v-else
|
||
class="font-color-white statusTag v12-primary"
|
||
>{{ getOrderStatusTagText(order) }}</view>
|
||
</view>
|
||
<view @click="goOrderDetails(orderListIndex)">
|
||
<view
|
||
v-if="order.isGiftCardReceiveBlind === 1"
|
||
class="item-info acea-row row-between row-top"
|
||
>
|
||
<view class="pictrue">
|
||
<image
|
||
:src="webUrl+'/orderIcon/盲盒礼包.png'"
|
||
/>
|
||
</view>
|
||
</view>
|
||
<view v-if="order.isTravelGroup === 1">
|
||
<view
|
||
class="item-info acea-row row-between row-top"
|
||
>
|
||
<view class="pictrue">
|
||
<image
|
||
:src="order.travelGroupOrderInfo.travelGroupProduct.mainImage"
|
||
/>
|
||
</view>
|
||
<view class="text" style="margin-top: 0 !important;">
|
||
<view class="acea-row name-wrap">
|
||
<view class="name more-t v12-font-bold">{{ order.travelGroupOrderInfo.travelGroupProduct.name }}</view>
|
||
<view class="money">
|
||
<view>
|
||
<text class="v12-font-22">¥</text>
|
||
<text class="v12-font-28">{{ force2Decimal(order.travelGroupOrderInfo.travelGroupProduct.price) }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view v-else-if="order.experienceOrderInfo">
|
||
<view class="item-info acea-row row-between row-top ssj">
|
||
<view class="pictrue">
|
||
<image :src="order.experienceOrderInfo.themeImage" />
|
||
</view>
|
||
<view class="text" style="margin-top: 0 !important;">
|
||
<view class="acea-row name-wrap">
|
||
<view class="name one-t v12-font-bold">{{ order.experienceOrderInfo.themeName }}</view>
|
||
</view>
|
||
<view class="v12-secondary-dark-text v12-font-24" style="margin-top: 10rpx;">
|
||
有效期至{{ order.experienceOrderInfo.endTime }}
|
||
</view>
|
||
<view class="v12-secondary-dark-text v12-font-24 flex ai-center" style="margin:10rpx 0;" v-if="order.distance || order.experienceOrderInfo.distance">
|
||
<image :src="webUrl+'/orderIcon/map.png'" style="width: 24rpx;height: 24rpx;margin-right: 6rpx;" />
|
||
<text>距该地{{ order.distance || order.experienceOrderInfo.distance }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view v-else-if="isCollectiveCenterMode && !isBlindBoxGiftOrder(order)">
|
||
<view
|
||
v-for="(item, cartInfoIndex) in getCollectiveDisplayItems(order)"
|
||
:key="`${order.orderId || orderListIndex}-${cartInfoIndex}`"
|
||
class="item-info acea-row row-between row-top"
|
||
>
|
||
<view class="pictrue">
|
||
<image :src="item.image" />
|
||
</view>
|
||
<view class="text" style="margin-top: 0 !important;">
|
||
<view class="acea-row name-wrap">
|
||
<view class="name more-t v12-font-bold">{{ item.name }}</view>
|
||
<view class="money">
|
||
<view v-if="isCollectiveWholesalerOrder(order)">
|
||
<text class="v12-font-22">¥</text>
|
||
<text class="v12-font-28">{{ force2Decimal(item.price) }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="acea-row attr-wrap ">
|
||
<view
|
||
v-if="item.sku"
|
||
class="attr v12-secondary-dark-text v12-font-24 "
|
||
>
|
||
{{ item.sku }}
|
||
</view>
|
||
<view class="v12-font-22 v12-secondary-dark-text">x{{ item.qty }}</view>
|
||
</view>
|
||
<view
|
||
v-if="isCollectiveCustomGiftOrder(order) && item.isShowValue"
|
||
class="gift-value-row v12-font-24 v12-secondary-dark-text"
|
||
>
|
||
<text>礼品价值:</text>
|
||
<text class="v12-dark-text">¥{{ force2Decimal(item.giftValue) }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view v-else-if="order.isDrawOrder === 1">
|
||
<view class="item-info acea-row row-between row-top draw-order-info">
|
||
<view class="pictrue">
|
||
<image :src="order.drawOrderInfo && order.drawOrderInfo.prizeImage" />
|
||
</view>
|
||
<view class="text" style="margin-top: 0 !important;">
|
||
<view class="acea-row name-wrap" style="flex-wrap: nowrap">
|
||
<view class="name more-t v12-font-bold">{{ (order.drawOrderInfo && order.drawOrderInfo.prizeName) || '抽奖商品' }}</view>
|
||
<view class="money draw-price">
|
||
<view class="draw-price-origin">
|
||
<text class="v12-font-22">¥</text>
|
||
<text class="v12-font-28">{{ force2Decimal((order.drawOrderInfo && order.drawOrderInfo.prizePrice) || 0) }}</text>
|
||
</view>
|
||
<view class="v12-font-22 v12-secondary-dark-text draw-qty">x1</view>
|
||
</view>
|
||
</view>
|
||
<view class="">
|
||
{{ order.drawOrderInfo && order.drawOrderInfo.prizeAttrName || '' }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="totalPrice acea-row row-between row-middle" :style="{'padding-bottom': '0'}">
|
||
<view v-if="order.createTime">
|
||
<span class="orderTime v12-font-24 v12-dark1-text">{{ order.createTime }}</span>
|
||
</view>
|
||
<view class="v12-font-24 v12-dark1-text">
|
||
共{{ order.totalNum || 0 }}件商品
|
||
<text v-if="order.isGiftCardReceiveBlind === 0">
|
||
<text class="v12-dark-text v12-font-28 v12-font-bold">
|
||
,总金额
|
||
</text>
|
||
<text class="v12-font-22 v12-primary-text v12-font-bold">
|
||
¥
|
||
</text>
|
||
<text class="money font-color-lightred v12-font-28 v12-primary-text v12-font-bold">
|
||
{{ force2Decimal(order.payPrice) }}
|
||
</text>
|
||
</text>
|
||
</view>
|
||
</view>
|
||
<view class="v12-mt-3">
|
||
<u-line></u-line>
|
||
</view>
|
||
<view class="draw-code-row acea-row row-between row-middle">
|
||
<view class="v12-font-28 v12-dark-text">
|
||
抽奖码:
|
||
<text class="v12-primary-text v12-font-bold draw-ticket-code">
|
||
{{ order.drawOrderInfo && order.drawOrderInfo.ticketCode }}
|
||
</text>
|
||
</view>
|
||
<view
|
||
v-if="order.drawOrderInfo && order.drawOrderInfo.drawStatusName"
|
||
class="font-color-white statusTag v12-primary"
|
||
>
|
||
{{ order.drawOrderInfo.drawStatusName }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view v-else>
|
||
<view
|
||
v-for="(cart,cartInfoIndex) in order.cartInfo"
|
||
:key="cartInfoIndex"
|
||
class="item-info acea-row row-between row-top"
|
||
>
|
||
<view class="pictrue">
|
||
<image
|
||
v-if="cart.combinationId === 0 && cart.bargainId === 0 &&cart.seckillId === 0"
|
||
:src="cart.productInfo.image"
|
||
@click.stop="gotoGoodDetail(orderListIndex, cartInfoIndex)"
|
||
/>
|
||
<image
|
||
v-else-if="cart.combinationId > 0"
|
||
:src="cart.productInfo.image"
|
||
@click.stop="gotoGoodDetail(orderListIndex, cartInfoIndex)"
|
||
/>
|
||
<image
|
||
v-else-if="cart.bargainId > 0"
|
||
:src="cart.productInfo.image"
|
||
@click.stop="gotoGoodDetail(orderListIndex, cartInfoIndex)"
|
||
/>
|
||
<image
|
||
v-else-if="cart.seckillId > 0"
|
||
:src="cart.productInfo.image"
|
||
@click.stop="gotoGoodDetail(orderListIndex, cartInfoIndex)"
|
||
/>
|
||
</view>
|
||
<view class="text" style="margin-top: 0 !important;">
|
||
<view class="acea-row name-wrap">
|
||
<view class="name more-t v12-font-bold">{{ cart.productInfo.storeName }}</view>
|
||
<view class="money">
|
||
<view>
|
||
<text class="v12-font-22">¥</text>
|
||
<text class="v12-font-28">{{ force2Decimal(cart.truePrice) }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="acea-row attr-wrap ">
|
||
<view
|
||
v-if="cart.productInfo.attrInfo"
|
||
class="attr v12-secondary-dark-text v12-font-24 "
|
||
>
|
||
{{ cart.productInfo.attrInfo.sku }}
|
||
</view>
|
||
<view class="v12-dark-text v12-font-22">x{{ cart.cartNum }}</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view v-if="!order.experienceOrderInfo && order.isDrawOrder === 0" class="totalPrice acea-row row-between row-middle" :style="{'padding-bottom': order.isTravelGroup === 1 ? '0rpx !important' : '30rpx'}">
|
||
<view v-if="order.createTime">
|
||
<span class="orderTime v12-font-24 v12-dark1-text">{{ order.createTime }}</span>
|
||
</view>
|
||
<view class="v12-font-24 v12-dark1-text">
|
||
共{{ getOrderTotalNum(order) }}件商品
|
||
<text v-if="order.isGiftCardReceiveBlind === 0 && shouldShowOrderTotalAmount(order)">
|
||
<text class="v12-dark-text v12-font-28 v12-font-bold">
|
||
,总金额
|
||
</text>
|
||
<text class="v12-font-22 v12-primary-text v12-font-bold">
|
||
¥
|
||
</text>
|
||
<text class="money font-color-lightred v12-font-28 v12-primary-text v12-font-bold">
|
||
{{ force2Decimal(getOrderPayPrice(order)) }}
|
||
</text>
|
||
</text>
|
||
</view>
|
||
</view>
|
||
<view class="v12-ml-4 v12-mt-2 v12-mb-2 v12-align-center" v-if="order.isTravelGroup === 1 && order.travelGroupOrderInfo && order.travelGroupOrderInfo.orderStartDate">
|
||
<u-icon name="clock" color="#333" size="28rpx" bold></u-icon>
|
||
<text class="v12-font-bold v12-font-24">
|
||
入住时间: {{ order.travelGroupOrderInfo.orderStartDate }}
|
||
</text>
|
||
</view>
|
||
<view v-if="!order.experienceOrderInfo && order._status && ['1'].includes(order._status._type) && order.confirmTimeout" class="v12-ml-4 v12-mb-2" >
|
||
<view class="v12-primary-text v12-font-24 v12-align-center">
|
||
等待商家确认时间,剩余
|
||
<u-count-down format="HH:mm:ss" autoStart :time="$global.diffSSS(order.confirmTimeout)" />
|
||
订单将自动取消
|
||
</view>
|
||
</view>
|
||
<view
|
||
v-if="order.experienceOrderInfo"
|
||
class="bottom flex jc-end ai-center"
|
||
>
|
||
<view
|
||
v-if="order.experienceOrderStatus === 0 || order.experienceOrderStatus === 1"
|
||
class="bnt service"
|
||
@click.stop="goRoom(orderListIndex)"
|
||
>联系商家</view>
|
||
<view
|
||
v-if="order.experienceOrderStatus === 0"
|
||
class="bnt v12-primary v12-white-text v12-primary-border v12-radius-40"
|
||
@click.stop="goOrderDetails(orderListIndex)"
|
||
>去使用</view>
|
||
<view
|
||
v-if="order.experienceOrderStatus === 1 || order.experienceOrderStatus === 2"
|
||
class="bnt service"
|
||
@click.stop="delOrder(orderListIndex)"
|
||
>删除订单</view>
|
||
</view>
|
||
<view
|
||
v-if="!order.isGiftCardSend && !order.experienceOrderInfo"
|
||
class="bottom flex jc-between ai-center"
|
||
>
|
||
<template v-if="isCollectiveCenterMode">
|
||
<view class="v12-justify-between" style="width: 100%">
|
||
<view>
|
||
<view
|
||
v-if="showCollectiveContact(order)"
|
||
class="bnt service"
|
||
@click="goRoom(orderListIndex)"
|
||
>联系商家</view>
|
||
</view>
|
||
<view class="flex">
|
||
<view
|
||
v-if="showCollectiveModifyAddress(order)"
|
||
class="bnt service"
|
||
@click="addressTap(orderListIndex)"
|
||
>修改地址</view>
|
||
<view
|
||
v-if="showCollectiveDetail(order)"
|
||
class="bnt service"
|
||
@click="goOrderDetails(orderListIndex)"
|
||
>查看详情</view>
|
||
<view
|
||
v-if="showCollectiveRefund(order)"
|
||
class="bnt service"
|
||
@click="goRefund(orderListIndex)"
|
||
>申请退款</view>
|
||
<view
|
||
v-if="showCollectiveTakeOrder(order)"
|
||
class="bnt bg-color-lightred v12-white v12-primary-text v12-primary-border v12-radius-40"
|
||
@click="takeOrder(orderListIndex)"
|
||
>确认收货</view>
|
||
<view
|
||
v-if="showCollectiveDelete(order)"
|
||
class="bnt service"
|
||
@click="delOrder(orderListIndex)"
|
||
>删除订单</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
<template v-else>
|
||
<view
|
||
v-if="[2, 3].includes(parseInt(order._status._type)) && order.isTickets === 0 && order.isDrawOrder === 0"
|
||
class="group-btn"
|
||
>
|
||
<text
|
||
class="btn-more v12-font-28 v12-font-bold"
|
||
@click.stop="tapShowMore(orderListIndex)"
|
||
>更多</text>
|
||
<view class="group-float" v-show="order.showMore">
|
||
<view
|
||
v-if="order.merName && order.isGiftCardReceiveBlind === 0"
|
||
class="btn btn-service flex jc-center ai-center v12-font-24"
|
||
@click="goRoom(orderListIndex)"
|
||
>联系商家</view>
|
||
<view
|
||
v-if="order.isTravelGroup === 0 && order.refundSystemStatus !== 2"
|
||
class="btn flex jc-center ai-center v12-font-24"
|
||
@click="goRefund(orderListIndex)"
|
||
>申请退款</view>
|
||
</view>
|
||
</view>
|
||
<template v-else>
|
||
<view class="v12-justify-between" style="width: 100%">
|
||
<view
|
||
v-if="order.isDrawOrder > 0"
|
||
class="bnt service"
|
||
@click.stop="callMerPhone(orderListIndex)"
|
||
>联系客服
|
||
</view>
|
||
<view>
|
||
<view
|
||
v-if="order.isGiftCardReceiveBlind === 0 &&
|
||
order.merName &&
|
||
parseInt(order._status._type) !== 0 &&
|
||
parseInt(order._status._type) !== 9
|
||
"
|
||
class="bnt service"
|
||
@click="goRoom(orderListIndex)"
|
||
>联系商家</view>
|
||
</view>
|
||
<view class="v12-justify-between">
|
||
<view
|
||
class="bnt service"
|
||
@click="goOrderDetails(orderListIndex)"
|
||
v-if="[-1, -2, -3].includes(parseInt(order._status._type))"
|
||
>查看详情</view>
|
||
<view
|
||
class="bnt service"
|
||
@click="delOrder(orderListIndex)"
|
||
v-if="[9].includes(parseInt(order._status._type))"
|
||
>删除订单</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
</template>
|
||
<view v-if="!isCollectiveCenterMode" class="flex">
|
||
<template v-if="parseInt(order._status._type) === 0">
|
||
<view
|
||
class="bnt cancelBnt v12-dark-text v12-dark-border"
|
||
@click="cancelOrder(orderListIndex)"
|
||
>取消订单</view>
|
||
<view
|
||
v-if="order.isTravelGroup === 0 && order.isDrawOrder === 0"
|
||
class="bnt cancelBnt v12-dark-text v12-dark-border"
|
||
@click="addressTap(orderListIndex)"
|
||
>修改地址</view>
|
||
<view
|
||
class="bnt bg-color-lightred v12-white v12-primary-text v12-primary-border v12-radius-40"
|
||
@click="subscribePay(orderListIndex)"
|
||
>立即付款</view>
|
||
</template>
|
||
<template v-if="parseInt(order._status._type) === 1 && order.isTickets === 0">
|
||
<view
|
||
v-if="order.isTravelGroup === 1"
|
||
class="bnt service"
|
||
@click="editTime(orderListIndex)"
|
||
>{{ '修改时间' }}</view>
|
||
<view
|
||
v-if="order.isTravelGroup === 1"
|
||
class="bnt service"
|
||
@click="applyRefund(orderListIndex)"
|
||
>{{ '申请退款' }}</view>
|
||
<view
|
||
v-if="canShowModifyAddress(order) && order.isDrawOrder === 0"
|
||
class="bnt service"
|
||
@click="addressTap(orderListIndex)"
|
||
>修改地址</view>
|
||
<view
|
||
class="bnt service"
|
||
:class="{'v12-primary-text v12-primary-border': order.isTravelGroup === 1}"
|
||
@click="goOrderDetails(orderListIndex)"
|
||
>{{ order.isTravelGroup === 0 ? '查看详情' : '查看券码' }}</view>
|
||
</template>
|
||
<template v-if="parseInt(order._status._type) === 1 && order.isTickets === 1">
|
||
<view
|
||
class="bnt bg-color-lightred v12-white v12-primary-text v12-primary-border v12-radius-40"
|
||
@click="goOrderDetails(orderListIndex)"
|
||
>立即核销</view>
|
||
</template>
|
||
<template v-if="parseInt(order._status._type) === 2 && order.isTickets === 0 && order.isTravelGroup === 1">
|
||
<view
|
||
v-if="order.isTravelGroup === 1"
|
||
class="bnt service"
|
||
@click="editTime(orderListIndex)"
|
||
>{{ '修改时间' }}</view>
|
||
<view
|
||
v-if="order.isTravelGroup === 1"
|
||
class="bnt service"
|
||
@click="applyRefund(orderListIndex)"
|
||
>{{ '申请退款' }}</view>
|
||
<view
|
||
class="bnt service"
|
||
:class="{'v12-primary-text v12-primary-border': order.isTravelGroup === 1}"
|
||
@click="goOrderDetails(orderListIndex)"
|
||
>{{ order.isTravelGroup === 0 ? '查看详情' : '查看券码' }}</view>
|
||
</template>
|
||
<template v-if="parseInt(order._status._type) === 2 && order.isTickets === 0 && order.isTravelGroup === 0">
|
||
<view
|
||
v-if="order.isExtendedDelivery === 0 && order.isDrawOrder === 0"
|
||
class="bnt default"
|
||
@click="toDelay(order.orderId)"
|
||
>延长收货
|
||
</view>
|
||
<view
|
||
class="bnt bg-color-lightred v12-white v12-primary-text v12-primary-border v12-radius-40"
|
||
@click="takeOrder(orderListIndex)"
|
||
>确认收货</view>
|
||
</template>
|
||
<template v-if="parseInt(order._status._type) === 3 && order.isTravelGroup === 0">
|
||
<view
|
||
class="bnt bg-color-lightred v12-white v12-primary-text v12-primary-border v12-radius-40"
|
||
@click="goOrderDetails(orderListIndex)"
|
||
>去评价</view>
|
||
</template>
|
||
<template v-if="parseInt(order._status._type) === 3 && order.isTravelGroup === 1">
|
||
<view
|
||
class="bnt bg-color-lightred v12-white v12-primary-text v12-primary-border v12-radius-40"
|
||
@click="goOrderDetails(orderListIndex)"
|
||
>去评价</view>
|
||
</template>
|
||
<template v-if="parseInt(order._status._type) === 4">
|
||
<view class="bnt service" @click="goOrderDetails(orderListIndex)">查看订单</view>
|
||
</template>
|
||
</view>
|
||
</view>
|
||
<view class="bottom" v-else-if="order.isGiftCardSend">
|
||
<view class="v12-font-24 v12-grey tips-text" >
|
||
{{ Number(order.status) === 0 ? '待支付' : getGiftTips(order.giftCardInfo) }}
|
||
</view>
|
||
<view class="flex jc-between ai-center">
|
||
<view
|
||
v-if="order.merName && order.isGiftCardReceiveBlind === 0"
|
||
class="bnt btn-service flex jc-center ai-center v12-font-24"
|
||
@click="goRoom(orderListIndex)"
|
||
>联系商家
|
||
</view>
|
||
<view class="v12-align-center">
|
||
<button
|
||
v-if="Number(order.status) !== 0 &&
|
||
order.giftCardInfo &&
|
||
order.giftCardInfo.giftCardStatus !== 9 &&
|
||
getGiftTips(order.giftCardInfo) &&
|
||
order.giftCardInfo.giftCardStatus !== 2 &&
|
||
order.giftCardInfo.giftNum !== order.giftCardInfo.receiveNum
|
||
"
|
||
open-type="share"
|
||
class="gift-btn service v12-primary-text v12-primary-border"
|
||
@click="shareGift(orderListIndex)"
|
||
>送给朋友</button>
|
||
<button
|
||
v-if="Number(order.status) === 0"
|
||
class="gift-btn service v12-primary-text v12-primary-border"
|
||
@click="subscribePay(orderListIndex)"
|
||
>立即支付</button>
|
||
<view class="bnt service" @click="goOrderDetails(orderListIndex)">查看详情</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view
|
||
v-if="parseInt(order._status._type) === 1 && order.isFastPost !== 0 && Number(order.isAddressUpdate || 0) === 0"
|
||
class="v12-px-3 v12-pb-4"
|
||
>
|
||
<view
|
||
class="v12-font-22 v12-secondary-dark-text order-tips"
|
||
>商家已接收您的订单,支付成功后预计{{ getTime(order.isFastPost) }}发货</view>
|
||
</view>
|
||
<view
|
||
v-if="!isRefundFlow(order) && Number(order.isAddressUpdate) === 1 && [0, 2].includes(Number(order.addressUpdateStatus))"
|
||
class="v12-px-3 v12-pb-4"
|
||
>
|
||
<view
|
||
v-if="Number(order.addressUpdateStatus) === 0"
|
||
class="v12-font-24 v12-primary-text"
|
||
style="background: rgba(246,246,246,0.7); border-radius: 40rpx; padding: 12rpx;"
|
||
>修改地址正在审核中,请耐心等待</view>
|
||
<view
|
||
v-if="Number(order.addressUpdateStatus) === 2"
|
||
class="v12-font-24 v12-primary-text"
|
||
style="background: rgba(246,246,246,0.7); border-radius: 40rpx; padding: 12rpx ;"
|
||
>修改地址审核未通过,商家将按原地址发货,
|
||
<text v-if="order.isFastPost !== 0">预计{{ getTime(order.isFastPost) }}发货</text>
|
||
(驳回原因:{{ order.addressUpdateReason }})</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<u-modal
|
||
:show="showExtend"
|
||
title="确认延长收货时间?"
|
||
content='每笔订单只能延长一次哦'
|
||
showCancelButton
|
||
@cancel="toDelayCancel"
|
||
@confirm="doneDelay"
|
||
/>
|
||
<view
|
||
v-if="orderList.length === 0 && page > 1"
|
||
class="noCart"
|
||
>
|
||
<view class="pictrue">
|
||
<image :src="webUrl+'/20240102232734472795.png'"/>
|
||
</view>
|
||
</view>
|
||
<Loading
|
||
:loaded="loaded"
|
||
:loading="loading"
|
||
/>
|
||
<Payment
|
||
v-model="pay"
|
||
:types="payType"
|
||
:balance="userInfo.nowMoney"
|
||
@checked="toPay"
|
||
/>
|
||
<passkeyborad
|
||
v-if="isShowPayPwdPop"
|
||
ref='payPwdPop'
|
||
:money="orderInfo.payPrice"
|
||
showMoney
|
||
:show="isShowPayPwdPop"
|
||
@close="pwdPopClose"
|
||
@finish="pwdPopFinish"
|
||
/>
|
||
<DateRangePicker
|
||
ref="DateRangePicker"
|
||
:originDate="travelGroupOrderInfo.orderStartDate"
|
||
v-model="dateRange"
|
||
:show="showDatePicker"
|
||
:minBookingDays="travelGroupOrderInfo.minBookingDays"
|
||
:travelGroupProductId="travelGroupOrderInfo.travelGroupProduct.id"
|
||
@update:show="showDatePicker = false"
|
||
@input="handleDateSelected"
|
||
></DateRangePicker>
|
||
<view
|
||
v-if="drawTicketPopup.show"
|
||
class="draw-ticket-mask"
|
||
@touchmove.stop.prevent
|
||
>
|
||
<view class="draw-ticket-popup">
|
||
<view class="draw-ticket-close" @click="closeDrawTicketPopup">×</view>
|
||
<view class="draw-ticket-icon">
|
||
<view class="ticket-icon-box">
|
||
<image class="ticket-icon-check" :src="webUrl + '/home/gongxi.png'" mode="widthFix"></image>
|
||
</view>
|
||
</view>
|
||
<view class="draw-ticket-title">支付成功</view>
|
||
<view class="ticket-card-container">
|
||
<view class="ticket-badge">
|
||
<text>恭喜获得抽奖码!</text>
|
||
<view class="ticket-badge-arrow"></view>
|
||
</view>
|
||
<view class="ticket-card">
|
||
<view class="ticket-card-subtitle">
|
||
<text class="ticket-card-subtitle-text">您的专属抽奖码</text>
|
||
</view>
|
||
<view class="ticket-card-code-box">
|
||
<text class="ticket-card-code">{{ drawTicketPopup.ticketCode }}</text>
|
||
</view>
|
||
<view class="ticket-card-time">开奖时间:{{ (drawTicketPopup.drawTime) }}</view>
|
||
</view>
|
||
</view>
|
||
<view class="draw-ticket-actions">
|
||
<view class="action-btn home-btn" @click="goHomeFromPopup">返回首页</view>
|
||
<view class="action-btn primary" @click="goTicketsFromPopup">查看我的抽奖码</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
<script>
|
||
import passkeyborad from '@/components/yzc-paykeyboard/yzc-paykeyboard'
|
||
import DateRangePicker from '@/components/DateRangePicker/DateRangePicker.vue'
|
||
import { sojoumOrderCheckInTime } from "@/api/sojoumOrder";
|
||
import {
|
||
getOrderData,
|
||
getOrderList,
|
||
orderDelay,
|
||
applyEditAddress
|
||
} from "@/api/order"
|
||
import {
|
||
cancelOrderHandle,
|
||
payOrderHandle,
|
||
takeOrderHandle,
|
||
yuePayOrderHandle,
|
||
delOrderHandle
|
||
} from "@/libs/order"
|
||
import Loading from "@/components/Loading"
|
||
import Payment from "@/components/Payment"
|
||
import { mapGetters } from "vuex"
|
||
import { pageListenMixins } from '@/mixins/pageListenMixins'
|
||
import settings from '@/config/baseSetting.js'
|
||
import { orderPaySuccessToCheckDrawStatus } from '@/mixins/orderPaySuccessToCheckDrawStatus.js'
|
||
|
||
export default {
|
||
name: "MyOrder",
|
||
mixins: [pageListenMixins, orderPaySuccessToCheckDrawStatus],
|
||
data() {
|
||
return {
|
||
collectiveOrderType: 'wholesaler',
|
||
giftItem: {},
|
||
isShowPayPwdPop: false,
|
||
inputStyle: {
|
||
height: '64rpx',
|
||
},
|
||
activeStyle: {
|
||
color: '#C52733',
|
||
background: 'rgba(197,39,51,0.1)',
|
||
borderRadius: '30rpx',
|
||
padding: '5rpx 20rpx',
|
||
fontWeight: '600'
|
||
},
|
||
inactiveStyle: {
|
||
height: '48rpx !important',
|
||
background: '#fff !important',
|
||
borderRadius: '30rpx !important',
|
||
color: '#333333 !important',
|
||
padding: '5rpx 15rpx',
|
||
fontSize: '28rpx !important',
|
||
lineHeight: '48rpx !important'
|
||
},
|
||
webUrl: this.$VUE_APP_RESOURCES_URL,
|
||
tabList: [
|
||
{ name: '全部' },
|
||
{ name: '待付款' },
|
||
{ name: '待发货' },
|
||
{ name: '待收货/待核销' },
|
||
{ name: '退款/售后' },
|
||
{ name: '待评价' },
|
||
{ name: '已完成' }
|
||
],
|
||
orderTypeTabList: [
|
||
{ name: '购物', orderType: 'shop' },
|
||
{ name: '旅居', orderType: 'travel' },
|
||
{ name: '集采中心', orderType: 'wholesaler' }
|
||
],
|
||
orderTypeTabIndex: 0,
|
||
orderType: 'shop',
|
||
offlinePayStatus: 2,
|
||
orderData: {},
|
||
type: 0,
|
||
page: 1,
|
||
limit: 20,
|
||
loaded: false,
|
||
loading: false,
|
||
orderList: [],
|
||
pay: false,
|
||
payType: ["yue", "weixin"],
|
||
from: this.$deviceType,
|
||
orderInfo: {},
|
||
travelGroupOrderInfo: {},
|
||
showExtend: false,
|
||
delayId: null,
|
||
pageKeyId: Object.freeze('userOrderIndex'),
|
||
keyword: '',
|
||
_orderId: '',
|
||
showDatePicker: false,
|
||
dateRange: [],
|
||
userLatitude: null,
|
||
userLongitude: null,
|
||
orderListRequestId: 0
|
||
}
|
||
},
|
||
components: {
|
||
Loading,
|
||
Payment,
|
||
passkeyborad,
|
||
DateRangePicker
|
||
},
|
||
computed: {
|
||
...mapGetters(["userInfo"]),
|
||
isCollectiveCenterMode() {
|
||
return this.orderType === this.collectiveOrderType
|
||
},
|
||
searchPlaceholder() {
|
||
return this.isCollectiveCenterMode ? '请输入商品名称/订单号' : '请输入商品名/订单号/团购名称'
|
||
}
|
||
},
|
||
onShow() {
|
||
const _this = this
|
||
const needRefreshOrderList = uni.getStorageSync('needRefreshMyOrderList')
|
||
const chooseAddress = uni.getStorageSync('updateOrderAddress') || {}
|
||
const addressId = chooseAddress.id || ''
|
||
// 监听到选择收货地址
|
||
if (addressId && this._orderId) {
|
||
uni.setStorageSync('updateOrderAddress', {})
|
||
uni.showModal({
|
||
title:'确定修改地址吗?',
|
||
content: '提交后将进入审核流程,请确认是否继续',
|
||
showCancel: true,
|
||
cancelText: '取消',
|
||
confirmText: '确认',
|
||
success:(success)=>{
|
||
if(success.confirm) {
|
||
uni.showLoading()
|
||
applyEditAddress({
|
||
addressId,
|
||
orderId: _this._orderId
|
||
}).then(res => {
|
||
uni.showToast({
|
||
icon: 'success',
|
||
title: '已提交审核'
|
||
})
|
||
_this.changeType()
|
||
}).finally(() => {
|
||
uni.hideLoading()
|
||
})
|
||
}
|
||
},
|
||
cancel: () => {
|
||
_this.changeType()
|
||
},
|
||
complete:(complete)=>{
|
||
_this._orderId = ''
|
||
}
|
||
})
|
||
} else if (needRefreshOrderList) {
|
||
uni.removeStorageSync('needRefreshMyOrderList')
|
||
this.changeType()
|
||
}
|
||
},
|
||
onLoad() {
|
||
const query = this.getPageQuery()
|
||
this.type = this.type || parseInt(query.type) || 0
|
||
this.orderTypeTabIndex = parseInt(query.tabIndex) || 0
|
||
const currentOrderTypeTab = this.orderTypeTabList[this.orderTypeTabIndex] || this.orderTypeTabList[0]
|
||
this.initUserLocation()
|
||
this.orderTypeTabChange({
|
||
...currentOrderTypeTab,
|
||
index: this.orderTypeTabList[this.orderTypeTabIndex] ? this.orderTypeTabIndex : 0
|
||
}, { resetFilters: false })
|
||
},
|
||
onShareAppMessage() {
|
||
uni.updateShareMenu({
|
||
isPrivateMessage: true,
|
||
withShareTicket: true
|
||
})
|
||
return {
|
||
title: '礼笺轻启,礼藏心意',
|
||
path: `/pkg_user/views/gift/receive?code=${this.giftItem.giftCardInfo.code}&isTravelGroup=${this.giftItem.isTravelGroup ? 1 : 0}`,
|
||
imageUrl: this.giftItem.giftCardInfo.giftCardImage
|
||
}
|
||
},
|
||
methods: {
|
||
getPageQuery() {
|
||
return (this.$yroute && this.$yroute.query) || {}
|
||
},
|
||
resetFilterConditions({ resetType = false } = {}) {
|
||
this.keyword = ''
|
||
if (resetType) {
|
||
this.type = 0
|
||
}
|
||
},
|
||
getDefaultTabListByOrderType(orderType = this.orderType) {
|
||
if (orderType === 'travel') {
|
||
return [
|
||
{ name: '全部' },
|
||
{ name: '待付款' },
|
||
{ name: '待确认' },
|
||
{ name: '待使用' },
|
||
{ name: '退款/售后' },
|
||
{ name: '待评价' },
|
||
{ name: '已完成' }
|
||
]
|
||
}
|
||
if (orderType === this.collectiveOrderType) {
|
||
return [
|
||
{ name: '全部' },
|
||
{ name: '待发货' },
|
||
{ name: '待收货' },
|
||
{ name: '退款/售后' },
|
||
{ name: '已完成' }
|
||
]
|
||
}
|
||
return [
|
||
{ name: '全部' },
|
||
{ name: '待付款' },
|
||
{ name: '待发货' },
|
||
{ name: '待收货/待核销' },
|
||
{ name: '退款/售后' },
|
||
{ name: '待评价' },
|
||
{ name: '已完成' }
|
||
]
|
||
},
|
||
getRequestTypeMapByOrderType(orderType = this.orderType) {
|
||
if (orderType === this.collectiveOrderType) {
|
||
return {
|
||
0: 0,
|
||
1: 2,
|
||
2: 3,
|
||
3: -3,
|
||
4: 5,
|
||
}
|
||
}
|
||
return {
|
||
0: 0,
|
||
1: 1,
|
||
2: 2,
|
||
3: 3,
|
||
4: -3,
|
||
5: 4,
|
||
6: 5,
|
||
}
|
||
},
|
||
getCollectiveStoreName(order) {
|
||
return order.merName || order.storeName || order.companyName || '集采中心'
|
||
},
|
||
getCollectiveCity(order) {
|
||
return order.merCityName || order.cityName || order.city || ''
|
||
},
|
||
getOrderStoreName(order) {
|
||
if (this.isCollectiveCenterMode) {
|
||
return this.getCollectiveStoreName(order)
|
||
}
|
||
return order.merName || order.storeName || ''
|
||
},
|
||
getOrderCityName(order) {
|
||
if (this.isCollectiveCenterMode) {
|
||
return this.getCollectiveCity(order)
|
||
}
|
||
return order.merCityName || ''
|
||
},
|
||
getOrderTotalNum(order) {
|
||
if (this.isCollectiveCenterMode) {
|
||
return this.getCollectiveTotalNum(order)
|
||
}
|
||
return Number(order && order.totalNum) || 0
|
||
},
|
||
shouldShowOrderTotalAmount(order) {
|
||
if (this.isCollectiveCenterMode && this.isCollectiveCustomGiftOrder(order)) {
|
||
return false
|
||
}
|
||
return true
|
||
},
|
||
getOrderPayPrice(order) {
|
||
return Number(order && order.payPrice) || 0
|
||
},
|
||
getOrderStatusTagText(order) {
|
||
if (this.isCollectiveCenterMode) {
|
||
return this.getStatus(order) || (order._status && order._status._title) || '已完成'
|
||
}
|
||
return (order.isGiftCardSend || order.isGiftCardReceive)
|
||
? '礼包'
|
||
: (this.getStatus(order) || (order._status && order._status._title) || '已完成')
|
||
},
|
||
getCollectiveStatus(order) {
|
||
return this.getStatus(order) || (order._status && order._status._title) || '已完成'
|
||
},
|
||
getCollectiveScenarioCode(order) {
|
||
return Number(order && order.scenarioCode)
|
||
},
|
||
getCollectiveStatusType(order) {
|
||
return Number(order && order._status && order._status._type)
|
||
},
|
||
isCollectiveWholesalerOrder(order) {
|
||
return this.getCollectiveScenarioCode(order) === 22
|
||
},
|
||
isCollectiveCustomGiftOrder(order) {
|
||
return this.getCollectiveScenarioCode(order) === 24
|
||
},
|
||
isBlindBoxGiftOrder(order) {
|
||
return Number(order && order.isGiftCardReceiveBlind) === 1
|
||
},
|
||
getCollectiveProductList(order) {
|
||
return Array.isArray(order && order.cartInfo) ? order.cartInfo : []
|
||
},
|
||
getCollectiveCustomGiftList(order) {
|
||
const customGiftInfo = order && order.customGiftInfo
|
||
if (!this.isCollectiveCustomGiftOrder(order)) {
|
||
return []
|
||
}
|
||
if (!customGiftInfo || typeof customGiftInfo !== 'object' || Array.isArray(customGiftInfo)) {
|
||
return []
|
||
}
|
||
return [customGiftInfo]
|
||
},
|
||
formatCollectiveImage(image) {
|
||
const imageUrl = String(image || '').trim()
|
||
if (!imageUrl) {
|
||
return ''
|
||
}
|
||
if (/^https?:\/\//i.test(imageUrl)) {
|
||
return imageUrl
|
||
}
|
||
if (imageUrl.startsWith('//')) {
|
||
return `https:${imageUrl}`
|
||
}
|
||
if (imageUrl.startsWith('/')) {
|
||
const apiBaseUrl = String(this.$VUE_APP_API_URL || '').replace(/\/api\/?$/, '')
|
||
return `${apiBaseUrl}${imageUrl}`
|
||
}
|
||
return imageUrl
|
||
},
|
||
normalizeCollectiveDisplayItem(item = {}, isCustomGift = false) {
|
||
if (isCustomGift) {
|
||
return {
|
||
image: this.formatCollectiveImage(item.giftImage),
|
||
name: item.giftName || '商品信息',
|
||
sku: item.specName || '',
|
||
qty: Number(item.giftNum) || 1,
|
||
price: 0,
|
||
showPrice: false,
|
||
giftValue: Number(item.giftValue) || 0,
|
||
isShowValue: Number(item.isShowValue) || 0,
|
||
isCustomGift: true
|
||
}
|
||
}
|
||
const productInfo = item.productInfo || {}
|
||
const attrInfo = productInfo.attrInfo || {}
|
||
const rawPrice =
|
||
item.truePrice ||
|
||
item.price ||
|
||
item.productPrice ||
|
||
item.unitPrice ||
|
||
attrInfo.price ||
|
||
productInfo.price ||
|
||
0
|
||
const rawSku =
|
||
item.sku ||
|
||
item.spec ||
|
||
item.specName ||
|
||
item.attrValue ||
|
||
item.attrName ||
|
||
item.unitName ||
|
||
item.unit ||
|
||
attrInfo.sku ||
|
||
''
|
||
const rawQty =
|
||
item.cartNum ||
|
||
item.num ||
|
||
item.productNum ||
|
||
item.quantity ||
|
||
item.qty ||
|
||
item.giftNum ||
|
||
1
|
||
return {
|
||
image: this.formatCollectiveImage(
|
||
item.image ||
|
||
item.productImage ||
|
||
item.giftImage ||
|
||
item.cover ||
|
||
productInfo.image ||
|
||
attrInfo.image ||
|
||
''
|
||
),
|
||
name:
|
||
item.storeName ||
|
||
item.productName ||
|
||
item.giftName ||
|
||
item.name ||
|
||
item.title ||
|
||
'商品信息',
|
||
price: Number(rawPrice) || 0,
|
||
showPrice: true,
|
||
sku: rawSku,
|
||
qty: Number(rawQty) || 1,
|
||
isCustomGift
|
||
}
|
||
},
|
||
getCollectiveDisplayItems(order) {
|
||
if (this.isBlindBoxGiftOrder(order)) {
|
||
return []
|
||
}
|
||
if (this.isCollectiveCustomGiftOrder(order)) {
|
||
return this.getCollectiveCustomGiftList(order).map(item => this.normalizeCollectiveDisplayItem(item, true))
|
||
}
|
||
if (this.isCollectiveWholesalerOrder(order)) {
|
||
return this.getCollectiveProductList(order).map(item => this.normalizeCollectiveDisplayItem(item))
|
||
}
|
||
return []
|
||
},
|
||
getCollectiveTotalNum(order) {
|
||
const totalNum = Number(order && order.totalNum)
|
||
if (totalNum > 0) {
|
||
return totalNum
|
||
}
|
||
return this.getCollectiveDisplayItems(order).reduce((sum, item) => sum + Number(item.qty || 0), 0)
|
||
},
|
||
getCollectiveProductImage(cart) {
|
||
const productInfo = (cart && cart.productInfo) || {}
|
||
const attrInfo = productInfo.attrInfo || {}
|
||
return productInfo.image || attrInfo.image || ''
|
||
},
|
||
getCollectiveProductName(cart) {
|
||
const productInfo = (cart && cart.productInfo) || {}
|
||
return productInfo.storeName || cart.storeName || '商品信息'
|
||
},
|
||
getCollectiveProductSku(cart) {
|
||
const productInfo = (cart && cart.productInfo) || {}
|
||
const attrInfo = productInfo.attrInfo || {}
|
||
return attrInfo.sku || cart.sku || ''
|
||
},
|
||
showCollectiveContact(order) {
|
||
const statusType = this.getCollectiveStatusType(order)
|
||
if (!this.isCollectiveWholesalerOrder(order)) {
|
||
return false
|
||
}
|
||
return Boolean(
|
||
(order.merName || order.storeName || order.merPhone || order.merId) &&
|
||
[1, 2, 4, -1, -2, -3].includes(statusType)
|
||
)
|
||
},
|
||
showCollectiveModifyAddress(order) {
|
||
const statusType = this.getCollectiveStatusType(order)
|
||
if (statusType !== 1) {
|
||
return false
|
||
}
|
||
if (!(this.isCollectiveWholesalerOrder(order) || this.isCollectiveCustomGiftOrder(order))) {
|
||
return false
|
||
}
|
||
return this.canShowModifyAddress(order)
|
||
},
|
||
showCollectiveDelete(order) {
|
||
return Number(order._status && order._status._type) === 9
|
||
},
|
||
showCollectiveTakeOrder(order) {
|
||
return this.getCollectiveStatusType(order) === 2
|
||
},
|
||
showCollectiveDetail(order) {
|
||
const statusType = this.getCollectiveStatusType(order)
|
||
if (this.isCollectiveCustomGiftOrder(order)) {
|
||
return [1, 4].includes(statusType)
|
||
}
|
||
if (this.isCollectiveWholesalerOrder(order)) {
|
||
return [1, 4, -1, -2, -3].includes(statusType)
|
||
}
|
||
return false
|
||
},
|
||
showCollectiveRefund(order) {
|
||
const statusType = this.getCollectiveStatusType(order)
|
||
if (!this.isCollectiveWholesalerOrder(order)) {
|
||
return false
|
||
}
|
||
return statusType === 2
|
||
},
|
||
isRefundFlow(order) {
|
||
if (!order) {
|
||
return false
|
||
}
|
||
const statusType = Number(order._status && order._status._type)
|
||
return statusType < 0
|
||
},
|
||
canShowModifyAddress(order) {
|
||
if (this.isRefundFlow(order)) {
|
||
return false
|
||
}
|
||
if (!order || order.isTravelGroup === 1 || order.isTickets === 1) {
|
||
return false
|
||
}
|
||
const type = parseInt(order._status && order._status._type)
|
||
if (type !== 1) {
|
||
return false
|
||
}
|
||
const isAddressUpdate = Number(order.isAddressUpdate || 0)
|
||
const addressUpdateStatus = Number(order.addressUpdateStatus || 0)
|
||
if (isAddressUpdate === 0) {
|
||
return true
|
||
}
|
||
return false
|
||
},
|
||
initUserLocation() {
|
||
uni.getLocation({
|
||
type: 'gcj02',
|
||
success: res => {
|
||
this.userLatitude = Number(res.latitude)
|
||
this.userLongitude = Number(res.longitude)
|
||
this.updateOrderDistances()
|
||
}
|
||
})
|
||
},
|
||
getOrderLocation(order) {
|
||
const info = order
|
||
const latitude = Number(info.merLatitude || 0)
|
||
const longitude = Number( info.merLongitude || 0)
|
||
if (!Number.isFinite(latitude) || !Number.isFinite(longitude) || latitude === 0 || longitude === 0) {
|
||
return null
|
||
}
|
||
return { latitude, longitude }
|
||
},
|
||
hasValidDistance(distance) {
|
||
if (distance == null) {
|
||
return false
|
||
}
|
||
const text = String(distance).trim().toLowerCase()
|
||
if (!text || text === '0' || text === '0km' || text === '0.0km') {
|
||
return false
|
||
}
|
||
return true
|
||
},
|
||
calculateDistance(lat1, lon1, lat2, lon2) {
|
||
if (!lat1 || !lon1 || !lat2 || !lon2) {
|
||
return ''
|
||
}
|
||
const R = 6371
|
||
const dLat = (lat2 - lat1) * Math.PI / 180
|
||
const dLon = (lon2 - lon1) * Math.PI / 180
|
||
const a =
|
||
Math.sin(dLat / 2) * Math.sin(dLat / 2) +
|
||
Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
|
||
Math.sin(dLon / 2) * Math.sin(dLon / 2)
|
||
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
|
||
const d = R * c
|
||
return d.toFixed(1) + 'km'
|
||
},
|
||
updateOrderDistances() {
|
||
if (!this.orderList.length || this.userLatitude == null || this.userLongitude == null) {
|
||
return
|
||
}
|
||
this.orderList = this.orderList.map(order => {
|
||
if (!order.experienceOrderInfo) {
|
||
return order
|
||
}
|
||
const oldDistance = order.distance || (order.experienceOrderInfo && order.experienceOrderInfo.distance)
|
||
if (this.hasValidDistance(oldDistance)) {
|
||
return order
|
||
}
|
||
const location = this.getOrderLocation(order)
|
||
if (!location) {
|
||
return order
|
||
}
|
||
const distance = this.calculateDistance(
|
||
this.userLatitude,
|
||
this.userLongitude,
|
||
location.latitude,
|
||
location.longitude
|
||
)
|
||
if (!distance) {
|
||
return order
|
||
}
|
||
const experienceOrderInfo = order.experienceOrderInfo
|
||
? {
|
||
...order.experienceOrderInfo,
|
||
distance
|
||
}
|
||
: order.experienceOrderInfo
|
||
return {
|
||
...order,
|
||
distance,
|
||
experienceOrderInfo
|
||
}
|
||
})
|
||
},
|
||
handleDateSelected(dateRange) {
|
||
|
||
const params = {
|
||
orderId: this.orderInfo.orderId,
|
||
orderStartDate: dateRange[0],
|
||
orderEndDate: dateRange[1]
|
||
}
|
||
uni.showLoading({
|
||
title: '加载中...',
|
||
mask: true,
|
||
})
|
||
sojoumOrderCheckInTime(params).then(res => {
|
||
if (res.status === 200) {
|
||
uni.showToast({
|
||
title: '入住时间修改成功',
|
||
icon: 'success'
|
||
})
|
||
this.changeType()
|
||
}
|
||
}).finally(() => {
|
||
uni.hideLoading();
|
||
})
|
||
},
|
||
editTime(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.showDatePicker = true
|
||
this.travelGroupOrderInfo = order.travelGroupOrderInfo
|
||
this.orderInfo = order
|
||
},
|
||
applyRefund(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
// 这里可以添加申请退款的逻辑,比如跳转到退款页面
|
||
uni.navigateTo({
|
||
url: '/pkg_product/views/sojoumOrderRefund?id=' + order.orderId
|
||
})
|
||
},
|
||
getTime(type) {
|
||
const timeMap = {
|
||
1:"48小时内",
|
||
2:"72小时内",
|
||
3:"24小时内",
|
||
4: "7天内",
|
||
5: "15天内"
|
||
}
|
||
return timeMap[type]
|
||
},
|
||
shareGift(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.giftItem = order
|
||
},
|
||
getGiftTips(giftCardInfo) {
|
||
// giftCardStatus int 礼品卡状态 0-未领取 1-已领取 2-已失效
|
||
// (1)礼品全部领取:礼品已全部被好友领取,不支持取消哦!
|
||
// (2)礼品部分领取:礼品已领取X/X份,不支持取消哦!
|
||
// (3)礼品还未被领取过:下单成功,记得分享给朋友领取哦
|
||
// giftNum int 礼品数量
|
||
// receiveNum int 已被领取数量
|
||
if (!giftCardInfo) {
|
||
return ''
|
||
}
|
||
if (giftCardInfo.giftCardStatus === 0) {
|
||
return giftCardInfo.receiveNum === 0 ? '下单成功,记得分享给朋友领取哦' : '礼品已领取' + giftCardInfo.receiveNum + '/' + giftCardInfo.giftNum + '份,不支持取消哦!'
|
||
} else if (giftCardInfo.giftCardStatus === 1) {
|
||
return giftCardInfo.giftNum === giftCardInfo.receiveNum ? '礼品已全部被好友领取,不支持取消哦!' : '礼品已领取' + giftCardInfo.receiveNum + '/' + giftCardInfo.giftNum + '份,不支持取消哦!'
|
||
} else if (giftCardInfo.giftCardStatus === 2) {
|
||
if (giftCardInfo.giftNum > 1) {
|
||
return `礼品已领取${giftCardInfo.receiveNum}/${giftCardInfo.giftNum}份${giftCardInfo.refundNum > 0 ? (',' + giftCardInfo.refundNum + '份已退回') : ''}`
|
||
}
|
||
return '该礼包已退款'
|
||
} else {
|
||
return '已取消'
|
||
}
|
||
},
|
||
handleBody() {
|
||
this.orderList.forEach((e) => {
|
||
e.showMore = false
|
||
})
|
||
this.$forceUpdate()
|
||
},
|
||
getOrderByIndex(orderOrIndex) {
|
||
if (typeof orderOrIndex === 'number') {
|
||
return this.orderList[orderOrIndex]
|
||
}
|
||
if (typeof orderOrIndex === 'string' && /^\d+$/.test(orderOrIndex)) {
|
||
return this.orderList[Number(orderOrIndex)]
|
||
}
|
||
return orderOrIndex
|
||
},
|
||
handleOrderStoreClick(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order || this.isCollectiveCenterMode) {
|
||
return
|
||
}
|
||
this.goStore(order)
|
||
},
|
||
delOrder(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
delOrderHandle(order.orderId).then(() => {
|
||
this.getOrderData()
|
||
const index = this.orderList.indexOf(order)
|
||
if (index > -1) {
|
||
this.orderList.splice(index, 1)
|
||
}
|
||
})
|
||
},
|
||
goStore(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
return
|
||
}
|
||
|
||
if (order.experienceOrderInfo) {
|
||
const experienceMerchantId =
|
||
order.merId ||
|
||
order.merchantId ||
|
||
order.hotelId ||
|
||
(order.experienceOrderInfo && order.experienceOrderInfo.merId) ||
|
||
(order.experienceOrderInfo && order.experienceOrderInfo.merchantId)
|
||
if (!experienceMerchantId) {
|
||
uni.showToast({
|
||
title: '未找到体验店信息',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.$yrouter.push({
|
||
path: "/pkg_product/views/experienceProjectDetail",
|
||
query: {
|
||
experienceMerchantId
|
||
}
|
||
})
|
||
return
|
||
}
|
||
if (order.isTravelGroup === 1) {
|
||
const travelStoreId =
|
||
order.merId ||
|
||
order.hotelId ||
|
||
order.travelMerchantId ||
|
||
(order.travelGroupOrderInfo && order.travelGroupOrderInfo.travelMerchantId) ||
|
||
(order.travelGroupOrderInfo && order.travelGroupOrderInfo.travelGroupProduct && order.travelGroupOrderInfo.travelGroupProduct.travelMerchantId)
|
||
if (!travelStoreId) {
|
||
uni.showToast({
|
||
title: '未找到旅居店铺信息',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.$yrouter.push({
|
||
path: "/pkg_product/views/sojoumStore",
|
||
query: {
|
||
id: travelStoreId
|
||
}
|
||
})
|
||
return
|
||
}
|
||
if(!order.hotelId) {
|
||
uni.showToast({
|
||
title: '未找到相关店铺!'
|
||
})
|
||
return
|
||
}
|
||
this.$yrouter.push({
|
||
path: "/pagesInn/inn/innHome",
|
||
query: {
|
||
id: order.hotelId
|
||
}
|
||
})
|
||
},
|
||
async toYuePay(payPwd) {
|
||
const that = this
|
||
const orderId = this.orderInfo.orderId
|
||
// 网络请求
|
||
await yuePayOrderHandle(orderId, "yue", that.from, payPwd).then(() => {
|
||
this.afterPaySuccess(orderId, (drawTicketResult) => {
|
||
this.setDrawTicketPopupFromQuery(drawTicketResult)
|
||
})
|
||
});
|
||
that.changeType();
|
||
this.payPassword = "";
|
||
},
|
||
pwdPopClose() {
|
||
this.isShowPayPwdPop = false
|
||
},
|
||
pwdPopFinish(payPwd) {
|
||
this.payPassword = payPwd
|
||
this.toYuePay(payPwd)
|
||
this.isShowPayPwdPop = false
|
||
},
|
||
subscribePay(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.orderInfo = order
|
||
uni.requestSubscribeMessage({
|
||
tmplIds: settings.SubscribeMessageTmplIds,
|
||
complete: () => this.pay = true
|
||
})
|
||
},
|
||
addressTap(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this._orderId = order.orderId
|
||
uni.setStorageSync('updateOrderSourceAddress', {
|
||
id: order.addressId || order.userAddressId || '',
|
||
realName: order.realName || '',
|
||
phone: order.userPhone || '',
|
||
userAddress: order.userAddress || ''
|
||
})
|
||
this.$yrouter.push({
|
||
path: "/pages/user/address/AddressManagement/index",
|
||
query: {
|
||
choosMode: 4
|
||
}
|
||
})
|
||
},
|
||
force2Decimal(v) {
|
||
return this.$force2Decimal(v)
|
||
},
|
||
callMerPhone(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
const phone = String((order && order.merPhone) || '').trim()
|
||
if (!phone) {
|
||
uni.showToast({
|
||
title: '暂无电话',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
uni.makePhoneCall({
|
||
phoneNumber: phone
|
||
})
|
||
},
|
||
goRoom(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
if (order.experienceOrderInfo) {
|
||
const phone = order.merchantPhone || order.merPhone || order.experienceOrderInfo.phone || order.companyTel
|
||
if (phone) {
|
||
uni.makePhoneCall({
|
||
phoneNumber: phone
|
||
})
|
||
} else {
|
||
uni.showToast({ title: '暂无商家电话', icon: 'none' })
|
||
}
|
||
return
|
||
}
|
||
if(order.isTravelGroup === 1) {
|
||
// 拨打商家电话
|
||
uni.makePhoneCall({
|
||
phoneNumber: order.merPhone,
|
||
})
|
||
return
|
||
}
|
||
const params = {
|
||
goodsId: order.cartInfo[0].productId,
|
||
goodsName: order.cartInfo[0].productInfo.storeName,
|
||
skuStr: order.cartInfo[0].productInfo.attrInfo.sku,
|
||
price: order.cartInfo[0].productInfo.attrInfo.price,
|
||
seckillId: order.cartInfo[0].seckillId,
|
||
cover: order.cartInfo[0].productInfo.attrInfo.image,
|
||
goodsData: '',
|
||
seckillData: ''
|
||
}
|
||
uni.navigateTo({
|
||
url: `/pkg_common/views/room?id=${order.merId}&name=${order.merName}¶ms=${JSON.stringify(params)}`
|
||
})
|
||
},
|
||
goRefund(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
// fix bug#1631
|
||
if (this.type === 4 || parseInt(order._status._type) === 3) {
|
||
// 打开售后的目的就是开启已完成/待评价订单的退款功能,确认打开售后之后,小程序用户再点击申请退款,就可以进入退款申请填写页面,正常走退款流程,提交退款申请以后,订单状态变为退款中
|
||
if (order.refundSystemStatus === 0) {
|
||
uni.showToast({
|
||
title: '订单已收货,如需退款请联系商家',
|
||
mask: false,
|
||
icon: 'none',
|
||
duration: 3000
|
||
})
|
||
} else {
|
||
uni.navigateTo({
|
||
url: `/pkg_orders/views/refund?id=${order.orderId}`
|
||
})
|
||
}
|
||
} else {
|
||
uni.navigateTo({
|
||
url: `/pkg_orders/views/refund?id=${order.orderId}`
|
||
})
|
||
}
|
||
},
|
||
goLogistics(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.$yrouter.push({
|
||
path: "/pagesOrder/order/Logistics/index",
|
||
query: {
|
||
id: order.orderId
|
||
}
|
||
});
|
||
},
|
||
goOrderDetails(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
if (order.experienceOrderInfo) {
|
||
this.$yrouter.push({
|
||
path: "/pkg_product/views/experienceCouponOrderDetail",
|
||
query: {
|
||
orderId: order.orderId
|
||
}
|
||
});
|
||
return
|
||
}
|
||
if(order.isTravelGroup === 1) {
|
||
this.$yrouter.push({
|
||
path: "/pkg_product/views/sojoumOrderDetails",
|
||
query: {
|
||
id: order.orderId,
|
||
isView: 1
|
||
}
|
||
});
|
||
return
|
||
}
|
||
this.$yrouter.push({
|
||
path: "/pagesOrder/order/OrderDetails/index",
|
||
query: {
|
||
id: order.orderId,
|
||
isGift: order.isGiftCardSend ? 1 : ''
|
||
}
|
||
})
|
||
},
|
||
setOfflinePayStatus: function (status) {
|
||
const that = this
|
||
that.offlinePayStatus = status
|
||
if (status === 1) {
|
||
if (that.payType.indexOf("offline") < 0) {
|
||
that.payType.push("offline")
|
||
}
|
||
}
|
||
},
|
||
gotoGoodDetail(orderOrIndex, cartOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
const cartList = Array.isArray(order && order.cartInfo) ? order.cartInfo : []
|
||
const cart = typeof cartOrIndex === 'number' ? cartList[cartOrIndex] : cartOrIndex
|
||
if (!cart) {
|
||
uni.showToast({
|
||
title: '未获取到商品信息',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
const productInfo = cart.productInfo || {}
|
||
let type = 1
|
||
let id = productInfo.id || cart.productId || ''
|
||
if (Number(cart.combinationId) > 0) {
|
||
type = 2
|
||
id = cart.combinationId
|
||
} else if (Number(cart.bargainId) > 0) {
|
||
type = 3
|
||
id = cart.bargainId
|
||
} else if (Number(cart.seckillId) > 0) {
|
||
type = 4
|
||
id = cart.seckillId
|
||
}
|
||
if (!id) {
|
||
uni.showToast({
|
||
title: '未获取到商品详情参数',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
// isProductStillExist:0-不存在,1-存在
|
||
const isProductStillExist = Number(cart.isProductStillExist || 0)
|
||
if (isProductStillExist === 0) {
|
||
this.$dialog.toast({ mes: '商品已下架' })
|
||
return
|
||
}
|
||
let path = ''
|
||
switch(type) {
|
||
case 1:
|
||
path = '/pages/shop/GoodsCon/index'
|
||
break
|
||
case 2:
|
||
path = '/pages/activity/GroupDetails/index'
|
||
break
|
||
case 3:
|
||
path = '/pages/activity/DargainDetails/index'
|
||
break
|
||
case 4:
|
||
path = '/pages/activity/SeckillDetails/index'
|
||
break
|
||
}
|
||
if (!path) {
|
||
uni.showToast({
|
||
title: '未找到商品详情页',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
this.$yrouter.push({
|
||
path,
|
||
query: { id }
|
||
})
|
||
},
|
||
getOrderData() {
|
||
getOrderData().then(res => {
|
||
this.orderData = res.data
|
||
})
|
||
},
|
||
takeOrder(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
const that = this
|
||
uni.showModal({
|
||
title: '是否确认收货?',
|
||
content: '',
|
||
showCancel: true,
|
||
cancelText: '取消',
|
||
confirmText: '确认',
|
||
success: res => {
|
||
if (res.confirm) {
|
||
takeOrderHandle(order.orderId).finally(() => {
|
||
that.reload()
|
||
that.getOrderData()
|
||
})
|
||
}
|
||
}
|
||
})
|
||
},
|
||
reload() {
|
||
this.changeType(this.type)
|
||
},
|
||
normalizeOrderList(list = []) {
|
||
const orderKeySet = new Set()
|
||
return list.reduce((result, item) => {
|
||
const orderKey = item && (item.orderId || item.id)
|
||
if (orderKey && orderKeySet.has(orderKey)) {
|
||
return result
|
||
}
|
||
if (orderKey) {
|
||
orderKeySet.add(orderKey)
|
||
}
|
||
result.push({
|
||
...item,
|
||
showMore: false
|
||
})
|
||
return result
|
||
}, [])
|
||
},
|
||
tabChange(item) {
|
||
this.type = item.index
|
||
const query = this.getPageQuery()
|
||
query.type = this.type
|
||
this.changeType()
|
||
},
|
||
orderTypeTabChange(item, options = {}) {
|
||
const { resetFilters = true } = options
|
||
this.orderTypeTabIndex = item.index
|
||
this.orderType = item.orderType
|
||
const query = this.getPageQuery()
|
||
query.tabIndex = this.orderTypeTabIndex
|
||
this.updateTabListByOrderType()
|
||
if (resetFilters) {
|
||
this.type = 0
|
||
this.resetFilterConditions()
|
||
} else if (this.type > this.tabList.length - 1) {
|
||
this.type = 0
|
||
}
|
||
query.type = this.type
|
||
this.changeType(this.type)
|
||
},
|
||
updateTabListByOrderType() {
|
||
this.tabList = this.getDefaultTabListByOrderType()
|
||
},
|
||
goUserCenter() {
|
||
this.$yrouter.switchTab({
|
||
path: '/pages/user/User/index'
|
||
})
|
||
},
|
||
changeType() {
|
||
this.orderListRequestId += 1
|
||
this.orderList = []
|
||
this.page = 1
|
||
this.loaded = false
|
||
this.loading = false
|
||
this.getOrderListReq()
|
||
},
|
||
getOrderListReq() {
|
||
if (this.loading || this.loaded) return
|
||
this.loading = true
|
||
const currentRequestId = this.orderListRequestId
|
||
uni.showLoading({
|
||
mask: true,
|
||
})
|
||
const typeMap = this.getRequestTypeMapByOrderType()
|
||
const type = typeMap[this.type]
|
||
const {
|
||
page,
|
||
limit,
|
||
keyword,
|
||
orderType
|
||
} = this
|
||
getOrderList({
|
||
page,
|
||
limit,
|
||
type,
|
||
keyword,
|
||
orderType
|
||
}).then(res => {
|
||
if (currentRequestId !== this.orderListRequestId) {
|
||
return
|
||
}
|
||
const nextOrderList = page === 1 ? res.data : this.orderList.concat(res.data)
|
||
this.orderList = this.normalizeOrderList(nextOrderList)
|
||
this.updateOrderDistances()
|
||
this.page = page + 1
|
||
this.loaded = res.data.length < this.limit
|
||
}).finally(() => {
|
||
if (currentRequestId !== this.orderListRequestId) {
|
||
return
|
||
}
|
||
this.loading = false
|
||
uni.hideLoading()
|
||
});
|
||
},
|
||
tapShowMore(index) {
|
||
const order = this.getOrderByIndex(index)
|
||
if (!order) {
|
||
return
|
||
}
|
||
order.showMore = !order.showMore;
|
||
this.$set(this.orderList, index, order);
|
||
},
|
||
getStatus(order) {
|
||
const type = parseInt(order._status._type)
|
||
let status = "";
|
||
switch (type) {
|
||
case 0:
|
||
status = "待付款"
|
||
break;
|
||
case 1:
|
||
status = order.isTravelGroup === 1 ? "待确认" : "待发货"
|
||
break;
|
||
case 2:
|
||
status = order.isTravelGroup === 1 ? "待使用" : "待收货"
|
||
break;
|
||
case 3:
|
||
status = "待评价"
|
||
break;
|
||
case 4:
|
||
status = "已完成"
|
||
break;
|
||
case -1:
|
||
status = "退款中"
|
||
break;
|
||
case -2:
|
||
status = "退款成功"
|
||
break;
|
||
case -3:
|
||
status = "退款失败"
|
||
break;
|
||
case 9:
|
||
status = "已取消"
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return status
|
||
},
|
||
cancelOrder(orderOrIndex) {
|
||
const order = this.getOrderByIndex(orderOrIndex)
|
||
if (!order) {
|
||
uni.showToast({
|
||
title: '订单信息异常',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
cancelOrderHandle(order.orderId).then(() => {
|
||
this.getOrderData();
|
||
this.orderList.splice(this.orderList.indexOf(order), 1)
|
||
}).catch(() => {
|
||
this.reload()
|
||
})
|
||
},
|
||
paymentTap(order) {
|
||
const that = this
|
||
if (
|
||
!(order.combinationId > 0 || order.bargainId > 0 || order.seckillId > 0)
|
||
) {
|
||
that.setOfflinePayStatus(order.offlinePayStatus)
|
||
}
|
||
this.pay = true;
|
||
this.toPay = type => {
|
||
payOrderHandle(order.orderId, type, that.from).then(() => {
|
||
const type = parseInt(this.$yroute.query.type) || 0
|
||
that.changeType(type);
|
||
that.getOrderData();
|
||
}).catch(() => {
|
||
const type = parseInt(that.$yroute.query.type) || 0
|
||
that.changeType(type);
|
||
that.getOrderData();
|
||
})
|
||
}
|
||
},
|
||
toPay(type) {
|
||
// 余额支付需要输入支付密码
|
||
if (type == "yue") {
|
||
this.isShowPayPwdPop = true
|
||
return
|
||
} else {
|
||
const orderId = this.orderInfo.orderId
|
||
payOrderHandle(orderId, type, this.from).then(() => {
|
||
this.afterPaySuccess(orderId, (drawTicketResult) => {
|
||
this.setDrawTicketPopupFromQuery(drawTicketResult)
|
||
})
|
||
})
|
||
}
|
||
},
|
||
toDelay(id) {
|
||
this.delayId = id
|
||
this.showExtend = true
|
||
},
|
||
toDelayCancel() {
|
||
this.showExtend = false
|
||
},
|
||
doneDelay() {
|
||
orderDelay(this.delayId).then(() => {
|
||
this.showExtend = false
|
||
this.reload()
|
||
})
|
||
}
|
||
},
|
||
onReachBottom() {
|
||
!this.loading && this.getOrderListReq()
|
||
}
|
||
};
|
||
</script>
|
||
<style>
|
||
|
||
.my-order .u-tabs{
|
||
background-color: transparent !important;
|
||
position: sticky !important;
|
||
}
|
||
.my-order .u-tabs__wrapper__nav__item{
|
||
padding: 0 8rpx !important;
|
||
}
|
||
.my-order .u-search__content{
|
||
box-shadow: 0rpx 6rpx 12rpx rgba(0,0,0,0.1);
|
||
}
|
||
</style>
|
||
<style scoped lang="less">
|
||
page {
|
||
background-color: #fff;
|
||
}
|
||
.order-tips{
|
||
height: 44rpx;
|
||
background: rgba(0,0,0,0.05);
|
||
border-radius: 40rpx;
|
||
padding: 5rpx 24rpx;
|
||
line-height: 44rpx;
|
||
}
|
||
.m-tab-warp{
|
||
position: sticky;
|
||
top: 0;
|
||
background-color: #f5f5f5;
|
||
z-index: 1;
|
||
}
|
||
/deep/ .u-tabs {
|
||
position: fixed;
|
||
z-index: 1;
|
||
background-color: #fff;
|
||
left: 0;
|
||
top: 0
|
||
}
|
||
|
||
.list {
|
||
.item:first-child{
|
||
margin-top: 0;
|
||
}
|
||
.item {
|
||
margin: 30rpx 0;
|
||
border-radius: 12rpx;
|
||
|
||
.shop-info {
|
||
padding: 20rpx 16rpx;
|
||
// border-bottom: 2rpx solid #eee;
|
||
|
||
.name {
|
||
margin-left: 6rpx;
|
||
color: #333;
|
||
font-size: 24rpx;
|
||
line-height: 36rpx;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.address {
|
||
margin-left: 4rpx;
|
||
color: #C52733;
|
||
font-size: 22rpx;
|
||
line-height: 36rpx;
|
||
}
|
||
}
|
||
|
||
.title {
|
||
border-bottom: none;
|
||
height: 70rpx !important
|
||
}
|
||
|
||
.item-info {
|
||
margin: 0 30rpx;
|
||
padding: 0 0 0 0;
|
||
}
|
||
|
||
.totalPrice {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.bottom {
|
||
border-top: 0rpx solid #eee;
|
||
height: auto !important;
|
||
padding: 0 30rpx 30rpx 30rpx !important;
|
||
.bnt {
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
width: 128rpx;
|
||
height: 44rpx;
|
||
border-radius: 40rpx;
|
||
font-size: 24rpx;
|
||
// font-weight: bold;
|
||
border: 1px solid #707070;
|
||
color: #333;
|
||
padding: 1px 3px;
|
||
}
|
||
|
||
.service {
|
||
border: 1px solid #707070;
|
||
color: #333;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.noCart {
|
||
margin-top: 0.17 * 100rpx;
|
||
padding-top: 0.1 * 100rpx;
|
||
}
|
||
|
||
.noCart .pictrue {
|
||
width: 408rpx;
|
||
height: 414rpx;
|
||
overflow: hidden;
|
||
margin: 0.7 * 100rpx auto 0.5 * 100rpx auto;
|
||
}
|
||
.ssj.pictrue{
|
||
width: 160rpx !important;
|
||
height: 160rpx !important;
|
||
border-radius: 16rpx !important;
|
||
}
|
||
.my-order .list .item .item-info .text {
|
||
width: 448rpx !important;
|
||
font-size: 28rpx;
|
||
color: #999;
|
||
margin-top: 6rpx;
|
||
}
|
||
.noCart .pictrue image {
|
||
width: 408rpx;
|
||
height: 414rpx;
|
||
}
|
||
|
||
.statusTag {
|
||
font-size: 24rpx;
|
||
color: #fff;
|
||
padding: 4rpx 20rpx;
|
||
background: #0DC5C5;
|
||
height: 38rpx;
|
||
line-height: 38rpx;
|
||
border-radius: 60rpx 0px 0px 60rpx;
|
||
}
|
||
|
||
.group-btn {
|
||
position: relative;
|
||
|
||
.btn-more {
|
||
color: #999;
|
||
font-size: 28rpx;
|
||
}
|
||
|
||
.group-float {
|
||
position: absolute;
|
||
width: 196rpx;
|
||
box-sizing: border-box;
|
||
box-shadow: 0 2px 16px rgba(0, 0, 0, 0.16);
|
||
padding: 0 20rpx;
|
||
background: #fff;
|
||
|
||
.btn {
|
||
box-sizing: border-box;
|
||
padding: 20rpx 0;
|
||
color: #333;
|
||
font-size: 32rpx;
|
||
line-height: 1;
|
||
}
|
||
|
||
.btn-service {
|
||
border-bottom: 1rpx solid #F0F0F0;
|
||
}
|
||
}
|
||
}
|
||
.my-order .list .item .item-info .name-wrap,
|
||
.my-order .list .item .item-info .attr-wrap {
|
||
justify-content: space-between;
|
||
}
|
||
.my-order .list .item .item-info .attr-wrap {
|
||
margin: 10rpx 0 0 0;
|
||
}
|
||
.my-order .list .item .item-info .gift-value-row {
|
||
margin-top: 12rpx;
|
||
line-height: 36rpx;
|
||
}
|
||
.my-order .list .item .item-info .text .name {
|
||
width: calc(100% - 120rpx);
|
||
}
|
||
.tips-text{
|
||
padding: 0 12rpx;
|
||
height: 60rpx;
|
||
background: rgba(248,246,246,0.39);
|
||
color: #C52733;
|
||
line-height: 60rpx;
|
||
margin-bottom: 30rpx;
|
||
}
|
||
.gift-btn{
|
||
display: flex;
|
||
align-items: center;
|
||
text-align: center;
|
||
height: 52rpx;
|
||
padding: 0 12rpx;
|
||
border-radius: 100rpx;
|
||
border: 1px solid #C52733 !important;
|
||
line-height: 60rpx;
|
||
font-size: 26rpx;
|
||
color: #C52733;
|
||
background: #fff;
|
||
padding: 1px 3px;
|
||
width: 142rpx;
|
||
width: 142rpx;
|
||
justify-content: center;
|
||
margin-right: 20rpx;
|
||
}
|
||
.item-info .pictrue{
|
||
width: 160rpx !important;
|
||
height: 160rpx !important;
|
||
}
|
||
.draw-order-info .draw-price{
|
||
text-align: right;
|
||
}
|
||
.draw-order-info .draw-price-origin{
|
||
color: #999;
|
||
text-decoration: line-through;
|
||
}
|
||
.draw-order-info .draw-qty{
|
||
margin-top: 8rpx;
|
||
}
|
||
.draw-code-row{
|
||
margin: 0rpx 0rpx 20rpx 30rpx;
|
||
padding-top: 20rpx;
|
||
}
|
||
.draw-ticket-code{
|
||
margin-left: 8rpx;
|
||
}
|
||
.draw-status-tag{
|
||
color: #fff;
|
||
background: #c52733;
|
||
border-radius: 999rpx;
|
||
padding: 6rpx 24rpx;
|
||
line-height: 1.4;
|
||
}
|
||
</style>
|