Files
xdd-uniapp-new/pages/order/MyOrder/index.vue
T
2026-07-24 11:35:35 +08:00

1820 lines
58 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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="请输入商品名/订单号/团购名称"
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="order.merName && !order.experienceOrderInfo"
class="shop-info flex jc-between ai-center"
style="padding-bottom: 0"
@click="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 }}</text>
<image
:src="webUrl+'/orderIcon/arrow.png'"
style="width: 24rpx;height: 24rpx; margin-top: 5rpx"
/>
</view>
<view 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">{{ order.merCityName }}</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"
>{{ (order.isGiftCardSend || order.isGiftCardReceive) ? '礼包' : (getStatus(order) || (order._status && order._status._title) || '已完成') }}</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="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(cart, 1, { id: cart.productInfo.id })"
/>
<image
v-else-if="cart.combinationId > 0"
:src="cart.productInfo.image"
@click.stop="gotoGoodDetail(cart, 2, { id: cart.combinationId })"
/>
<image
v-else-if="cart.bargainId > 0"
:src="cart.productInfo.image"
@click.stop="gotoGoodDetail(cart, 3, { id: cart.bargainId })"
/>
<image
v-else-if="cart.seckillId > 0"
:src="cart.productInfo.image"
@click.stop="gotoGoodDetail(cart, 4, { id: cart.seckillId })"
/>
</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">
{{ 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-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"
>
<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>
<view 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 {
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' }
],
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"]),
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() {
this.type = this.type || parseInt(this.$yroute.query.type) || 0
this.orderTypeTabIndex = parseInt(this.$yroute.query.tabIndex) || 0
this.initUserLocation()
this.orderTypeTabChange({
...this.orderTypeTabList[this.orderTypeTabIndex],
index: this.orderTypeTabIndex
})
},
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: {
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
},
delOrder(orderOrIndex) {
const order = this.getOrderByIndex(orderOrIndex)
if (!order) {
uni.showToast({
title: '订单信息异常',
icon: 'none'
})
return
}
delOrderHandle(order.orderId).then(() => {
this.changeType()
})
},
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}&params=${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(cart, type, query){
// isProductStillExist:0-不存在,1-存在
const isProductStillExist = 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
}
this.$yrouter.push({ path, query })
},
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
this.$yroute.query.type = this.type
this.changeType()
},
orderTypeTabChange(item) {
this.orderTypeTabIndex = item.index
this.orderType = item.orderType
this.updateTabListByOrderType()
this.changeType(this.type)
},
updateTabListByOrderType() {
if (this.orderType === 'travel') {
this.tabList = [
{ name: '全部' },
{ name: '待付款' },
{ name: '待确认' },
{ name: '待使用' },
{ name: '退款/售后' },
{ name: '待评价' },
{ name: '已完成' }
]
} else {
this.tabList = [
{ name: '全部' },
{ name: '待付款' },
{ name: '待发货' },
{ name: '待收货/待核销' },
{ name: '退款/售后' },
{ name: '待评价' },
{ name: '已完成' }
]
}
},
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 types = {
0: 0,
1: 1,
2: 2,
3: 3,
4: -3,
5: 4,
6: 5,
}
const type = types[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 .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>