martial-arts/components/buy-popu.vue

172 lines
5.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode 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="posAll bac5" v-if="ifMask" @tap="executeEv" @touchmove.stop.prevent="moveHandle">
<view @tap.stop="ifMask=true" class="animated width100 " :class="ifAnimated?'slideInUp':'slideOutDown'" style="position: absolute;bottom: 0;">
<view class="bacf fon24 col26 pad-zy40 pad-s30 posir pad-x160" v-if="isLoading" style="border-radius: 20rpx 20rpx 0 0;">
<view class="mar-s20 bbot" v-for="(item,index) in specList" :key="index">
<view class="">{{item.title}}</view>
<view class="disac pad-x20 pad-s10 fw">
<view @tap="chooseSpec(index,item1.id)" class="pad-sx6 pad-zy30 radius4 borbot-df mar-s10 mar-y10" style="min-width: 86rpx;" :class="moSpecList[index]==item1.id?'specActive':''" v-for="(item1,index1) in item.children" :key="index1">{{item1.title}}</view>
</view>
</view>
<view class="pad-sx20 disjbac">
<view class="">数量</view>
<!-- 商品数量 -->
<view class="disac overflow" style="height: 50rpx;">
<!-- 减数量 -->
<view class="borbot-df disjcac radius4" @tap="addCutEv(0)" style="color: #d1d1d1;width: 50rpx;height: 50rpx;">
<i class="icon icon-cut fon20" :style="{backgroundColor: '#FFFFFF'}"></i>
</view>
<!-- 实际数量 -->
<input type="digit" @blur="blurEv" @focus="focusEv(count)" class="fon24 tcenter countInput" v-model="count">
<!-- -->
<view class="borbot-df disjcac radius4" @tap="addCutEv(1)" style="color: #d1d1d1;width: 50rpx;height: 50rpx;">
<i class="icon icon-add fon20" :style="{backgroundColor: '#FFFFFF'}"></i>
</view>
</view>
</view>
<!-- 立即购买 -->
<view @tap.stop="goConfirmOrder" class="width100 disjcac colf fon30 posia" style="height: 98rpx;background-color: #f37617;left: 0;right: 0;bottom: 0;">去购买</view>
</view>
</view>
</view>
</template>
<script>
export default {
name:"buy-popu",
data() {
return {
ifMask:false,//控制蒙层
ifAnimated:false,//控制白色弹框内容
isLoading:false,
specList:[],
moSpecList:[],
haveSpecList:[],
shopList:[],
count:1,
originalNum:0,
haveIndex:0
};
},
methods:{
// 前往确认订单页
goConfirmOrder(){
if(this.haveSpecList[this.haveIndex].stock){
let params = {
sku_list:[
this.objField('sku_id')
],
score_deduct:1
};
this.$requst.post('/api/order/prepare-info',params).then(res=>{
if(res.code==0){
uni.navigateTo({
url:'/pagesB/confirm-order/confirm-order'
})
this.executeEv();
uni.setStorageSync('orderInfo',res.data);
uni.setStorageSync('skuList',params.sku_list);
}
})
} else {
this.$toolAll.tools.showToast('库存不足');
}
},
// 删除对象中某个字段
objField(field){
let newObj = JSON.parse(JSON.stringify(this.shopList[0].sku_list[0]));
delete newObj[field];
return newObj;
},
// 获取产品详情
getSpec(shopId){
// 商品规格
this.$requst.get('/api/spu/spec',{id:shopId}).then(resspec=>{
if(resspec.code==0){
// 所有规格列表
this.specList = resspec.data.spec;
// 默认规格
this.moSpecList = resspec.data.sku.indexes.split('-');
// 存在规格
this.haveSpecList = resspec.data.sku_list;
this.shopList.push({
sku_list:[
{
sku_coding:resspec.data.sku.coding,
num:this.count
}
]
})
}
})
},
// 规格选择
chooseSpec(index,id1){
this.count = 1;
this.shopList[0].sku_list[0].num = this.count;
let tempList = JSON.parse(JSON.stringify(this.moSpecList));
tempList.splice(index,1,id1);
let exit = this.haveSpecList.findIndex(item=>item.indexes==tempList.join('-'));
if(exit!=-1){
if(this.haveSpecList[exit].stock){
this.haveIndex = exit;
this.isLoading = false;
this.moSpecList[index] = id1;
this.isLoading = true;
this.shopList[0].sku_list[0].sku_coding = this.haveSpecList[exit].coding;
this.shopList[0].sku_list[0].sku_id = this.haveSpecList[exit].id;
} else {
this.$toolAll.tools.showToast('库存不足');
}
} else {
this.$toolAll.tools.showToast('暂无该规格');
}
},
// 数量加减事件
addCutEv(num) {
if(num) {
// 加 ,如果当前商品数量不等于最大值
if(this.count != this.haveSpecList[this.haveIndex].stock) {
this.count++;
this.shopList[0].sku_list[0].num = this.count;
} else {
this.$toolAll.tools.showToast('库存不足');
}
} else {
// 减 ,如果当前商品数量大于最小值
if(this.count > 1) {
this.count--;
this.shopList[0].sku_list[0].num = this.count;
}
}
},
// 输入框获取焦点事件
focusEv(num) {
// 储存当前商品的原始数值
this.originalNum = num;
},
// 输入框失去焦点事件
blurEv(e) {
// 失去焦点时,获取当前输入框里的数值
let currentNum = e.detail.value*1;
// 如果当前输入框的值不等于0或空并且当前输入框的值大于最大值当前商品的数量 = 最大值, 否则为当前输入框输入的值
this.count = currentNum ? currentNum > this.haveSpecList[this.haveIndex].stock ? this.haveSpecList[this.haveIndex].stock : currentNum : this.originalNum;
this.shopList[0].sku_list[0].num = this.count;
},
moveHandle(){
return false;
},
// 执行动画
executeEv(){
this.ifAnimated=false;
setTimeout(()=>{
this.ifMask = false;
},200)
},
}
}
</script>
<style>
.countInput{width: 68rpx;border-top: 2rpx solid #DFDFDF;border-bottom: 2rpx solid #DFDFDF;border-radius: 4rpx;height: 50rpx;box-sizing: border-box;}
</style>