913 lines
30 KiB
Vue
913 lines
30 KiB
Vue
|
|
<template>
|
|||
|
|
<view :data-theme="theme">
|
|||
|
|
<view class='order-details'>
|
|||
|
|
<!-- 给header上与data上加on为退款订单-->
|
|||
|
|
<view class='header bg-color'>
|
|||
|
|
<view class='picTxt acea-row row-middle'>
|
|||
|
|
<view class='data'>
|
|||
|
|
<view class="flex">
|
|||
|
|
<view v-if="orderInfo.refundStatus == 3" class='state fs-36'>已退款</view>
|
|||
|
|
<!-- 次卡商品部分核销 -->
|
|||
|
|
<view v-else-if="orderInfo.status == 3 && secondType == ProductTypeEnum.PunchCard &&
|
|||
|
|
punchCardOrderInfo.verifyRemainingTimes!=punchCardOrderInfo.verifyTotalTimes" class="state fs-36">
|
|||
|
|
<text>部分使用</text>
|
|||
|
|
</view>
|
|||
|
|
<view v-else class='state fs-36'>{{orderInfo.status | orderStatusFilter}}</view>
|
|||
|
|
<!-- 次卡商品核销次数 -->
|
|||
|
|
<view v-if="orderInfo.status == 3 && secondType == ProductTypeEnum.PunchCard" class='state fs-36 ml-12'>
|
|||
|
|
{{punchCardOrderInfo.verifyTotalTimes-punchCardOrderInfo.verifyRemainingTimes}} /
|
|||
|
|
{{punchCardOrderInfo.verifyTotalTimes}}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view v-if="secondType === ProductTypeEnum.Reservation" class="fs-26 flex">
|
|||
|
|
<view class="">
|
|||
|
|
预约时间:{{merchantOrderList.reservationDate}}
|
|||
|
|
</view>
|
|||
|
|
<view class="ml-16">
|
|||
|
|
{{merchantOrderList.reservationTimeSlot}}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view v-else-if="secondType === ProductTypeEnum.PunchCard" class="fs-26 flex">
|
|||
|
|
使用时间:
|
|||
|
|
<view v-if="punchCardOrderInfo.verifyEndDate" class="flex">
|
|||
|
|
<view>{{punchCardOrderInfo.verifyStartDate}}</view>
|
|||
|
|
<view>~</view>
|
|||
|
|
<view>{{punchCardOrderInfo.verifyEndDate}}</view>
|
|||
|
|
<view class="ml-8">到期</view>
|
|||
|
|
</view>
|
|||
|
|
<view v-else>无限期</view>
|
|||
|
|
</view>
|
|||
|
|
<view v-else class="fs-26">
|
|||
|
|
<view v-if="orderInfo.createTime && orderInfo.status>0">{{orderInfo.createTime}}</view>
|
|||
|
|
<view v-if="orderInfo.refundReasonTime !== null">{{orderInfo.refundReasonTime}}</view>
|
|||
|
|
<view v-if="orderInfo.status===0">请在{{orderInfo.expirationTime}}前完成支付!</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="">
|
|||
|
|
<image class="orderStatusPng"
|
|||
|
|
:src="urlDomain+`crmebimage/presets/orderStatus/${statusPng[orderInfo.status]}.png`" mode=""></image>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="gradient-bg absolute" style="height: 100rpx;"></view>
|
|||
|
|
</view>
|
|||
|
|
<view style="margin-top: -100rpx;">
|
|||
|
|
<view class="borderPad relative z-10">
|
|||
|
|
<!-- 进度条 -->
|
|||
|
|
<progress-bar
|
|||
|
|
v-if="orderInfo.status !== 9 && orderInfo.refundStatus !== 3 && shippingType != 2 && shippingType != 4"
|
|||
|
|
:orderInfo="orderInfo" :status="orderInfo.status" :shippingType="shippingType" :secondType="secondType">
|
|||
|
|
</progress-bar>
|
|||
|
|
<!-- 预约信息 -->
|
|||
|
|
<reservation-info v-if="merchantOrderList && secondType === ProductTypeEnum.Reservation"
|
|||
|
|
:orderInfo="merchantOrderList" :codeUrl="codeImg" @copy="handleCopy" @showMaoLocation="showMaoLocation"
|
|||
|
|
@makePhone="makePhone">
|
|||
|
|
</reservation-info>
|
|||
|
|
<!-- 用户信息 -->
|
|||
|
|
<top-order-info
|
|||
|
|
v-if="merchantOrderList && Object.keys(merchantOrderList).length > 0 && shippingType == 1 && secondType !== ProductTypeEnum.Fictitious"
|
|||
|
|
:orderInfo="merchantOrderList" :secondType="secondType" :type="'merDelivery'"
|
|||
|
|
@showMaoLocation="showMaoLocation">
|
|||
|
|
</top-order-info>
|
|||
|
|
<!-- 商户信息 -->
|
|||
|
|
<top-order-info v-if="merchantOrderList && Object.keys(merchantOrderList).length > 0 && shippingType == 2"
|
|||
|
|
:orderInfo="merchantOrderList" :secondType="secondType" :type="'pickUp'" @showMaoLocation="showMaoLocation">
|
|||
|
|
</top-order-info>
|
|||
|
|
<!-- 收货地址只显示一次 -->
|
|||
|
|
<!-- <view v-if="isUserAddress && secondType !== ProductTypeEnum.Fictitious" class='wrapper borRadius14 address'>
|
|||
|
|
<view class='name'>{{userAddress[0].realName}}<text class='phone'>{{userAddress[0].userPhone}}</text>
|
|||
|
|
</view>
|
|||
|
|
<view>{{userAddress[0].userAddress}}</view>
|
|||
|
|
</view> -->
|
|||
|
|
<block v-for="(item, index) in orderInfo.merchantOrderList" :key="item.merId">
|
|||
|
|
<view v-if="item.shippingType == 2 && orderInfo.status == 3 && orderInfo.refundStatus !== 3">
|
|||
|
|
<!-- 核销码 -->
|
|||
|
|
<view class="writeOff borRadius14">
|
|||
|
|
<VerificationQRCode :codeImg="codeImg" :merOrderInfo="item" @handleCopy="handleCopy">
|
|||
|
|
</VerificationQRCode>
|
|||
|
|
</view>
|
|||
|
|
<!-- <view class="map borRadius14">
|
|||
|
|
<view class='title item acea-row row-between-wrapper'>
|
|||
|
|
<view>自提地址信息</view>
|
|||
|
|
<view class="place font-color acea-row row-center-wrapper" @tap="showMaoLocation(item)">
|
|||
|
|
<text class="iconfont icon-ic_location1"></text>查看位置
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="address">
|
|||
|
|
<view class='name' @tap="makePhone(item.merPhone)">{{item.merName}}<text
|
|||
|
|
class='phone'>{{item.merPhone}}</text><text class="iconfont icon-tonghua font-color"></text>
|
|||
|
|
</view>
|
|||
|
|
<view>{{item.merAddressDetail}}</view>
|
|||
|
|
</view>
|
|||
|
|
</view> -->
|
|||
|
|
<!-- <view class="writeOff borRadius14">
|
|||
|
|
<view class="title">核销信息</view>
|
|||
|
|
<view class="grayBg">
|
|||
|
|
<view class="pictrue">
|
|||
|
|
<image :src="codeImg"></image>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="gear">
|
|||
|
|
<image src="../static/images/writeOff.jpg"></image>
|
|||
|
|
</view>
|
|||
|
|
<view class="num">{{item.verifyCode}}</view>
|
|||
|
|
<view class="rules" v-if='item.systemStore'>
|
|||
|
|
<view class="item">
|
|||
|
|
<view class="rulesTitle acea-row row-middle">
|
|||
|
|
<text class="iconfont icon-icon_clock1"></text>核销时间
|
|||
|
|
</view>
|
|||
|
|
<view class="info">
|
|||
|
|
每日:<text class="time">{{item.systemStore.dayTime.replace(',','-')}}</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="item">
|
|||
|
|
<view class="rulesTitle acea-row row-middle">
|
|||
|
|
<text class="iconfont icon-a-ic_tanhao1"></text>使用说明
|
|||
|
|
</view>
|
|||
|
|
<view class="info">可将二维码出示给店员扫描或提供数字核销码</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view> -->
|
|||
|
|
</view>
|
|||
|
|
<view class="borRadius14 orderGoodsBox mt20">
|
|||
|
|
<view class="borderPad">
|
|||
|
|
<orderGoods :orderInfo="item" :orderNo="orderNo" :cartInfo="item.orderInfoList" :jump="true"
|
|||
|
|
:orderData="orderInfo" :secondType="orderInfo.secondType">
|
|||
|
|
</orderGoods>
|
|||
|
|
</view>
|
|||
|
|
<!-- 配送方式-->
|
|||
|
|
<!-- <DeliveryMethod :secondType="secondType" :orderInfo="orderInfo" :item="item" /> -->
|
|||
|
|
<!-- <view class='flex justify-between userRemarkBox'>
|
|||
|
|
<view class="f-s-28 color28">买家留言:</view>
|
|||
|
|
<view class='cor-86 f-s-28 userRemark'>{{item.userRemark || '-'}}</view>
|
|||
|
|
<view v-show="!isShow" @click="isShow=!isShow">
|
|||
|
|
<view class='mark_show f-s-28'>{{item.userRemark}}</view>
|
|||
|
|
</view>
|
|||
|
|
</view> -->
|
|||
|
|
</view>
|
|||
|
|
</block>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<!-- 预约信息 -->
|
|||
|
|
<view v-if="orderInfo.secondType == ProductTypeEnum.Reservation" class="borderPad">
|
|||
|
|
<view class="writeOff borRadius14 pad24">
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>预约时间:</view>
|
|||
|
|
<view>
|
|||
|
|
{{ merchantOrderList.orderInfoList[0].reservationDate || '-' }}
|
|||
|
|
{{ merchantOrderList.orderInfoList[0].reservationTimeSlot || '-' }}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between mt-32'>
|
|||
|
|
<view>预约数量:</view>
|
|||
|
|
<view>
|
|||
|
|
{{merchantOrderList.orderInfoList[0].payNum}}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<!-- 系统表单信息 "-->
|
|||
|
|
<view v-if="orderExtend.length" class="borderPad">
|
|||
|
|
<view>
|
|||
|
|
<systemFromInfo :orderExtend="orderExtend"></systemFromInfo>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
|
|||
|
|
<!-- 订单信息 "-->
|
|||
|
|
<view class="borderPad">
|
|||
|
|
<view class='wrapper borRadius14'>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>订单编号:</view>
|
|||
|
|
<view class='conter acea-row row-middle row-right' style="width: auto;"><text
|
|||
|
|
class="text-overflow">{{orderInfo.orderNo}}</text>
|
|||
|
|
<!-- #ifndef H5 -->
|
|||
|
|
<text class='order-copy-btn line-heightOne' @tap='handleCopy(orderInfo.orderNo)'>复制</text>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
<!-- #ifdef H5 -->
|
|||
|
|
<text class='order-copy-btn copy-data' :data-clipboard-text="orderInfo.orderNo">复制</text>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view
|
|||
|
|
v-show="(orderInfo.payType && secondType !== ProductTypeEnum.Integral) || (secondType === ProductTypeEnum.Integral && orderInfo.payPrice!=0)"
|
|||
|
|
class='item acea-row row-between'>
|
|||
|
|
<view>支付方式:</view>
|
|||
|
|
<view class='conter'>{{orderInfo.payType | payTypeFilter}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>支付状态:</view>
|
|||
|
|
<view class='conter' v-if="orderInfo.paid">已支付</view>
|
|||
|
|
<view class='conter' v-else>未支付</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>支付时间:</view>
|
|||
|
|
<view class='conter'>{{orderInfo.payTime || '-'}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>下单时间:</view>
|
|||
|
|
<view class='conter'>{{(orderInfo.createTime || 0)}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>买家留言:</view>
|
|||
|
|
<view class='conter'>{{merchantOrderList.userRemark || '-'}}</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view>
|
|||
|
|
<view class='wrapper borRadius14' v-if='orderInfo.deliveryType=="express"'>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>配送方式:</view>
|
|||
|
|
<view class='conter'>发货</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>快递公司:</view>
|
|||
|
|
<view class='conter'>{{orderInfo.deliveryName || ''}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>快递号:</view>
|
|||
|
|
<view class='conter'>{{orderInfo.deliveryId || ''}}</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='wrapper borRadius14' v-else-if='orderInfo.deliveryType=="send"'>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>配送方式:</view>
|
|||
|
|
<view class='conter'>送货</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>配送人姓名:</view>
|
|||
|
|
<view class='conter'>{{orderInfo.deliveryName || ''}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>联系电话:</view>
|
|||
|
|
<view class='conter acea-row row-middle row-right'>{{orderInfo.deliveryId || ''}}<text class='copy'
|
|||
|
|
@tap='goTel'>拨打</text></view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='wrapper borRadius14' v-else-if='orderInfo.deliveryType=="fictitious"'>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>虚拟发货:</view>
|
|||
|
|
<view class='conter'>已发货,请注意查收</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='wrapper borRadius14'>
|
|||
|
|
<view class='item acea-row row-between'>
|
|||
|
|
<view>商品总价:</view>
|
|||
|
|
<!-- 积分价格 -->
|
|||
|
|
<PointsPrice v-if="secondType === ProductTypeEnum.Integral" :pointsPrice="pointsPrice"
|
|||
|
|
:pointsGoodsStyle="hotPointsStyle"></PointsPrice>
|
|||
|
|
<!-- 其他价格 -->
|
|||
|
|
<view v-else class='conter'>¥{{orderInfo.proTotalPrice || 0}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between' v-if="orderInfo.payPostage > 0">
|
|||
|
|
<view>运费:</view>
|
|||
|
|
<view class='conter'>¥{{orderInfo.payPostage || 0}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between' v-if='orderInfo.svipDiscountPrice > 0'>
|
|||
|
|
<view>SVIP抵扣:</view>
|
|||
|
|
<view class='conter'>-¥{{orderInfo.svipDiscountPrice || 0}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between' v-if='orderInfo.merchantMemberDiscountPrice > 0'>
|
|||
|
|
<view>商户会员抵扣:</view>
|
|||
|
|
<view class='conter'>-¥{{orderInfo.merchantMemberDiscountPrice || 0}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between' v-if='orderInfo.merCouponPrice > 0'>
|
|||
|
|
<view>店铺优惠:</view>
|
|||
|
|
<view class='conter'>-¥{{orderInfo.merCouponPrice || 0}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between' v-if='orderInfo.platCouponPrice > 0'>
|
|||
|
|
<view>平台优惠:</view>
|
|||
|
|
<view class='conter'>-¥{{orderInfo.platCouponPrice || 0}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view class='item acea-row row-between' v-if="orderInfo.integralPrice > 0">
|
|||
|
|
<view>积分抵扣:</view>
|
|||
|
|
<view class='conter'>-¥{{orderInfo.integralPrice || 0}}</view>
|
|||
|
|
</view>
|
|||
|
|
<view v-show="secondType !== ProductTypeEnum.Integral" class='actualPay acea-row row-right'>
|
|||
|
|
<text>实付款:</text>
|
|||
|
|
<text class='money semiBold'>
|
|||
|
|
<text class="fs-24">¥</text>
|
|||
|
|
<text class="fs-40">{{orderInfo.payPrice || 0}}</text>
|
|||
|
|
</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view style='height:200rpx;'></view>
|
|||
|
|
|
|||
|
|
<!-- 底部按钮 --> <!-- v-show="isShowBtn" 订单状态(0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消) -->
|
|||
|
|
<view class='footer acea-row row-right row-middle'>
|
|||
|
|
<view class="qs-btn" v-show="orderInfo.status==0" @click.stop="cancelOrder">取消订单</view>
|
|||
|
|
<view class='bnt cancel'
|
|||
|
|
v-show="Number(orderInfo.status) >1 &&Number(orderInfo.status) < 9 && orderInfo.status!=3&&shippingType===1"
|
|||
|
|
@tap='godeliverRecord'>发货记录
|
|||
|
|
</view>
|
|||
|
|
<view class='bnt cancel' v-show="orderInfo.status==6 || orderInfo.status==9" @tap='delOrder'>删除订单
|
|||
|
|
</view>
|
|||
|
|
<view class='bnt bg-color' v-show="orderInfo.combinationId > 0" @tap='goJoinPink'>查看拼团</view>
|
|||
|
|
<view class='bnt' :class="orderInfo.status==4?'bg-color':'cancel'" v-show="(orderInfo.status>0) && isBuyAgain"
|
|||
|
|
@tap='goOrderConfirm'>
|
|||
|
|
再次购买</view>
|
|||
|
|
<view class='bnt bg-color' v-show="orderInfo.status==4 && orderInfo.refundStatus!==3" @tap='confirmOrder'>确认收货
|
|||
|
|
</view>
|
|||
|
|
<view class='bnt bg-color' v-show="orderInfo.status==0" @tap='goPay(orderInfo)'>立即付款</view>
|
|||
|
|
<view class='bnt bg-color'
|
|||
|
|
v-show="orderInfo.status==3 && orderInfo.refundStatus !== 3 && secondType === ProductTypeEnum.Reservation && orderInfo.isCancelServiceOrder"
|
|||
|
|
@tap='handleCancelReservation'>取消订单</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
<script>
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
// | Author: CRMEB Team <admin@crmeb.com>
|
|||
|
|
// +----------------------------------------------------------------------
|
|||
|
|
import easyLoadimage from '@/components/base/easy-loadimage.vue';
|
|||
|
|
import {
|
|||
|
|
getOrderDetail,
|
|||
|
|
orderTake,
|
|||
|
|
orderCancel,
|
|||
|
|
strToBase64Api,
|
|||
|
|
orderStatusImgApi
|
|||
|
|
} from '@/api/order.js';
|
|||
|
|
import {
|
|||
|
|
cartBatchAddApi
|
|||
|
|
} from '@/api/product.js';
|
|||
|
|
import orderGoods from "@/components/orderGoods";
|
|||
|
|
import ClipboardJS from "@/plugin/clipboard/clipboard.js";
|
|||
|
|
import {
|
|||
|
|
toLogin
|
|||
|
|
} from '@/libs/login.js';
|
|||
|
|
import {
|
|||
|
|
mapGetters
|
|||
|
|
} from "vuex";
|
|||
|
|
// #ifdef MP
|
|||
|
|
import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js'
|
|||
|
|
// #endif
|
|||
|
|
import {
|
|||
|
|
setThemeColor
|
|||
|
|
} from '@/utils/setTheme.js'
|
|||
|
|
import {
|
|||
|
|
Debounce
|
|||
|
|
} from '@/utils/validate.js'
|
|||
|
|
import {
|
|||
|
|
ProductTypeEnum,
|
|||
|
|
ProductMarketingTypeEnum
|
|||
|
|
} from "../../../enums/productEnums";
|
|||
|
|
import systemFromInfo from '@/components/systemFromInfo';
|
|||
|
|
import PointsPrice from '@/components/PointsPrice.vue';
|
|||
|
|
import ReservationInfo from './components/reservationInfo.vue';
|
|||
|
|
import VerificationQRCode from './components/verificationQRCode.vue'
|
|||
|
|
import topOrderInfo from './components/topOrderInfo.vue'
|
|||
|
|
import progressBar from './components/progressBar.vue'
|
|||
|
|
import {
|
|||
|
|
onDelOrder
|
|||
|
|
} from "../../../libs/order";
|
|||
|
|
import DeliveryMethod from "../../../components/DeliveryMethod";
|
|||
|
|
import {
|
|||
|
|
cancelReservationApi
|
|||
|
|
} from "../../../api/order";
|
|||
|
|
import util from "../../../utils/util";
|
|||
|
|
/**
|
|||
|
|
* 积分商品推荐样式
|
|||
|
|
*/
|
|||
|
|
const hotPointsStyle = {
|
|||
|
|
iconStyle: {
|
|||
|
|
width: '28rpx',
|
|||
|
|
height: '28rpx'
|
|||
|
|
},
|
|||
|
|
priceStyle: {
|
|||
|
|
fontSize: '28rpx',
|
|||
|
|
},
|
|||
|
|
unitStyle: {
|
|||
|
|
fontSize: '26rpx',
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
const app = getApp();
|
|||
|
|
export default {
|
|||
|
|
components: {
|
|||
|
|
orderGoods,
|
|||
|
|
easyLoadimage,
|
|||
|
|
systemFromInfo,
|
|||
|
|
PointsPrice,
|
|||
|
|
ReservationInfo,
|
|||
|
|
DeliveryMethod,
|
|||
|
|
VerificationQRCode,
|
|||
|
|
topOrderInfo,
|
|||
|
|
progressBar
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
codeImg: '',
|
|||
|
|
qrcodeSize: 100,
|
|||
|
|
orderNo: '',
|
|||
|
|
cartInfo: [], //购物车产品
|
|||
|
|
orderInfo: {
|
|||
|
|
systemStore: {},
|
|||
|
|
pstatus: {}
|
|||
|
|
}, //订单详情
|
|||
|
|
status: {}, //订单底部按钮状态
|
|||
|
|
totalPrice: '0',
|
|||
|
|
id: 0, //订单id
|
|||
|
|
uniId: '',
|
|||
|
|
utils: this.$util,
|
|||
|
|
againStatus: 0,
|
|||
|
|
type: 0, //订单类型 0-普通订单,1-视频号订单,2-秒杀订单
|
|||
|
|
secondType: 0, //订单二级类型:0-普通订单,1-积分订单,2-虚拟订单,4-视频号订单,5-云盘订单,6-卡密订单
|
|||
|
|
isShow: true,
|
|||
|
|
theme: app.globalData.theme,
|
|||
|
|
bgColor: '#e93323',
|
|||
|
|
userAddress: [],
|
|||
|
|
shippingType: 1,
|
|||
|
|
statusPic: '',
|
|||
|
|
isUserAddress: false, //是否只显示一次收货地址
|
|||
|
|
ProductMarketingTypeEnum: ProductMarketingTypeEnum,
|
|||
|
|
ProductTypeEnum: ProductTypeEnum,
|
|||
|
|
orderExtend: [], //系统表单数据
|
|||
|
|
isSplitDelivery: false, //是否拆单发货
|
|||
|
|
deliveryType: '', // 配送方式
|
|||
|
|
hotPointsStyle: hotPointsStyle,
|
|||
|
|
urlDomain: this.$Cache.get("imgHost"),
|
|||
|
|
statusPng: ['beforPay', 'beforSend', 'beforSend', 'beforPay', 'beforResaved', 'orderDone', 'orderDone',
|
|||
|
|
'', '', 'orderCancel'
|
|||
|
|
],
|
|||
|
|
isShowBtn: false, //是否展示底部按钮
|
|||
|
|
merchantOrderList: {}, //商户信息
|
|||
|
|
punchCardOrderInfo: {}, // 次卡商品信息
|
|||
|
|
spaceStr: ' ', // 空格字符
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
computed: {
|
|||
|
|
//是否可以再次购买
|
|||
|
|
isBuyAgain() {
|
|||
|
|
return this.type === ProductMarketingTypeEnum.Normal && this.secondType === this.ProductTypeEnum.Normal && !this
|
|||
|
|
.orderExtend.length
|
|||
|
|
},
|
|||
|
|
...mapGetters(['isLogin', 'chatUrl', 'userInfo']),
|
|||
|
|
//积分价格
|
|||
|
|
pointsPrice() {
|
|||
|
|
return {
|
|||
|
|
redeemIntegral: this.orderInfo.redeemIntegral,
|
|||
|
|
price: this.orderInfo.proTotalPrice
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
onLoad: function(options) {
|
|||
|
|
if (!options.orderNo) return this.$util.Tips({
|
|||
|
|
title: '缺少参数'
|
|||
|
|
}, {
|
|||
|
|
tab: 3,
|
|||
|
|
url: 1
|
|||
|
|
});
|
|||
|
|
this.$set(this, 'orderNo', options.orderNo);
|
|||
|
|
this.bgColor = setThemeColor();
|
|||
|
|
uni.setNavigationBarColor({
|
|||
|
|
frontColor: '#ffffff',
|
|||
|
|
backgroundColor: this.bgColor,
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
onShow() {
|
|||
|
|
if (this.isLogin) {
|
|||
|
|
this.getOrderInfo();
|
|||
|
|
} else {
|
|||
|
|
toLogin();
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onHide: function() {
|
|||
|
|
this.isClose = true;
|
|||
|
|
},
|
|||
|
|
// 滚动监听
|
|||
|
|
onPageScroll(e) {
|
|||
|
|
// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
|
|||
|
|
uni.$emit('scroll');
|
|||
|
|
},
|
|||
|
|
onReady: function() {
|
|||
|
|
// #ifdef H5
|
|||
|
|
this.$nextTick(function() {
|
|||
|
|
const clipboard = new ClipboardJS(".copy-data");
|
|||
|
|
clipboard.on("success", () => {
|
|||
|
|
this.$util.Tips({
|
|||
|
|
title: '复制成功'
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
// #endif
|
|||
|
|
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
//发货记录
|
|||
|
|
godeliverRecord() {
|
|||
|
|
uni.showLoading({
|
|||
|
|
title: '加载中...'
|
|||
|
|
});
|
|||
|
|
let order_logistics = `/pages/goods/order_logistics/index?orderNo=${this.orderInfo.orderNo}`
|
|||
|
|
let send_record = `/pages/goods/send_record/index?orderNo=${this.orderNo}&index=0`
|
|||
|
|
if (this.isSplitDelivery) {
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: order_logistics
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
let url = this.deliveryType === 'express' ? order_logistics : send_record
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: url
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 取消预约
|
|||
|
|
async handleCancelReservation() {
|
|||
|
|
const result = await uni.showModal({
|
|||
|
|
content: "取消订单将自动退款,确定取消吗?",
|
|||
|
|
});
|
|||
|
|
if (result[0] || result[1].cancel) return;
|
|||
|
|
try {
|
|||
|
|
await cancelReservationApi(this.orderNo)
|
|||
|
|
await this.$util.Tips({
|
|||
|
|
title: '取消预约成功'
|
|||
|
|
});
|
|||
|
|
await this.getOrderInfo();
|
|||
|
|
} catch (e) {
|
|||
|
|
this.$util.Tips({
|
|||
|
|
title: e
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 打开支付组件
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
goPay: Debounce(function(item) {
|
|||
|
|
uni.showLoading({
|
|||
|
|
title: '加载中...'
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: `/pages/goods/order_payment/index?orderNo=${item.orderNo}&payPrice=${item.payPrice}`
|
|||
|
|
});
|
|||
|
|
}),
|
|||
|
|
/**
|
|||
|
|
* 拨打电话
|
|||
|
|
*/
|
|||
|
|
makePhone: function(e) {
|
|||
|
|
uni.makePhoneCall({
|
|||
|
|
phoneNumber: e
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 打开地图
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
showMaoLocation: function(e) {
|
|||
|
|
if (!e.merLatitude || !e.merLongitude) return this.$util.Tips({
|
|||
|
|
title: '缺少经纬度信息无法查看地图!'
|
|||
|
|
});
|
|||
|
|
//#ifdef H5
|
|||
|
|
if (this.$wechat.isWeixin() === true) {
|
|||
|
|
this.$wechat.seeLocation({
|
|||
|
|
latitude: parseFloat(e.merLatitude),
|
|||
|
|
longitude: parseFloat(e.merLongitude),
|
|||
|
|
name: e.merName,
|
|||
|
|
address: e.merAddressDetail,
|
|||
|
|
}).then(res => {
|
|||
|
|
console.log('success');
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
//#endif
|
|||
|
|
uni.openLocation({
|
|||
|
|
latitude: parseFloat(e.merLatitude),
|
|||
|
|
longitude: parseFloat(e.merLongitude),
|
|||
|
|
scale: 8,
|
|||
|
|
name: e.merName,
|
|||
|
|
address: e.merAddressDetail,
|
|||
|
|
success: function(res) {
|
|||
|
|
console.log('res地址', res)
|
|||
|
|
},
|
|||
|
|
fail: function(error) {
|
|||
|
|
console.error('openLocation failed:', error); // 输出错误信息
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
orderStatusImg() {
|
|||
|
|
let that = this;
|
|||
|
|
orderStatusImgApi().then(res => {
|
|||
|
|
res.data.map(item => {
|
|||
|
|
if (item.title === 'await_pay' && this.orderInfo.status === 0) {
|
|||
|
|
this.statusPic = item.pic
|
|||
|
|
} else if (item.title === 'await_shipped' && this.orderInfo.status === 1) {
|
|||
|
|
this.statusPic = item.pic
|
|||
|
|
} else if (item.title === 'receiving' && this.orderInfo.status === 3) {
|
|||
|
|
this.statusPic = item.pic
|
|||
|
|
} else if (item.title === 'spike' && this.orderInfo.status === 2) {
|
|||
|
|
this.statusPic = item.pic
|
|||
|
|
} else if (item.title === 'complete' && this.orderInfo.status === 4) {
|
|||
|
|
this.statusPic = item.pic
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}).catch(err => {
|
|||
|
|
that.$util.Tips({
|
|||
|
|
title: err
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 获取订单详细信息
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
getOrderInfo: function() {
|
|||
|
|
let that = this;
|
|||
|
|
uni.showLoading({
|
|||
|
|
title: "正在加载中"
|
|||
|
|
});
|
|||
|
|
getOrderDetail(that.orderNo).then(res => {
|
|||
|
|
uni.hideLoading();
|
|||
|
|
let data = res.data;
|
|||
|
|
that.$set(that, 'orderInfo', data);
|
|||
|
|
that.merchantOrderList = data.merchantOrderList[0] // 商户信息
|
|||
|
|
that.punchCardOrderInfo = data.merchantOrderList[0].orderInfoList[0] // 第一个商户的商品信息
|
|||
|
|
that.$set(that, 'id', data.id);
|
|||
|
|
that.$set(that, 'type', data.type);
|
|||
|
|
that.$set(that, 'secondType', data.secondType);
|
|||
|
|
if (this.secondType === ProductTypeEnum.Reservation) {
|
|||
|
|
that.$set(that, 'orderExtend', data.orderExtend ? JSON.parse(data.orderExtend) : []);
|
|||
|
|
} else {
|
|||
|
|
that.$set(that, 'orderExtend', data.orderExtend ? [JSON.parse(data.orderExtend)] : []);
|
|||
|
|
}
|
|||
|
|
that.orderStatusImg();
|
|||
|
|
that.userAddress = data.merchantOrderList.filter(item => {
|
|||
|
|
return item.shippingType === 1
|
|||
|
|
})
|
|||
|
|
that.isUserAddress = that.userAddress.length > 0 ? true : false;
|
|||
|
|
if (data.status !== 0 || data.status !== 9) {
|
|||
|
|
if (data.merchantOrderList[0].shippingType == 2 || data.merchantOrderList[0]
|
|||
|
|
.shippingType == 4) that.markCode(data.merchantOrderList[
|
|||
|
|
0].verifyCode);
|
|||
|
|
}
|
|||
|
|
that.$set(that, 'shippingType', data.merchantOrderList[0].shippingType);
|
|||
|
|
that.$set(that, 'cartInfo', data.merchantOrderList[0].orderInfoList);
|
|||
|
|
that.$set(that, 'isSplitDelivery', data.merchantOrderList[0].isSplitDelivery);
|
|||
|
|
that.$set(that, 'deliveryType', data.merchantOrderList[0].deliveryType);
|
|||
|
|
that.getIsShowBtn();
|
|||
|
|
if (that.orderInfo.refundStatus > 0) {
|
|||
|
|
uni.setNavigationBarColor({
|
|||
|
|
frontColor: '#fff',
|
|||
|
|
backgroundColor: '#666666'
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}).catch(err => {
|
|||
|
|
that.$util.Tips({
|
|||
|
|
title: err
|
|||
|
|
}, {
|
|||
|
|
tab: 4,
|
|||
|
|
url: '/pages/user/index'
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
//是否展示底部操作按钮
|
|||
|
|
//<!-- 订单状态(0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消) -->
|
|||
|
|
// <!-- 已退款的订单详情中,不支持任何操作。 orderInfo.refundStatus !== 3,拼团已退款订单还可进行【查看拼团】操作-->
|
|||
|
|
getIsShowBtn() {
|
|||
|
|
this.isShowBtn = (this.orderInfo.status != 3 && this.orderInfo.status != 1) || this.orderInfo
|
|||
|
|
.refundStatus !== 3 || (this.orderInfo.refundStatus == 3 && this.type !== this.ProductMarketingTypeEnum
|
|||
|
|
.Groupbuying) || (this.orderInfo.merchantOrderList && this.orderInfo.merchantOrderList[0]
|
|||
|
|
.shippingType === 2 && this.orderInfo.status === 1)
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
* 生成二维码
|
|||
|
|
*/
|
|||
|
|
markCode(text) {
|
|||
|
|
strToBase64Api({
|
|||
|
|
height: '145',
|
|||
|
|
text: text,
|
|||
|
|
width: '145'
|
|||
|
|
}).then(res => {
|
|||
|
|
this.codeImg = res.data.code
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
* 剪切订单号
|
|||
|
|
*/
|
|||
|
|
// #ifndef H5
|
|||
|
|
handleCopy: function(num) {
|
|||
|
|
uni.setClipboardData({
|
|||
|
|
data: num
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
// #endif
|
|||
|
|
/**
|
|||
|
|
* 打电话
|
|||
|
|
*/
|
|||
|
|
goTel: function() {
|
|||
|
|
uni.makePhoneCall({
|
|||
|
|
phoneNumber: this.orderInfo.deliveryId
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 去拼团详情
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
goJoinPink: function() {
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: '/pages/activity/goods_combination_status/index?id=' + this.orderInfo.pinkId,
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 再此购买
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
goOrderConfirm: Debounce(function() {
|
|||
|
|
uni.showLoading({
|
|||
|
|
title: '加载中...'
|
|||
|
|
});
|
|||
|
|
let cartListRequest = []
|
|||
|
|
let that = this;
|
|||
|
|
this.cartInfo.map(item => {
|
|||
|
|
cartListRequest.push({
|
|||
|
|
productId: parseFloat(item.productId),
|
|||
|
|
productAttrUnique: item.attrValueId,
|
|||
|
|
cartNum: parseFloat(item.payNum)
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
cartBatchAddApi(cartListRequest).then(function(res) {
|
|||
|
|
uni.switchTab({
|
|||
|
|
url: '/pages/order_addcart/order_addcart'
|
|||
|
|
})
|
|||
|
|
}).catch(res => {
|
|||
|
|
return this.$util.Tips({
|
|||
|
|
title: res
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
}),
|
|||
|
|
//确认收货
|
|||
|
|
confirmOrder: Debounce(function() {
|
|||
|
|
let that = this;
|
|||
|
|
let applyRefundNum = 0;
|
|||
|
|
that.orderInfo.merchantOrderList.map((item) => {
|
|||
|
|
item.orderInfoList.map((i) => {
|
|||
|
|
applyRefundNum = Number(i.applyRefundNum);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
// 如果有售后中的,提示
|
|||
|
|
if (applyRefundNum > 0) return uni.showModal({
|
|||
|
|
confirmColor: '#f55850',
|
|||
|
|
title: '提示',
|
|||
|
|
content: '请先撤销售后,再进行收货操作',
|
|||
|
|
confirmText: '我知道了',
|
|||
|
|
success(res) {
|
|||
|
|
if (res.confirm) {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
uni.showModal({
|
|||
|
|
title: '确认收货',
|
|||
|
|
content: '为保障权益,请收到货确认无误后,再确认收货',
|
|||
|
|
confirmColor: '#f55850',
|
|||
|
|
success: function(res) {
|
|||
|
|
if (res.confirm) {
|
|||
|
|
orderTake(that.orderNo).then(res => {
|
|||
|
|
return that.$util.Tips({
|
|||
|
|
title: '操作成功',
|
|||
|
|
icon: 'success'
|
|||
|
|
}, function() {
|
|||
|
|
that.getOrderInfo();
|
|||
|
|
});
|
|||
|
|
}).catch(err => {
|
|||
|
|
return that.$util.Tips({
|
|||
|
|
title: err
|
|||
|
|
});
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}),
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
* 删除订单
|
|||
|
|
*/
|
|||
|
|
delOrder: Debounce(function() {
|
|||
|
|
onDelOrder(this.orderNo);
|
|||
|
|
}),
|
|||
|
|
cancelOrder: Debounce(function() {
|
|||
|
|
let self = this
|
|||
|
|
uni.showModal({
|
|||
|
|
title: '提示',
|
|||
|
|
content: '确认取消该订单?',
|
|||
|
|
cancelColor: '#f55850',
|
|||
|
|
success: function(res) {
|
|||
|
|
if (res.confirm) {
|
|||
|
|
orderCancel(self.orderNo)
|
|||
|
|
.then((data) => {
|
|||
|
|
self.$util.Tips({
|
|||
|
|
title: '取消成功'
|
|||
|
|
}, {
|
|||
|
|
tab: 4,
|
|||
|
|
url: '/pages/user/index'
|
|||
|
|
})
|
|||
|
|
}).catch((err) => {
|
|||
|
|
self.$util.Tips({
|
|||
|
|
title: err
|
|||
|
|
})
|
|||
|
|
self.getDetail();
|
|||
|
|
});
|
|||
|
|
} else if (res.cancel) {
|
|||
|
|
console.log('用户点击取消');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
@import '../static/css/order_details.scss';
|
|||
|
|
|
|||
|
|
.orderStatusPng {
|
|||
|
|
width: 128rpx;
|
|||
|
|
height: 128rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.picTxt {
|
|||
|
|
justify-content: space-between;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.writeOff {
|
|||
|
|
padding: 0 24rpx 42rpx 24rpx !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.verification-record-box {}
|
|||
|
|
|
|||
|
|
.verification-code-box {
|
|||
|
|
justify-content: center;
|
|||
|
|
align-items: center;
|
|||
|
|
padding-top: 48rpx;
|
|||
|
|
|
|||
|
|
.verification-code-img {
|
|||
|
|
width: 320rpx;
|
|||
|
|
height: 320rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.copy-btn {
|
|||
|
|
margin-left: 14rpx;
|
|||
|
|
// border-radius: 26rpx;
|
|||
|
|
// border: 1rpx solid #ddd;
|
|||
|
|
// padding: 4rpx 20rpx;
|
|||
|
|
// margin-left: 12rpx;
|
|||
|
|
// line-height: 28rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.verification-time {
|
|||
|
|
color: #606266;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.flex-baseline {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: baseline;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.color-666 {
|
|||
|
|
color: #666;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.pad24 {
|
|||
|
|
padding: 24rpx !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-copy-btn {
|
|||
|
|
height: 36rpx;
|
|||
|
|
line-height: 36rpx;
|
|||
|
|
font-size: 20rpx;
|
|||
|
|
border: 0.5px solid #ddd;
|
|||
|
|
border-radius: 20px !important;
|
|||
|
|
margin-left: 12rpx;
|
|||
|
|
padding: 0 20rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.fs-40 {
|
|||
|
|
font-size: 40rpx !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.fs-36 {
|
|||
|
|
font-size: 36rpx !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// .record {
|
|||
|
|
// position: relative;
|
|||
|
|
// display: flex;
|
|||
|
|
// align-items: center;
|
|||
|
|
// // top: 40rpx;
|
|||
|
|
// // right: 0;
|
|||
|
|
// // color: #FFDDB8;
|
|||
|
|
// // font-size: 22rpx;
|
|||
|
|
// // background-color: rgba(0, 0, 0, 0.3);
|
|||
|
|
// padding: 8rpx 0;
|
|||
|
|
// border-radius: 20px 0px 0px 20px;
|
|||
|
|
// }
|
|||
|
|
</style>
|