123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <template>
- <div class="quality-recommend">
- <div class="slider-banner swiper">
- <view class="swiper">
- <swiper indicator-dots="true" :autoplay="autoplay" :circular="circular" :interval="interval" :duration="duration"
- indicator-color="rgba(255,255,255,0.6)" indicator-active-color="#fff">
- <block v-for="(item,index) in imgUrls" :key="index">
- <swiper-item>
- <image :src="item.pic" class="slide-image"></image>
- </swiper-item>
- </block>
- </swiper>
- </view>
- </div>
- <div class="title acea-row row-center-wrapper">
- <div class="line"></div>
- <div class="name">
- <span class="iconfont" :class="icon"></span>{{ name }}
- </div>
- <div class="line"></div>
- </div>
- <view class="wrapper">
- <GoodList :bastList="goodsList" :is-sort="false" />
- <view class="txt-bar" v-if="goodsList.length>0 && !isScroll">我是有底线的~</view>
- <emptyPage v-if="goodsList.length === 0 && !isScroll" title="暂无数据~"></emptyPage>
- </view>
- </div>
- </template>
- <script>
- import emptyPage from '@/components/emptyPage.vue'
- import GoodList from "@/components/goodList";
- import * as ProductSpuApi from '@/api/product/spu.js';
- import * as PromotionActivityApi from '@/api/promotion/activity.js';
- import * as ProductUtil from '@/utils/product.js';
- export default {
- name: "HotNewGoods",
- components: {
- GoodList,
- emptyPage,
- },
- props: {},
- data: function() {
- return {
- imgUrls: [], // TODO @芋艿:没想好,读取哪里的 banner
- goodsList: [],
- name: "",
- icon: "",
- type: 0,
- autoplay: true,
- circular: true,
- interval: 3000,
- duration: 500,
- recommendType: '',
- page: 1,
- limit: 8,
- isScroll: true
- };
- },
- onLoad: function(option) {
- this.type = option.type
- this.titleInfo();
- this.getIndexGroomList();
- },
- methods: {
- titleInfo: function() {
- if (this.type === "1") {
- this.name = "精品推荐";
- this.icon = "icon-jingpintuijian";
- uni.setNavigationBarTitle({
- title:"精品推荐"
- })
- this.recommendType = 'best';
- } else if (this.type === "2") {
- this.name = "热门榜单";
- this.icon = "icon-remen";
- uni.setNavigationBarTitle({
- title:"热门榜单"
- })
- this.recommendType = 'hot';
- } else if (this.type === "3") {
- this.name = "首发新品";
- this.icon = "icon-xinpin";
- uni.setNavigationBarTitle({
- title:"首发新品"
- })
- this.recommendType = 'new';
- } else if (this.type === "4") {
- this.name = "促销单品";
- this.icon = "icon-xinpin";
- uni.setNavigationBarTitle({
- title:"促销单品"
- })
- this.recommendType = 'benefit';
- }
- },
- /**
- * 获得推荐商品列表
- */
- getIndexGroomList: function() {
- if(!this.isScroll) {
- return
- }
- ProductSpuApi.getSpuPage({
- recommendType: this.recommendType,
- pageNo: this.page,
- pageSize: this.limit
- }).then(res => {
- const good_list = res.data.list;
- this.isScroll = good_list.length >= this.limit
- this.page++
- // 设置营销活动
- const spuIds = good_list.map(item => item.id);
- if (spuIds.length > 0) {
- PromotionActivityApi.getActivityListBySpuIds(spuIds).then(res => {
- ProductUtil.setActivityList(good_list, res.data);
- this.goodsList = this.goodsList.concat(good_list); // 放在此处,避免 Vue 监控不到数组里的元素变化
- });
- }
- }).catch(res => {
- this.$util.Tips({ title: res });
- });
- }
- },
- onReachBottom() {
- this.getIndexGroomList()
- }
- };
- </script>
- <style lang="scss">
- /deep/ .empty-box{
- background-color: #f5f5f5;
- }
- .swiper,swiper,swiper-item,.slide-image{
- width: 100%;
- height: 280rpx;
- }
- .quality-recommend {
- .wrapper{
- background: #fff;
- }
- .title {
- height: 120rpx;
- font-size:32rpx;
- color: #282828;
- background-color: #f5f5f5;
- .line{
- width: 230rpx;
- height: 2rpx;
- background-color: #e9e9e9;
- }
- }
- }
- .txt-bar{
- padding: 20rpx 0;
- text-align: center;
- font-size: 26rpx;
- color: #666;
- background-color: #f5f5f5;
- }
- </style>
|