From f591c27b57e2418c9495bc02ae8cfff84d35bc18 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期二, 16 七月 2024 16:27:56 +0800 Subject: [PATCH] init --- pages/tabBar/firstPage/firstPage.vue | 473 +++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 314 insertions(+), 159 deletions(-) diff --git a/pages/tabBar/firstPage/firstPage.vue b/pages/tabBar/firstPage/firstPage.vue index 9be04d7..4fc9317 100644 --- a/pages/tabBar/firstPage/firstPage.vue +++ b/pages/tabBar/firstPage/firstPage.vue @@ -7,66 +7,73 @@ <!-- 真正的导航栏内容 --> <view class="navBar"> <view class="barText">首页</view> - <view > - <u-button type="text" @click="loginOut" style="color: #1890ff;margin-right: 5px;width: 65px;">退出</u-button> - </view> +<!-- <view >--> +<!-- <u-button type="text" @click="loginOut" style="color: #1890ff;margin-right: 5px;width: 65px;">退出</u-button>--> +<!-- </view>--> </view> </view> - <view class="list"> - <view class="first" @click="goExamine" v-if="role == '审核领导'"> - <view class="badge"> - <u-badge type="error" :absolute="true" :offset="[90 + statusBarHeight ,65]" max="99" :value="examineNum" style="line-height: 40px;font-size: 14px;width: 30px;height: 40px;"> - </u-badge> - </view> - <view class="text">预警审核</view> - <view class="eng">WARNING REVIEW</view> - <view class="icon"> - <view class="heng"></view> - <image src="../../../static/examine.png" class="img"></image> - </view> - </view> - <view class="first" - @click="goCurrent" - style="background-color:rgb(255, 160, 235) ;" - > - <view class="text">信息查看</view> - <view class="eng">INFORMATION VIEWING</view> - <view class="icon"> - <view class="heng"></view> - <image src="../../../static/look.png" class="img"></image> - </view> - </view> - <view class="first" - style="background-color: rgb(112,179, 224);" - @click="goWeather" - > - <view class="text">实时气象</view> - <view class="eng">RWAL TIME WEATHER</view> - <view class="icon"> - <view class="heng"></view> - <image src="../../../static/we.png" class="img"></image> - </view> - </view> - <view class="first" - style="background-color: rgb(134, 204, 170) ;margin-bottom: 35px;" - @click="goCount" - > - <view class="text">统计分析</view> - <view class="eng">STATISTIC ANALYSIS</view> - <view class="icon"> - <view class="heng"></view> - <image src="../../../static/count1.png" class="img"></image> - </view> - </view> - - </view> - <tabBar :currentPagePath="page"></tabBar> + <view style="width: 100%;padding: 0 15px;box-sizing: border-box;margin: 20px 0"> + <u-swiper :list="swiperList"></u-swiper> + </view> + <view class="m-p-15"> + <view class="card" style="width:100%"> + <view class="card-t"> + <span class="card-t-l">我的线上课程</span> + <span class="card-t-r" @click="toCourses">查看全部</span> + </view> + <view class="card-c"> + <view class="card-i" v-for="(item,index) in classList" :key="index"> + <u-image radius="16px" width="200rpx" height="200rpx" :show-loading="true" :src="getImageUrl(item.course.logo)" mode="aspectFill"> + </u-image> + <!-- <view class="card-i-t">目前已学:{{item.totalProgress}}分钟</view>--> + <view class="card-i-r"> + <view class="card-i-r-t"> + <view>{{item.phaseName + '-' + item.course.name}}</view> + <span style="color: #999;font-size: 12px;display: flex;align-items: center"><u-icon name="account" color="#999" size="18" style="margin-bottom: 0;margin-right: 2px"></u-icon>{{item.createName +'('+ item.createTime +')'}}</span> + </view> + <view class="card-i-r-b"> + <u-tag icon="clock" :text="item.course.period + '分钟'" type="success" size="mini" shape="circle" plain plainFill></u-tag> + <u-button class="study-button" type="primary" text="开始学习" shape="circle" size="small" @click="toStudy(item.id)"></u-button> + </view> + </view> + </view> + </view> + </view> + </view> + <view class="m-p-15"> + <view class="card" style="width:100%"> + <view class="card-t"> + <span class="card-t-l">我的考试</span> + </view> + <view class="card-c card-d"> + <scroll-view scroll-y="true" class="scroll-Y" @scrolltoupper="upper" + @scrolltolower="lower" lower-threshold="150" @scroll="scrollView" style="height:350px"> + <view class="paper-card" v-for="(item,index) in examList" :key="index"> + <view class="paper-card-t"><span :class="item.completed == 1?'green':'red'">[{{item.completed == 1?'已完成':'未完成'}}]</span>{{item.examPaper.name}}</view> + <view style="color: #999;margin-bottom: 15px;font-size: 12px">{{item.examPaper.code}}</view> + <view class="paper-card-b"> + <view style="display: flex;align-items: center"> + <u-tag style="margin-right: 20rpx" :text="item.examPaper.categoryName" size="mini"></u-tag> + <u-tag :text="item.createName" plain plainFill size="mini"></u-tag> + </view> + <view> + <u-button v-if="item.completed == 0" @click="toExam(item,1)" class="exam-button" type="primary" text="开始考试" shape="circle" size="small"></u-button> + <u-button v-if="item.completed == 1" @click="toExam(item,2)" class="exam-button" type="primary" text="查看" shape="circle" size="small"></u-button> + </view> + </view> + </view> + </scroll-view> + </view> + </view> + </view> + <tabBar :currentPagePath="page"></tabBar> </view> </template> <script> import tabBar from '../tabBarIndex.vue' - import {getExamine} from '../../../api/examine.js' + import {getClassList, getExamList, getSwiperList} from '../../../api/index.js' + import VUE_APP_BASE_URL from 'common/constant.js' import { Value } from 'sass'; export default { components:{ @@ -74,25 +81,28 @@ }, data() { return { + swiperList: [ + '/static/home/swiperPic.png','/static/home/swiperPic.png','/static/home/swiperPic.png' + ], titleList:[ { label: '默认排序', value: 1, } ], + classList: [], + examList: [], + totalPage: 0, page: 'pages/tabBar/firstPage/firstPage', statusBarHeight: '', - leaderType: 'da', - examineNum: 0, - data: { - pageIndex: 1, - pageSize: 9999, - searchParams: { - emergType: null,//1-紧急;2-常规 - warningLevel: null,//1-红色预警;2-橙色预警;3-黄色预警;4-蓝色预警 - reviewStatus: null//1:未审核,2:已审核,3:审核已驳回 - } - }, + classParams:{ + pageNum: 1, + pageSize: 3, + }, + examParams: { + pageNum: 1, + pageSize: 10, + }, role: '', realname:'' } @@ -101,16 +111,19 @@ onLoad() { //获取手机状态栏高度 this.statusBarHeight = uni.getSystemInfoSync()['statusBarHeight']; - uni.hideTabBar(); - this.realname = uni - - + // uni.hideTabBar(); + this.examList = [] + this.classParams.pageNum = 1 + this.examParams.pageNum = 1 + this.getSwiper() + this.getClass() + this.getExamList() }, onShow(){ - this.role = uni.getStorageSync('roleName'); - this.realname = uni.getStorageSync('user').realName - console.log("role",uni.getStorageSync('user')) - this.getNum(); + // this.role = uni.getStorageSync('roleName'); + // this.realname = uni.getStorageSync('user').realName + // this.tabBarLists = uni.getStorageSync('tabBarList'); + }, methods: { loginOut() { @@ -120,46 +133,95 @@ url: '/pages/index/index' }) }, - getNum(){ - this.data.searchParams.reviewStatus = 1; - getExamine(this.data).then(res => { - if(res.code == 100) { - if(res.data && res.data.length > 0){ - this.examineNum = res.data.length; + + async getSwiper(){ + const res = await getSwiperList() + if(res.code == 200){ + let list = res.data.list || [] + if(list.length>0){ + this.swiperList = list.map(i=>VUE_APP_BASE_URL + '/api/' + i.imgUrl) + } + }else{ + uni.$u.toast(res.message) + } + }, + + getClass(){ + getClassList(this.classParams).then(res => { + if(res.code == 200) { + if(res.data && res.data.list.length > 0){ + this.classList = res.data.list }else { - this.examineNum = 0; + this.classList = [] } }else{ - uni.$u.toast(res.msg) + uni.$u.toast(res.message) } }) }, - goExamine() { - uni.switchTab({ - url: '/pages/tabBar/examine/examine' - }) - }, - goCurrent() { - uni.switchTab({ - url: '/pages/tabBar/current/current' - }) - }, - goCount() { - uni.switchTab({ - url: '/pages/tabBar/count/count' - }) - }, - goWeather(){ - uni.switchTab({ - url: '/pages/tabBar/weather/weather' - }) - } + getExamList(){ + getExamList(this.examParams).then(res => { + if(res.code == 200) { + let list = res.data.list?res.data.list: []; + if (res.pageNum != 1) { + this.examList = this.examList.concat(list) + } else { + this.examList = res.data.list + } + this.totalPage = res.data.totalPage + }else{ + uni.$u.toast(res.message) + } + }) + }, + + getImageUrl(logo) { + return logo ? VUE_APP_BASE_URL + '/api/' + logo : '/static/defaultCover.jpg'; + }, + + toStudy(id) { + uni.setStorageSync("prevPage", '/pages/tabBar/firstPage/firstPage'); + uni.navigateTo({ + url: `/pages/tabBar/current/detail?phase_id=` + encodeURIComponent(JSON.stringify(id)) + }) + }, + + toExam(item,type){ + uni.setStorageSync("prevPage", '/pages/tabBar/firstPage/firstPage'); + uni.navigateTo({ + url: `/pages/tabBar/firstPage/exam?bank=` + encodeURIComponent(JSON.stringify(item)) + `&type=` + encodeURIComponent(JSON.stringify(type)) + }) + }, + + upper(e) { + // console.log(e) + }, + lower(e) { + //并且让页码+1,调用获取数据的方法获取第二页数据 + this.examParams.pageNum++ + //此处调用自己获取数据列表的方法 + if (this.examParams.pageNum > this.totalPage){ + uni.$u.toast('已加载全部数据') + return + } + this.getExamList() + }, + scrollView(e) { + // console.log(e) + }, + + toCourses(){ + uni.switchTab({ + url: '/pages/tabBar/current/current' + }) + }, + } } </script> -<style> +<style lang="scss"> .navBarBox .navBar { background-color:#fff; height: 50px; @@ -167,7 +229,7 @@ flex-direction: row; justify-content: center; align-items: center; - box-shadow: 0 3px 12px rgba(0,0,0,0.05); + box-shadow: 0 3px 12px rgba(0,0,0,0.05); } .fix{ @@ -178,72 +240,165 @@ width: 100%; z-index: 1; } +.barText{ + /* text-align: center; */ + font-size: 16px; + font-weight: 600; + flex: 2; + margin-left: 45%; +} .statusBar{ background-color:lightgrey; } -.list{ - margin: 12px 12px 0; - padding: 12px; +.m-p-15{ + width: 100%; box-sizing: border-box; - display: flex; - flex-direction: column; - justify-content: space-between; - width: calc(100% - 24px); - background: #fff; - border-radius: 5px; - box-shadow: 0 3px 12px rgba(0,0,0,0.05); - + padding: 0 15px; } -.first{ - width: 100%; - height: 110px; - border-radius: 15px; - background-color: rgb(241,161,108); - border: 1px solid lightgrey; - - margin-top: 40px; - -} -.text{ - font-size: 18px; - padding-top: 15px; - padding-left: 15px; - color: #faf9f4; - font-family: '宋体'; - font-weight: 600; -} -.eng{ - font-size: 14px; - padding-left: 15px; - color: rgba(250,249,244,0.5); -} -.icon{ - display: flex; - align-items: baseline; - justify-content: space-between; -} -.barText{ - /* text-align: center; */ - font-size: 16px; - font-weight: 600; - flex: 2; - margin-left: 45%; -} -.img{ - width: 45px; - height: 45px; - margin-right: 16px; - margin-bottom: 5px; +.card{ + width: 100%; + margin-bottom: 40rpx; + .card-t{ + width: 100%; + padding: 0 6rpx; + box-sizing: border-box; + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20rpx; + + .card-t-l{ + font-size: 32rpx; + font-weight: bold; + } + .card-t-r{ + color: #999; + cursor: pointer; + } + } + + .card-c{ + background: #fff; + border-radius: 16px; + padding: 15px; + + .card-i{ + padding-bottom: 15px; + margin-bottom: 15px; + border-bottom: 1px solid #f0f0f0; + position: relative; + display: flex; + align-items: flex-start; + box-sizing: border-box; + + &:last-of-type{ + margin-bottom: 0; + padding-bottom: 0; + border-bottom: none; + } + .card-i-t{ + position: absolute; + width: 250rpx; + height: 30px; + border-radius: 8rpx; + line-height: 30px; + color: #fff; + padding: 0 10rpx; + box-sizing: border-box; + left: 0; + bottom: 0; + background: rgba(0,0,0,.4); + } + .card-i-r{ + width: 100%; + height: 200rpx; + margin-left: 20rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + .card-i-r-t{ + view{ + font-size: 32rpx; + margin-bottom: 10rpx; + font-family: "PingFang SC"; + font-weight: 800; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + } + .card-i-r-b{ + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + + .study-button{ + width: 240rpx; + margin: 0; + box-shadow: 3px 3px 12px rgba(51,133,217,.3), -2px -2px 6px #fff; + border: 1px solid rgba(255,255,255,.8); + } + } + } + } + } + .card-d{ + background: none; + padding: 0; + .paper-card{ + background: #fff; + margin-bottom: 15px; + padding: 15px; + box-sizing: border-box; + position: relative; + border-radius: 16px; + + &:last-of-type{ + margin-bottom: 0; + } + + .paper-card-t{ + font-size: 32rpx; + margin-bottom: 10rpx; + font-family: "PingFang SC"; + font-weight: 800; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + .green{ + font-size: 28rpx; + color: #5ac725 + } + .red{ + font-size: 28rpx; + color: #f56c6c + } + } + + .paper-card-b{ + display: flex; + align-items: center; + justify-content: space-between; + + .exam-button{ + width: 240rpx; + margin: 0; + box-shadow: 3px 3px 12px rgba(51,133,217,.3), -2px -2px 6px #fff; + border: 1px solid rgba(255,255,255,.8); + } + } + } + } } + .badge span{ text-align: center; width: 100%; } -.heng{ - width: 30px; - height: 3px; - background-color: rgba(230,230,230,0.5); - margin-left: 15px; -} + </style> \ No newline at end of file -- Gitblit v1.9.2