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