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