ylj20011123 aa11dce29f update
2025-05-14 20:10:07 +08:00

1276 lines
33 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="page-body">
<div class="product-image">
<block v-if="good.List">
<swiper scroll-x="true" circular="true" class="banner" @change="swiperChange" :current="pageMsg.current">
<swiper-item v-for="(img, i) in good.List" :key="i">
<image mode="aspectFill" lazy-load="true" :src="img.IMAGE_URL"></image>
</swiper-item>
</swiper>
<div class="swiper-dots" v-if="pageMsg.imgeCount > 0">
<div class="dot">
{{ pageMsg.current + 1 }}/{{ pageMsg.imgeCount }}
</div>
</div>
</block>
<block v-else>
<image mode="aspectFill" lazy-load="true" :src="good.DEFAULT_IMG"></image>
</block>
</div>
<hr />
<div class="product-info">
<div style="
display: flex;
align-items: baseline;
justify-content: space-between;
">
<div class="price-box">
<block v-if="good.PAY_METHOD !== 1000">
<span style="font-weight: bold">{{ good.COMMODITY_POINT }}</span>
<span class="colorRed">积分</span>
</block>
<block v-if="good.PAY_METHOD == 1000">
<div class="vip-price">
<span style="font-weight: bold">
{{ good.COMMODITY_MEMBERPRICE }}</span>
<span class="colorRed">元</span>
</div>
<!-- <span class="vip-card-ico">会员</span> -->
</block>
<block v-else-if="good.PAY_METHOD == 2000">
<div class="vip-price" style="
color: #999;
font-size: 24rpx;
text-decoration: line-through;
">
<span> {{ good.COMMODITY_MEMBERPRICE }}</span>
<span style="color: #666; font-size: 24rpx">元</span>
</div>
</block>
<block v-else-if="good.PAY_METHOD == 3000">
<div class="vip-price" style="color: #666; font-size: 24rpx">
<span> {{ good.COMMODITY_MEMBERPRICE }}</span>
<span style="color: #666; font-size: 24rpx">元</span>
</div>
<!-- <span class="vip-card-ico">会员</span> -->
</block>
</div>
<div>
<span class="sale-count">
{{
good.COMMODITY_STOCK > 0 ? "库存 " + good.COMMODITY_STOCK : "售罄"
}}</span>
<span class="sale-count">已售 {{ good.SALE_COUNT }}</span>
</div>
</div>
<div class="join-vip" v-if="!user.MEMBERSHIP_MOBILEPHONE">
<div class="vip-left">
<!-- <span class="colorRed">¥{{good.COMMODITY_MEMBERPRICE}}</span> -->
<div class="vip-title">
<span class="vip-card-ico">会员卡</span>会员卡专享
</div>
<div class="vip-des">专属优惠券、商品折扣</div>
</div>
<navigator hover-class="navigator-hover" class="vip-right" url="/pages/register/index">
加入会员
<van-icon name="arrow" size="24rpx" color="#333" />
</navigator>
</div>
<div class="product-title">
{{ good.COMMODITY_NAME }}
</div>
<div class="product-brand">
<!-- <image mode="aspectFit" lazy-load="true" :src="good.IMAGE_PATH || 'https://eshangtech.com/ShopICO/no-picture.png'"></image> -->
<span v-show="good.SUPPLIER_NAME">供应商:{{ good.SUPPLIER_NAME }}</span>
<button class="share-btn" @tap="handleShowPopup">
<!-- <van-icon name="share" color="#ea3323" size="20px" /> -->
<div style="width: 16px; height: 16px">
<image style="width: 16px; height: 16px" src="https://eshangtech.com/wanmeiyizhanImg/home/share.svg" />
</div>
<div>分享</div>
</button>
</div>
</div>
<div class="product-detail">
<div class="detail-unit" v-if="good.COMMODITY_DESC">
<span class="detail-title">商品简介</span>
<span>{{ good.COMMODITY_DESC || "暂无" }}</span>
</div>
<div class="">
<div class="detail-unit rate-title">
<div class="detail-title desc-ico">
评价
<!-- <span class="small-title">好评97%</span> -->
</div>
<div class="rate-desc" @click="goRate" v-show="pageMsg.rateTotal > 0">
<span>共{{ pageMsg.rateTotal }}条评论</span>
<van-icon name="arrow" size="20rpx" color="#262626" custom-style="margin-left: 8rpx;" />
</div>
</div>
<div class="rate-box" v-if="rateList.length > 0">
<block v-for="(item, o) in rateList" :key="o">
<rateItem :item="item" />
</block>
</div>
</div>
<block v-if="good.ContentImgList && good.ContentImgList.length > 0">
<div class="detail-unit">
<span class="detail-title desc-ico">商品详情</span>
</div>
<div class="detail-image-box">
<block v-for="(img, i) in good.ContentImgList" :key="i" v-show="detailImgList[i]">
<image mode="aspectFill" lazy-load="true" :src="img.IMAGE_URL" @load="loadDetailImg($event, i)" :style="'width:' +
detailImgList[i].width +
'rpx; height:' +
detailImgList[i].height +
'rpx;'
"></image>
</block>
</div>
</block>
</div>
<!-- 分享商品页面 -->
<van-popup :show="showSharePro" closeable close-icon-position="top-left" position="bottom"
:custom-style="'height:' + (windowMsg.height + 280) + 'rpx'" @close="showSharePro = false">
<div class="share-pop-body" catchtouchmove="function(){return;}">
<canvas canvas-id="pro" class="canvas-content" :style="{
width: windowMsg.width + 'rpx',
height: windowMsg.height + 'rpx',
}" disable-scroll="true" bindtouchstart="" bindtouchmove="" bindtouchend=""></canvas>
<view class="down-img-btn">
<van-button icon="down" round color="linear-gradient(to right, #1f1f1f, #62605f)"
custom-style="width:300rpx;padding:32rpx auto;" @click="saveImage">保存到本地</van-button>
</view>
</div>
</van-popup>
<div class="product-btn-box">
<navigator class="home-btn" url="/pages/home/index" open-type="switchTab">首页</navigator>
<!-- <div class="shopcart-btn" @click="goShop">购物车<span class="shopcart-count" v-if="totalNum>0">{{totalNum}}</span></div> -->
<div class="buynow-btn" @click="getMemberPoint(1)" v-if="good.COMMODITY_STOCK > 0 && good.PAY_METHOD !== 1000">
立即兑换
</div>
<!-- @click="addGoodToCartFn" -->
<div class="join-shopCart" @click="getMemberPoint(2)" v-if="good.COMMODITY_STOCK > 0 && good.PAY_METHOD !== 2000">
立即购买
</div>
<div class="buynow-btn" style="background: #eee; color: #999" v-if="good.COMMODITY_STOCK < 1">
已售罄
</div>
<!-- <div class="buynow-btn" @click="isShowCount = true">立即购买</div> -->
</div>
<van-popup :show="isShowCount == 1 || isShowCount == 2" position="bottom" overlay="false" @close="isShowCount = 0">
<div class="popup-box">
<div style="
display: flex;
align-items: center;
justify-content: space-between;
">
<div>购买数量</div>
<view class="cartcontrol">
<span @click="
pageMsg.buyCount > 1
? pageMsg.buyCount--
: (pageMsg.buyCount = 1)
" class="cart-decrease"></span>
<span class="cart-count">{{ pageMsg.buyCount }}</span>
<span @click="pageMsg.buyCount++" class="cart-add icon-add_circle"></span>
</view>
</div>
<div style="margin-top: 20rpx" v-if="isShowCount == 1">
您的可用积分为{{ pageMsg.memberPoint }}积分
</div>
<div class="buy-it-btn" @click="buyNow">确认购买</div>
</div>
</van-popup>
<UniPopup :show="showShareBox" position="bottom" overlay="false" @close="handleClosePopup" ref="popup">
<view class="share-popup" style="background-color: #fff">
<view class="share-divider">
<text>分享</text>
</view>
<!-- <van-divider contentPosition="center">分享</van-divider> -->
<view class="share-pop-btn">
<button open-type="share" @tap="handleClosePopup">
<image src="https://eshangtech.com/ShopICO/icos/fxhy.png" act></image>
<text>分享给好友</text>
</button>
<button @tap="creatPageQR">
<image src="https://eshangtech.com/ShopICO/icos/fxpyq.png"></image>
<text>生成分享海报</text>
</button>
</view>
</view>
</UniPopup>
</div>
</template>
<script>
import rateItem from "../../rate/components/rateItem";
import { mapGetters, mapActions, mapMutations } from "vuex";
import UniPopup from "@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue";
export default {
data() {
const windows = uni.getSystemInfoSync();
return {
pageMsg: {
current: 0,
imgeCount: 0,
goodId: "",
buyCount: 1,
rateTotal: 0,
memberPoint: 0,
money: 0,
},
isShowCount: 0,
showSharePro: false, // 是否生成分享海报
showShareBox: false, // 是否展示分享选项
good: {},
rateList: [], // 评价列表
detailImgList: [],
windowMsg: {
width: 375,
height: 667,
ratio: 0.5,
scale: windows.pixelRatio,
},
};
},
components: {
rateItem,
UniPopup,
},
computed: {
...mapGetters("shoppingCart", {
totalNum: "goodNum",
}),
...mapGetters(["user"]),
},
methods: {
...mapActions("shoppingCart", {
addGood: "ADDGOOD",
addCate: "ADDCATE",
}),
...mapMutations("shoppingCart", {
setOrder: "ORDERGOOD",
}),
...mapMutations(["setInvitedCode"]),
handleShowPopup() {
this.$refs.popup.open("bottom");
this.showShareBox = true;
},
handleClosePopup() {
this.$refs.popup.close();
this.showShareBox = false;
},
swiperChange(e) {
this.pageMsg.current = e.mp.detail.current;
},
goShop() {
uni.navigateTo({ url: "/pages/product/shopCart/index" });
},
getDetail() {
let _this = this;
this.$api
.getCoop({
action_type: "GetGoodsDetail",
commodityId: _this.pageMsg.goodId,
})
.then(function (res) {
console.log('resresresresresresresresresresresresresresresres', res);
_this.good = res.Data;
_this.pageMsg.current = 0;
_this.pageMsg.imgeCount = res.Data.List.length || 0;
if (_this.good.COMMODITY_DESC.indexOf("</br>") > -1) {
let desArr = _this.good.COMMODITY_DESC.split("</br>");
_this.good.COMMODITY_DESC = [];
desArr.forEach((element) => {
_this.good.COMMODITY_DESC.push({
name: "p",
children: [{ type: "text", text: element }],
});
});
}
_this.good.ContentImgList.map((n) => {
_this.detailImgList.push({ width: 750, height: 400 });
});
});
},
getRate() {
// 获取商品评价
let _this = this;
_this.$api
.getCoop({
action_type: "getMallCommentList",
commodityId: this.pageMsg.goodId,
pageIndex: 1,
pageSize: 3,
})
.then((res) => {
console.log('resresresresresresresresres', res);
_this.rateList = res.Data.List;
_this.pageMsg.rateTotal = res.Data.TotalCount;
});
},
goRate() {
uni.navigateTo({ url: "/pages/rate/index?id=" + this.pageMsg.goodId });
},
seePhoto(item, list) {
let u = [];
list.map((n) => {
u.push(n.IMAGE_URL);
});
uni.previewImage({
current: item, // 当前显示图片的http链接
urls: u, // 需要预览的图片http链接列表
});
},
addGoodToCartFn: function () {
// 添加商品到购物车
let cate = {
USERDEFINEDTYPE_NAME: this.good.USERDEFINEDTYPE_NAME,
USERDEFINEDTYPE_ID: this.good.USERDEFINEDTYPE_ID,
};
this.addGood(this.good);
this.addCate(cate);
this.$forceUpdate();
},
buyNow() {
let s = [];
let _this = this;
let el = this.good;
if (
_this.isShowCount === 1 &&
_this.pageMsg.memberPoint < this.pageMsg.buyCount * el.COMMODITY_POINT
) {
uni.showToast({
title: "您的积分不足",
icon: "none",
});
return;
}
s.push({
COMMODITY_ID: el.COMMODITY_ID,
COMMODITY_CODE: el.COMMODITY_CODE,
COMMODITY_NAME: el.COMMODITY_NAME,
COMMODITY_BARCODE: el.COMMODITY_BARCODE,
COMMODITY_UNIT: el.COMMODITY_UNIT,
COMMODITY_RULE: el.COMMODITY_RULE,
COMMODITY_POINT: el.COMMODITY_POINT,
ORDER_COUNT: this.pageMsg.buyCount,
AVERAGE_PRICE: el.COMMODITY_MEMBERPRICE,
ORDER_AMOUNT: this.pageMsg.buyCount * el.COMMODITY_MEMBERPRICE,
DISCOUNT_AMOUNT: 0,
SUPPLIER_ID: el.SUPPLIER_ID,
SUPPLIER_NAME: el.SUPPLIER_NAME,
DEFAULT_IMG: el.DEFAULT_IMG,
PAY_TYPE: _this.isShowCount === 1 ? 3000 : 1000, // 支付方式 3000 积分支付
});
_this.isShowCount = 0;
_this.setOrder(s);
uni.navigateTo({
url:
"/pages/product/confirmOrder/index?type=1&nature=" +
el.COMMODITY_NATURE,
});
},
loadDetailImg(e, i) {
// 加载商品介绍图片指定原尺寸宽高
let $width = e.mp.detail.width; // 获取图片真实宽度
let $height = e.mp.detail.height;
// 将图片的datadata-index作为image对象的key,然后存储图片的宽高值
this.detailImgList[i] = {
width: $width,
height: $height,
};
this.$forceUpdate();
},
getMemberPoint(type) {
// 获取会员积分
let _this = this;
if (this.user.MEMBERSHIP_ID) {
this.$api
.getCoop({
action_type: "GetMemberPoint",
})
.then(function (rs) {
_this.pageMsg.memberPoint = rs.Data.MEMBERSHIP_POINT;
_this.pageMsg.money = rs.Data.MEMBERSHIP_POINT;
_this.isShowCount = type;
});
} else {
uni.showModal({
title: "温馨提示",
content: "您还没有登录,快去登录吧",
confirmText: "一键登录",
confirmColor: "#498fe2",
success: (res) => {
if (res.confirm) {
uni.navigateTo({ url: "/pages/register/index" });
}
},
});
}
},
creatPageQR() {
// 生成当前页面小程序二维码
let _this = this;
_this.showShareBox = false;
uni.showLoading({ title: "正在加载" });
_this.$api
.getCoop({
action_type: "CreateWxCode",
page: "pages/product/productDetail/index",
scene: _this.pageMsg.goodId + "&" + _this.user.InviteCode, // 商品id & 当前用户邀请码
width: 280,
})
.then((res) => {
// let bin64 = res.Data.imgUrl
// 生成的base64二维码
// let fs = uni.getFileSystemManager()
// fs.writeFile({
// filePath: `${uni.env.USER_DATA_PATH}/` + _this.pageMsg.goodId + `pro.png`,
// data: bin64,
// encoding: 'base64',
// success (res) {
uni.getImageInfo({
src: res.Data.imgUrl,
success(res) {
let codePath = res.path;
let codeW = res.width;
uni.getImageInfo({
src: _this.good.DEFAULT_IMG, // _this.good.DEFAULT_IMG,
success: (rs) => {
let productPath = rs.path;
let productW = rs.width;
let productH = rs.height;
_this.showSharePro = true;
_this.drawImage(
productPath,
productW,
productH,
codePath,
codeW
);
},
});
},
fail(err) {
console.error(err);
},
});
// },
// fail (err) {
// console.error(err)
// }})
});
},
drawImage(productPath, productW, productH, codePath, codeW) {
// 才canvas上画海报
let _this = this;
let canv = uni.createCanvasContext("pro", this);
let ratio = uni.getSystemInfoSync().windowWidth / 750; // 适配不同机型的图片比例
let imgMaxW = _this.windowMsg.width;
// let imgMaxH = _this.windowMsg.width
let canvHeight = _this.windowMsg.height;
let paddL = 24 * ratio;
let paddT = 24;
let clipWidth = imgMaxW * ratio;
let clipHeight = ((productH * imgMaxW) / productW) * ratio;
let imgLeft = 0;
if (productH / productW > 1.5 || clipHeight > clipWidth) {
// 如果图片原图比例11.5则需要根据商品的高度调整适配
clipHeight = imgMaxW * ratio;
clipWidth = (clipHeight * productW) / productH;
imgLeft = (imgMaxW * ratio - clipWidth) / 2;
}
// 设置一个背景色
canv.fillStyle = "#fff";
canv.fillRect(0, 0, imgMaxW * ratio, canvHeight);
// canv.draw()
// 设置字体大小、文本颜色 (如果不先写文字 则图片无法写入)
canv.setFontSize(20 * ratio);
canv.setFillStyle("#454545");
// 简易绘制两行文本,多余...
_this.canvasTextAutoLine(
_this.good.COMMODITY_NAME,
canv,
paddL,
paddT,
28,
clipWidth - 24,
1
); // 标题
// 绘制价格
let text = _this.good.PAY_METHOD === 2000 ? "积分" : "元";
let price =
_this.good.PAY_METHOD === 2000
? _this.good.COMMODITY_POINT
: _this.good.COMMODITY_MEMBERPRICE;
canv.setFontSize(30 * ratio);
canv.setFillStyle("#EA3323");
canv.fillText(price, paddL, paddT + 28 * ratio + 8);
let priceWidth = canv.measureText(price + "").width;
canv.setFontSize(16 * ratio);
canv.setFillStyle("#EA3323");
canv.fillText(text, paddL + priceWidth + 1, paddT + 28 * ratio + 8);
canv.setFontSize(16 * ratio);
canv.setFillStyle("#999");
canv.fillText(
"长按识别·去逛逛",
60 * ratio + 80,
(canvHeight - 92) * ratio
);
canv.draw();
canv.save();
// 绘制商品图片
canv.drawImage(
productPath,
0 + imgLeft,
paddT + 58 * ratio,
clipWidth,
clipHeight
);
// 绘制小程序二维码图片
canv.drawImage(codePath, 60 * ratio, (canvHeight - 164) * ratio, 72, 72);
canv.draw(true);
// canv.scale(ratio, ratio)
uni.hideLoading();
},
/*
* 绘制多行文本,自动换行,超出添加...
*
str:要绘制的字符串
canvas:canvas对象
initX:绘制字符串起始x坐标
initY:绘制字符串起始y坐标
lineHeight:字行高,自己定义个值即可
maxWidth: 文本最大宽度
row: 最大行数
*/
canvasTextAutoLine: function (
str,
ctx,
initX,
initY,
lineHeight,
maxWidth,
row = 1
) {
var lineWidth = 0;
var lastSubStrIndex = 0;
var currentRow = 1;
for (let i = 0; i < str.length; i++) {
lineWidth += ctx.measureText(str[i]).width;
if (lineWidth > maxWidth) {
currentRow++;
let newStr = str.substring(lastSubStrIndex, i);
if (currentRow > row && str.length > i) {
newStr = str.substring(lastSubStrIndex, i - 2) + "...";
}
ctx.fillText(newStr, initX, initY);
initY += lineHeight;
lineWidth = 0;
lastSubStrIndex = i;
if (currentRow > row) {
break;
}
}
if (i === str.length - 1) {
ctx.fillText(str.substring(lastSubStrIndex, i + 1), initX, initY);
}
}
},
saveImage() {
// 将海报保存图片到
let _this = this;
uni.getSetting({
success(res) {
if (!res.authSetting["scope.writePhotosAlbum"]) {
uni.authorize({
scope: "scope.writePhotosAlbum",
success() {
// 用户已经同意小程序使用相册
_this.saveImageToPhotos();
},
fail() {
wx.openSetting({
success: (res) => { },
});
},
});
} else {
// 用户已经同意小程序使用相册
_this.saveImageToPhotos();
}
},
});
},
saveImageToPhotos(tempFilePath) {
let _this = this;
uni.showLoading({ title: "正在生成图片" });
uni.canvasToTempFilePath(
{
width: _this.windowMsg.width, // 导出图片的宽
height: _this.windowMsg.height, // 导出图片的高
destWidth: _this.windowMsg.width * _this.windowMsg.scale * 4, // 导出图片的宽
destHeight: _this.windowMsg.height * _this.windowMsg.scale * 4, // 导出图片的高
canvasId: "pro",
success: function (res) {
uni.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success(result) {
uni.hideLoading();
uni.showToast({
title: "保存成功,从相册中分享到朋友圈吧",
icon: "none",
duration: 4000,
});
_this.showSharePro = false;
},
fail: function (res) {
uni.showToast({
title: "图片保存失败",
icon: "none",
duration: 2000,
});
},
});
},
fail: function (res) {
wx.showToast({
title: "图片生成失败",
icon: "none",
duration: 2000,
});
},
},
_this
);
},
},
onShareAppMessage() {
let _this = this;
return {
title: _this.good.COMMODITY_NAME,
path:
"/pages/product/productDetail/index?invite=" +
_this.user.InviteCode +
"&id=" +
_this.pageMsg.goodId,
imageUrl: _this.good.DEFAULT_IMG,
};
},
onUnload() {
this.isShowCount = false;
this.showSharePro = false;
this.good = {};
},
onShow() {
this.getDetail();
},
onLoad(option) {
if (option.scene) {
// 是否是商品分享码扫入的 带有他人的邀请码
let scene = decodeURIComponent(option.scene);
scene = scene.split("&");
this.pageMsg.goodId = scene[0];
this.setInvitedCode(scene[1]);
} else {
this.pageMsg.goodId = option.id;
}
if (option.invite) {
this.setInvitedCode(option.invite);
}
this.pageMsg.buyCount = 1;
this.getRate();
this.$utils.addUserBehaviorNew();
},
};
</script>
<style lang="stylus" scoped>
.page-body {
height: 100%;
}
* {
box-sizing: border-box;
}
hr {
color: #E9E9E9;
height: 2rpx;
}
.product-image {
height: 488rpx;
width: 100%;
// padding-top 20rpx
background: #fff;
.banner {
height: 488rpx;
width: 100%;
margin: 0 auto;
image {
height: 488rpx;
width: 100%;
}
}
}
.swiper-dots {
width: 100%;
height: 30rpx;
display: flex;
justify-content: center;
align-items: center;
position: relative;
bottom: 70rpx;
// flex-direction row
// position absolute
// left 50%
// transform translateX(-50%)
// bottom 100rpx
}
.dot {
width: 70rpx;
height: 32rpx;
border-radius: 32rpx;
line-height: 32rpx;
background-color: rgba(0, 0, 0, 0.3);
// opacity .3
font-size: 26rpx;
color: #fff;
text-align: center;
}
.product-info {
background: #fff;
}
.price-box {
color: #EA3323;
font-size: 40rpx;
height: 75rpx;
padding-bottom: 25rpx;
line-height: 1;
padding-left: 32rpx;
display: flex;
align-items: flex-end;
position: relative;
}
.sale-count {
font-size: 24rpx;
color: #333;
padding-right: 32rpx;
}
.vip-price {
font-size: 38rpx;
color: #EA3323;
// display flex
// align-items flex-end
// margin-left 24rpx
// justify-content center
// line-height 1
// padding-bottom 4rpx
.vip-card-ico {
background: url('https://eshangtech.com/ShopICO/shoppingMall/vip-text.png') no-repeat center; // eshangtech.com/ShopICO/shoppingMall/vip-text.png) no-repeat center
background-size: contain;
font-size: 18rpx;
color: #e6e1cf;
height: 26rpx;
line-height: 26rpx;
width: 52rpx;
text-align: right;
padding-right: 10rpx;
margin-bottom: 2rpx;
display: inline-block;
}
}
// .share-btn:before
// content ''
// height 31rpx
// width 32rpx
// background url(https://eshangtech.com/ShopICO/shoppingMall/share-btn.png) no-repeat center
// background-size contain
.share-btn {
position: relative;
background: #fff;
display: flex;
flex-direction: column;
align-items: center;
color: #ea3323;
font-size: 20rpx;
// height 100rpx
width: 100rpx;
justify-content: center;
margin: 0;
padding: 0;
line-height: 1.2;
}
button:after {
border: none;
}
.colorRed {
color: #EA3323;
font-size: 24rpx;
margin-right: 32rpx;
}
.join-vip {
height: 120rpx;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 26rpx;
border: 1rpx solid #ebebeb;
.vip-left {
background: #F7F7F7;
flex: 1;
height: 120rpx;
padding-left: 32rpx;
padding-top: 16rpx;
box-sizing: border-box;
.vip-card-ico:before {
content: '';
background: url('https://eshangtech.com/ShopICO/shoppingMall/vip-ico.png') no-repeat center; // eshangtech.com/ShopICO/shoppingMall/vip-ico.png) no-repeat center
width: 13rpx;
height: 12rpx;
margin-right: 4rpx;
background-size: contain;
}
.vip-card-ico {
font-size: 20rpx;
color: #e6e1cf;
border-radius: 20rpx;
height: 30rpx;
display: flex;
align-items: center;
line-height: 30rpx;
background: #362F14;
width: 90rpx;
justify-content: center;
margin-right: 8rpx;
}
.vip-title {
color: #333;
line-height: 1.5;
display: flex;
align-items: center;
}
.vip-des {
color: #999;
line-height: 2;
}
}
.vip-right {
height: 120rpx;
display: flex;
align-items: center;
background: #F4EEE0;
width: 140rpx;
line-height: 1.5;
padding: 20rpx 20rpx 20rpx 36rpx;
color: #000;
box-sizing: border-box;
}
}
.product-title {
color: #333333;
line-height: 1.5;
font-weight: bolder;
font-size: 30rpx;
padding: 24rpx 32rpx 16rpx 32rpx;
}
.product-brand {
display: flex;
align-items: flex-end;
justify-content: space-between;
color: #999999;
font-size: 24rpx;
padding: 8rpx 16rpx 32rpx 32rpx;
image {
height: 38rpx;
width: 38rpx;
border-radius: 38rpx;
margin-right: 16rpx;
}
}
.product-detail {
margin-top: 32rpx;
font-size: 26rpx;
padding-bottom: 100rpx;
}
.detail-unit {
padding: 32rpx;
display: flex;
align-items: top;
justify-content: space-between;
background: #ffffff;
margin-top: 32rpx;
border-radius: 16rpx 16rpx 0 0;
}
.detail-unit+.detail-unit {
border-top: 2rpx solid #e9e9e9;
}
.detail-title {
color: #262626;
font-size: 32rpx;
min-width: 116rpx;
margin-right: 20rpx;
}
.detail-title .small-title {
font-size: 24rpx;
color: #EA3A3C;
margin-left: 16rpx;
}
.rate-desc {
color: #B2B2B2;
font-size: 24rpx;
}
.rate-title {
align-items: center;
}
.rate-box {
background: #fff;
padding: 16rpx 32rpx;
}
.detail-image-box {
width: 750rpx;
overflow-x: hidden;
display: flex;
flex-direction: column;
text-align: center;
}
.product-btn-box {
height: 100rpx;
width: 100%;
position: fixed;
bottom: 0rpx;
left: 0;
display: flex;
align-items: center;
text-align: center;
z-index: 1;
.home-btn:before {
content: '';
height: 45rpx;
width: 47rpx;
background: url('https://eshangtech.com/ShopICO/shoppingMall/home.png') no-repeat center; // eshangtech.com/ShopICO/shoppingMall/home.png) no-repeat center
background-size: contain;
}
.home-btn {
flex: 1;
background: #fff;
border-top: 2rpx solid #e9e9e9;
display: flex;
flex-direction: column;
align-items: center;
color: #C6A773;
font-size: 20rpx;
height: 100rpx;
justify-content: center;
position: relative;
}
.shopcart-btn:before {
content: '';
height: 45rpx;
width: 47rpx;
background: url('https://eshangtech.com/ShopICO/shoppingMall/shopcart.png') no-repeat center; // eshangtech.com/ShopICO/shoppingMall/shopcart.png) no-repeat center
background-size: contain;
}
.shopcart-btn {
flex: 1;
background: #fff;
border-top: 2rpx solid #e9e9e9;
display: flex;
flex-direction: column;
align-items: center;
color: #C6A773;
font-size: 20rpx;
height: 100rpx;
justify-content: center;
position: relative;
}
.shopcart-count {
position: absolute;
top: 10rpx;
right: 66rpx;
width: 42rpx;
height: 32rpx;
line-height: 32rpx;
text-align: center;
border-radius: 32rpx;
font-size: 18rpx;
font-weight: 700;
color: #fff;
background: rgba(240, 20, 20, 0.808);
// box-shadow 0 0rpx 4rpx 0 rgba(0, 0, 0, 0.4)
}
.join-shopCart {
flex: 2;
background: #404040;
font-size: 30rpx;
line-height: 100rpx;
color: #fff;
}
.buynow-btn {
flex: 2;
font-size: 30rpx;
line-height: 100rpx;
color: #fff;
background: linear-gradient(to right, #C5A671, #DCC194);
}
}
.popup-box {
padding: 50rpx 40rpx 32rpx;
font-size: 28rpx;
}
.cart-count {
width: 80rpx;
line-height: 40rpx;
text-align: center;
font-size: 20rpx;
color: #333;
height: 40rpx;
font-size: 28rpx;
}
.buy-it-btn {
text-align: center;
width: 674rpx;
height: 88rpx;
line-height: 88rpx;
border-radius: 6rpx;
font-size: 32rpx;
color: #fff;
margin-top: 100rpx;
background: linear-gradient(to right, #1f1f1f, #62605f);
}
.cartcontrol {
display: flex;
align-items: center;
justify-content: flex-end;
margin-left: 45rpx;
}
.cart-decrease {
width: 48rpx;
height: 48rpx;
border: 2rpx solid #eee;
position: relative;
border-radius: 50%;
}
.cart-decrease:before {
content: '';
height: 4rpx;
width: 25rpx;
background: #4d4d4d;
display: block;
position: absolute;
left: 12rpx;
top: 21rpx;
border-radius: 4rpx;
}
.cart-add {
width: 48rpx;
height: 48rpx;
border: 2rpx solid #e6e6e6;
position: relative;
border-radius: 50%;
box-sizing: border-box;
}
.cart-add:before {
content: '';
height: 4rpx;
width: 25rpx;
background: #4d4d4d;
display: block;
position: absolute;
left: 11rpx;
top: 21rpx;
border-radius: 4rpx;
}
.cart-add:after {
content: '';
height: 25rpx;
width: 4rpx;
background: #4d4d4d;
display: block;
position: absolute;
top: 11rpx;
left: 21rpx;
border-radius: 4rpx;
}
.desc-ico:before {
content: '';
height: 30rpx;
width: 6rpx;
background: linear-gradient(#DCB97E, #FAEFDD);
display: inline-block;
vertical-align: middle;
margin-right: 16rpx;
}
// 分享商品页弹出窗口
.share-pop-body {
width: 100%;
background: #f9f9f9;
overflow: hidden;
height: 100%;
position: relative;
padding-top: 80rpx;
box-sizing: border-box;
}
.down-img-btn {
text-align: center;
padding: 32rpx 0;
background: #fff;
position: absolute;
bottom: 0;
width: 100%;
left: 0;
}
.canvas-content {
margin: auto;
display: hidden;
}
//
.share-pop-btn {
display: flex;
align-items: center;
padding-bottom: 40rpx;
}
.share-pop-btn button {
display: flex;
align-items: center;
flex-direction: column;
background: #fff;
font-size: 24rpx;
}
.share-pop-btn image {
width: 80rpx;
height: 80rpx;
}
.share-popup {
padding: 16px;
border-radius: 12px 12px 0 0; /* 圆角设置 */
box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.1);
}
.share-divider {
text-align: center;
font-size: 16px;
font-weight: bold;
margin-bottom: 16px;
color: #333;
}
.share-pop-btn {
display: flex;
justify-content: space-around;
align-items: center;
}
.share-btn {
display: flex;
flex-direction: column;
align-items: center;
background: none;
border: none;
}
.share-icon {
width: 50px;
height: 50px;
margin-bottom: 8px;
}
</style>