WeiXin.ZhiXueHuiCha.MiniPro.../pages/examData/index.vue

431 lines
9.4 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page-bg">
<Navigation :title_name="'教育中心'" :isReturn="3" :color="'#000000'" :bgc="'#FFFFFF'" :isCenter="true" />
<view class="ech" v-if="person.studentList[person.studentActive]">
<CurrItem v-if="person.studentList[person.studentActive]" :datas="person.studentList[person.studentActive]"
@changeStu="getChangeStu" :isChange="true" :listLength="person.studentList.length"
:bgIndex="person.studentActive" />
<view class="ech-list">
<view class="time-logo">
<view class="time-reserve" @tap="reverseSort">排序:按时间 <view class="time-icon"
:class="showTimeIcon?'dowm-time-icon':'up-time-icon'"></view>
</view>
</view>
<scroll-view @scrolltolower="lowerBottom" @refresherrefresh="getFresh" scroll-y="true"
class="scrollHeight">
<template v-if="person.data.list&&person.data.list.length>0">
<view class="ech-item" v-for="(rep,repIndex) in person.data.list" :key="repIndex">
<view class="ech-item-type"
:class="[rep.ExamType==='周考'?'ech-type-blue':rep.ExamType==='月考'?'ech-type-green':rep.ExamType==='期中'?'ech-type-purple':'ech-type-purple']">
{{rep.ExamType}}
</view>
<view class="left">
<view class="item-tit">{{rep.Name}}</view>
<view class="time">时间{{rep.Time}}</view>
</view>
<view class="right" @click="lookReport(rep,repIndex)">查看<br />报告</view>
</view>
<view class="more_text" v-if="person.showMoreData">没有数据了...</view>
</template>
<template v-else>
<view class="empty_box">
<image src="@/static/null_icon.png" mode=""></image>
<text>暂无数据~</text>
</view>
</template>
</scroll-view>
</view>
</view>
<view v-else class="empty_box">
<image src="@/static/null_icon.png" mode=""></image>
<text>暂无数据~</text>
</view>
<Popups :isShow="showChangeStudent" :bgColor="'#fff'">
<view class="dio-card">
<view class="stu-item" :class="[person.studentActive===stuIndex?'active-bg':'']"
v-for="(stu,stuIndex) in person.studentList" :key="stuIndex"
@click.stop="studentChange(stu,stuIndex)">
<image src="https://minio.23544.com:9010/data-center/gzh/Avatar.png" mode=""></image>
<view class="stu-name">{{stu.RealName}}</view>
</view>
</view>
</Popups>
</view>
</template>
<script setup>
import {
ref,
reactive
} from "vue";
import {
onLoad,
onShow
} from "@dcloudio/uni-app";
import Popups from "@/components/popups/index.vue";
import CurrItem from "@/components/currItem/index.vue";
import Navigation from '@/components/navigation/index.vue'
import {
getChangeStudent,
getBindStudentList,
getUserReportList
} from "@/api/exam-data";
import {
getUserInfo,
postRegister
} from "@/api/user";
let person = reactive({
showMoreData: false,
// 学生列表
studentActive: 0,
studentList: [],
// 报告列表
data: {
list: [],
pageIndex: 1,
pageSize: 10,
total: 0
}
})
// 刷新页面加载
onShow(() => {
person.data.pageIndex=1
person.data.list=[]
uni.pageScrollTo({
scrollTop: 0
});
GetBindStudentList()
if (person.data.pageIndex * person.data.pageSize >= person.data.total) return person.showMoreData = true
})
//点击时间排序的互动
const showTimeIcon = ref(false)
const reverseSort = () => {
showTimeIcon.value = !showTimeIcon.value
if (person.data.list && person.data.list.length > 0) {
if (showTimeIcon.value) {
// 降序
person.data.list = person.data.list.sort(dateData("Time", true))
} else {
// 升序
person.data.list = person.data.list.sort(dateData("Time", false))
}
}
}
// 时间排序
const dateData = (property, bol) => {
return function(a, b) {
let value1 = a[property];
let value2 = b[property];
if (bol) {
// 升序
return Date.parse(value1) - Date.parse(value2);
} else {
// 降序
return Date.parse(value2) - Date.parse(value1)
}
}
}
//关于弹窗出现和关闭
const showChangeStudent = ref(false)
const getChangeStu = () => {
showChangeStudent.value = !showChangeStudent.value
}
// 学生切换
const studentChange = (item, index) => {
person.studentActive = index
showChangeStudent.value = false
if (showChangeStudent.value === false) {
person.data.pageIndex = 1
person.data.list = []
person.data.total = 0
GetChangeStudent(item.Id)
}
}
//跳转查看报告
const lookReport = (item, index) => {
uni.navigateTo({
url: '/pages/examReport/index?examId=' + item.ExamId
})
}
//触底加载
const lowerBottom = () => {
// 判断是否还有下一页数据
if (person.data.pageIndex * person.data.pageSize >= person.data.total) return person.showMoreData = true
// 让页码值自增 +1
person.data.pageIndex += 1
// 重新获取列表数据
// 调接口
GetUserReportList()
}
// 下拉刷新
const getFresh = () => {}
// 获取切换学生
const GetChangeStudent = (Id) => {
getChangeStudent({
studentId: Id
}).then(res => {
let {
Code,
Data
} = res
if (Code === 200 && Data) {
GetUserReportList()
}
})
}
// 获取绑定的学生列表
const GetBindStudentList = () => {
getBindStudentList().then(res => {
let {
Code,
Data,
Message
} = res
if (Code === 200 && Data) {
person.studentList = Data
if (person.studentList && person.studentList.length > 0) {
GetChangeStudent(person.studentList[person.studentActive].Id)
}
} else {
uni.showToast({
title: Message,
icon: 'none'
})
}
})
}
// 获取学生报告列表
const GetUserReportList = () => {
let obj = {
PageIndex: person.data.pageIndex,
PageSize: person.data.pageSize
}
getUserReportList(obj).then(res => {
let {
Code,
Data,
Message
} = res
if (Code === 200 && Data) {
setTimeout(() => {}, 200)
person.data.list = [...person.data.list, ...Data.Data]
person.data.total = Data.Total
} else {
uni.showToast({
title: Message,
icon: 'none'
})
}
})
}
</script>
<style lang="scss" scoped>
.page-bg {
height: calc(100vh - 4rpx);
overflow: hidden;
}
// 上拉分页
.scrollHeight {
height: calc(100vh - 550rpx);
.more_text {
margin: 20rpx 0;
color: #999;
font-size: 24rpx;
text-align: center;
}
}
.ech {
width: 100vw;
padding: 10px 20px 0 20px;
box-sizing: border-box;
position: relative;
}
.ech-card {
position: absolute;
z-index: 10;
}
.ech-list {
border-radius: 0 0 10px 10px;
background: #FFF;
box-shadow: 0px 3px 7px 0px rgba(0, 0, 0, 0.15);
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: center;
padding-bottom: 20px;
margin-top: -15px;
.ech-item {
margin: 0 auto 10px auto;
width: 303px;
border-radius: 6px;
background: linear-gradient(180deg, rgba(228, 233, 255, 0.74) 0%, rgba(255, 255, 255, 0.49) 29.69%, rgba(128, 151, 255, 0.67) 100%);
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 20px 10px 20px 10px;
position: relative;
.ech-item-type {
position: absolute;
top: 0;
left: 0;
padding: 2px 20px;
border-radius: 6px 0 10px 0;
font-size: 12px;
font-weight: 600;
}
.ech-type-blue {
color: #4F6FFF;
background: #E3E8FF;
}
.ech-type-green {
color: #00B6DE;
background: #C0F4FF;
}
.ech-type-purple {
color: #9361FF;
background: #E8DEFE;
}
.left {
width: 78%;
.item-tit {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
color: #5B5B5B;
font-size: 15px;
font-weight: 600;
letter-spacing: 0.78px;
}
.time {
margin-top: 7px;
height: 20px;
color: #5E5E5E !important;
font-size: 12px;
letter-spacing: 0.6px;
}
}
}
}
.time-logo {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
margin: 10px 0;
.time-reserve {
margin-right: 20px;
height: 15px;
line-height: 15px;
color: #777;
font-size: 12px;
font-style: normal;
font-weight: 400;
line-height: normal;
letter-spacing: 0.6px;
display: flex;
align-items: center;
.time-icon {
margin-left: 5px;
width: 14px;
height: 14px;
background-size: 100% 100%;
}
}
}
.dowm-time-icon {
background: url('@/static/education/reverse.png');
}
.up-time-icon {
background: url('@/static/education/reverse_up.png');
}
.right {
width: 50px;
height: 54px;
background: #fff;
border-radius: 5px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #6B86FF;
font-family: PingFang SC;
font-size: 12px;
font-style: normal;
font-weight: 500;
line-height: normal;
letter-spacing: 0.72px;
}
.dio-card {
width: 202px;
height: 100%;
overflow: auto;
max-height: 250px;
&::-webkit-scrollbar {
display: none;
}
.stu-item {
width: 100%;
height: 91px;
border-radius: 8px;
margin-bottom: 10px;
display: flex;
align-items: center;
justify-content: center;
background: #EFEFEF;
color: #0D0A0A;
image {
width: 68px;
height: 68px;
border-radius: 50%;
}
.stu-name {
margin-left: 20px;
font-size: 16px;
letter-spacing: 0.9px;
width: 30%;
text-align: left;
}
}
.active-bg {
color: #FFF;
background: #6B86FF;
}
}
</style>