<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="index" class="class-card" @click="goToMyClass(site)"> <view class="class-content" slot="head" style="padding-top: 10px;"> <view class="student-name">{{site.studentName}}</view> <view class="class-name">{{site.name}}</view> </view> <view class="class-content" slot="body"> <view class="class-info-text"> <u-icon name="clock"></u-icon> {{site.classStartDate}} {{site.classStartHours}} {{site.residue}}课时 </view> <view class="class-info-text"> <u-icon name="map"></u-icon> {{site.address}} </view> </view> <view class="class-content" slot="foot" style="padding-bottom: 10px;text-align: right;"> <u-button type="default" shape="circle" :ripple="true" :custom-style="handleDefaultCustomStyle" size="mini" :hair-line="false" plain @click.stop="goToLeave(site)">请假</u-button> <u-button type="warning" shape="circle" :ripple="true" :custom-style="handleCustomStyle" size="mini" @click.stop="goToEvaluate(site)">评价</u-button> </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: [], }], current: 0, swiperCurrent: 0, } }, onLoad() { this.getTableList(0) this.getTableList(1) this.getTableList(2) }, 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() { 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.getMyClassList, { status: index == 0 ? 1 : (index == 1 ? 0 : 2), page: this.tabList[index].pageIndex, size: 10, }, 'POST').then(res => { this.triggered = false this.tabList[index].tableList = this.tabList[index].tableList.concat(res.data.list) this.tabList[index].isOver = res.data.list.length != 10 }).catch(error => { this.triggered = false this.$refs.uTips.show({ title: error.data.msg, type: 'warning', }) }) }, // 跳转请假界面 goToLeave(site) { uni.navigateTo({ url: '/pagesMember/leaveForm?id=' + site.id }); }, // 跳转评价表单 goToEvaluate(site) { uni.navigateTo({ url: '/pagesMember/evaluateForm?id=' + site.id }); }, // 跳转课程详情 goToMyClass(site) { uni.navigateTo({ url: '/pagesMember/myClassDetail?id=' + site.id }); } }, } </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; u-button { margin-left: 10px; } } .student-name { height: 20px; display: inline-block; padding: 0 10px; margin-right: 5px; background-color: $mainColor; border-radius: 10px; line-height: 20px; color: #FFFFFF; } .class-name { height: 20px; display: inline-block; font-weight: bold; font-size: 14px; line-height: 20px; } .class-info-text { color: #999999; margin-bottom: 5px; /deep/.u-icon { margin-right: 5px; font-size: 14px; color: #000000; } } } } } } } </style>