11 changed files with 2166 additions and 1090 deletions
@ -0,0 +1,262 @@ |
|||||
|
<template> |
||||
|
<view class="bg"> |
||||
|
<BackButton /> |
||||
|
<!-- <headerVue :type="'goods'"></headerVue> --> |
||||
|
<view class="banner-content"> |
||||
|
|
||||
|
<swiper class="top-banner" :circular="true" :interval="6000" :duration="800" |
||||
|
:indicator-dots="false" :autoplay="true" @change="swiperChange" > |
||||
|
<swiper-item v-for="(item, index) in topBanner" :key="index" @click.stop="gotoUrlNew(item)"> |
||||
|
<image class="top-banner" :src="showImg(item.head_img)" mode="aspectFill"></image> |
||||
|
</swiper-item> |
||||
|
</swiper> |
||||
|
|
||||
|
<view class="dot-container"> |
||||
|
<view :class="['dot-line',index==swiperIndex?'active':'']" v-for="(item, index) in topBanner" :key="index"></view> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
<view class="desc-box"> |
||||
|
<view class="title-sec" style="color: black;"> |
||||
|
关于有感商品 |
||||
|
</view> |
||||
|
<view class=""> |
||||
|
寻常商品,满足你的日常所需;而「有感商品」,则回应你的精神所向。 |
||||
|
</view> |
||||
|
<view class=""> |
||||
|
我们坚信“意义大于产品”。这里的每一件商品都诞生于EPIC SOUL「交响」阅读体的史诗,是精神漫游的实体回响。它的存在,是为了让你在消费中完成一次次深刻的情感连接与自我认同。 |
||||
|
</view> |
||||
|
<view class=""> |
||||
|
在这里,消费的终点不是拥有,而是更深刻的连接与共鸣。欢迎探索,一件件写满故事与想象力的生活信物。 |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="product-content"> |
||||
|
<!-- <image class="head-img" src="https://static.ticket.sz-trip.com/uploads/20250625/e3112c280ef9761af741907a737ef221.png"></image> --> |
||||
|
<view class="title-sec"> |
||||
|
有感商品上新 |
||||
|
</view> |
||||
|
|
||||
|
<scroll-view style="width: 100%;" scroll-x> |
||||
|
<view class="product"> |
||||
|
<view class="item" v-for="(item,i) in list" :key="item.goods.id" @click="goDetailByType(item)"> |
||||
|
<image class="item-img" :src="showImg(item.goods.image)"></image> |
||||
|
<view class="content"> |
||||
|
<view class="title text-overflow">{{item.goods.title}}</view> |
||||
|
<view class="bottom"> |
||||
|
<view class="price">¥{{item.goods.money/100}}</view> |
||||
|
<image src="https://static.ticket.sz-trip.com/epicSoul/readingBody/gwc.png" class="buy-cart"></image> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
</scroll-view> |
||||
|
|
||||
|
<!-- <image style="margin: 53rpx 0 35rpx;" class="head-img" src="https://static.ticket.sz-trip.com/uploads/20250627/73153098ff5c115e02afb0328ade1e29.png"></image> --> |
||||
|
<view class="title-sec"> |
||||
|
有感商品精选 |
||||
|
</view> |
||||
|
<view class="img-container"> |
||||
|
<image v-for="(type,i) in typeList" :key="i" :src="showImg(type.img)" |
||||
|
@click="gotoPath(`/subPackages/haveFeeling/detailXiang?id=${type.id}`)"></image> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- <CustomTabBar :currentTab="2" /> --> |
||||
|
<MusicControl /> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import headerVue from "@/components/header.vue" |
||||
|
import CustomTabBar from '@/components/CustomTabBar.vue'; |
||||
|
import MusicControl from '@/components/MusicControl.vue'; |
||||
|
import BackButton from "@/components/BackButton.vue"; |
||||
|
export default { |
||||
|
components: {CustomTabBar,headerVue,MusicControl,BackButton}, |
||||
|
data() { |
||||
|
return { |
||||
|
topBanner: [], |
||||
|
list: [], |
||||
|
swiperIndex: 0, |
||||
|
typeList: [], |
||||
|
} |
||||
|
}, |
||||
|
onLoad() { |
||||
|
|
||||
|
}, |
||||
|
onReady() { |
||||
|
this.getProduct() |
||||
|
this.getTypes() |
||||
|
this.getList() |
||||
|
}, |
||||
|
onReachBottom() { |
||||
|
|
||||
|
}, |
||||
|
methods: { |
||||
|
swiperChange(e) { |
||||
|
this.swiperIndex = e.detail.current |
||||
|
}, |
||||
|
|
||||
|
viewDetail(item) { |
||||
|
if (item.url) { |
||||
|
uni.navigateTo({ |
||||
|
url:"/subPackages/webPage/webPage?url="+encodeURIComponent(item.url) |
||||
|
}) |
||||
|
return |
||||
|
} |
||||
|
uni.navigateTo({ |
||||
|
url:'/subPackages/letter/detail?id='+item.id |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
getProduct () { |
||||
|
this.Post({ |
||||
|
tag_id: 40, |
||||
|
offset: 0, |
||||
|
},'/api/tag/getGoodsByTagId').then(res => { |
||||
|
this.list = res.data; |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
getList() { |
||||
|
// 大轮播 |
||||
|
this.Post({ |
||||
|
type_id: 3, |
||||
|
position: 18, |
||||
|
}, '/api/adv/getAdv').then(res => { |
||||
|
if(res.data) { |
||||
|
this.topBanner = res.data; |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
// 获取分类图片 |
||||
|
getTypes () { |
||||
|
this.Post({ |
||||
|
parent_id: 0, |
||||
|
}, '/api/goods/type').then(res => { |
||||
|
if(res.data) { |
||||
|
this.typeList = res.data; |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
|
||||
|
.bg { |
||||
|
min-height: 100vh; |
||||
|
background: #FFFFFF; |
||||
|
padding-bottom: 200rpx; |
||||
|
} |
||||
|
.banner-content{ |
||||
|
width: 100%; |
||||
|
height: 496.4rpx; |
||||
|
position: relative; |
||||
|
.top-banner { |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
} |
||||
|
.dot-container{ |
||||
|
position: absolute; |
||||
|
bottom: 43rpx; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
width: 100%; |
||||
|
left: 0; |
||||
|
.dot-line{ |
||||
|
width: 52rpx; |
||||
|
height: 4rpx; |
||||
|
margin: 0 8rpx; |
||||
|
background: RGBA(189, 170, 173, 0.8); |
||||
|
&.active{ |
||||
|
background: RGBA(255, 255, 255, 0.8); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.head-img{ |
||||
|
width: 697.24rpx; |
||||
|
height: 42.57rpx; |
||||
|
margin: 0 auto; |
||||
|
display: block; |
||||
|
} |
||||
|
.product-content{ |
||||
|
padding: 63rpx 26rpx 0; |
||||
|
padding-top: 0; |
||||
|
.product{ |
||||
|
padding: 36rpx 0 0; |
||||
|
padding-top: 0; |
||||
|
display: flex; |
||||
|
flex-wrap: nowrap; |
||||
|
// justify-content: space-between; |
||||
|
.item{ |
||||
|
width: 214.69rpx; |
||||
|
margin-right: 20rpx; |
||||
|
} |
||||
|
.item-img{ |
||||
|
width: 214.69rpx; |
||||
|
height: 286.33rpx; |
||||
|
} |
||||
|
.content{ |
||||
|
height: 80rpx; |
||||
|
padding: 0rpx 4rpx; |
||||
|
font-weight: 400; |
||||
|
font-size: 24rpx; |
||||
|
color: #000000; |
||||
|
} |
||||
|
.bottom{ |
||||
|
display: flex; |
||||
|
padding-top: 13rpx; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
} |
||||
|
.buy-cart{ |
||||
|
width: 28rpx; |
||||
|
height: 24rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.img-container{ |
||||
|
width: 100%; |
||||
|
image{ |
||||
|
display: block; |
||||
|
width: 100%; |
||||
|
height: 314rpx; |
||||
|
border-radius: 40rpx; |
||||
|
margin-bottom: 20rpx; |
||||
|
} |
||||
|
} |
||||
|
.line{ |
||||
|
width: 220rpx; |
||||
|
height: 1rpx; |
||||
|
background: #E4E4E4; |
||||
|
flex-shrink: 0; |
||||
|
} |
||||
|
.head-img-yougan{ |
||||
|
width: 183.45rpx; |
||||
|
height: 42.57rpx; |
||||
|
} |
||||
|
.title-sec{ |
||||
|
font-size: 34rpx; |
||||
|
font-weight: 500; |
||||
|
margin: 30rpx 0; |
||||
|
} |
||||
|
.desc-box{ |
||||
|
padding: 0 20rpx; |
||||
|
color: #616161; |
||||
|
margin: 30rpx 0; |
||||
|
font-size: 24rpx; |
||||
|
padding: 0 30rpx; |
||||
|
view{ |
||||
|
margin-bottom: 20rpx; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,823 @@ |
|||||
|
<template> |
||||
|
<view class="bg" id="bg" v-if="info"> |
||||
|
<view class="swipe-box"> |
||||
|
<swiper class="swiper" :indicator-dots="false" :autoplay="false" :interval="3000" :duration="1000" circular> |
||||
|
<swiper-item v-if="info && info.videourl"> |
||||
|
<video |
||||
|
:src="showImg(info.videourl)" |
||||
|
id="detailVideo" |
||||
|
:poster="showImg(info.image)" |
||||
|
@play="play" |
||||
|
@error="videoErrorCallback" |
||||
|
controls |
||||
|
style="width: 100%;height: 100%;" |
||||
|
object-fit="cover" |
||||
|
></video> |
||||
|
</swiper-item> |
||||
|
<swiper-item v-for="(item, index) in info.list_images.split(',')" :key="item.id"> |
||||
|
<view class="swiper-item"> |
||||
|
<image class="item-img" :src="showImg(item)" mode="aspectFill"></image> |
||||
|
</view> |
||||
|
</swiper-item> |
||||
|
</swiper> |
||||
|
<view class="swiper-item-num">{{ info.list_images.split(',').length }}张</view> |
||||
|
</view> |
||||
|
|
||||
|
<view class="w-full relative" style="padding: 26rpx 0;top: -52rpx;"> |
||||
|
<view class="price-box "> |
||||
|
<view class="price-zan"> |
||||
|
<view class="price"> |
||||
|
<view class="present-price">{{ info.money / 100 }}</view> |
||||
|
<view class="old-price">¥{{info.price / 100}}</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="tag no-scrollbar" v-if="info.goods_new_tag"> |
||||
|
<view class="tag-item" v-for="(item, index) in info.goods_new_tag.split(',')" :key="index"> |
||||
|
{{ item }} |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="title">{{ info.title }}</view> |
||||
|
</view> |
||||
|
|
||||
|
<view class="sku-box" v-if="sku.length>0"> |
||||
|
<view class="sku-item" v-for="(item,i) in sku" :key="i"> |
||||
|
<image :src="showImg(item.image)"></image> |
||||
|
<view class="sku-content"> |
||||
|
<view class="flex-1">{{item.title}}</view> |
||||
|
<view class="present-price">{{item.money/100}}</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<view class="notice" v-if="info.reserve_content"> |
||||
|
<view class="title">购买须知</view> |
||||
|
<view class="rich-text" v-html="formateRichText(info.reserve_content)"></view> |
||||
|
</view> |
||||
|
<view class="notice" > |
||||
|
<view class="title">商品须知</view> |
||||
|
<view class="rich-text" v-html="formateRichText(info.special_content)"></view> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<template v-if="!popShow"> |
||||
|
<view class="btn-list" v-if="!paramData.showCart"> |
||||
|
<view class="left-box"> |
||||
|
<!-- <view class="img-box" slot="content"> |
||||
|
<uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small" |
||||
|
:custom-style="{background:'#D90F01',color:'#ffffff',border:'1px solid #ffffff'}"> |
||||
|
<image @click.stop="showCartClick" :src="showImg('/uploads/20250513/29fd015f8c779f08e53d1016d3643c58.png')" mode="aspectFill" |
||||
|
style="width: 60rpx;height: 50rpx;"></image> |
||||
|
</uni-badge> |
||||
|
<text class="text">购物车</text> |
||||
|
</view> --> |
||||
|
</view> |
||||
|
<view class="btn-post"> |
||||
|
<view class="left-btn-buy" @click="openPop(true)">加入购物车</view> |
||||
|
<view class="right-btn-buy" @click="openPop(false)">立即购买</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<view class="btn-list" v-else> |
||||
|
<view class="left-box"> |
||||
|
<view class="img-box" slot="content"> |
||||
|
<uni-badge class="uni-badge-left-margin" :text="paramData.num" absolute="rightTop" :offset="[5, 5]" size="small" |
||||
|
:custom-style="{background:'#D90F01',color:'#ffffff',border:'1px solid #ffffff'}"> |
||||
|
<image @click.stop="showCartClick" :src="showImg('/uploads/20250513/29fd015f8c779f08e53d1016d3643c58.png')" mode="aspectFill" |
||||
|
style="width: 60rpx;height: 50rpx;"></image> |
||||
|
</uni-badge> |
||||
|
<text class="text">购物车</text> |
||||
|
</view> |
||||
|
<view class="bottom-price"> |
||||
|
<text style="color: #000000;">总计:</text> |
||||
|
¥ |
||||
|
<view class="bottom-price-yuan">{{paramData.iNum}}</view> |
||||
|
<view>.{{paramData.fNum}}</view> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
|
||||
|
<view class="btn-buy" @click="goCartOrder"> |
||||
|
去结算 |
||||
|
</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<cartDataVue ref="cartDataVueRef" :paramData="paramData" @changeParamData="changeParamData" :key="new Date().getTime()"></cartDataVue> |
||||
|
|
||||
|
<uni-popup ref="popup" type="bottom" @change="changPopShow" |
||||
|
:safe-area="false" style="position: relative;z-index: 50;"> |
||||
|
<view class="popup-content" v-if="sku.length>0"> |
||||
|
<view @click="closePopup" style="padding: 31rpx 0 0 639rpx;width: 50rpx;height: 80rpx;"> |
||||
|
<uni-icons type="closeempty" size="24"></uni-icons> |
||||
|
</view> |
||||
|
|
||||
|
<view class="bottom-productImg"> |
||||
|
<img :src="showImg(sku[productIndex].image)" alt=""> |
||||
|
<view class="right-content"> |
||||
|
<view class="bottom-productPrice com-price">{{(sku[productIndex].money||0)/100}}</view> |
||||
|
<view class="bottom-content text-overflow">已选择:{{sku[productIndex].title}}</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view> |
||||
|
<view class="sp"> |
||||
|
规格 |
||||
|
</view> |
||||
|
<view style="display: flex;align-items: center;justify-content: space-between;flex-wrap: wrap;"> |
||||
|
<view style="position:relative;" v-for="(botItem,botIndex) in sku" :key="botIndex"> |
||||
|
<view :class="['botProduct',{'noStore':botItem.store==0},{'botProducts':productIndex==botIndex}]" |
||||
|
@click="changeProduct(botItem,botIndex)"> |
||||
|
{{botItem.title}} |
||||
|
</view> |
||||
|
<view class="noStore-text" v-if="botItem.store==0"> |
||||
|
不可购买 |
||||
|
</view> |
||||
|
<!-- <view class="noStore-text" v-else-if="is_post==1&&botItem.is_post!=1">不可加购</view> --> |
||||
|
</view> |
||||
|
|
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="buy-num com-flex-tao"> |
||||
|
数量 |
||||
|
<view class="number-btn"> |
||||
|
<view> |
||||
|
<text @click="delNumber">-</text> |
||||
|
</view> |
||||
|
<view style="width: 96rpx;height: 69rpx;margin: 0 14rpx;">{{ buyNum }}</view> |
||||
|
<view> |
||||
|
<text @click="addNumber">+</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- <view style="height: 100rpx;"></view> --> |
||||
|
<view class="btn-box"> |
||||
|
<view class="buy-btn" @click="openPop(addCartOrOrder)"> |
||||
|
{{addCartOrOrder?'加入购物车':'立即购买'}} |
||||
|
</view> |
||||
|
</view> |
||||
|
</uni-popup> |
||||
|
|
||||
|
<!-- 购物车数量 --> |
||||
|
<!-- <view class="cart-box flex-center"> |
||||
|
<image src="https://static.ticket.sz-trip.com/epicSoul/gowuche.png" mode="widthFix"></image> |
||||
|
</view> --> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import cartDataVue from '../../components/cartData.vue' |
||||
|
export default { |
||||
|
components: {cartDataVue}, |
||||
|
data() { |
||||
|
return { |
||||
|
id: null, |
||||
|
info: null, |
||||
|
sku: [], |
||||
|
productIndex: 0, |
||||
|
|
||||
|
is_post: "1", |
||||
|
|
||||
|
isCollect: false, |
||||
|
showLength: 0, |
||||
|
buyNum: 1, |
||||
|
popShow: false, |
||||
|
paramData: {allPrice: 0,iNum:0, fNum:'00', showCart: false, num: 0}, |
||||
|
addCartOrOrder: null, //true 加入购物车 false 购买 |
||||
|
}; |
||||
|
}, |
||||
|
onShow() { |
||||
|
// 获取购物车数量 |
||||
|
this.Post({ |
||||
|
is_post: 1, |
||||
|
}, '/api/shopping/getShoppingList').then(res => { |
||||
|
console.log(res) |
||||
|
}) |
||||
|
}, |
||||
|
onLoad(option) { |
||||
|
this.id = option.id; |
||||
|
this.getInfo(); |
||||
|
this.getSpecificationsByGoodsId(); |
||||
|
}, |
||||
|
methods: { |
||||
|
changPopShow (e) { |
||||
|
this.popShow = e.show |
||||
|
}, |
||||
|
|
||||
|
|
||||
|
|
||||
|
getInfo() { |
||||
|
this.Post({ |
||||
|
goods_id: this.id |
||||
|
}, |
||||
|
'/api/goods/getGoodDetail' |
||||
|
).then(res => { |
||||
|
if (res.data.flag == 0) { |
||||
|
setTimeout(() => { |
||||
|
uni.showToast({ |
||||
|
title: '商品不存在或已下架', |
||||
|
icon: 'none' |
||||
|
}) |
||||
|
}, 0) |
||||
|
setTimeout(() => { |
||||
|
this.goBack() |
||||
|
}, 2000) |
||||
|
} |
||||
|
this.info = res.data; |
||||
|
// this.isCollect = this.info.is_collect; |
||||
|
if (this.info.title) { |
||||
|
uni.setNavigationBarTitle({ |
||||
|
title: this.info.title |
||||
|
}) |
||||
|
|
||||
|
this.browse_record({type: 'goods',title: this.info.title}); |
||||
|
} |
||||
|
|
||||
|
}); |
||||
|
}, |
||||
|
getSpecificationsByGoodsId() { |
||||
|
this.Post({ |
||||
|
goods_id: this.id |
||||
|
}, |
||||
|
'/api/goods/getSpecificationsByGoodsId' |
||||
|
).then(res => { |
||||
|
if (res) { |
||||
|
this.sku = res.data || []; |
||||
|
// todo |
||||
|
// this.is_post = "2" |
||||
|
// if (this.sku.length>0 && this.sku.some(v=>v.is_post == 1)) { |
||||
|
// this.is_post = "1" |
||||
|
|
||||
|
// } |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
// 收藏 |
||||
|
collect() { |
||||
|
this.Post({ |
||||
|
type: 5, |
||||
|
id: this.id |
||||
|
}, |
||||
|
'/api/scenic/collect' |
||||
|
).then(res => { |
||||
|
if (res) { |
||||
|
uni.showToast({ |
||||
|
title: res.msg, |
||||
|
icon: 'none' |
||||
|
}); |
||||
|
this.isCollect = !this.isCollect |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
//数量加减 |
||||
|
addNumber() { |
||||
|
this.buyNum += 1; |
||||
|
}, |
||||
|
delNumber() { |
||||
|
if (this.buyNum <= 1) { |
||||
|
return; |
||||
|
} |
||||
|
this.buyNum -= 1; |
||||
|
}, |
||||
|
closePopup() { |
||||
|
this.$refs.popup.close() |
||||
|
}, |
||||
|
// false 下单 true 加入购物车 |
||||
|
openPop(flag) { |
||||
|
if (!this.sku||this.sku.length<=0) { |
||||
|
uni.showToast({ |
||||
|
title:'暂无可选规格', |
||||
|
icon:'none' |
||||
|
}) |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
if (!this.popShow) { |
||||
|
this.$refs.popup.open() |
||||
|
this.addCartOrOrder = flag |
||||
|
} else { |
||||
|
if (flag) { |
||||
|
this.addToCart() |
||||
|
} else { |
||||
|
this.order() |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
}, |
||||
|
order(item) { |
||||
|
let goods = this.sku[this.productIndex] |
||||
|
goods.buyNum = this.buyNum |
||||
|
|
||||
|
let orderInfo = { |
||||
|
// is_post: goods.is_post || "2", |
||||
|
is_post: 1, |
||||
|
goods: [{goodsInfo: this.info, skuInfo: goods }], |
||||
|
post: 0, |
||||
|
} |
||||
|
|
||||
|
uni.setStorageSync('teChanOrder', JSON.stringify(orderInfo)); //规格 |
||||
|
// uni.setStorageSync('teChanInfo', JSON.stringify(this.info)); //商品 |
||||
|
uni.navigateTo({ |
||||
|
url: '/subPackages/techan/order' |
||||
|
}); |
||||
|
}, |
||||
|
addToCart () { |
||||
|
let goods = this.sku[this.productIndex] |
||||
|
goods.buyNum = this.buyNum |
||||
|
let goodsInfo = {goodsInfo:this.info, skuInfo: goods, isSelected: true} |
||||
|
|
||||
|
this.Post({good_id: this.info.id, specifications_id: goods.id,num: this.buyNum }, |
||||
|
'/api/shopping/addShopping').then(res => { |
||||
|
if (res) { |
||||
|
let selectedData = [] |
||||
|
try { |
||||
|
selectedData = JSON.parse(uni.getStorageSync('cartDataInfo')); |
||||
|
} catch(e) { |
||||
|
selectedData = [] |
||||
|
} |
||||
|
let currentGoods = selectedData.find(v =>v==goods.id) |
||||
|
if (!currentGoods) { |
||||
|
selectedData.push(goods.id) |
||||
|
} |
||||
|
uni.setStorageSync('cartDataInfo', JSON.stringify(selectedData)); |
||||
|
uni.$emit("updateDataByConnect", {msgType:'updateCartDataInfo',data:null}) |
||||
|
this.closePopup() |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
}, |
||||
|
goUser() { |
||||
|
uni.switchTab({ |
||||
|
url: '/pages/index/user' |
||||
|
}) |
||||
|
}, |
||||
|
changeProduct(item,index) { |
||||
|
if (item.store==0) { |
||||
|
uni.showToast({ |
||||
|
title:"库存不足!", |
||||
|
icon:'none' |
||||
|
}) |
||||
|
return |
||||
|
} |
||||
|
this.productIndex = index |
||||
|
}, |
||||
|
|
||||
|
// 购物车 |
||||
|
changeParamData (data) { |
||||
|
for(let key in this.paramData) { |
||||
|
this.paramData[key] = data[key] |
||||
|
} |
||||
|
}, |
||||
|
showCartClick () { |
||||
|
if (this.paramData.showCart) { |
||||
|
this.$refs.cartDataVueRef.closePopup() |
||||
|
} else { |
||||
|
this.$refs.cartDataVueRef.openPop() |
||||
|
} |
||||
|
}, |
||||
|
goCartOrder () { |
||||
|
this.$refs.cartDataVueRef.goCartOrder() |
||||
|
}, |
||||
|
}, |
||||
|
onReachBottom() { |
||||
|
|
||||
|
} |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.bg { |
||||
|
min-height: 100vh; |
||||
|
overflow-x: hidden; |
||||
|
background: #f2f4f7; |
||||
|
padding-bottom: 210rpx; |
||||
|
} |
||||
|
|
||||
|
view { |
||||
|
box-sizing: border-box; |
||||
|
} |
||||
|
.swipe-box { |
||||
|
height: 750rpx; |
||||
|
position: relative; |
||||
|
|
||||
|
.swiper-item-num { |
||||
|
width: 90rpx; |
||||
|
height: 40rpx; |
||||
|
background: rgba(0, 0, 0, 0.5); |
||||
|
border-radius: 20rpx; |
||||
|
font-size: 24rpx; |
||||
|
font-family: PingFangSC-Regular, PingFang SC; |
||||
|
font-weight: 400; |
||||
|
color: #ffffff; |
||||
|
text-align: center; |
||||
|
line-height: 40rpx; |
||||
|
position: absolute; |
||||
|
right: 30rpx; |
||||
|
bottom: 50rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.swiper { |
||||
|
height: 750rpx; |
||||
|
position: relative; |
||||
|
|
||||
|
.swiper-item { |
||||
|
width: 100%; |
||||
|
height: 750rpx; |
||||
|
|
||||
|
.item-img { |
||||
|
width: 750rpx; |
||||
|
height: 750rpx; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.price-box { |
||||
|
width: 100%; |
||||
|
background: #ffffff; |
||||
|
border-radius: 20rpx 20rpx 0 0; |
||||
|
padding: 24rpx 30rpx; |
||||
|
|
||||
|
.price-zan { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: space-between; |
||||
|
|
||||
|
.price { |
||||
|
display: flex; |
||||
|
align-items: baseline; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.tag { |
||||
|
margin:24rpx 0 15rpx 0; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
flex-wrap: nowrap; |
||||
|
overflow-x: auto; |
||||
|
|
||||
|
.tag-item { |
||||
|
margin-right: 10rpx; |
||||
|
padding: 0rpx 15rpx; |
||||
|
flex-shrink: 0; |
||||
|
font-weight: 500; |
||||
|
font-size: 23rpx; |
||||
|
color: #60989E; |
||||
|
height: 37rpx; |
||||
|
line-height: 37rpx; |
||||
|
background: rgba(96, 152, 158, 0.2); |
||||
|
border-radius: 4rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.title { |
||||
|
margin-top: 22rpx; |
||||
|
font-family: PingFang; |
||||
|
font-weight: bold; |
||||
|
font-size: 31rpx; |
||||
|
color: #000000; |
||||
|
} |
||||
|
} |
||||
|
.present-price { |
||||
|
font-size: 42rpx; |
||||
|
font-family: PingFang SC; |
||||
|
font-weight: 500; |
||||
|
color: #FC5109; |
||||
|
|
||||
|
&:before { |
||||
|
content: '¥'; |
||||
|
display: inline-block; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
|
||||
|
&:after { |
||||
|
content: '起'; |
||||
|
display: inline-block; |
||||
|
font-size: 24rpx; |
||||
|
font-family: PingFangSC; |
||||
|
color: #B5BCC9; |
||||
|
} |
||||
|
} |
||||
|
.old-price { |
||||
|
font-size: 24rpx; |
||||
|
color: #B5BCC9; |
||||
|
margin-left: 10rpx; |
||||
|
text-decoration: line-through; |
||||
|
} |
||||
|
|
||||
|
.notice { |
||||
|
width: 700rpx; |
||||
|
margin: 25rpx auto 0; |
||||
|
background: #ffffff; |
||||
|
border-radius: 20rpx; |
||||
|
padding: 40rpx 25rpx; |
||||
|
.title{ |
||||
|
font-weight: bold; |
||||
|
font-size: 36rpx; |
||||
|
color: #000000; |
||||
|
margin-bottom: 30rpx; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.btn-list { |
||||
|
position: fixed; |
||||
|
z-index: 9999; |
||||
|
bottom: 0; |
||||
|
width: 750rpx; |
||||
|
background: #FFFFFF; |
||||
|
box-shadow: 0rpx 0rpx 16rpx 0rpx rgba(6, 0, 1, 0.1); |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
padding: 30rpx 25rpx 30rpx; |
||||
|
// padding-bottom: calc(30rpx + env(safe-area-inset-bottom)); |
||||
|
|
||||
|
.left-box { |
||||
|
display: flex; |
||||
|
align-items: flex-start; |
||||
|
|
||||
|
.bottom-price{ |
||||
|
display: flex; |
||||
|
align-items: baseline; |
||||
|
font-family: PingFang SC; |
||||
|
font-weight: bold; |
||||
|
font-size: 27rpx; |
||||
|
color: #D70000; |
||||
|
padding-top: 20rpx; |
||||
|
.bottom-price-yuan{ |
||||
|
font-size: 40rpx; |
||||
|
} |
||||
|
} |
||||
|
.bottom-detail-icon{ |
||||
|
font-size: 24rpx; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.img-box { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
margin-right: 50rpx; |
||||
|
|
||||
|
image { |
||||
|
width: 48rpx; |
||||
|
height: 48rpx; |
||||
|
} |
||||
|
|
||||
|
.text { |
||||
|
font-weight: 500; |
||||
|
font-size: 22rpx; |
||||
|
color: #4D526C; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.btn-buy { |
||||
|
width: 240rpx; |
||||
|
height: 78rpx; |
||||
|
background: #74A5AA; |
||||
|
border-radius: 40rpx; |
||||
|
text-align: center; |
||||
|
line-height: 78rpx; |
||||
|
font-size: 32rpx; |
||||
|
font-family: PingFangSC; |
||||
|
font-weight: 500; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.popup-content { |
||||
|
background-color: white; |
||||
|
padding: 0rpx 39rpx 51rpx 39rpx; |
||||
|
height: auto; |
||||
|
border-radius: 20rpx 20rpx 0 0; |
||||
|
|
||||
|
.bottom-productImg { |
||||
|
display: flex; |
||||
|
margin-bottom: 23rpx; |
||||
|
img { |
||||
|
width: 218rpx; |
||||
|
height: 179rpx; |
||||
|
background: #666666; |
||||
|
border-radius: 13rpx; |
||||
|
} |
||||
|
} |
||||
|
.right-content { |
||||
|
margin: 10rpx 0 0 41rpx; |
||||
|
} |
||||
|
.bottom-productPrice { |
||||
|
font-size: 40rpx; |
||||
|
color: #FC524B; |
||||
|
|
||||
|
&:before { |
||||
|
content: "¥"; |
||||
|
font-size: 26rpx; |
||||
|
} |
||||
|
} |
||||
|
.bottom-content { |
||||
|
width: 331rpx; |
||||
|
font-size: 27rpx; |
||||
|
font-family: PingFang SC; |
||||
|
font-weight: 400; |
||||
|
color: #666666; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.botProduct { |
||||
|
width: 680rpx; |
||||
|
// height: 78rpx; |
||||
|
border-radius: 13rpx; |
||||
|
background-color: #EFEFEF; |
||||
|
font-size: 29rpx; |
||||
|
font-family: PingFang SC; |
||||
|
font-weight: 400; |
||||
|
color: #333333; |
||||
|
text-align: center; |
||||
|
margin-bottom: 25rpx; |
||||
|
display: inline-block; |
||||
|
position: relative; |
||||
|
padding: 10rpx 40rpx; |
||||
|
} |
||||
|
.noStore{ |
||||
|
background-color: rgba(239, 239, 239, 1); |
||||
|
color: rgba(153, 153, 153, 1); |
||||
|
} |
||||
|
.noStore-text{ |
||||
|
width: 113rpx; |
||||
|
height: 43rpx; |
||||
|
background: #C0C0C0; |
||||
|
border-radius: 7rpx 0rpx 7rpx 0rpx; |
||||
|
text-align: center; |
||||
|
line-height: 43rpx; |
||||
|
position: absolute; |
||||
|
right: -14rpx; |
||||
|
top: -20rpx; |
||||
|
font-size: 23rpx; |
||||
|
font-family: PingFangSC; |
||||
|
font-weight: 400; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.botProducts { |
||||
|
// border: 1rpx solid #00AAFF; |
||||
|
// background-color: rgba(254, 180, 25, 1); |
||||
|
background: #74A5AA; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
|
||||
|
.buy-num { |
||||
|
font-size: 29rpx; |
||||
|
font-family: PingFang SC; |
||||
|
font-weight: 400; |
||||
|
color: #333333; |
||||
|
// border-top: 1rpx solid #CCCCCC; |
||||
|
padding: 39rpx 0; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: space-between; |
||||
|
.number-btn { |
||||
|
display: flex; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.buy-num .number-btn view { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
width: 69rpx; |
||||
|
height: 69rpx; |
||||
|
border: 1rpx solid #CCCCCC; |
||||
|
border-radius: 7rpx; |
||||
|
} |
||||
|
|
||||
|
.buy-num .number-btn>view text { |
||||
|
font-size: 46rpx; |
||||
|
} |
||||
|
|
||||
|
.buy-btn { |
||||
|
width: 670rpx; |
||||
|
height: 78rpx; |
||||
|
text-align: center; |
||||
|
line-height: 78rpx; |
||||
|
background: #74A5AA; |
||||
|
border-radius: 40rpx; |
||||
|
|
||||
|
font-size: 34rpx; |
||||
|
font-family: PingFangSC; |
||||
|
font-weight: 500; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
|
||||
|
.btn-box { |
||||
|
width: 750rpx; |
||||
|
height: 151rpx; |
||||
|
background: #FFFFFF; |
||||
|
box-shadow: 0rpx 0rpx 16rpx 0rpx rgba(6, 0, 1, 0.1); |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
|
||||
|
.sp { |
||||
|
width: 100%; |
||||
|
height: 30rpx; |
||||
|
font-size: 32rpx; |
||||
|
font-family: PingFangSC; |
||||
|
font-weight: 400; |
||||
|
color: #060001; |
||||
|
line-height: 30rpx; |
||||
|
border-top: solid 2rpx #ccc; |
||||
|
margin: 60rpx 0; |
||||
|
padding-top: 30rpx; |
||||
|
} |
||||
|
.btn-post{ |
||||
|
font-weight: 500; |
||||
|
font-size: 32rpx; |
||||
|
color: #60989E; |
||||
|
line-height: 77rpx; |
||||
|
text-align: center; |
||||
|
display: flex; |
||||
|
margin-bottom: env(safe-area-inset-bottom); |
||||
|
|
||||
|
.left-btn-buy{ |
||||
|
width: 186rpx; |
||||
|
height: 77rpx; |
||||
|
color: #60989E; |
||||
|
border-radius: 39rpx 0rpx 0rpx 39rpx; |
||||
|
background: rgba(116, 165, 170, 0.3); |
||||
|
} |
||||
|
.right-btn-buy{ |
||||
|
width: 187rpx; |
||||
|
height: 77rpx; |
||||
|
background: #74A5AA; |
||||
|
border-radius: 0 39rpx 39rpx 0; |
||||
|
color: white; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.sku-box{ |
||||
|
width: 700rpx; |
||||
|
margin: 25rpx auto 0; |
||||
|
background: #FFFFFF; |
||||
|
border-radius: 20rpx; |
||||
|
.sku-item{ |
||||
|
// border-radius: 20rpx; |
||||
|
width: 100%; |
||||
|
padding: 14rpx; |
||||
|
display: flex; |
||||
|
border-bottom: 1px solid #D8D8D8; |
||||
|
.sku-content{ |
||||
|
display: flex; |
||||
|
padding-left: 16rpx; |
||||
|
flex: 1; |
||||
|
width: 1rpx; |
||||
|
} |
||||
|
image{ |
||||
|
width: 160rpx; |
||||
|
height: 160rpx; |
||||
|
border-radius: 13rpx; |
||||
|
flex-shrink: 0; |
||||
|
} |
||||
|
.flex-1{ |
||||
|
font-weight: 500; |
||||
|
font-size: 29rpx; |
||||
|
color: #000000; |
||||
|
height: 160rpx; |
||||
|
padding-right: 75rpx; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
.present-price{ |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
} |
||||
|
.present-price::after{ |
||||
|
content: ''; |
||||
|
} |
||||
|
} |
||||
|
.sku-item:last-of-type{ |
||||
|
border: none; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.cart-box { |
||||
|
width: 100rpx; |
||||
|
height: 100rpx; |
||||
|
background: #f5f5f5; |
||||
|
position: fixed; |
||||
|
bottom: 200rpx; |
||||
|
right: 50rpx; |
||||
|
z-index: 100; |
||||
|
|
||||
|
image { |
||||
|
width: 60rpx; |
||||
|
} |
||||
|
} |
||||
|
</style> |
File diff suppressed because it is too large
Loading…
Reference in new issue