Files
ysdH5/pages/userGoods/goodsDet.vue
2023-06-21 17:19:58 +08:00

350 lines
9.4 KiB
Vue

<template>
<view>
<!-- 轮播 -->
<view class="banner" v-if="productData.share">
<swiper class="swiperCont" interval="3000" autoplay circular @change="swiperChange">
<swiper-item v-for="(item, index) in productData.share.pictures" :key="index">
<image class="swiperImg" :src="item" mode="aspectFill"></image>
</swiper-item>
</swiper>
<view class="swiperDot" v-if="productData.share.pictures.length > 0">
{{ current }}/{{ productData.share.pictures.length }}
</view>
</view>
<!-- 权益介绍 -->
<view class="content">
<view class="contentText">
<view class="contentText-title">{{ productData.title }}</view>
<view class="contentText-text" v-if="productData.share">{{ productData.share.description }}</view>
<view class="contentText-price">
<view class="contentText-price-primary"><text></text>{{ productData.price }}</view>
<view class="contentText-price-close" v-if="productData.share">门市价{{ productData.share.cost }}</view>
</view>
</view>
<view @tap="userNav" class="contentBuy">立即购买</view>
</view>
<!-- 规格 -->
<view class="specs">
<view class="specs-label" v-if="productData.share">
<text>规格</text>
{{ productData.share.type_name }}
</view>
<view class="specs-label">
<text>门店</text>
<view class="specs-site">
<view class="specs-site-list" v-for="(item, index) in productStores" :key="index">
<view class="specs-site-name">{{ item.title }}</view>
{{ item.address }}
</view>
</view>
</view>
</view>
<!-- 规格 -->
<view class="imageText">
<view class="imageText-title">
图文详情
</view>
<view class="imageText-text" v-if="productContent">
<rich-text :nodes="productContent"></rich-text>
</view>
<view class="imageText-end">
END
</view>
</view>
<!-- 漂浮窗 -->
<movable-area class="indexFloat" v-if="canShare">
<movable-view y="400" direction="vertical" class="indexFloat-movable">
<navigator hover-class="none" :url="'/pages/userGoods/goodsCode?rightid=' + rightId"
class="indexFloat-img">
<image src="https://card.ysd-bs.com/storage/materials/2021/09/01/index_float_01.png" mode="aspectFill"></image>
</navigator>
</movable-view>
</movable-area>
</view>
</template>
<script>
import { productInfo } from '@/apis/interfaces/user'
export default {
data() {
return {
isUser : false, //用户登录状态
qrcode : '', //二维码
userInfo : '', //我的信息
current : 1, //产品轮播index
rightId : '', //产品id
parentId : '', //分享人id
productData : '', //详情数据
productStores : [], //门店列表
productContent : '', //图文详情
canShare : '' //分享按钮状态
}
},
onLoad(options) {
if(options.type){
getApp().globalData.shareObj = {
type : options.type,
goodsId : options.rightid,
userId : options.parent_id
}
}
this.rightId = options.rightid
},
onShow(){
// 获取产品详情
this.goodsShow();
this.isUser = getApp().globalData.isUser
},
methods: {
// 商品轮播
swiperChange(e) {
this.current = e.detail.current + 1
},
// 产品详情
goodsShow(){
productInfo(this.rightId).then(res=>{
this.canShare = res.canShare
this.productData = res.info
this.productStores = res.stores
this.productContent= res.info.share.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"')
}).catch(err=>{})
},
// 处理未登录时的转跳
userNav(){
if(uni.getStorageSync("token")) {
uni.navigateTo({
url: '/pages/rights/index?id=' + this.productData.right_config_id + '&parent_id=' + this.parentId + '&type=share'
})
} else {
// 去登录
uni.navigateTo({
url: "/pages/auth/login?way=shareLogin"
})
}
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #f0f0f0;
}
/* 轮播图 */
.banner {
width: 100%;
position: relative;
padding-top: 60%;
}
.swiperCont, .swiperImg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.swiperDot {
position: absolute;
background: rgba(0, 0, 0, .5);
border-radius: 80rpx;
padding: 0 25rpx;
line-height: 46rpx;
z-index: 2;
bottom: 20rpx;
right: 50rpx;
color: #ffffff;
}
/* 权益介绍 */
.content {
width: 100%;
padding: 25rpx;
box-sizing: border-box;
display: flex;
}
.contentText {
width: calc(100% - 240rpx);
margin-right: 40rpx;
}
.contentText-title {
font-weight: 600;
font-size: 36rpx;
}
.contentText-text {
font-size: 26rpx;
padding: 20rpx;
box-sizing: border-box;
color: #646464;
}
.contentText-price {
padding: 0 20rpx;
box-sizing: border-box;
display: flex;
}
.contentText-price-primary {
color: #f57400;
font-size: 48rpx;
font-weight: 600;
text {
font-size: 28rpx;
}
}
.contentText-price-close {
font-size: 24rpx;
color: #646464;
margin: 20rpx 0 0 10rpx;
text-decoration: line-through;
}
.contentBuy {
background: linear-gradient(to left, #fe6d52, #fe8750);
border-radius: 20rpx;
width: 200rpx;
text-align: center;
height: 70rpx;
line-height: 70rpx;
color: #ffffff;
margin-top: 70rpx;
}
/* 规格 */
.specs {
background-color: #ffffff;
padding: 25rpx;
box-sizing: border-box;
margin: 0 20rpx;
border-radius: 20rpx;
}
.specs-label {
display: flex;
margin-bottom: 30rpx;
text {
font-size: 30rpx;
display: block;
width: 100rpx;
color: #808080;
line-height: 44rpx;
}
}
.specs-label:last-child {
margin-bottom: 0;
}
.specs-site {
box-sizing: border-box;
font-size: 30rpx;
width: calc(100% - 120rpx);
}
.specs-site-list {
margin-bottom: 20rpx;
font-size: 28rpx;
}
.specs-site-list:last-child {
margin-bottom: 0;
}
.specs-site-name {
font-size: 32rpx;
margin-bottom: 10rpx;
}
/* 详情 */
.imageText {
width: 100%;
padding: 40rpx;
box-sizing: border-box;
}
.imageText-title {
width: 200rpx;
margin: 0 auto 30rpx;
text-align: center;
position: relative;
}
.imageText-title::after,
.imageText-title::before {
position: absolute;
content: '';
top: 49%;
background-color: #000000;
width: 100rpx;
height: 2rpx;
}
.imageText-title::after {
left: -100rpx;
}
.imageText-title::before {
right: -100rpx;
}
.imageText-end {
width: 80rpx;
height: 80rpx;
margin: 30rpx auto;
line-height: 80rpx;
text-align: center;
border-radius: 50%;
border: 2rpx solid #000000;
position: relative;
}
.imageText-end::after {
position: absolute;
content: '';
width: 10rpx;
height: 10rpx;
border-radius: 50%;
top: 0rpx;
right: 16rpx;
background-color: #000000;
}
/* 漂浮弹出层 */
.indexFloat {
position: fixed;
height: 52%;
width: 130rpx;
right: 20rpx;
bottom: 40rpx;
z-index: 99;
}
.indexFloat-movable {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 150rpx;
z-index: 99;
image {
width: 130rpx;
height: 130rpx;
margin-bottom: 20rpx;
}
}
</style>