GSExamProj/pages/eduPage/eduPage.vue

253 lines
6.3 KiB
Vue
Raw Normal View History

2024-04-18 11:01:57 +08:00
<template>
<view>
<view class="nav-bar"></view>
<view class="upper-info">
<h4>{{ upperData.title }}</h4>
<h4>发起人{{ upperData.user }}</h4>
<h4 style="font-size: 14px;">学习期限{{ upperData.startTime + ' ~ ' + upperData.endTime }}</h4>
</view>
<view class="lower-material">
<h4>线上学习</h4>
<view>
<view
class="single-video"
v-for="(video, videoIndex) in lowerVideo"
:key="videoIndex"
@click="jumpVideoPage(video.materialsPath, noticeId, video.id, video.compRate, video.watchLong, video.materialsDuration)"
>
<view class="single-lef">
<view class="single-lef-top">
<image src="../../static/video.png" mode=""></image>
视频
<span>{{ video.formatDuration }}</span>
</view>
<view class="single-lef-bot">
{{ video.materialsName }}
</view>
</view>
<view class="single-rig">
<u-line-progress :percentage="video.compRate" activeColor="#64A3D8"></u-line-progress>
</view>
</view>
</view>
<view>
<view
class="single-file"
v-for="(file, fileIndex) in lowerFile"
:key="fileIndex"
@click="jumpPdfPage(file.materialsPath, file.id)"
>
<view class="single-lef">
<view class="single-lef-top">
<image src="../../static/file.png" mode=""></image>
{{ file.materialsPath.split('.')[file.materialsPath.split('.').length - 1] }}文件
<span>{{ file.materialsDuration }}</span>
</view>
<view class="single-lef-bot">
{{ file.materialsName }}
</view>
</view>
<view class="single-rig">
<u-line-progress :percentage="file.compRate" activeColor="#64A3D8"></u-line-progress>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { publicPath } from '../../public';
export default {
data() {
return {
upperData: {
title: '',
user: '',
startTime: '',
endTime: ''
},
noticeId: '',
lowerVideo: [],
lowerFile: [],
}
},
methods: {
jumpVideoPage (url, noticeId, materialsId, compRate, watchLong, duration) {
uni.navigateTo({
url: `/pages/videoPage/videoPage?url=${url}&noticeId=${noticeId}&materialsId=${materialsId}&compRate=${compRate}&watchLong=${watchLong}&duration=${duration}`
})
},
jumpPdfPage (pdfUrl, id) {
uni.navigateTo({
url: `/pages/pdfPage/pdfPage?pdfUrl=${pdfUrl}&id=${id}`
})
},
// 转换时分秒
formatHms (time) {
const h = parseInt(time / 3600)
const minute = parseInt(time / 60 % 60)
const second = Math.ceil(time % 60)
const hours = h < 10 ? '0' + h : h
const formatSecond = second > 59 ? 59 : second
return `${hours > 0 ? `${hours}` : ''}${minute < 10 ? '0' + `${minute}` : `${minute}`}${formatSecond < 10 ? '0' + `${formatSecond}` : `${formatSecond}`}`
}
},
onLoad(params) {
console.log(params);
this.noticeId = params.noticeId
},
onShow() {
let that = this
that.lowerFile = []
that.lowerVideo = []
// 获取培训页面数据
uni.request({
url: publicPath + '/backstage/app/getNoticeTrainData',
method: 'POST',
header: {
'content-type':'application/x-www-form-urlencoded; charset=UTF-8'
},
data: {
userId: uni.getStorageSync('id'),
id: this.noticeId
},
success: (res) => {
console.log(res);
if (res.data.code == 200) {
let data = res.data.data
that.upperData.title = data.noticeTheme
that.upperData.user = data.userName
that.upperData.startTime = data.startTime
that.upperData.endTime = data.endTime
for (let i = 0; i < data.materialsList.length; i++) {
data.materialsList[i].formatDuration = that.formatHms(Math.round(data.materialsList[i].materialsDuration * 60))
console.log(data.materialsList[i].materialsPath.split('.')[data.materialsList[i].materialsPath.split('.').length - 1]);
if (data.materialsList[i].materialsPath.split('.')[data.materialsList[i].materialsPath.split('.').length - 1] == 'mp4' || data.materialsList[i].materialsPath.split('.')[data.materialsList[i].materialsPath.split('.').length - 1] == 'MP4') {
that.lowerVideo.push(data.materialsList[i])
} else {
that.lowerFile.push(data.materialsList[i])
}
}
console.log(that.lowerFile, that.lowerVideo);
}
}
})
}
}
</script>
<style lang="scss" scoped>
body{
background-color: #F3F4F5;
}
.nav-bar{
width: 100%;
height: var(--status-bar-height);
padding-top: var(--status-bar-height);
}
.upper-info{
width: 100%;
box-sizing: border-box;
padding: 25rpx;
background-color: #fff;
h4{
font-weight: normal;
margin-bottom: 10rpx;
}
h4:first-child{
font-weight: bold;
}
}
.lower-material{
width: 100%;
box-sizing: border-box;
padding: 25rpx;
background-color: #fff;
margin-top: 15rpx;
h4{
font-weight: normal;
margin-bottom: 25rpx;
}
view{
.single-video, .single-file{
width: 100%;
height: 150rpx;
box-sizing: border-box;
padding: 15rpx 30rpx;
background-color: #F7F8FA;
display: flex;
margin-bottom: 20rpx;
.single-lef{
width: 75%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-around;
.single-lef-top{
width: 100%;
display: flex;
font-size: 12px;
image{
width: 6%;
height: 100%;
margin-right: 10rpx;
}
span{
padding-left: 15rpx;
}
}
.single-lef-bot{
width: 100%;
font-size: 14px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.single-rig{
flex: 1;
display: flex;
justify-content: center;
align-items: center;
}
}
}
}
// .bottom{
// width: 100%;
// height: 100rpx;
// position: fixed;
// background-color: #fff;
// left: 0;
// bottom: 0;
// display: flex;
// justify-content: right;
// .lef{
// width: 50%;
// height: 100%;
// }
// .rig{
// font-size: 14px;
// flex: 1;
// display: flex;
// justify-content: space-around;
// align-items: center;
// button{
// background-color: #007AFB;
// color: #fff;
// font-size: 14px;
// }
// uni-button{
// line-height: 2;
// }
// }
// }
.video-pop{
width: 600rpx;
height: 700rpx;
background-color: #fff;
}
</style>