847 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			847 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			Vue
		
	
	
	
|  | <template> | |||
|  | 	<view class="product-detail pr"> | |||
|  | 		<view class="product-pic"> | |||
|  | 			<swiper class="swiper" indicator-active-color="#ffffff" indicator-color="rgba(255,255,255,.3)" | |||
|  | 				indicator-dots autoplay :interval="2000" :duration="500"> | |||
|  | 				<swiper-item v-if="detail.videoUrl && detail.cover"> | |||
|  | 					<view v-if="!isVideoPlay" class="icon iconfont icon-bofang" @click="isVideoPlay = true"></view> | |||
|  | 					<image v-if="!isVideoPlay" :src="detail.cover" mode="" @click="isVideoPlay = true"></image> | |||
|  | 					<video v-if="isVideoPlay" :src="detail.videoUrl" :autoplay="isVideoPlay" | |||
|  | 						@click="isVideoPlay = false" class="video" :controls="false" :show-center-play-btn="false" | |||
|  | 						:show-play-btn="false" :enable-progress-gesture="false"></video> | |||
|  | 				</swiper-item> | |||
|  | 				<swiper-item v-if="detail.cover1"> | |||
|  | 					<image :src="detail.cover1" mode="aspectFit"></image> | |||
|  | 				</swiper-item> | |||
|  | 				<swiper-item v-if="detail.cover2"> | |||
|  | 					<image :src="detail.cover1" mode="aspectFit"></image> | |||
|  | 				</swiper-item> | |||
|  | 				<swiper-item v-if="detail.cover3"> | |||
|  | 					<image :src="detail.cover1" mode="aspectFit"></image> | |||
|  | 				</swiper-item> | |||
|  | 				<swiper-item v-if="detail.cover4"> | |||
|  | 					<image :src="detail.cover1" mode="aspectFit"></image> | |||
|  | 				</swiper-item> | |||
|  | 				<swiper-item v-if="detail.cover5"> | |||
|  | 					<image :src="detail.cover1" mode="aspectFit"></image> | |||
|  | 				</swiper-item> | |||
|  | 				<swiper-item v-if="detail.cover6"> | |||
|  | 					<image :src="detail.cover1" mode="aspectFit"></image> | |||
|  | 				</swiper-item> | |||
|  | 			</swiper> | |||
|  | 		</view> | |||
|  | 		<view class="product-content"> | |||
|  | 			<view class="white d-b-c preview-box pr" v-if="detail.preSaleStatus == 1"> | |||
|  | 				<image class="preview-bg" src="/static/bg/preview-bg.png" mode=""></image> | |||
|  | 				<view class="pr z1"> | |||
|  | 					<view class="f28"> | |||
|  | 						{{ currencyIcon() }} | |||
|  | 						<text class="f42 fb">{{ formatNum(priceTotal) }}</text> | |||
|  | 					</view> | |||
|  | 					<view class="f24"> | |||
|  | 						<text>{{ formatNum(achieveTotal) || "" }}</text> | |||
|  | 					</view> | |||
|  | 				</view> | |||
|  | 				<view class="pr z1"> | |||
|  | 					<view class="d-e-c f24 mb16"> | |||
|  | 						<u-icon name="clock" size="30rpx" color="#fff"></u-icon> | |||
|  | 						<text class="ml10">{{ $t("w_0116") }}</text> | |||
|  | 					</view> | |||
|  | 					<view class="f20 d-e-c"> | |||
|  | 						{{ $t("CK_KS_11") }}: | |||
|  | 						<Countdown ref="countdown" :color="'#999999'" :timeSize="'22rpx'" :config="countdownConfig" | |||
|  | 							@returnVal="returnValFunc"></Countdown> | |||
|  | 					</view> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 			<view class="product-info"> | |||
|  | 				<view class="d-s-c mb10" v-if="detail.preSaleStatus == 0 || cid == 21"> | |||
|  | 					<view class="f28 price-color"> | |||
|  | 						<view v-if=" | |||
|  |                 (cid == 101 || cid == 102 || cid == 201 || cid == 202) && | |||
|  |                 userinfo.pkSettleCountry != pkCountry | |||
|  |               "> | |||
|  | 							{{ borderunits1 | |||
|  |               }}<text class="f42 fb">{{ formatNum(priceTotal1) }}</text>({{ currencyIcon() }} | |||
|  | 							<text class="f42 fb">{{ | |||
|  |                 formatNum(priceTotal || detail.waresPrice) | |||
|  |               }}</text>) | |||
|  | 						</view> | |||
|  | 						<view v-else> | |||
|  | 							{{ currencyIcon() }} | |||
|  | 							<text class="f42 fb">{{ | |||
|  |                 formatNum(priceTotal || detail.waresPrice) | |||
|  |               }}</text> | |||
|  | 						</view> | |||
|  | 					</view> | |||
|  | 					<view class="f24 gray9 ml20" v-if="cid != 10 && cid != 13&& cid!=30">{{ | |||
|  |             formatNum(achieveTotal) || "" | |||
|  |           }}</view> | |||
|  | 					<view class="f24 gray9 ml20" v-if="cid == 10">{{ $t("w_0118") }}{{ formatNum(detail.deductMoney) }} | |||
|  | 					</view> | |||
|  | 					<view class="f24 gray9 ml20" v-if="cid == 13">BV:{{ formatNum(achieveTotal) || "" }}</view> | |||
|  | 				</view> | |||
|  | 				<view class="f24 gray9 mb20">{{ $t("w_0252") }} | |||
|  | 					{{ detail.sales * 1 > 999 ? "999+" : detail.sales }} | |||
|  | 				</view> | |||
|  | 				<view class="text-ellipsis-2 mb23"> | |||
|  | 					<!-- <text class="type-tips">爆款</text> --> | |||
|  | 					<text class="f32 gray3">{{ detail.waresName }}</text> | |||
|  | 				</view> | |||
|  | 				<view class="f28 mb23" v-if="detail.giftNames"> | |||
|  | 					<text class="domation">{{ $t("ENU_SALE_T_0") }}:</text> | |||
|  | 					<text class="gray9">{{ detail.giftNames }}</text> | |||
|  | 				</view> | |||
|  | 				<view class="sellingPoints" v-if="detail.sellingPoints">{{ | |||
|  |           detail.sellingPoints | |||
|  |         }}</view> | |||
|  | 			</view> | |||
|  | 			<view class="secend-info"> | |||
|  | 				<view class="d-b-c sec-info-item" @click="openSpec"> | |||
|  | 					<view class="sec-info-label">{{ $t("w_0107") }}</view> | |||
|  | 					<view class="flex-1">{{ alreadyChioce }}</view> | |||
|  | 					<view class="icon iconfont icon-jiantou"></view> | |||
|  | 				</view> | |||
|  | 				<!-- <view class="d-b-c sec-info-item"> | |||
|  | 					<view class="sec-info-label">地址</view> | |||
|  | 					<view class="flex-1">形成自行车</view> | |||
|  | 					<view class="icon iconfont icon-jiantou"></view> | |||
|  | 				</view> --> | |||
|  | 				<!-- <view class="d-b-c sec-info-item"> | |||
|  | 					<view class="sec-info-label">活动</view> | |||
|  | 					<view class="flex-1">新人福利</view> | |||
|  | 					<view class="icon iconfont icon-jiantou"></view> | |||
|  | 				</view> --> | |||
|  | 				<!-- <view class="d-b-c sec-info-item"> | |||
|  | 					<view class="sec-info-label">邮费</view> | |||
|  | 					<view class="flex-1">免邮</view> | |||
|  | 				</view> --> | |||
|  | 				<view class="d-b-c sec-info-item"> | |||
|  | 					<view class="sec-info-label">{{ $t("w_0122") }}</view> | |||
|  | 					<view class="flex-1"></view> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 			<view class="thi-info"> | |||
|  | 				<view class="thi-nav"> | |||
|  | 					<view class="thi-nav-item" :class="{ active: thiType == 0 }" @click="thiType = 0">{{ $t("w_0124") }} | |||
|  | 					</view> | |||
|  | 					<!-- <view class="thi-nav-item" :class="{active:thiType == 1}">规格与包装</view> --> | |||
|  | 					<view class="thi-nav-item" :class="{ active: thiType == 2 }" @click="thiType = 2">{{ $t("w_0125") }} | |||
|  | 					</view> | |||
|  | 				</view> | |||
|  | 				<view v-if="thiType == 0"><u-parse :content="detail.details"></u-parse></view> | |||
|  | 				<!-- <view v-if="thiType == 1"><u-parse :content="detail.details"></u-parse></view> --> | |||
|  | 				<view v-if="thiType == 2"><u-parse :content="detail.afterGuarantee"></u-parse></view> | |||
|  | 			</view> | |||
|  | 		</view> | |||
|  | 		<view class="btns-wrap"> | |||
|  | 			<view class="d-a-c flex-1"> | |||
|  | 				<view class="icon-box d-c-c" @click="gotoPage('/pages/index/index')"> | |||
|  | 					<button class="d-c-c d-c bg-white"> | |||
|  | 						<image style="width: 33rpx; height: 33rpx; margin-bottom: 10rpx" | |||
|  | 							src="/static/icon/product/home.png" mode=""></image> | |||
|  | 						<text class="f20" | |||
|  | 							style="height: 20rpx; line-height: 20rpx; color: #fb3024">{{ $t("ENU_MENU_10") }}</text> | |||
|  | 					</button> | |||
|  | 				</view> | |||
|  | 				<!-- 	<view class="icon-box d-c-c"> | |||
|  | 					<button | |||
|  | 						class="d-c-c d-c bg-white" | |||
|  | 						@click=" | |||
|  | 							gotoWeb( | |||
|  | 								'https://im1c5366d.7x24cc.com/phone_webChat.html?accountId=N000000033467&chatId=302384fb-eda1-436e-a5e9-c03a2dbd6e97&visitorId=' + | |||
|  | 									getUserId() + | |||
|  | 									'&nickName=' + | |||
|  | 									getUserId() | |||
|  | 							) | |||
|  | 						" | |||
|  | 					> | |||
|  | 						<image style="width: 33rpx;height: 33rpx;margin-bottom: 10rpx;" src="/static/icon/product/service.png" mode=""></image> | |||
|  | 						<text class="f20 gray3" style="height: 20rpx;line-height: 20rpx;">{{ $t('w_0259') }}</text> | |||
|  | 					</button> | |||
|  | 				</view> --> | |||
|  | 				<view class="icon-box d-c-c" @click="gotoPage('/pages/cart/cart')"> | |||
|  | 					<button class="pr d-c-c d-c bg-white"> | |||
|  | 						<image style="width: 33rpx; height: 33rpx; margin-bottom: 10rpx" | |||
|  | 							src="/static/icon/product/cart.png" mode=""></image> | |||
|  | 						<text class="f20 gray3" style="height: 20rpx; line-height: 20rpx">{{ | |||
|  |               $t("N_I_194") | |||
|  |             }}</text> | |||
|  | 						<text v-if="sCount > 0" class="cart_num">{{ sCount }}</text> | |||
|  | 					</button> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 
 | |||
|  | 			<!-- <template> | |||
|  | 				<button type="primary" class="add-cart">加入购物车</button> | |||
|  | 				<button type="primary" class="buy">立即购买</button> | |||
|  | 			</template> --> | |||
|  | 			<template> | |||
|  | 				<button type="primary" class="buy one" @click="openSpec"> | |||
|  | 					{{ $t("N_I_192") }} | |||
|  | 				</button> | |||
|  | 				<!-- <button type="primary" class="buy one" @click="isTablePopup = true">加入购物车</button> --> | |||
|  | 			</template> | |||
|  | 		</view> | |||
|  | 		<!--购物确定--> | |||
|  | 		<specTable v-if="cid != 21" :isPopup="isTablePopup" :productModel="productModel" @close="closePopup" | |||
|  | 			@addCart="addCart" :pkCountry="pkCountry" :cid="cid"></specTable> | |||
|  | 		<!--海粉购物确定--> | |||
|  | 		<spec v-if="cid == 21" :active_id="active_id" :isPopup="isTablePopup" :productModel="productModel" | |||
|  | 			@close="closePopup" @addCart="addHfen" @changeFunc="changeFunc"></spec> | |||
|  | 	</view> | |||
|  | </template> | |||
|  | 
 | |||
|  | <script> | |||
|  | 	import specTable from "./popup/spec-table.vue"; | |||
|  | 	import spec from "./popup/spec.vue"; | |||
|  | 	import Countdown from "@/components/countdown/countdown-presale.vue"; | |||
|  | 	export default { | |||
|  | 		components: { | |||
|  | 			specTable, | |||
|  | 			Countdown, | |||
|  | 			spec, | |||
|  | 		}, | |||
|  | 		data() { | |||
|  | 			return { | |||
|  | 				cid: 0, | |||
|  | 				waresCode: "", | |||
|  | 				title: "", | |||
|  | 				productModel: null, | |||
|  | 				isPopup: false, | |||
|  | 				isTablePopup: false, | |||
|  | 				isPreview: false, | |||
|  | 				isVideoPlay: false, | |||
|  | 				detail: {}, | |||
|  | 				thiType: 0, | |||
|  | 				alreadyChioce: "", | |||
|  | 				isFirst: true, | |||
|  | 				userinfo: {}, | |||
|  | 				productParams: [], | |||
|  | 				/*倒计时配置*/ | |||
|  | 				countdownConfig: { | |||
|  | 					/*开始时间*/ | |||
|  | 					startstamp: 1683194245, | |||
|  | 					/*结束时间*/ | |||
|  | 					endstamp: 1683367044, | |||
|  | 				}, | |||
|  | 				sCount: 0, | |||
|  | 				active_id: "", | |||
|  | 				pkCountry: 1, | |||
|  | 				borderunits1: "", | |||
|  | 			}; | |||
|  | 		}, | |||
|  | 		onLoad(e) { | |||
|  | 			this.cid = e.cid; | |||
|  | 			this.pkCountry = e.pkCountry || 0; | |||
|  | 			this.waresCode = e.waresCode; | |||
|  | 			this.pkId = e.pkId; | |||
|  | 			let title = this.$t("ENU_TRADE_T_121"); | |||
|  | 			switch (this.cid) { | |||
|  | 				case 0: | |||
|  | 					title = this.$t("ENU_TRADE_T_121"); | |||
|  | 					break; | |||
|  | 				case 1: | |||
|  | 					title = this.$t("ENU_MENU_311"); | |||
|  | 					break; | |||
|  | 				case 2: | |||
|  | 					title = this.$t("ENU_MENU_321"); | |||
|  | 					break; | |||
|  | 				case 3: | |||
|  | 					title = this.$t("ENU_TRADE_T_121"); | |||
|  | 					break; | |||
|  | 				case 7: | |||
|  | 					title = this.$t("N_I_2"); | |||
|  | 					break; | |||
|  | 				case 10: | |||
|  | 					title = this.$t("ENU_MENU_360"); | |||
|  | 					break; | |||
|  | 				case 11: | |||
|  | 					title = this.$t("ENU_MENU_350"); | |||
|  | 					break; | |||
|  | 				case 12: | |||
|  | 					title = this.$t("ENU_MENU_333"); | |||
|  | 					break; | |||
|  | 				case 13: | |||
|  | 					title = this.$t("ENU_MENU_340"); | |||
|  | 					break; | |||
|  | 				case 14: | |||
|  | 					title = this.$t("ENU_MENU_334"); | |||
|  | 					break; | |||
|  | 				case 18: | |||
|  | 					title = this.$t("ENU_SPECIAL_A_18"); | |||
|  | 					break; | |||
|  | 				case 19: | |||
|  | 					title = this.$t("ENU_SPECIAL_A_19"); | |||
|  | 					break; | |||
|  | 				case 21: | |||
|  | 					title = this.$t("N_I_4"); | |||
|  | 					break; | |||
|  | 				case 22: | |||
|  | 					title = this.$t("ENU_SPECIAL_A_22"); | |||
|  | 					break; | |||
|  | 				case 23: | |||
|  | 					title = this.$t("ENU_SPECIAL_A_8"); | |||
|  | 					break; | |||
|  | 				case 24: | |||
|  | 					// title = '乐学易考';
 | |||
|  | 					title = this.$t("ENU_MENU_312"); | |||
|  | 					break; | |||
|  | 				case 25: | |||
|  | 					// title = '乐学易考';
 | |||
|  | 					title = this.$t("ENU_MENU_322"); | |||
|  | 					break; | |||
|  | 				case 26: | |||
|  | 					// title = '乐学易考';
 | |||
|  | 					title = this.$t("ENU_MENU_335"); | |||
|  | 					break; | |||
|  | 				case 27: | |||
|  | 					// title = '海粉升级';
 | |||
|  | 					title = this.$t("ENU_ORDER_T_27"); | |||
|  | 					break; | |||
|  | 				case 101: | |||
|  | 					title = this.$t("fn_004"); | |||
|  | 					break; | |||
|  | 				case 102: | |||
|  | 					title = this.$t("ENU_MENU_316"); | |||
|  | 					break; | |||
|  | 				case 201: | |||
|  | 					title = this.$t("fn_007"); | |||
|  | 					break; | |||
|  | 				case 202: | |||
|  | 					title = this.$t("fn_008"); | |||
|  | 					break; | |||
|  | 				case 30: | |||
|  | 					title = this.$t("fn_009"); | |||
|  | 					break; | |||
|  | 				case 33: | |||
|  | 					title = this.$t("APP_ADD_27"); | |||
|  | 					break; | |||
|  | 			} | |||
|  | 			this.title = title; | |||
|  | 			this.getData(); | |||
|  | 		}, | |||
|  | 		onShow() { | |||
|  | 			this.getShoppingCount(); | |||
|  | 
 | |||
|  | 			this.getInfo(); | |||
|  | 			this.borderunits1 = uni.getStorageSync("borderUnit"); | |||
|  | 		}, | |||
|  | 		computed: { | |||
|  | 			achieveTotal: function() { | |||
|  | 				let self = this; | |||
|  | 				let price = 0; | |||
|  | 				if (this.cid == 21 && self.detail && self.detail.waresSkuList) { | |||
|  | 					self.detail.waresSkuList.forEach((item) => { | |||
|  | 						if (item.pkId == self.active_id) { | |||
|  | 							price = item.achieve; | |||
|  | 						} | |||
|  | 					}); | |||
|  | 					return price; | |||
|  | 				} | |||
|  | 				if (self.productParams) { | |||
|  | 					self.productParams.forEach((item, index) => { | |||
|  | 						item.waresItemsParamsList.forEach((pitem, pindex) => { | |||
|  | 							if (self.cid == 13) { | |||
|  | 								price += pitem.number * pitem.assAchieve; | |||
|  | 							} else { | |||
|  | 								price += pitem.number * pitem.achieveTotal; | |||
|  | 							} | |||
|  | 						}); | |||
|  | 					}); | |||
|  | 				} | |||
|  | 				return price; | |||
|  | 			}, | |||
|  | 			priceTotal: function() { | |||
|  | 				let self = this; | |||
|  | 				let price = 0; | |||
|  | 				if (this.cid == 21 && self.detail.waresSkuList) { | |||
|  | 					self.detail.waresSkuList.forEach((item) => { | |||
|  | 						if (item.pkId == self.active_id) { | |||
|  | 							price = item.price; | |||
|  | 						} | |||
|  | 					}); | |||
|  | 					return price; | |||
|  | 				} | |||
|  | 				if (self.productParams) { | |||
|  | 					self.productParams.forEach((item, index) => { | |||
|  | 						item.waresItemsParamsList.forEach((pitem, pindex) => { | |||
|  | 							price += pitem.number * pitem.price; | |||
|  | 						}); | |||
|  | 					}); | |||
|  | 				} | |||
|  | 				return price; | |||
|  | 			}, | |||
|  | 			priceTotal1: function() { | |||
|  | 				let self = this; | |||
|  | 				let price1 = 0; | |||
|  | 				if (self.productParams) { | |||
|  | 					self.productParams.forEach((item, index) => { | |||
|  | 						item.waresItemsParamsList.forEach((pitem, pindex) => { | |||
|  | 							price1 += pitem.number * pitem.borderPrice; | |||
|  | 						}); | |||
|  | 					}); | |||
|  | 				} | |||
|  | 				return price1; | |||
|  | 			}, | |||
|  | 		}, | |||
|  | 		methods: { | |||
|  | 			getInfo() { | |||
|  | 				let self = this; | |||
|  | 				self._get("member/api/member/get-info", {}, (res) => { | |||
|  | 					self.userinfo = res.data; | |||
|  | 				}); | |||
|  | 			}, | |||
|  | 			getShoppingCount() { | |||
|  | 				let self = this; | |||
|  | 				self._get( | |||
|  | 					"sale/api/shopping/getShoppingCount", { | |||
|  | 						specialArea: self.cid, | |||
|  | 					}, | |||
|  | 					(res) => { | |||
|  | 						self.sCount = res.data.smallCount; | |||
|  | 					} | |||
|  | 				); | |||
|  | 			}, | |||
|  | 			gotoWeb(url) { | |||
|  | 				this.gotoPage("/pages/webview/webview?url=" + encodeURIComponent(url)); | |||
|  | 			}, | |||
|  | 			addHfen(e) { | |||
|  | 				let self = this; | |||
|  | 				this.isTablePopup = false; | |||
|  | 				self._post( | |||
|  | 					"sale/api/shopping/addShopping", { | |||
|  | 						number: 1, | |||
|  | 						pkId: self.pkId, | |||
|  | 						productGroup: [{ | |||
|  | 							pkProduct: self.pkId, | |||
|  | 							pkSkuId: self.active_id, | |||
|  | 						}, ], | |||
|  | 						specialArea: self.cid, | |||
|  | 						source: 2, | |||
|  | 					}, | |||
|  | 					(res) => { | |||
|  | 						uni.showToast({ | |||
|  | 							title: res.msg, | |||
|  | 							icon: "none", | |||
|  | 						}); | |||
|  | 						self.getShoppingCount(); | |||
|  | 					} | |||
|  | 				); | |||
|  | 			}, | |||
|  | 			addCart(e) { | |||
|  | 				let self = this; | |||
|  | 				this.isTablePopup = false; | |||
|  | 				if (e) { | |||
|  | 					this.productParams = e; | |||
|  | 					this.getalreadyChioce(); | |||
|  | 				} | |||
|  | 				let productGroup = []; | |||
|  | 				self.productParams.forEach((item, index) => { | |||
|  | 					item.waresItemsParamsList.forEach((pitem, pindex) => { | |||
|  | 						if (pitem.number > 0) { | |||
|  | 							productGroup.push({ | |||
|  | 								pkProduct: pitem.pkProduct, | |||
|  | 								pkSkuId: pitem.pkSkuId, | |||
|  | 								quantity: pitem.number, | |||
|  | 							}); | |||
|  | 						} | |||
|  | 					}); | |||
|  | 				}); | |||
|  | 				self._post( | |||
|  | 					"sale/api/shopping/addShopping", { | |||
|  | 						number: 1, | |||
|  | 						productGroup: productGroup, | |||
|  | 						specialArea: self.cid, | |||
|  | 						pkCountry: self.pkCountry, | |||
|  | 						waresCode: self.waresCode, | |||
|  | 					}, | |||
|  | 					(res) => { | |||
|  | 						uni.showToast({ | |||
|  | 							title: res.msg, | |||
|  | 							icon: "none", | |||
|  | 						}); | |||
|  | 						self.getShoppingCount(); | |||
|  | 					} | |||
|  | 				); | |||
|  | 			}, | |||
|  | 			getData() { | |||
|  | 				let self = this; | |||
|  | 				let url = "sale/api/wares/query-spe-wares-detail"; | |||
|  | 				let params = { | |||
|  | 					specialArea: self.cid || 0, | |||
|  | 					waresCode: self.waresCode || "", | |||
|  | 					pkCountry: self.pkCountry || 1, | |||
|  | 				}; | |||
|  | 				if (!self.waresCode) { | |||
|  | 					url = "sale/api/wares/query-spe-sharing-wares-detail"; | |||
|  | 					params = { | |||
|  | 						pkId: self.pkId || 0, | |||
|  | 						// source: 2
 | |||
|  | 					}; | |||
|  | 					self._get(url, params, (res) => { | |||
|  | 						self.detail = res.data; | |||
|  | 						if (self.isFirst) { | |||
|  | 							if (self.cid == 21) { | |||
|  | 								self.productParams = self.detail.waresSkuList; | |||
|  | 								self.active_id = self.productParams[0] ? | |||
|  | 									self.productParams[0].pkId : | |||
|  | 									0; | |||
|  | 							} else { | |||
|  | 								self.productParams = [...self.detail.productParams]; | |||
|  | 								self.productParams.forEach((item, index) => { | |||
|  | 									item.waresItemsParamsList.forEach((pitem, pindex) => { | |||
|  | 										if (pindex == 0) { | |||
|  | 											pitem.number = item.quantity; | |||
|  | 										} else { | |||
|  | 											pitem.number = 0; | |||
|  | 										} | |||
|  | 									}); | |||
|  | 								}); | |||
|  | 								self.getalreadyChioce(); | |||
|  | 							} | |||
|  | 
 | |||
|  | 							self.isFirst = false; | |||
|  | 						} | |||
|  | 					}); | |||
|  | 				} else { | |||
|  | 					self._post(url, params, (res) => { | |||
|  | 						self.detail = res.data; | |||
|  | 						if (self.isFirst) { | |||
|  | 							self.productParams = [...self.detail.productParams]; | |||
|  | 							self.productParams.forEach((item, index) => { | |||
|  | 								item.waresItemsParamsList.forEach((pitem, pindex) => { | |||
|  | 									if (pindex == 0) { | |||
|  | 										pitem.number = item.quantity; | |||
|  | 									} else { | |||
|  | 										pitem.number = 0; | |||
|  | 									} | |||
|  | 								}); | |||
|  | 							}); | |||
|  | 							self.getalreadyChioce(); | |||
|  | 							self.isFirst = false; | |||
|  | 						} | |||
|  | 					}); | |||
|  | 				} | |||
|  | 			}, | |||
|  | 			changeFunc(e) { | |||
|  | 				this.active_id = e; | |||
|  | 			}, | |||
|  | 			openSpec() { | |||
|  | 				let obj = { | |||
|  | 					specData: this.productParams, | |||
|  | 					detail: this.detail, | |||
|  | 				}; | |||
|  | 				this.productModel = obj; | |||
|  | 				this.isTablePopup = true; | |||
|  | 			}, | |||
|  | 			getalreadyChioce() { | |||
|  | 				let self = this; | |||
|  | 				self.alreadyChioce = ""; | |||
|  | 				let has = self.$t("w_0112"); | |||
|  | 				let noone = ""; | |||
|  | 				console.log("--", self.productParams); | |||
|  | 				self.productParams.forEach((item) => { | |||
|  | 					if (item.waresItemsParamsList) { | |||
|  | 						let h = ""; | |||
|  | 						for (let i = 0; i < item.waresItemsParamsList.length; i++) { | |||
|  | 							let child = item.waresItemsParamsList[i]; | |||
|  | 							if (child.number > 0) { | |||
|  | 								h += child.specsName + "*" + child.number + " / "; | |||
|  | 							} else { | |||
|  | 								h += ""; | |||
|  | 							} | |||
|  | 						} | |||
|  | 						if (h != "") { | |||
|  | 							has += h; | |||
|  | 						} else { | |||
|  | 							noone += item.productName; | |||
|  | 						} | |||
|  | 					} | |||
|  | 					if (self.cid == 21) { | |||
|  | 						self.detail.waresSkuList.forEach( | |||
|  | 							(item, | |||
|  | 								(index) => { | |||
|  | 									if (item.pkId == self.active_id) { | |||
|  | 										has = item.specValueNames; | |||
|  | 									} | |||
|  | 								}) | |||
|  | 						); | |||
|  | 					} | |||
|  | 				}); | |||
|  | 				if (noone != "") { | |||
|  | 					self.alreadyChioce = noone; | |||
|  | 				} else { | |||
|  | 					has = has.replace(/(\s\/\s)$/gi, ""); | |||
|  | 					self.alreadyChioce = has; | |||
|  | 				} | |||
|  | 			}, | |||
|  | 			/*关闭弹窗*/ | |||
|  | 			closePopup(e) { | |||
|  | 				this.isTablePopup = false; | |||
|  | 				if (e) { | |||
|  | 					this.productParams = e; | |||
|  | 					this.getalreadyChioce(); | |||
|  | 				} | |||
|  | 			}, | |||
|  | 			/*倒计时返回值*/ | |||
|  | 			returnValFunc(e) {}, | |||
|  | 		}, | |||
|  | 	}; | |||
|  | </script> | |||
|  | 
 | |||
|  | <style lang="scss"> | |||
|  | 	.product-detail { | |||
|  | 		padding-bottom: 150rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.product-detail .product-pic, | |||
|  | 	.product-detail .product-pic .swiper, | |||
|  | 	.product-detail .product-pic image { | |||
|  | 		width: 750rpx; | |||
|  | 		height: 750rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.product-detail .product-pic .swiper .icon-bofang { | |||
|  | 		position: absolute; | |||
|  | 		top: 0; | |||
|  | 		bottom: 0; | |||
|  | 		left: 0; | |||
|  | 		right: 0; | |||
|  | 		margin: auto; | |||
|  | 		font-size: 48rpx; | |||
|  | 		color: #ffffff; | |||
|  | 		border-radius: 50%; | |||
|  | 		border: 4rpx solid #ffffff; | |||
|  | 		width: 120rpx; | |||
|  | 		height: 120rpx; | |||
|  | 		display: flex; | |||
|  | 		justify-content: center; | |||
|  | 		align-items: center; | |||
|  | 		background-color: #00000080; | |||
|  | 		padding-left: 16rpx; | |||
|  | 		box-sizing: border-box; | |||
|  | 		z-index: 10; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.video { | |||
|  | 		width: 100%; | |||
|  | 		height: 100%; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.product-content { | |||
|  | 		padding: 22rpx 23rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.preview-box { | |||
|  | 		width: 100%; | |||
|  | 		height: 134rpx; | |||
|  | 		padding: 0 20rpx; | |||
|  | 		box-sizing: border-box; | |||
|  | 		margin-bottom: -10rpx; | |||
|  | 
 | |||
|  | 		.preview-bg { | |||
|  | 			width: 704rpx; | |||
|  | 			height: 134rpx; | |||
|  | 			position: absolute; | |||
|  | 			left: 0; | |||
|  | 			top: 0; | |||
|  | 			z-index: 0; | |||
|  | 		} | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.product-info { | |||
|  | 		width: 704rpx; | |||
|  | 		background: #ffffff; | |||
|  | 		border-radius: 15rpx; | |||
|  | 		position: relative; | |||
|  | 		z-index: 2; | |||
|  | 		padding: 42rpx 20rpx 30rpx 20rpx; | |||
|  | 		box-sizing: border-box; | |||
|  | 		margin-bottom: 22rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.type-tips { | |||
|  | 		font-size: 22rpx; | |||
|  | 		padding: 0 17rpx; | |||
|  | 		line-height: 37rpx; | |||
|  | 		background-color: #fb3024; | |||
|  | 		border-radius: 19rpx; | |||
|  | 		color: #ffffff; | |||
|  | 		margin-right: 8rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.sellingPoints { | |||
|  | 		background-color: #f5f5f5; | |||
|  | 		border-radius: 10rpx; | |||
|  | 		padding: 13rpx 38rpx; | |||
|  | 		font-size: 22rpx; | |||
|  | 		color: #666; | |||
|  | 		word-break: break-all; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.secend-info { | |||
|  | 		width: 704rpx; | |||
|  | 		padding: 0 15rpx 0 19rpx; | |||
|  | 		background: #ffffff; | |||
|  | 		border-radius: 15rpx; | |||
|  | 		box-sizing: border-box; | |||
|  | 		margin-bottom: 25rpx; | |||
|  | 
 | |||
|  | 		.sec-info-item { | |||
|  | 			padding: 20rpx 0; | |||
|  | 			box-sizing: border-box; | |||
|  | 			min-height: 90rpx; | |||
|  | 			border-bottom: 1rpx solid #eee; | |||
|  | 			font-size: 28rpx; | |||
|  | 
 | |||
|  | 			.sec-info-label { | |||
|  | 				max-width: 125rpx; | |||
|  | 				min-width: 105rpx; | |||
|  | 				flex-shrink: 0; | |||
|  | 				word-break: break-all; | |||
|  | 				color: #999999; | |||
|  | 				margin-right: 20rpx; | |||
|  | 			} | |||
|  | 		} | |||
|  | 
 | |||
|  | 		.sec-info-item:last-child { | |||
|  | 			border: none; | |||
|  | 		} | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.thi-info { | |||
|  | 		width: 702rpx; | |||
|  | 		background: #ffffff; | |||
|  | 		border-radius: 20rpx; | |||
|  | 		padding: 0 15rpx 15rpx 15rpx; | |||
|  | 		box-sizing: border-box; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.thi-nav { | |||
|  | 		display: flex; | |||
|  | 		justify-content: flex-start; | |||
|  | 		align-items: center; | |||
|  | 		overflow-x: auto; | |||
|  | 		width: 100%; | |||
|  | 		padding-left: 20rpx; | |||
|  | 		box-sizing: border-box; | |||
|  | 		border-bottom: 1rpx solid #eee; | |||
|  | 		margin-bottom: 22rpx; | |||
|  | 
 | |||
|  | 		.thi-nav-item { | |||
|  | 			font-size: 30rpx; | |||
|  | 			color: #333; | |||
|  | 			padding: 0 30rpx; | |||
|  | 			height: 92rpx; | |||
|  | 			line-height: 92rpx; | |||
|  | 			white-space: nowrap; | |||
|  | 			flex-shrink: 0; | |||
|  | 			position: relative; | |||
|  | 		} | |||
|  | 
 | |||
|  | 		.thi-nav-item.active::after { | |||
|  | 			position: absolute; | |||
|  | 			content: ""; | |||
|  | 			left: 0; | |||
|  | 			right: 0; | |||
|  | 			margin: auto; | |||
|  | 			bottom: 0; | |||
|  | 			width: 30%; | |||
|  | 			height: 6rpx; | |||
|  | 			border-radius: 4rpx; | |||
|  | 			z-index: 1; | |||
|  | 			background-color: #fb3024; | |||
|  | 		} | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap { | |||
|  | 		position: fixed; | |||
|  | 		height: 100rpx; | |||
|  | 		right: 0; | |||
|  | 		bottom: 0; | |||
|  | 		left: 0; | |||
|  | 		display: flex; | |||
|  | 		background: #ffffff; | |||
|  | 		align-items: center; | |||
|  | 		z-index: 97; | |||
|  | 		border-top: 1rpx solid #eee; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap .icon-box { | |||
|  | 		width: 92rpx; | |||
|  | 		height: 100rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap .icon-box .iconfont { | |||
|  | 		font-size: 40rpx; | |||
|  | 		color: #888888; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap .icon-box .iconfont .num { | |||
|  | 		position: absolute; | |||
|  | 		top: 10rpx; | |||
|  | 		left: 50%; | |||
|  | 		height: 30rpx; | |||
|  | 		min-width: 30rpx; | |||
|  | 		overflow: hidden; | |||
|  | 		line-height: 32rpx; | |||
|  | 		border-radius: 15rpx; | |||
|  | 		font-size: 20rpx; | |||
|  | 		color: #ffffff; | |||
|  | 		background: red; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap button, | |||
|  | 	.btns-wrap button:after { | |||
|  | 		height: 100rpx; | |||
|  | 		line-height: 100rpx; | |||
|  | 		margin: 0; | |||
|  | 		padding: 0; | |||
|  | 		border-radius: 0; | |||
|  | 		border: 0; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap button.add-cart { | |||
|  | 		background: $dominant-color; | |||
|  | 		font-size: 28rpx; | |||
|  | 		width: 214rpx; | |||
|  | 		height: 75rpx; | |||
|  | 		line-height: 75rpx; | |||
|  | 		margin-left: 17rpx; | |||
|  | 		border-radius: 40rpx 0 0 40rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap button.buy { | |||
|  | 		background: #fb3024; | |||
|  | 		font-size: 28rpx; | |||
|  | 		width: 214rpx; | |||
|  | 		height: 75rpx; | |||
|  | 		line-height: 75rpx; | |||
|  | 		border-radius: 0 40rpx 40rpx 0; | |||
|  | 		margin-right: 25rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.btns-wrap button.buy.one { | |||
|  | 		border-radius: 40rpx; | |||
|  | 		width: 428rpx; | |||
|  | 		margin-left: 30rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.share-icon {} | |||
|  | 
 | |||
|  | 	.cart_num { | |||
|  | 		position: absolute; | |||
|  | 		background: #f6220c; | |||
|  | 		width: 30rpx; | |||
|  | 		height: 30rpx; | |||
|  | 		display: flex; | |||
|  | 		justify-content: center; | |||
|  | 		align-items: center; | |||
|  | 		font-size: 22rpx; | |||
|  | 		border-radius: 50%; | |||
|  | 		color: #ffff; | |||
|  | 		right: 4rpx; | |||
|  | 		top: 4rpx; | |||
|  | 	} | |||
|  | </style> |