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>
|