<template> <view class="container"> <empty v-if="loaded === true && list.length === 0"></empty> <view class="hotgoods"> <view class="hotgoods-item" v-for="item in list" :key="item.id" @click="navToDetailPage(item)"> <view class="image-wrapper"> <image :src="item.image" mode="scaleToFill"></image> </view> <view class="title clamp margin-c-20">{{ item.store_name }}</view> <view class="hot-price"> <view class="price"> <text class="font-size-sm">¥</text> {{ item.price }} </view> </view> </view> </view> <uni-load-more :status="loadingType"></uni-load-more> </view> </template> <script> import empty from '@/components/empty'; import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue'; import { groomList } from '@/api/product.js'; export default { data() { return { list: [], bannerImg: [], type: 1, //1->置换 loadingType: 'more', loaded:false, page: 1, limit:20 }; }, components: { uniLoadMore, empty }, onReachBottom() { this.loadData(); }, onLoad(option) { // 获取查询对象 if (option.type) { this.type = option.type; uni.setNavigationBarTitle({ title: option.type == 1? '置换': (option.type == 4? '随意嗨购':(option.type == 3? '大牌专区': '')) }) } // 加载基础数据 this.loadData(); }, methods: { navTo: function(ls) { uni.navigateTo({ url: '/pages/product/product?id=' + ls.id }); }, // 请求载入数据 async loadData() { let obj = this if(obj.loadingType == 'loading' || obj.loadingType == 'noMore') { return } obj.loadingType = 'loading' groomList({ page: obj.page, limit:obj.limit }, this.type) .then(({ data }) => { // 保存轮播图 obj.bannerImg = data.banner; // 保存商品信息 obj.list = this.list.concat(data.list) obj.loaded = true obj.page++ if(obj.limit == data.list.length) { obj.loadingType = 'more' }else { obj.loadingType = 'noMore' } }) .catch(e => { console.log(e); }); }, // 轮播图跳转 bannerNavToUrl(item) { // #ifdef H5 if (item.wap_link.indexOf('http') > 0) { window.location.href = item.wap_link; } // #endif if (item.wap_link) { uni.navigateTo({ url: item.wap_link }); } }, navToDetailPage(e) { uni.navigateTo({ url: '/pages/product/product?id=' + e.id }) } } }; </script> <style lang="scss"> page { background: $page-color-base; } .carousel-section { padding: 0; .titleNview-placing { padding-top: 0; height: 0; } .swiper-dots { left: 45rpx; bottom: 40rpx; } .carousel { width: 100%; height: 360rpx; .carousel-item { width: 100%; height: 100%; overflow: hidden; } image { width: 100%; height: 100%; } } } // 中间标题样式 .type-title-box { padding: 40rpx; .title-content { height: 100%; width: 200rpx; text-align: center; font-size: $font-lg; font-weight: 500; color: $font-color-dark; } .title-border { width: 250rpx; height: 2rpx; background-color: #e9e9e9; } } // 商品列表 .goodsList-box { .goodsList-item { margin-bottom: 40rpx; background-color: #ffffff; padding: 30rpx; image { flex-shrink: 0; border-radius: $border-radius-sm; height: 180rpx; width: 180rpx; } .goodsList-content { margin-left: 20rpx; flex-grow: 1; height: 180rpx; position: relative; .title { font-size: $font-base; color: $font-color-dark; font-weight: 500; } .goods-money { position: absolute; left: 0; bottom: 0; width: 100%; .money-box { .money { font-size: $font-lg; color: $color-red; font-weight: bold; } .otMoney-box { font-size: $font-sm; .otMoney { color: $font-color-dark; padding-right: 20rpx; } .sales { color: $font-color-light; } } } .cart { border: 1px solid $color-red; color: $color-red; font-size: $font-base; font-weight: bold; border-radius: 99px; width: 55rpx; height: 55rpx; display: flex; justify-content: center; align-items: center; } } } } } .hotgoods { margin-top: 38rpx; width: 100%; display: flex; flex-wrap: wrap; padding: 0 32rpx; .hotgoods-item { width: 48%; background-color: #ffffff; border-radius: 12rpx; margin-bottom: 24rpx; &:nth-child(2n + 1) { margin-right: 24rpx; } .image-wrapper { width: 100%; height: 330rpx; // background: red; border-radius: 3px; overflow: hidden; image { width: 100%; height: 100%; opacity: 1; border-radius: 12rpx 12rpx 0 0; } } .title { font-size: $font-base; color: $font-color-dark; font-weight: bold; line-height: 80rpx; } .hot-price { display: flex; justify-content: space-between; padding: 0 16rpx 12rpx; .price { font-size: 36rpx; font-weight: bold; color: #FD3B39; } .cart-icon { image { width: 44rpx; height: 44rpx; } } } } } </style>