You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

518 lines
16 KiB

<template>
<view class="uibuydialog">
<block v-if="isload">
<view class="buydialog-mask" @tap="buydialogChange"></view>
<view class="buydialog">
<view class="buydialog-close" @tap="buydialogChange">
<image class="buydialog-close__img" :src="event_rul + '/static/img/static/img/close.png'"></image>
</view>
<view class="buydialog-product flex">
<image class="buydialog-product__img" :src="nowguige.pic || product.pic" @tap="previewImage" :data-url="nowguige.pic || product.pic"/>
<view class="buydialog-product__bd flex1">
<view class="buydialog-product__price flex al-item-center" :style="{color: colors.priceColor}">¥{{nowguige.sell_price}} <text v-if="nowguige.market_price > nowguige.sell_price" class="original-price">¥{{nowguige.market_price}}</text></view>
<text class="buydialog-product__choosename" v-if="product.limit_start > 1"> {{product.limit_start}}件起售</text>
<view class="buydialog-product__stock">库存:{{nowguige.stock}}</view>
<view class="buydialog-product__choosename" v-if="product.limit_start<=1">已选规格: {{nowguige.name}}</view>
</view>
</view>
<view class="buydialog-bd">
<view v-if="nowguige.balance_price" class="installment-price" :style="{color:t('color1')}">首付款金额:{{nowguige.advance_price}}元,尾款金额:{{nowguige.balance_price}}元</view>
<view class="buydialog-specification__list">
<view v-for="(item, index) in guigedata" :key="index" class="buydialog-specification flex-col">
<view class="buydialog-specification__name">{{item.title}}</view>
<view class="buydialog-specification__list flex al-item-center">
<block v-for="(item2, index2) in item.items" :key="index2">
<view :data-itemk="item.k" :data-idx="item2.k" :style="{background: ggselected[item.k] == item2.k ? colors.textBgcolor : '#F4F4F4', color: ggselected[item.k] == item2.k ? colors.textColor : '#666'}" :class="'buydialog-specification__item ' + (ggselected[item.k]==item2.k ? 'on':'')" @tap="ggchange">{{item2.title}}</view>
</block>
</view>
</view>
</view>
<view class="buydialog-buynum flex al-item-center j-between">
<view class="buydialog-buynum__txt flex1">购买数量</view>
<view class="buydialog-buynum__btn flex al-item-center">
<view class="sub-btn flex al-item-center j-center"><text class="iconfont icon-jian" :class="{'disabled': gwcnum < 2}" @tap="gwcminus"></text></view>
<input class="num flex1" type="number" :value="gwcnum" @input="gwcinput"></input>
<view class="add-btn flex al-item-center j-center"><text class="iconfont icon-shanchu1" :class="{'disabled': gwcnum == nowguige.stock}" @tap="gwcplus"></text></view>
</view>
</view>
</view>
<view class="buydialog-ft">
<view v-if="shopset && shopset.showcommission==1 && nowguige.commission > 0" class="buydialog-ft__tips" :style="{color:colors.textColor}">分享好友购买预计可得{{t('佣金')}}:<text class="commission">{{nowguige.commission}}</text>{{nowguige.commission_desc}}</view>
<view class="buydialog-ft__btns flex">
<block v-if="nowguige.stock <= 0">
<button class="buydialog-ft__btn nostock flex1">库存不足</button>
</block>
<block v-else>
<button class="buydialog-ft__btn addcart flex1" :style="{background:colors.purchaseBtn,color:colors.purchaseText}" @tap="addcart" v-if="btntype==0 && canaddcart">加入购物车</button>
<button class="buydialog-ft__btn tobuy flex1" :style="{background:colors.singleBtn}" @tap="tobuy" v-if="btntype==0">立即购买</button>
<button class="buydialog-ft__btn addcart flex1" :style="{background:colors.singleBtn}" @tap="addcart" v-if="btntype==1">确 定</button>
<button class="buydialog-ft__btn tobuy flex1" :style="{background:colors.singleBtn}" @tap="tobuy" v-if="btntype==2">确 定</button>
</block>
</view>
</view>
</view>
</block>
<loading v-if="loading"></loading>
</view>
</template>
<script>
var app = getApp();
export default {
data() {
return {
ks:'',
product:{},
guigelist:{},
guigedata:{},
ggselected:{},
nowguige:{},
gwcnum:1,
isload:false,
loading:false,
canaddcart:true,
shopset:{},
event_rul: app.globalData.event_url,
pagesUrl: '',
colors:{
priceColor: '#ED5925', // 价格颜色
textBgcolor: '#E2F7EF', // 规格选中背景色
textColor: this.t('color1'), // 规格选中字体颜色
singleBtn: 'linear-gradient(to right, #01A664, #096741)', // 单个按钮背景色
purchaseBtn: 'linear-gradient(to right, #E9FAF4, #CAF6E5)', // 购买按钮背景色
purchaseText: this.t('color1'), // 购买按钮字体颜色
},
}
},
props: {
btntype:{default:0},
menuindex:{default:-1},
controller:{default:'ApiShop'},
needaddcart:{default:true},
proid:{},
showtaos: {default: 0},
themsColor: {default: 0}
},
created() {
if(this.themsColor == 1) { // 海纳百川
this.colors = {
priceColor: '#FF4800', // 价格颜色
textBgcolor: '#E6EFFF', // 规格选中背景色
textColor: '#1870C5', // 规格选中字体颜色
singleBtn: 'linear-gradient(to right, #269DD1, #5487D7)', // 单个按钮背景色
purchaseBtn: 'linear-gradient(to right, #E9F1FF, #E6EFFF)', // 购买按钮背景色
purchaseText: '#1870C5', // 购买按钮字体颜色
}
}
if(this.themsColor == 2) { // 百里挑一
this.colors = {
priceColor: '#CE0000', // 价格颜色
textBgcolor: '#FFE4C2', // 规格选中背景色
textColor: '#CE0000', // 规格选中字体颜色
singleBtn: 'linear-gradient(to right, #AECA00, #8CB400)', // 单个按钮背景色
purchaseBtn: 'linear-gradient(to right, #FFE8EC, #FFE8EC)', // 购买按钮背景色
purchaseText: '#CE0000', // 购买按钮字体颜色
}
}
if(this.themsColor == 3) { // 橙心如意
this.colors = {
priceColor: '#ED5925', // 价格颜色
textBgcolor: '#FFE8EC', // 规格选中背景色
textColor: '#FB5E00', // 规格选中字体颜色
singleBtn: 'linear-gradient(to right, #FF7D16, #FF640A)', // 单个按钮背景色
purchaseBtn: 'linear-gradient(to right, #FFE7C8, #FFE4C2)', // 购买按钮背景色
purchaseText: '#FB5E00', // 购买按钮字体颜色
}
}
if(this.themsColor == 4) { // 红福齐天
this.colors = {
priceColor: '#ED5925', // 价格颜色
textBgcolor: '#FFE4E6', // 规格选中背景色
textColor: '#D11800', // 规格选中字体颜色
singleBtn: 'linear-gradient(to right, #FA5F47, #FD5A54)', // 单个按钮背景色
purchaseBtn: 'linear-gradient(to right, #FFF4F5, #FFE0E1)', // 购买按钮背景色
purchaseText: '#D11800', // 购买按钮字体颜色
}
}
if(this.themsColor == 5) { // 和气生财
this.colors = {
priceColor: '#ED5925', // 价格颜色
textBgcolor: '#FFD9A4', // 规格选中背景色
textColor: '#E64520', // 规格选中字体颜色
singleBtn: 'linear-gradient(150deg, #F65326, #C40000)', // 单个按钮背景色
purchaseBtn: '#FFD9A4', // 购买按钮背景色
purchaseText: '#E64520', // 购买按钮字体颜色
}
}
if(this.themsColor == 6) { // 青山绿水
this.colors = {
priceColor: '#E55554', // 价格颜色
textBgcolor: '#EAFFFA', // 规格选中背景色
textColor: '#5CBB62', // 规格选中字体颜色
singleBtn: 'linear-gradient(150deg, #95E196, #65B76A)', // 单个按钮背景色
purchaseBtn: '#EAFFFA', // 购买按钮背景色
purchaseText: '#5CBB62', // 购买按钮字体颜色
}
}
},
mounted:function(){
var pages = getCurrentPages()
this.pagesUrl = pages[pages.length - 1].route
this.getdata();
},
methods:{
getdata:function(){
var that = this;
if(this.controller == 'ApiShop' && app.globalData.isdouyin == 1){
app.showLoading('加载中');
app.post('ApiShop/getDouyinProductId',{proid:that.proid},function(res){
app.showLoading(false);
if(res.status == 1){
tt.openEcGood({promotionId:res.douyin_product_id});
}else{
app.alert(res.msg)
}
});
return;
}
that.loading = true;
app.post(this.controller+'/getproductdetail',{id:that.proid},function(res){
that.loading = false;
that.product = res.product;
that.shopset = res.shopset;
if(!that.product.limit_start){
that.product.limit_start = 1;
}
that.guigelist = res.guigelist;
that.guigedata = res.guigedata;
var guigedata = res.guigedata;
var ggselected = [];
for (var i = 0; i < guigedata.length; i++) {
ggselected.push(0);
}
that.ks = ggselected.join(',');
that.nowguige = that.guigelist[that.ks];
that.ggselected = ggselected;
if(that.nowguige.limit_start > 0)
that.gwcnum = that.nowguige.limit_start;
else
that.gwcnum = that.product.limit_start;
that.isload = true;
if(that.product.freighttype==3 || that.product.freighttype==4){ //虚拟商品不能加入购物车
that.canaddcart = false;
}
});
},
buydialogChange:function(){
this.$emit('buydialogChange');
},
//选择规格
ggchange: function (e){
var idx = e.currentTarget.dataset.idx;
var itemk = e.currentTarget.dataset.itemk;
var ggselected = this.ggselected;
ggselected[itemk] = idx;
var ks = ggselected.join(',');
this.ggselected = ggselected;
this.ks = ks;
this.nowguige = this.guigelist[this.ks];
if(this.nowguige.limit_start > 0) {
if (this.gwcnum < this.nowguige.limit_start) {
this.gwcnum = this.nowguige.limit_start;
}
}
},
tobuy: function (e) {
var that = this;
var ks = that.ks;
var proid = that.product.id;
var ggid = that.guigelist[ks].id;
var stock = that.guigelist[ks].stock;
var num = that.gwcnum;
if (num < 1) num = 1;
if (stock < num) {
app.error('库存不足');
return;
}
var prodata = proid + ',' + ggid + ',' + num;
this.$emit('buydialogChange');
if(this.controller == 'ApiShop'){
app.goto('/pagesA/shop/buy?prodata=' + prodata);
}else if(this.controller == 'ApiSeckill'){
app.goto('/activity/seckill/buy?prodata=' + prodata);
}else if(this.controller == 'ApiSeckill2'){
app.goto('/activity/seckill2/buy?prodata=' + prodata);
}else if(this.controller == 'ApiRestaurantTakeaway'){
app.goto('/restaurant/takeaway/buy?prodata=' + prodata);
}else if(this.controller == 'ApiRestaurantShop'){
app.goto('/restaurant/shop/buy?prodata=' + prodata);
}
},
//加入购物车操作
addcart: function () {
var that = this;
var ks = that.ks;
var num = that.gwcnum;
var proid = that.product.id;
var ggid = that.guigelist[ks].id;
var stock = that.guigelist[ks].stock;
if (num < 1) num = 1;
if (stock < num) {
app.error('库存不足');
return;
}
if(this.needaddcart){
app.post(this.controller+'/addcart', {proid: proid,ggid: ggid,num: num}, function (res) {
if (res.status == 1) {
app.success('添加成功');
} else {
app.error(res.msg, 1500);
if(that.showtaos == 1){
uni.hideToast()
}
if(that.pagesUrl == 'pages/shop/product') {
that.$emit('cartPuch',res.goods);
}
}
});
}
this.$emit('addcart',{proid: proid,ggid: ggid,num: num});
this.$emit('buydialogChange');
},
//加
gwcplus: function (e) {
var gwcnum = this.gwcnum + 1;
var ks = this.ks;
if (gwcnum > this.guigelist[ks].stock) {
app.error('库存不足');
return 1;
}
if (this.product.perlimitdan > 0 && gwcnum > this.product.perlimitdan) {
app.error('每单限购'+this.product.perlimitdan+'件');
return 1;
}
this.gwcnum = this.gwcnum + 1;
},
//减
gwcminus: function (e) {
var gwcnum = this.gwcnum - 1;
var ks = this.ks;
if(this.nowguige.limit_start > 0) {
if (gwcnum <= this.nowguige.limit_start - 1) {
if(this.nowguige.limit_start > 1){
app.error('该规格' + this.nowguige.limit_start + '件起售');
}
return;
}
}else{
if (gwcnum <= this.product.limit_start - 1) {
if(this.product.limit_start > 1){
app.error('该商品' + this.product.limit_start + '件起售');
}
return;
}
}
this.gwcnum = this.gwcnum - 1;
},
//输入
gwcinput: function (e) {
var ks = this.ks;
var gwcnum = parseInt(e.detail.value);
if (gwcnum < 1) return 1;
if (gwcnum > this.guigelist[ks].stock) {
return this.guigelist[ks].stock > 0 ? this.guigelist[ks].stock : 1;
}
if(this.nowguige.limit_start > 0) {
if (gwcnum <= this.nowguige.limit_start - 1) {
if(this.nowguige.limit_start > 1){
app.error('该规格' + this.nowguige.limit_start + '件起售');
}
gwcnum = this.nowguige.limit_start;
}
}else{
if (gwcnum <= this.product.limit_start - 1) {
if(this.product.limit_start > 1){
app.error('该商品' + this.product.limit_start + '件起售');
}
gwcnum = this.product.limit_start;
}
}
if (this.product.perlimitdan > 0 && gwcnum > this.product.perlimitdan) {
app.error('每单限购'+this.product.perlimitdan+'件');
gwcnum = this.product.perlimitdan;
}
this.gwcnum = gwcnum;
},
}
}
</script>
<style lang="scss">
.uibuydialog {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 9999990;
}
.buydialog-mask{ position: fixed; top: 0rem; left: 0rem; width: 100%; background: rgba(0,0,0,0.5); bottom: 0rem;z-index:10}
.buydialog {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background: #fff;
z-index:9999995;
padding: 0 24rpx 28rpx;
padding-bottom: calc(20rpx + constant(safe-area-inset-bottom));
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
border-radius:20rpx 20rpx 0 0;
&-close {
position: absolute;
top: 26rpx;
right: 26rpx;
z-index:12;
&__img {
width: 28rpx;
height:28rpx;
}
}
&-product {
padding: 16rpx 6rpx;
border-bottom: 1rpx solid #F4F4F4;
&__img {
flex-shrink: 0;
width: 204rpx;
height:204rpx;
border-radius: 10rpx;
margin-right: 24rpx;
}
&__price {
margin-top: 34rpx;
font-size: 36rpx;
font-weight: bold;
color: #ED5925;
line-height: 32rpx;
.original-price {
font-size: 24rpx;
color: #999999;
line-height: 34rpx;
font-weight: normal;
text-decoration:line-through;
margin-left: 20rpx;
}
}
&__stock,&__choosename {
font-size: 26rpx;
color: #999999;
line-height: 36rpx;
margin-top: 12rpx;
}
&__choosename {
margin-top: 16rpx;
}
}
.installment-price {
margin-top: 10rpx;
font-size: 24rpx;
line-height: 32rpx;
}
&-specification{
padding-top: 28rpx;
&__name {
font-size: 28rpx;
font-weight: bold;
color: #333333;
line-height: 40rpx;
margin-bottom: 20rpx;
}
&__list {
flex-wrap:wrap;
margin-bottom: -10rpx;
}
&__item {
background: #F4F4F4;
color:#666666;
margin-right: 10rpx;
margin-bottom: 10rpx;
border-radius: 8rpx;
padding: 0 16rpx;
font-size: 24rpx;
line-height: 60rpx;
&.on {
color: #0A5D3B;
background: #E2F7EF;
}
}
}
&-buynum {
padding-top: 28rpx;
font-size: 28rpx;
color: #333333;
font-weight: bold;
line-height: 56rpx;
&__btn {
border: 1rpx solid #CCCCCC;
border-radius: 6rpx;
width: 96px;
.sub-btn,.add-btn {
width: 56rpx;
height: 56rpx;
flex-shrink: 0;
.iconfont {
font-size: 26rpx;
color: #333333;
&.disabled {
color: #CCCCCC;
}
&.icon-shanchu1 {
font-size: 24rpx;
transform: rotate(45deg);
}
}
}
.num {
height: 56rpx;
padding: 0 10rpx;
text-align: center;
border-left: 1rpx solid #CCCCCC;
border-right: 1rpx solid #CCCCCC;
}
}
}
&-ft {
&__tips {
margin-top:20rpx;
font-size: 22rpx;
line-height: 32rpx;
.commission {
font-weight: bold;
padding: 0 3rpx;
}
}
&__btns {
margin-top: 32rpx;
border-radius: 40rpx;
overflow: hidden;
}
&__btn {
height: 80rpx;
line-height: 80rpx;
font-size:28rpx;
font-weight:bold;
color: #fff;
&:first-child {border-top-left-radius: 40rpx;border-end-start-radius: 40rpx;}
&:last-child {border-top-right-radius: 40rpx;border-end-end-radius: 40rpx;}
&.nostock{
background:#ccc;
}
}
}
}
</style>