perry-mall/pagesB/orderDetail/orderDetail.vue

326 lines
12 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="pad-x160">
<!-- 状态栏 -->
<status-nav :navBarTitle="'订单详情'"></status-nav>
<!-- 容器 -->
<container-subgroup>
<view slot="content">
<!-- 订单类型 -->
<block v-if="loading">
<view class="bacf6 radius20 mar-s20 fon30 line-h50 pad30">
<view class="disjbac">
<view>订单编号</view>
<view class="bold">{{orderInfo.coding}}</view>
</view>
<view class="disjbac">
<view>下单时间</view>
<view class="bold">{{orderInfo.created_at}}</view>
</view>
<view class="disjbac">
<view>订单状态</view>
<view class="bold">
<view v-if="orderInfo.status=='waiting'" class="colf8">待付款</view>
<view v-if="orderInfo.status=='paid'" class="colf8">待发货</view>
<view v-if="orderInfo.status=='shipped'" style="color: #61cf00;">待收货</view>
<view v-if="orderInfo.status=='completed'" class="col0">已完成</view>
<view v-if="orderInfo.status=='closed'" class="col9">已取消</view>
</view>
</view>
</view>
<!-- 订单信息 -->
<view class="bacf6 radius20 mar-s20 orderDetail-box">
<view v-for="(item,index) in orderInfo.skus" :key="index" class="fon26 col3 disjbac pad-sx50 disjbac bbot">
<image :src="item.sku_cover" class="flexs" mode="aspectFill" style="width: 224rpx; height: 224rpx;"></image>
<view class="width100 disjb fc" style="height: 224rpx;">
<view class="fon28 col3 bold clips2">{{item.spu_name}}</view>
<view class="orderDetail-sku disac fw" v-if="item.spec_info.length">
<view class="mar-y40" v-for="(item2,index2) in item.spec_info" :key="index2">{{item2}}</view>
</view>
<view class="mar-s10">
<view class="colf8 fon32 bold disjbac width100"><span>{{item.price}}</span><span class="fon28 col6 mar-z20 font4">x{{item.num}}</span></view>
</view>
</view>
</view>
<view class="fon28 disjbac mar-s40 mar-x20">
<view class="col6">{{allNum}}</view>
<view class="colf8 bold">共计{{orderInfo.original_price}}</view>
</view>
</view>
<!-- 物流信息 -->
<view v-if="orderInfo.address!='自提'" class="bacf6 radius20 mar-s20 fon28 pad30">
<view class="bold">物流信息</view>
<view class="bold col3 mar-s40 fon26 disjbac">
<view>{{orderInfo.express_name}}{{orderInfo.express_number||'暂无快递单号'}}</view>
<view v-if="orderInfo.express_number" @tap="copyCont">复制</view>
</view>
</view>
<!-- 地址信息 -->
<view v-if="orderInfo.address!='自提'" class="bacf6 radius20 mar-s20 pad30">
<view class="bold">收件人信息</view>
<view class="fon26 col3">
<view class="fon28 col3 bold" style="margin: 52rpx 0 20rpx 0;">{{addressInfo.userName}}<span class="mar-z10">{{addressInfo.userPhone}}</span></view>
<view class="fon24 col9">{{addressInfo.userAddress}}</view>
</view>
</view>
<view v-else class="bacf6 radius20 mar-s20 pad30">
<view class="disjbac">
<view>配送方式</view>
<view>自提</view>
</view>
<view class="fon26 col3 disjbac mar-s30">
<view>
<view class="fon28 col3 bold mar-x20">{{appletName}}</view>
<view class="fon24 col9">{{goAddress}}</view>
</view>
<!-- 立即导航 -->
<view @tap="goThere(goAddress)" class="disjcac fc col0 fon24">
<i class="icon icon-navigate-now " style="font-size: 50rpx;"></i>
<view>立即导航</view>
</view>
</view>
</view>
<!-- 金额详情 -->
<view class="bacf6 radius20 mar-s20 fon30 col0 line-h60 pad30">
<view class="disjbac">
<view>商品总金额</view>
<view class="colf8">¥{{orderInfo.original_price}}</view>
</view>
<view class="disjbac">
<view>折扣优惠</view>
<view class="colf8">0</view>
</view>
<view class="disjbac" v-if="orderInfo.address!='自提'">
<view>快递费用</view>
<view class="colf8">{{orderInfo.freight}}</view>
</view>
<view class="disjbac">
<view class="width100" style="text-align: right;">实付:</view>
<view class="colf8 flexs bold">¥{{orderInfo.price}}</view>
</view>
</view>
<!-- 底部导航 -->
<view class="posixzy disja fe bacf pad-sx20 pad-y40">
<!-- 取消订单 -->
<view @tap="cancleEv" v-if="orderInfo.status=='paid' || orderInfo.status=='waiting'" class="order-btn">取消订单</view>
<!-- 立即支付 -->
<view @tap="paymentEv" v-if="orderInfo.status=='waiting'" class="order-btn" style="background-color: #f83030;color: #FFFFFF;">立即支付</view>
<!-- 确认收获 -->
<view @tap="confirmReceipt(orderInfo.id)" v-if="orderInfo.status=='shipped'" class="order-btn" style="background-color: #000000;color: #FFFFFF;">确认收货</view>
<!-- 再次购买 -->
<view @tap="againBuy" v-if="orderInfo.status=='completed' || orderInfo.status=='closed'" class="order-btn" style="background-color: #f83030;color: #FFFFFF;"></view>
</view>
</block>
</view>
</container-subgroup>
</view>
</template>
<script>
export default {
data() {
return {
statusHNH:uni.getStorageSync('statusHNH'),
publicColor:uni.getStorageSync('publicColor'),//主题颜色
loading:false,
isExpress:true,
switchQuan:true,
showQuan:false,
express:'',
orderInfo:'',//订单信息
addressInfo:'',//地址信息
allPrice:0,//共计
allNum:0,//共
times:0,//点击次数
appletName:'佩丽饰品',
goAddress:'四川省成都市青羊区草堂东路88号',
isHeyan:false,
canvasQrPath: '',
text: 'hello',
size: 162,
colorDark: '#000000',
colorLight: '#ffffff',
timer:null,
daoTime:'',
timerDao:null,
orderId:''//订单id
}
},
onShareAppMessage(res) {
var shareObj = {
     title: '', // 默认是小程序的名称(可以写slogan等)
     path: `/pagesB/orderDetail/orderDetail?id=${this.orderId}&invite_code=${uni.getStorageSync('invite_code')}}` // 默认是当前页面,必须是以‘/’开头的完整路径
  };
  return shareObj;
},
onUnload() {
uni.setStorageSync('isorderDetail',1);
},
onLoad(options) {
this.orderId = options.id;
if(uni.getStorageSync('phone_active')){
this.$toolAll.tools.clearShare();
this.checkInfo(this.orderId);
} else {
uni.setStorageSync('outside',2);
uni.setStorageSync('existCode',options.invite_code);
uni.setStorageSync('transientUrl',`/pagesB/orderDetail/orderDetail?id=${options.id}`);
uni.navigateTo({
url:'/pages/login/login'
})
}
},
methods: {
confirmReceipt(id){//确认收货事件
this.$requst.post('/api/order/accepted',{order_id:id}).then(res=>{
if(res.code==0){
this.$toolAll.tools.showToast('收货成功');
this.checkInfo(this.orderInfo.id);
} else this.$toolAll.tools.showToast(res.msg);
}).catch(err=>{this.$toolAll.tools.showToast(err.msg);})
},
make(index){
this.isHeyan = true;
this.text = `${this.orderInfo.coding}H${this.orderInfo.skus[index].id}`;
let params = {
order_coding:this.orderInfo.coding,
id:this.orderInfo.skus[index].id,
not_check_num:this.orderInfo.skus[index].not_check_num
}
this.timer = setInterval(()=>{
this.$requst.post('/api/order/check-result',params).then(res=>{
if(res.code==0){
if(res.data.result==1){
this.isHeyan = false;
this.$toolAll.tools.showToast('已完成');
this.checkInfo(this.orderInfo.id);
clearInterval(this.timer);
}
} else this.$toolAll.tools.showToast(res.msg);
}).catch(err=>{this.$toolAll.tools.showToast(err.msg);})
},3000)
},
cancleEv(){//取消订单
this.times++;
if(this.times==2){
this.$requst.post('/api/order/cancel',{order_coding:this.orderInfo.coding}).then(res=>{
if(res.code==0){
this.$toolAll.tools.showToast('取消订单成功');
this.checkInfo(this.orderInfo.id);
this.times = 0;
} else this.$toolAll.tools.showToast(res.msg);
}).catch(err=>{this.$toolAll.tools.showToast(err.msg);})
} else {
setTimeout(()=>{
this.times = 0;
},1500)
this.$toolAll.tools.showToast('双击即可取消订单');
}
},
paymentEv(){//立即支付
if(this.times==0){
this.$toolAll.tools.showToast('正在调起支付','loading',1500)
this.times++;
this.$requst.post('/api/order/pay',{order_coding:this.orderInfo.coding}).then(res=>{
if(res.code==0){
uni.requestPayment({
provider: 'wxpay',
appId:res.data.payment_params.appId,//appId
timeStamp: res.data.payment_params.timeStamp,//时间戳
nonceStr: res.data.payment_params.nonceStr,//随机字符串
package: res.data.payment_params.package,//package
signType: res.data.payment_params.signType,//MD5
paySign: res.data.payment_params.sign,//签名
success:(res)=> {
this.$requst.post('/api/order/paid',{order_coding:this.orderInfo.coding}).then(res=>{
if(res.code==0){
this.times = 0;
this.$toolAll.tools.showToast('支付成功');
this.checkInfo(this.orderInfo.id);
} else this.$toolAll.tools.showToast(res.msg);
})
}
});
} else this.$toolAll.tools.showToast(res.msg);
}).catch(err=>{this.$toolAll.tools.showToast(err.msg);})
}
},
checkInfo(id){//查询订单信息
this.$requst.post('/api/user/order-detail',{id:id}).then(res=>{
if(res.code==0){
this.allPrice = 0;
this.allNum = 0;
let narr = res.data;
narr.skus.forEach(item=>{
// 共多少件,总计
if(narr.is_score==0){
this.allPrice += item.price*item.num;
} else {
this.allPrice += item.score*item.num;
}
this.allNum += item.num;
})
this.orderInfo = narr;
let naddress = this.orderInfo.address.split(',');
if(naddress[0]!='自提'){
let nphone = this.$toolAll.tools.hideMPhone(naddress[1].trim())
this.addressInfo = {
userName:naddress[0].trim(),
userPhone:nphone,
userAddress:naddress[2].trim()
}
}
this.loading = true;
}
})
},
// 再次购买事件
againBuy(){
let newList = [];
this.orderInfo.skus.forEach(item=>{
let obj = {
id:item.spu_id,//商品id
imgSrc:item.spu_cover,//商品图片
coding:item.coding,//商品coding
price:item.price,//商品价格
num:item.num,//商品数量
title:item.spu_name,//商品名称
}
newList.push(obj);
})
uni.setStorageSync('orderList',newList);
uni.navigateTo({url:'/pagesA/getReadyDan/getReadyDan'});
},
copyCont(){//复制快递单号
if(this.times==0){
this.times++;
if(this.orderInfo.express_number!=null){
this.$toolAll.tools.clickCopy(this.orderInfo.express_number);
this.$toolAll.tools.showToast('复制快递单号成功');
} else this.$toolAll.tools.showToast('暂无可查询的快递信息');
setTimeout(()=>{
this.times = 0;
},2000)
}
},
goThere(val){//去这里
wx.getLocation({//获取当前经纬度
type: 'wgs84', //返回可以用于wx.openLocation的经纬度官方提示bug: iOS 6.3.30 type 参数不生效,只会返回 wgs84 类型的坐标信息
success: function (res) {
wx.openLocation({//​使用微信内置地图查看位置。
latitude: 30.657707,//要去的纬度-地址
longitude: 104.036007,//要去的经度-地址,
name: val,
address: val
})
}
})
},
}
}
</script>
<style>
</style>