<template>
<div id="pay" class="has-top">
<template v-if="listExist===1">
<router-link :to="{path: '/address/select'}" class="address-selector" tag="div">
<div class="address-item single has-follow" v-if="address">
<div class="base-info">
<div class="contact">收货人:{{address.contact}}</div>
<div class="phone">{{address.phone}}</div>
</div>
<div class="detail">收货地址:{{address.provinceName + address.cityName + address.districtName + address.detail}}</div>
</div>
<div class="address-placeholder has-follow color-red" v-else>请选择收货地址</div>
</router-link>
<div class="identity-card mt10 bordre-top-bottom" v-if="address && isGlobalBuy">
<template v-if="!isEditMode">
<input class="input" maxlength="18" type="text" placeholder="因海关清关需要,请填写收货人的身份证号" v-model="identityCard" />
<div class="btn-clear" v-if="identityCard" @click="identityCard=''"></div>
<div class="btn-save" @click="saveIdentityCard()">保存</div>
</template>
<div class="cell-line" v-else>
<div class="label">身份证号</div>
<div class="value">{{address.identityCard|maskIdCard}}</div>
<div class="icon-edit" @click.stop="isEditMode = true"></div>
</div>
</div>
<div class="order-store mt10" v-for="store in list" :key="store.storeId">
<!--<div class="order-store-header">{{store.storeName}}</div>-->
<div class="order-store-body">
<div class="cart-item-box" v-for="item in store.skuProductList" :key="item.skuId">
<div class="cart-item">
<!-- <div class="discount" v-if="item.discountStatus"></div> -->
<v-image :src="item.thumbUrl" class="thumb" />
<div class="item-detail">
<div class="title">{{item.skuName}}</div>
<div class="desc">{{item.property||item.properties}}</div>
<div class="price" v-if="isGroup">{{item.groupSkuInfo.groupPrice | currency}}<span class="amount">× {{item.quantity}}</span></div>
<div class="price" v-else>
<!-- <template v-if="item.flashSaleFlag==1">¥{{item.flashSaleSkuDTO.activityPrice | currency}}</template> -->
<template>¥{{item.retailPrice | currency}}</template>
<span class="amount">× {{item.quantity}}</span>
</div>
<!-- <div class="price" v-else>{{item.marketPrice | currency}}<span class="amount">× {{item.quantity}}</span></div> --></div>
</div>
<div class="cell-line">
<div class="label"></div>
<div class="value">小计:
<!-- <span class="color-red" v-if="item.flashSaleFlag==1">¥{{item.flashSaleSkuDTO.activityPrice*item.quantity | currency}}</span> -->
<span class="color-red">¥{{item.retailPrice*item.quantity | currency}}</span>
</div>
</div>
<!-- <div class="gift-box" v-if="item.presents.length > 0"> -->
<div class="gift-box">
<div class="label">赠品</div>
<div class="gift-list">
<div class="gift-item" v-for="present in item.presents" :key="present.skuId">
<div class="title">{{present.skuName}}</div>
<div class="amount">× {{present.quantity}}</div>
</div>
</div>
</div>
</div>
</div>
<div class="order-store-footer">
</div>
</div>
<div class="pay-section">
<div class="cell-line">
<div class="label">买家留言:</div>
<div class="value flex999">
<textarea class="mint-field-core remark" placeholder="选填,给商家的留言(50字以内)" v-model="remark" maxlength="50" id="buyer-message"></textarea>
</div>
</div>
</div>
<div class="pay-section">
<div class="cell-line">
<div class="label">运费</div>
<template v-if="address">
<div class="value color-red" v-if="freight>0">{{freight | currency}}</div>
<div class="value" v-else>包邮</div>
</template>
<div class="value color-gray" v-else>运费根据收货地址计算</div>
</div>
<div class="cell-line">
<div class="label">会员折扣</div>
<!-- <div class="value color-red" v-if="discountTotal > 0">¥{{-discountTotal|currency}}</div> -->
<div class="value color-gray">无会员折扣</div>
</div>
<div @click="selectCoupon()" class="cell-line has-follow">
<div class="label">优惠券</div>ii
<div v-if="couponlist.length">
<div class="value color-red" v-if="currentCoup.reducedPrice">-¥{{currentCoup.reducedPrice | currency}}</div>
<div class="value color-red" v-else>请选择优惠券</div>
</div>
<div v-else>''
<div class="value color-red">无可用优惠券</div>
</div>
<!-- <div class="value gray" :class="{'color-red': hasCoupon, 'color-gray': isGroup}" v-if="!coupon || (coupon && !coupon.couponId)">{{couponText}}</div>
<div class="value color-red" v-else>{{-coupon.cost | currency}}</div> -->
</div>
<div class="payway">
<div class="title">选择支付方式</div>
<div class="payway-list">
<div class="item" v-for="item in payways" :key="item.id" @click.stop="selectPayWay(item)" v-show="(item.id==='wepay')">
<img :src="item.icon" class="icon">
<div class="name">{{item.name}}</div>
<div class="selector" :class="{'selected':item.id === payway.id}" ></div>
</div>
</div>
</div>
</div>
<div class="bottom pay-bottom">
<div class="content"> 合计:<span class="color-red">¥{{total| currency}}</span> </div>
<div class="btn" :class="{'disabled': products.length === 0}" @click="payNow()">确认付款</div>
</div>
<mt-popup
v-model="popup"
position="bottom">
<div class="w1125">
<h2>优惠券
<img @click="closeCoup()" src="../../assets/images/coupon/coupon_close.png" alt="" srcset="">
</h2>
<p>金额门槛仅为商品总价,不含运费哦</p>
<div class="coupon-list">
<ul>
<li :class="item.btmFlag ? 'active' : ''" v-for="(item,index) in couponlist" v-bind:key="index">
<div class="top">
<div class="leftBox">
<p class="price">
<span>{{item.reducedPrice | currency}}</span>
<b>元</b>
</p>
<div class="range">
{{item.conditions == 0 ? '无门槛' : `满¥${item.conditions/100}使用`}}
</div>
</div>
<div class="rightArea">
<h2>{{item.title}}</h2>
<div class="tips">
<ul>
<li>{{item.label}}</li>
</ul>
</div>
<p @click="changeCoupon(item.btmFlag,item)">
<span class="icon" v-if="item.btmFlag"><img src="../../assets/images/coupon/icon1.png" alt="" srcset=""></span>
<span class="icon" v-else><img src="../../assets/images/coupon/icon2.png" alt="" srcset=""></span>
有效期至{{item.endDate}}
</p>
</div>
</div>
</li>
</ul>
</div>
</div>
</mt-popup>
<div class="pay-shadow" v-show="confirmFlag || tipsFlag" @click="closeAll"></div>
<div class="pay-confirm" v-show="confirmFlag">
<div class="title">
购买跨境商品需实名认证
</div>
<p class="tip" @click="tipsShow">海关要求?</p>
<ul>
<li> <span>姓名</span> <input type="text" placeholder="请输入收货人姓名"></li>
<li> <span>身份证号</span> <input type="text" placeholder="请输入身份证号"></li>
</ul>
<p class="notice">*请填写收货人的真是姓名和身份证号</p>
<div class="btn">提交验证</div>
</div>
<div class="pay-tips" v-show="tipsFlag">
<div class="title">
为什么需要实名认证?
</div>
<ol>
<li>根据海关要求,购买跨境商品需对订购人进行实名认证。</li>
<li>错误的实名信息可能导致无法正常清关,即:无法收到购买的商品。</li>
<li>如您的跨境购个人额度超限,可能导致订单被退回,我们将为您取消订单。</li>
<li>您的身份信息将被加密保管,店多多保证信息安全,绝不对外泄露!</li>
<li>任何身份认证问题可随时联系店多多客服。</li>
</ol>
<div class="btn" @click="know">知道了</div>
</div>
</template>
</div>
</template>
<script type="text/javascript">
import Config from '@/config'
import AddressService from '@/services/AddressService'
import CartService from '@/services/CartService'
import CouponService from '@/services/CouponService'
import FreightService from '@/services/FreightService'
import OrderService from '@/services/OrderService'
import PayService from '@/services/PayService'
import ProductService from '@/services/ProductService'
import UserService from '@/services/UserService'
import PayFactory from '@/pay/PayFactory'
import axios from 'axios'
import qs from 'qs'
// import CouponService from '../../services/CouponService.js';
export default {
data() {
return {
payways: [],
freight: 0,
list: [],
listExist:'',
products: [],
defaultAddress: undefined,
coupon: undefined,
address: undefined,
remark: '',
userProfit: {},
hasCoupon: false,
userInfo: {},
discountLevel: -1,
identityCard: '',
isEditMode: true,
isGroup: false,
hasPassword: false,
orderCode: '',
productType:0,
confirmFlag: false,
tipsFlag: false,
popup: false,
couponlist: [],
currentCoup: {}
}
},
computed: {
//海关
isGlobalBuy() {
return this.list.filter((store) => {
return store.skuProductList.filter(item => item.isCross === 1).length > 0
}).length > 0
},
// 原始产品总价格
orginalProductTotal() {
let sum = 0;
this.list.forEach((store) => {
store.skuProductList.forEach(item => {
console.log(this.isGroup);
//let price = this.isGroup ? item.groupSkuInfo.groupPrice : item.currentVipTypePrice
let price = this.isGroup ? item.groupSkuInfo.groupPrice : item.retailPrice
if (item.productType === 3) {
price = item.retailPrice;
}
console.log(price);
sum += price * item.quantity;
});
});
return sum;
},
storeTotal(){
let sum = 0;
this.list.forEach((store) => {
store.skuProductList.forEach(item => {
//let price = this.isGroup ? item.groupSkuInfo.groupPrice : item.currentVipTypePrice
let price = this.isGroup ? item.groupSkuInfo.groupPrice : item.retailPrice
if (item.productType === 3) {
price = item.retailPrice;
}
// if(item.flashSaleFlag==1){//代表限时抢购得商品
// price=item.flashSaleSkuDTO.activityPrice;
// }
sum += price * item.quantity;
});
});
return sum;
},
//产品总价格
orginalTotal() {
let sum = this.orginalProductTotal;
// if (this.coupon && this.coupon.couponId) {
// sum -= this.coupon.cost;
// }
if (this.currentCoup && this.currentCoup.reducedPrice) {
sum -= this.currentCoup.reducedPrice;
}
return (sum >= 0) ? sum : 0;
},
//产品合计(产品总价+运费)
total() {
return this.orginalTotal + parseFloat(this.freight)
},
//优惠券
couponText() {
if (this.isGroup) {
return '无可用优惠券';
}
return this.hasCoupon ? '有可用优惠券' : '无可用优惠券';
},
//折扣总价
discountTotal (){
let sum = 0;
this.list.forEach((store) => {
store.skuProductList.forEach(item => {
let currentPrice = item.productType == 3 ? item.retailPrice : item.currentVipTypePrice
sum += (item.retailPrice - currentPrice) * item.quantity
// if(item.flashSaleFlag==1){
// let currentPrice = item.currentVipTypePrice
// sum += (item.flashSaleSkuDTO.activityPrice - currentPrice) * item.quantity
// }else{
// let currentPrice = item.productType == 3 ? item.retailPrice : item.currentVipTypePrice
// sum += (item.retailPrice - currentPrice) * item.quantity
// }
})
});
return sum;
}
},
methods: {
/**
*@desc 获取支付方式
*@author zwn
*@date 2018/10/12
*/
getPayTypeList() {
PayService.getPayWays(this, this.userProfit.availableMoney, (payways) => {
this.payways = payways;
if (this.payways.length > 0) {
this.payway = this.payways[0]
}
});
},
onBack() {
this.$destroy();
this.$router.back()
},
/**
*@desc 获取优惠券
*@author zwn
*@date 2018/10/12
*/
getCouponForOrder(products) {
if (!products) {
products = []
}
CouponService.getCouponsForOrder(this, products, (list) => {
this.hasCoupon = list.length > 0
})
},
selectPayWay(item) {
this.payway = item;
this.payway.id=item.id;
this.$set(this.payway,0,item);
},
/**
*@desc 获所有取商品列表信息
*@author zwn
*@date 2018/10/11
*/
getListBySkuIds(skuIds) {
this.products = [];
CartService.getListBySkuIds(this, skuIds, (list) => {
this.list = list;
(this.list.length>0)? this.listExist=1:this.listExist=0;
this.list.forEach(store => {
store.skuProductList.forEach(item => {
let activityType=1;//默认无活动
if(item.flashSaleFlag==0){
activityType=1
}else{
activityType=2
}
this.products.push({ skuId: item.skuId, quantity: item.quantity ,activityType:activityType,flashSaleId:item.flashSaleId});
});
});
this.checkIfHasCoupon(this.products);
})
},
/**
*@desc 获单个取商品列表信息
*@author zwn
*@date 2018/10/11
*/
getListBySkuId(skuId, amount) {
var that=this;
ProductService.getSkuById(this, skuId, (skuInfo) => {
ProductService.getProductInfoById(this, skuInfo.productId, (product) => {
skuInfo.quantity = amount;
skuInfo.productType = product.type;
this.$set(skuInfo, 'flashSaleSkuDTO', {})
this.$set(skuInfo.flashSaleSkuDTO, 'activityPrice', skuInfo.flashSaleSku.activityPrice)
this.productType=product.type
// var nowPrice=skuInfo.retailPrice
// if(skuInfo.flashSaleFlag==1){
// nowPrice=skuInfo.flashSaleSku.activityPrice
// }
let store = {
storeId: skuInfo.storeId,
skuName: skuInfo.storeName,
total: skuInfo.retailPrice * skuInfo.quantity,
//total: nowPrice * skuInfo.quantity,
hasCoupon: skuInfo.hasCoupon,//优惠券
skuProductList: [skuInfo]
};
if (this.isGroup) {
store.total = skuInfo.groupSkuInfo.groupPrice * skuInfo.quantity;
} else {
store.total = (skuInfo.productType == 3 ? skuInfo.retailPrice : skuInfo.currentVipTypePrice) * skuInfo.quantity
//store.total = (skuInfo.productType == 3 ? nowPrice : skuInfo.currentVipTypePrice) * skuInfo.quantity
}
that.list.push(store);
if(that.list.length >0){
this.listExist=1
}else{
that.listExist=0;
}
var activityType=1;//默认是无活动
if(product.flashSaleFlag==0){
activityType=1
}else{
activityType=2
}
this.products = [{ skuId: skuInfo.skuId, quantity: amount,activityType:activityType,flashSaleId:product.flashSaleDetail.flashSaleId}];
this.getCoupon()
})
})
},
checkIfHasCoupon(products) {
// OrderService.setProducts(this, products, () => {
// this.getCouponForOrder(products)
// })
},
/**
*@desc 获取运费
*@author zwn
*@date 2018/10/12
*/
getFreight() {
if (this.address && this.list.length > 0) {
if (this.address.identityCard) {
this.identityCard = this.address.identityCard;
}
FreightService.calculate(this, this.address.addressId, this.products, Number(this.isGroup), (res) => {
if(res.freight){
this.freight =res.freight===0?1:res.freight;
}
})
}
},
closeAll() {
this.confirmFlag = false
this.tipsFlag = false
},
know() {
this.tipsFlag = false
},
tipsShow() {
this.tipsFlag = true
},
payNow() {
if (!this.address) {
this.showError('请选择收货地址');
return
}
if (this.products.length === 0) {
this.showError('没有要购买的产品');
return
}
if (this.isGlobalBuy && (!this.identityCard || this.isEditMode)) {
this.showError('请先填写并保存收件人的身份证信息');
return
}
// 零钱包支付
if (this.payway.id === 'balance') {
this.checkPassword();
if (!this.hasPassword) {
return false
}
if (!this.userInfo.phone) {
this.showError('零钱包支付必须绑定手机号');
return
}
if (this.total > this.userProfit.availableMoney) {
this.showError('零钱不足');
return
}
}
// // 全球购逻辑代码
// if (1==1) {
// this.confirmFlag = true
// return
// }
if (this.isGroup) {
this.mkGroupOrder();
} else {
this.mkOrder();
}
},
checkPassword() {
if (!this.hasPassword) {
let toast = Config.toast.find(item => item.id === 'noLogin')
this.showConfirms(toast.title, toast.message, () => {
this.$router.push({
path: '/find-password',
query: {
redirect: location.pathname + location.search,
set: true
}
})
}, null, '去设置', '取消');
return
}
},
mkGroupOrder() {
let params = {
addressId: this.address.addressId,
products: this.products,
remark: this.remark || '',
couponId: this.coupon ? this.coupon.couponId : '',
score: 0
};
params.groupCode = this.$route.query.groupCode || '';
let productType=this.productType;
OrderService.addGroupOrder(this, params, (res) => {
if (res.orderId) {
this.orderCode = res.orderCode;
PayFactory.pay(this, this.payway, 'pay.normal', this.orderCode, this.total,productType);
}
})
},
//创建订单
mkOrder() {
let params = {
addressId: this.address.addressId,
products: this.products,
orderFrom: 3,
remark: this.remark || '',
couponId: this.coupon ? this.coupon.couponId : '',
score: 0,
};
if(this.$route.query.skuIds){
params.fromCart=1;
}else{
params.fromCart=0;
}
let productType=this.productType;
OrderService.createOrder(this, params,(orderInfo) => {
this.orderCode = orderInfo.orderCode;
PayFactory.pay(this, this.payway, 'pay.normal', this.orderCode, this.total,productType);
});
},
buildParams() {
return {
addressId: this.address.addressId,
products: this.products,
remark: this.remark || '',
couponId: this.coupon ? this.coupon.couponId : '',
score: 0
}
},
init() {
//购物车结算支付
if (this.$route.params.from === 'cart') {
let skuIds = this.$route.query.skuIds;
if (skuIds) {
this.getListBySkuIds(skuIds);
} else {
this.showError('没有要购买的产品')
}
} else {
//商品详情结算支付
if (this.$route.query.skuId) {
this.skuId=this.$route.query.skuId;
this.getListBySkuId(this.$route.query.skuId,this.$route.query.amount)
} else {
this.showError('没有要购买的产品');
}
}
},
/**
*@desc 优惠券
*@author zwn
*@date 2018/10/12
*/
getCoupon() {
CouponService.getUseableList(this,sessionStorage.getItem('memberId'),this.products, data => {
console.log(data);
if (data.data.length) {
for (let i = 0; i < data.data.length; i++) {
this.$set(data.data[i],'btmFlag',false)
}
this.couponlist = data.data;
}
});
},
closeCoup() {
this.popup = false
},
selectCoupon() {
this.popup = true
// if (this.isGroup) {
// return 0
// }else{
// CouponService.getUseableList(this,sessionStorage.getItem('memberId'),this.products, data => {
// console.log(data);
// if (data.data.length) {
// for (let i = 0; i < data.data.length; i++) {
// this.$set(data.data[i],'btmFlag',false)
// }
// this.couponlist = data.data;
// this.popup = true
// }else {
// this.couponlist = {};
// }
// });
// // this.$router.push({ path: '/coupon/select' });
// // OrderService.setProducts(this, this.products, () => {
// // this.$router.push({ path: '/coupon/select' })
// // })
// }
},
changeCoupon(flag,item) {
this.couponlist.forEach((i,v)=> {
i.btmFlag = false
})
this.$set(item,'btmFlag',!flag)
if (flag) {
this.currentCoup = {}
}else {
this.currentCoup = item
}
// this.popup = false
},
/**
*@desc 保存身份证号
*@author zwn
*@date 2018/10/12
*/
saveIdentityCard() {
if (!this.identityCard) {
this.showError('请输入身份证号');
return
}
AddressService.saveIdentityCard(this, this.address.addressId, this.identityCard, () => {
this.showMessage('保存成功');
this.address.identityCard = this.identityCard;
this.isEditMode = false;
})
},
loadAddress() {
/**
*@desc 获取默认地址
*@author sky
*@date 2018/10/12
*/
AddressService.getDefault(this, (address) => {
this.address = address;
this.address = address.addressId ? address : undefined;
this.isEditMode = this.address ? !this.address.identityCard : true;
},error => {});
}
},
watch: {
'address': 'getFreight',
'list': 'getFreight'
},
created() {
this.getPayTypeList();
this.$root.$on('user.info.update', (userInfo) => {
this.userInfo = userInfo;
});
this.$root.$on('user.profit.update', (userProfit) => {
this.userProfit = userProfit;
this.getPayTypeList();
});
this.$root.$on('pay.normal', (status, message) => {
this.$destroy();
this.$router.replace({ path: `/order/detail/${this.orderCode}`})
});
UserService.checkLogin(this, () => {
UserService.getProfit(this,(userProfit)=>{
this.userProfit = userProfit;
});
});
this.address=JSON.parse(sessionStorage.getItem("selectAddress"));
if(!sessionStorage.getItem("selectAddress")){
this.loadAddress();//获取默认收货地址
}
},
activated() {
UserService.checkPassword(this, (res) => {
if (res.code === 1) {
this.hasPassword = true
}
});
if (this.$route.query.action && this.$route.query.action.indexOf('group-buy') > -1) {
this.isGroup = true;
}
CouponService.getSelectedCoupon(this, (coupon) => this.coupon = coupon);
},
mounted() {
this.init();
}
}
</script>