<template> <view :style="viewColor" class="page-container"> <view class='flash-sale'> <view class='header'> <image mode="widthFix" class="presellBg" :src="`${domain}/static/images/topic_bg.jpg`" alt=""> </view> <view class="main_count"> <block v-if="topicList.length>0"> <navigator v-for="(item,index) in topicList" :key='index' :url="`/pages/activity/topic_detail/index?id=${item.group_data_id}`" hover-class="none"> <view class='list'> <image :src="item.pic" class="picture"></image> </view> </navigator> </block> <block v-else> <view class='empty-box' v-cloak> <image src='../../store/static/images/no-topic.png'></image> <view class="txt">暂无活动专场哦~</view> </view> </block> </view> </view> <home></home> <!-- #ifndef H5 --> <passwordPopup></passwordPopup> <!-- #endif --> </view> </template> <script> // +---------------------------------------------------------------------- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ] // +---------------------------------------------------------------------- // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved. // +---------------------------------------------------------------------- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 // +---------------------------------------------------------------------- // | Author: CRMEB Team <admin@crmeb.com> // +---------------------------------------------------------------------- import { getTopicList } from '../../../api/activity.js'; import home from '@/components/home/index.vue' import emptyPage from '@/components/emptyPage.vue' import { mapGetters } from "vuex"; import { HTTP_REQUEST_URL } from '@/config/app'; // #ifndef H5 import passwordPopup from '@/components/passwordPopup'; // #endif export default { components: { // #ifndef H5 passwordPopup, // #endif home, emptyPage }, computed: mapGetters(['viewColor']), data() { return { domain: HTTP_REQUEST_URL, topicList: [], page: 1, limit: 30, loading: false, loadend: false, pageloading: false, } }, onLoad() { this.getTopicList(); }, methods: { getTopicList: function() { var that = this; var data = { page: that.page, limit: that.limit, }; if (that.loadend) return; if (that.pageloading) return; this.pageloading = true getTopicList(0,data).then(res => { var topicList = res.data; var loadend = topicList.length < that.limit; that.page++; that.topicList = that.topicList.concat(topicList), that.page = that.page; that.pageloading = false; that.loadend = loadend; }).catch(err => { that.pageloading = false }); } }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function() { this.getTopicList(); } } </script> <style lang="scss" scoped> .page-container{ min-height: 100vh; background-color: #ff5348; } .flash-sale{ .header{ width: 100%; position: relative; .presellBg{ width: 750rpx; box-sizing: border-box; } } .main_count{ position: relative; top: -90rpx; background-color: #fff; margin: 0 20rpx; border-radius: 16rpx; padding: 20rpx; .list{ width: 100%; height: 280rpx; margin-bottom: 30rpx; position: relative; .picture{ width: 100%; height: 280rpx; border-radius: 16rpx; } } } .empty-box{ display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 80rpx 0 120rpx 0; image{ width: 414rpx; height: 240rpx; } .txt{ font-size: 26rpx; color: #999; } } } </style>