<template> <view class="content"> <u-tabs-swiper ref="uTabs" :active-color="mainColor" :list="tabList" :current="current" @change="tabsChange" :is-scroll="false"></u-tabs-swiper> <swiper :current="swiperCurrent" @transition="transition" @animationfinish="animationfinish" class="swiper-box"> <swiper-item class="swiper-item" v-for="(item, index1) in tabList" :key="index1"> <scroll-view scroll-y class="scroll-box" @scrolltolower="handleLoadMore" :refresher-enabled="true" :refresher-triggered="triggered" :refresher-threshold="100" refresher-background="white" @refresherrefresh="onRefresh" @refresherrestore="onRestore"> <u-card :head-border-bottom="false" :foot-border-top="false" padding="0px" margin="10px" borderRadius="40" v-for="(site, index2) in item.tableList" :key="index2" class="class-card" @click="goToMyClass(site)"> <view class="class-content" slot="head" style="padding-top: 10px; display: flex; justify-content: space-between;"> <view class="student-name">{{site.studentName}}</view> <view class="class-date">{{site.time}}</view> </view> <view class="class-content" slot="body"> <view class="class-info-text">{{site.content}}</view> </view> </u-card> <u-divider v-if="item.isOver" bg-color="transparent">没有更多了</u-divider> </scroll-view> </swiper-item> </swiper> <u-top-tips ref="uTips"></u-top-tips> </view> </template> <script> import { mapGetters } from 'vuex' const NET = require('@/utils/request') const API = require('@/config/api') export default { computed: { ...mapGetters([ 'mainColor', 'handleCustomStyle', 'handleDefaultCustomStyle', ]) }, data() { return { triggered: false, tabList: [{ name: '全部', isOver: false, pageIndex: 1, tableList: [], }, { name: '请假', isOver: false, pageIndex: 1, tableList: [], }, { name: '续费', isOver: false, pageIndex: 1, tableList: [], }, { name: '签到', isOver: false, pageIndex: 1, tableList: [], }], current: 0, swiperCurrent: 0, } }, onLoad() { this.getTableList(0) this.getTableList(1) this.getTableList(2) this.getTableList(3) }, onReady() {}, methods: { // tab页面切换 tabsChange(index) { this.swiperCurrent = index; }, // swiper-item左右移动,通知tabs的滑块跟随移动 transition(e) { let dx = e.detail.dx; this.$refs.uTabs.setDx(dx); }, // swiper滑动结束,分别设置tabs和swiper的状态 animationfinish(e) { let current = e.detail.current; this.$refs.uTabs.setFinishCurrent(current); this.swiperCurrent = current; this.current = current; }, // 下拉刷新 onRefresh() { if (!this.triggered) { this.triggered = true this.tabList[this.current].isOver = false this.tabList[this.current].pageIndex = 1 this.tabList[this.current].tableList = [] this.getTableList(this.current, 'refresh') } }, // 重置下拉刷新状态 onRestore() { this.triggered = 'restore' this.triggered = false }, // 懒加载 handleLoadMore() { if (!this.tabList[this.current].isOver) { this.tabList[this.current].pageIndex++ this.getTableList(this.current) } }, // 获取列表数据 getTableList(index, refresh) { NET.request(API.getMessageList, { type: index, page: this.tabList[index].pageIndex, size: 10, }, 'POST').then(res => { this.triggered = false this.tabList[index].tableList = this.tabList[index].tableList.concat(res.data.row) this.tabList[index].isOver = res.data.row.length != 10 }).catch(error => { this.triggered = false this.$refs.uTips.show({ title: error.message, type: 'warning', }) }) } }, } </script> <style> page { width: 100%; height: 100%; background-color: #f7f7f7; } </style> <style lang="scss" scoped> @import "@/static/css/themes.scss"; .content { width: 100%; float: left; .swiper-box { height: calc(100vh - 34px); .swiper-item { height: calc(100vh - 34px); .scroll-box { width: 100%; height: calc(100vh - 34px); .class-card { .class-content { padding: 5px 15px; } .student-name { height: 20px; display: inline-block; font-weight: bold; font-size: 14px; line-height: 20px; } .class-date { height: 20px; display: inline-block; font-size: 14px; line-height: 20px; color: #999999; } .class-info-text { margin-bottom: 5px; font-size: 14px; } } } } } } </style>