categoryShow.vue 8.45 KB
<template>
  <view class="goodRecommend">
    <!-- 骨架屏 -->
    <view class="product-list">
      <view class="product-list-box" >
        <view class="product-list-item-warp" v-for="(item,index) in productList" :key="index">
          <view class="product-list-item" v-if="JSON.stringify(item)!=='{}'">
            <view class="product-list-img" @click="jumpProductDetail(item)">
              <img v-show="item.image" class="img" :src="item.image">
            </view>
            <view class="product-list-info u-skeleton-fillet">
              <view class="product-name">{{item.productName}}</view>
              <view class="flex">
                <view class="shop-box" @click.stop="jumpStore(item)">
                  <view class="shop-name" @click="jumpProductDetail(item)">{{item.shopName}}</view>
                  <view class="shop-logo">
                    <img :src="$baseURL+item.shopLogo">
                  </view>
                </view>
                <view class="buy-count">{{item.users?item.users: 0}}人付款</view>
              </view>
              <div class="price-warp">
                <!-- #ifdef MP-WEIXIN -->
                <img class="iconImg" v-if="item.activityType == 1" src="../canvasShow/static/images/groupBuyIcon.png">
                <img class="iconImg" v-if="item.activityType == 2" src="../canvasShow/static/images/spikeIcon.png">
                <img class="iconImg" v-if="item.activityType == 4" src="../canvasShow/static/images/spikeIcon.png">
                <img class="iconImg" v-if="item.activityType == 3" src="../canvasShow/static/images/discountListIcon.png">
                <img class="iconImg" v-if="item.activityType == 5" src="../canvasShow/static/images/discountListIcon.png">
                <img class="iconImg" v-if="item.activityType == 8" src="../canvasShow/static/images/memberCenterIcon.png">
                <!-- #endif -->
                <!-- #ifdef H5 || APP-PLUS -->
                <image class="iconImg" v-if="item.activityType == 1" src="../canvasShow/static/images/groupBuyIcon.png"></image>
                <image class="iconImg" v-if="item.activityType == 2" src="../canvasShow/static/images/spikeIcon.png"></image>
                <image class="iconImg" v-if="item.activityType == 4" src="../canvasShow/static/images/spikeIcon.png"></image>
                <image class="iconImg" v-if="item.activityType == 3" src="../canvasShow/static/images/discountListIcon.png"></image>
                <image class="iconImg" v-if="item.activityType == 5" src="../canvasShow/static/images/discountListIcon.png"></image>
                <image class="iconImg" v-if="item.activityType == 8" src="../canvasShow/static/images/memberCenterIcon.png"></image>
                <!-- #endif -->
                <div class="price">
                  ¥ {{item.price}}
                </div>
                <div class="original-price">
                  ¥ {{item.originalPrice}}
                </div>
              </div>
            </view>
          </view>
          <view class="product-list-item ske-loading" v-else>
            <view class="product-list-img child-loading">
              <img v-show="item.image" class="img" :src="item.image">
            </view>
            <view class="product-list-info">
              <view class="product-name child-loading" style="border-radius: 5rpx; margin-top: 10rpx;width: 100%;padding: 20rpx 0"></view>
              <view class="product-name child-loading" style="border-radius: 5rpx; margin-top: 10rpx;width: 100%;padding: 20rpx 0"></view>
            </view>
          </view>

        </view>
      </view>
    </view>
    <view v-if="ifShow" class="emptyCart-box flex-items-plus flex-column">
        <image class="emptyCart-img" src="https://zhgw-uat.028wlkj.com/cdwlMall/zsfwzxt/file/static/img//bgnull.png" mode="widthFix" />
        <label class="font-color-999 fs26 mar-top-30">这里空空如也~</label>
    </view>
  </view>
</template>

<script>
const NET = require('@/utils/request')
const API = require('@/config/api')
export default {
name: "categoryShow",
  props: {
    categoryid: {
      type: Number,
      default: 0
    }
  },
  data () {
    return {
      activeTab: 0,
      page:1,
      pageSize:10,
      total: 0,
      productList: [],
      ifShow: false
    }
  },
  mounted () {
    this.productList = [{},{},{},{},{},{},{},{}]
    this.getData();
  },
  methods:{
    getData(){
      console.log('加载了getData')
      // uni.showLoading({
      //   mask: true,
      //   title:'加载中...'
      // })
      if (this.total!=0&&this.productList.length>=this.total){
        console.log("加载完了")
        return
      }
      NET.request(API.getProducts, {
        classifyId: this.categoryid,
        page:this.page,
        pageSize:this.pageSize
      }, 'GET').then(res => {
        this.productList = [...this.productList,...res.data.list]
        this.productList = this.productList.filter(item=>JSON.stringify(item)!=='{}')
        this.total = res.data.total
        uni.hideLoading()
        if (this.productList.length ===0) {
          this.ifShow = true
        }

      }).catch(res => {
        uni.hideLoading()
      })
    },
    // 跳转到店铺主页
    jumpStore(item){
      uni.navigateTo({
        url: `/pages_category_page1/store/index?storeId=${item.shopId}`
      })
    },
    // 跳转到商品详情
    jumpProductDetail(item){
      uni.navigateTo({
        url: '/pages_category_page1/goodsModule/goodsDetails?shopId=' + item.shopId + '&productId=' + item.productId + '&skuId=' + item
            .skuId
      })
    }
  },
  watch: {
    'categoryid': {
      handler(newVal, oldVal) {
        this.ifShow = false
        this.getData()
      },
      deep: true
    }
  },
}
</script>

<style lang="scss" scoped>
.goodRecommend {
  padding-top: 20rpx;
  .product-list {
    position: relative;
    padding: 0 13upx;
    width: 100%;
    //min-height: 60vh;
    &-box {
      display: flex;
      flex-wrap: wrap;
      flex-direction: row;
      &.swiper{
        height: 620upx;
      }
    }
    &.product-swiper .product-list-box{
      padding-left: 0;
    }
    &-item-warp{
      margin: 0 0 20upx 0;
    }
    &-item {
      width: 348upx;
      padding: 0 7upx;
      box-sizing: content-box;
    }


    &-img {
      width: 348upx;
      height: 348upx;
      background-color: #d0d0d0;
      border-radius: 10upx 10upx 0 0;
      .img {
        width: 100%;
        height: 100%;
        object-fit: contain;
      }
    }
    &-info {
      background-color: #FFFFFF;
      //box-shadow: 0px 0px 15px 0px rgba(52, 52, 52, 0.15);
      border-radius: 0 0 10upx 10upx;
      padding: 20upx;
      label{
        font-weight: normal;
      }
      .product-name{
        font-size: 28upx;
        color: #333;
        display: block;
        overflow: hidden;
        text-overflow:ellipsis;
        white-space: nowrap;
        margin-bottom: 18upx;
        line-height: 40upx;
      }
      .flex{
        display: flex;
        align-items: center;
      }
      .shop-box{
        background-color: #39be7a;
        border-radius: 20upx;
        line-height: 40upx;
        display: flex;
        align-items: center;
        height: 40upx;
        margin-right: 10upx;
        float: left;
        .shop-name{
          font-size: 20upx;
          color: #fff;
          padding: 0 8upx 0 12upx;
          line-height: 40upx;
          display: inline-block;
          float: left;
          max-width: 170rpx;
          white-space: nowrap;
          overflow:hidden;
          text-overflow:ellipsis;
        }
        .shop-logo{
          border: 2upx solid #fff;
          border-radius: 50%;
          overflow: hidden;
          float: right;
          img{
            width: 34upx;
            height: 34upx;
            display: block;
          }
        }
      }
      .buy-count{
        color: #39be7a;
        font-size: 20upx;
        border: 2upx solid #E4E5E6;
        line-height: 36upx;
        padding: 0 5upx;
      }
      .price-warp{
        display: flex;
        align-items: baseline;
        line-height: 56upx;
        .iconImg {
          width: 58rpx;
          height: 36rpx;
          margin-right: 10rpx;
        }
        .price{
          color: #C83732;
          font-size: 40upx;
          margin-right: 20upx;
        }
        .original-price{
          font-size: 24upx;
          color: #ccc;
          text-decoration: line-through;
        }
      }
    }
  }
  .emptyCart-box {
    margin-top: 70rpx;
    .emptyCart-img {
      width: 216rpx;
      height: 156rpx;
    }
  }
}

</style>