@ -1,20 +1,22 @@
< template >
< view class = "container" >
< u-swiper :list = "product.images" @change ="e => (currentNum = e.current)" :autoplay = "false" height = "750rpx" radius = "0" indicatorStyle = "right: 20px" >
<!-- 商品轮播图 -- >
< u-swiper :list = "spu.picUrls" @change ="e => (currentNum = e.current)" :autoplay = "false"
height = "750rpx" radius = "0" indicatorStyle = "right: 20px" >
< view slot = "indicator" class = "indicator-num" >
< text class = "indicator-num__text" > { { currentNum + 1 } } / { { product . image s. length } } < / text >
< text class = "indicator-num__text" > { { currentNum + 1 } } / { { spu . picUrl s. length } } < / text >
< / view >
< / u-swiper >
< view class = "product-box" >
<!-- TODO @ Sfmind : 样式讨论 , 要不要改成类似 likeshop 的样子 ? 第一栏 : 价格 + 分享 ; 第二栏 : 商品名 ; 第三栏 : 库存 、 销量 、 浏览量 -- >
< view class = "prod-info" >
< view class = "info-text" >
< u--text :lines = "2" size = "14px" color = "#333333" :text = "product.titl e" > < / u--text >
< u-gap height = "5px" > < / u-gap >
< u--text :lines = "3" size = "12px" color = "#939393" :text = "product.desc" > < / u--text >
< u--text :lines = "2" size = "14px" color = "#333333" :text = "spu.nam e" > < / u--text >
< / view >
< view class = "price-and-cart" >
< custom-text-price color = "red" size = "16" intSize = "26" :price = "product.price" > < / custom-text-price >
<!-- TODO @ Sfmind : custom - text - price 会报错 -- >
< custom-text-price color = "red" size = "16" intSize = "26" :price = "spu.minPrice" > < / custom-text-price >
< / view >
< / view >
< view class = "prod-favor" >
@ -28,8 +30,8 @@
< view class = "row-right" @click ="skuPopup = true" >
< view class = "row-content" >
< view class = "sku-box" >
< view v-if = "product .sku.length > 0" class="sku-item" >
< view class = "sku-desc" > { { product . sku [ currentSkuIndex ] . desc } } < / view >
< view v-if = "spu .skus .length > 0" class="sku-item" >
< view class = "sku-desc" > { { spu . skus [ currentSkuIndex ] . desc } } < / view >
< / view >
< / view >
< / view >
@ -39,19 +41,23 @@
< / view >
< / view >
<!-- 商品SKU 选择弹窗 -- >
<!-- 商品 SKU 选择弹窗 -- >
< u-popup :show = "skuPopup" :round = "10" :closeable = "true" :closeOnClickOverlay = "false" @close ="skuPopup = false" >
< view class = "sku-popup-slot" >
< view class = "current-sku-info" >
< u--image class = "current-sku-img" :showLoading = "true" :src = "product .sku[currentSkuIndex].picUrl" width = "120rpx" height = "120rpx" > < / u--image >
< u--image class = "current-sku-img" :showLoading = "true" :src = "spu .skus [currentSkuIndex].picUrl"
width = "120rpx" height = "120rpx" > < / u--image >
< view class = "current-sku-desc" >
< view class = "name" > { { product . sku [ currentSkuIndex ] . desc } } < / view >
< custom-text-price color = "red" size = "12" intSize = "18" :price = "product.sku[currentSkuIndex].price" > < / custom-text-price >
<!-- TODO @ Sfmind : name 这里的选择规格值的拼接 -- >
< view class = "name" > { { spu . skus [ currentSkuIndex ] . desc } } < / view >
< custom-text-price color = "red" size = "12" intSize = "18" :price = "spu.skus[currentSkuIndex].price" > < / custom-text-price >
< view class = "current-sku-stock" > 库存 : { { 1 } } < / view >
< / view >
< / view >
< view class = "sku-selection" >
< view class = "sku-item" : class = "{ active: currentSkuIndex === index }" v-for = "(item, index) in product.sku" :key="item.id" @click="handleSkuItemClick(index)" > {{ item.desc }} < / view >
<!-- TODO @ Sfmind : name 这里是规格的具体选项 -- >
< view class = "sku-item" : class = "{ active: currentSkuIndex === index }" v-for = "(item, index) in spu.skus"
:key = "item.id" @click ="handleSkuItemClick(index)" > {{ item.desc }} < / view >
< / view >
< view class = "sku-num-box" >
< view class = "text" > 选择数量 < / view >
@ -68,22 +74,6 @@
< / view >
< / u-popup >
< u-gap height = "8" bgColor = "#f3f3f3" > < / u-gap >
< view class = "row-box" >
< view class = "row-left" > 配送 < / view >
< view class = "row-right" >
< view class = "row-content" >
< view class = "delivery-box" >
< view class = "delivery-item" v-for = "(item, index) in deliveryType" :key="item.id" >
< u -icon name = "checkmark-circle" color = "#2979ff" size = "16" > < / u-icon >
< text class = "delivery-name" > { { item . name } } < / text >
< / view >
< / view >
< / view >
< view class = "row-more" > < / view >
< / view >
< / view >
< u-gap height = "8" bgColor = "#f3f3f3" > < / u-gap >
< view class = "row-box" >
< view class = "row-left" > 促销 < / view >
@ -151,6 +141,8 @@
< / view >
< / view >
<!-- TODO @ Sfmind : 缺个商品详情 -- >
< view class = "fixed-btn-box" >
< view class = "btn-group" >
< navigator class = "btn-item" url = "/pages/index/index" open -type = " switchTab " hover -class = " none " >
@ -161,9 +153,10 @@
< u-icon name = "server-man" :size = "24" > < / u-icon >
< view class = "btn-text" > 客服 < / view >
< / navigator >
<!-- TODO @ Sfmind : 改成收藏 -- >
< navigator class = "btn-item" url = "/pages/cart/cart" open -type = " switchTab " hover -class = " none " >
< u-icon name = "bag " :size = "24" > < / u-icon >
< view class = "btn-text" > 购物车 < / view >
< u-icon name = "star " :size = "24" > < / u-icon >
< view class = "btn-text" > 收藏 < / view >
< / navigator >
< view class = "btn-item-main" >
< u-button type = "warning" shape = "circle" size = "small" text = "加入购物车" > < / u-button >
@ -178,7 +171,7 @@
< / template >
< script >
import { productSpu } from '../../api/product' ;
import { getSpuDetail } from '../../api/product' ;
export default {
data ( ) {
@ -187,12 +180,10 @@ export default {
currentNum : 0 ,
currentSkuIndex : 0 ,
skuPopup : false ,
product : {
spu : {
id : '' ,
image s: [ 'https://cdn.uviewui.com/uview/album/1.jpg' , 'https://cdn.uviewui.com/uview/album/2.jpg' , 'https://cdn.uviewui.com/uview/album/3.jpg' ] ,
titl e: '山不在高,有仙则名。水不在深,有龙则灵。斯是陋室,惟吾德馨。 ' ,
desc : '山不在于高,有了神仙就会有名气。水不在于深,有了龙就会有灵气。这是简陋的房子,只是我品德好就感觉不到简陋了。' ,
price : '13.00' ,
picUrl s: [ ] ,
minPric e: '13.00 ' ,
sku : [
{
id : 0 ,
@ -214,16 +205,6 @@ export default {
}
]
} ,
deliveryType : [
{
id : 0 ,
name : '快递配送'
} ,
{
id : 1 ,
name : '到店自提'
}
] ,
promotionPopup : false ,
promotionList : [
{
@ -295,23 +276,21 @@ export default {
}
} ,
onLoad ( e ) {
if ( ! e . productI d) {
if ( ! e . i d) {
uni . $u . toast ( '请求参数错误' )
} else {
this . product . id = e . productId
this . loadProductData ( )
// TODO 请求接口获取商品详情数据
return ;
}
// 加载商品详情
this . spu . id = e . id
this . loadProductData ( )
} ,
methods : {
loadProductData ( ) {
productSpu ( this . product . id ) . then ( res => {
this . product . images = res . data . picUrls ;
this . product . sku = res . data . skus ;
this . product . desc = res . data . description . replace ( /<[^>]*>/g , '' ) ;
this . product . price = res . data . price ;
this . product . title = res . data . name ;
console . log ( res )
getSpuDetail ( this . spu . id ) . then ( res => {
// this.spu.desc = res.data.description.replace(/<[^>]*>/g,'');
// console.log(res)
this . spu = res . data ;
} )
} ,
handleSkuItemClick ( index ) {
@ -382,18 +361,6 @@ export default {
. row - content {
flex : 1 ;
. delivery - box {
@ include flex - left ;
. delivery - item {
margin - right : 20 rpx ;
@ include flex - left ;
font - size : 22 rpx ;
. delivery - name {
margin - left : 5 rpx ;
}
}
}
. prom - box {
@ include flex - left ;
. prom - item {