186 lines
4.9 KiB
Vue
186 lines
4.9 KiB
Vue
|
|
<template>
|
|||
|
|
<view>
|
|||
|
|
<Navbar title="学习任务详情" :goTo="'/pages/learningTasks/index'" />
|
|||
|
|
<div class="content">
|
|||
|
|
<div class="title-wrapper">
|
|||
|
|
<div class="title">{{ opt.name }}</div>
|
|||
|
|
<!-- <div class="period">合格标准:{{ standard }}</div> -->
|
|||
|
|
<div class="period">学习期限:{{ opt.learningDate }}</div>
|
|||
|
|
<div class="list-wrapper">
|
|||
|
|
<div
|
|||
|
|
v-for="(item, index) in studyList"
|
|||
|
|
:key="index"
|
|||
|
|
style="max-height: 200px; overflow: auto"
|
|||
|
|
@click="goToDocLeaning(item)"
|
|||
|
|
>
|
|||
|
|
<ListItem :itemData="item" />
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div @click="goToExercise">
|
|||
|
|
<ListItem
|
|||
|
|
v-if="exerciseObj.id"
|
|||
|
|
:itemData="exerciseObj"
|
|||
|
|
background="#F1FFED"
|
|||
|
|
:showProgress="false"
|
|||
|
|
icon="/static/images/imgs/lianxi.png"
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div @click="goToExam">
|
|||
|
|
<ListItem
|
|||
|
|
v-if="examObj.id"
|
|||
|
|
:itemData="examObj"
|
|||
|
|
background="#FDF4F2"
|
|||
|
|
:showProgress="false"
|
|||
|
|
icon="/static/images/imgs/zhihuikaoshi.png"
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div style="height: 30px;"></div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import ListItem from './components/ListItem'
|
|||
|
|
import { getLearningTaskDetail } from '@/api/educationTraining'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
components: { ListItem },
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
opt: {},
|
|||
|
|
// 学习列表
|
|||
|
|
studyList: [],
|
|||
|
|
// 练习
|
|||
|
|
exerciseObj: {},
|
|||
|
|
// 考试
|
|||
|
|
examObj: {}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onShow() {
|
|||
|
|
this.$nextTick(() => {
|
|||
|
|
this.getDetail()
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
onLoad(opt) {
|
|||
|
|
this.opt = JSON.parse(opt.params)
|
|||
|
|
console.log('🚀 ~ onLoad ~ this.opt:', this.opt)
|
|||
|
|
// this.getDetail()
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
// 获取详情
|
|||
|
|
async getDetail() {
|
|||
|
|
this.studyList = []
|
|||
|
|
this.exerciseObj = {}
|
|||
|
|
this.examObj = {}
|
|||
|
|
console.log('🚀 ~ getDetail ~ this.opt:', this.opt)
|
|||
|
|
const res = await getLearningTaskDetail({ studyTaskId: this.opt.id })
|
|||
|
|
console.log('🚀 ~ getDetail ~ res:', res)
|
|||
|
|
this.exerciseObj = {
|
|||
|
|
...res.data.find(item => item.type == '练习'),
|
|||
|
|
title: '练习'
|
|||
|
|
}
|
|||
|
|
this.examObj = {
|
|||
|
|
...res.data.filter(item => item.type == '考试')[0],
|
|||
|
|
title: '考试'
|
|||
|
|
}
|
|||
|
|
console.log('🚀 ~ getDetail ~ this.examObj:', this.examObj)
|
|||
|
|
this.studyList = res.data.filter(item => item.type == '课件')
|
|||
|
|
this.studyList.forEach(item => {
|
|||
|
|
item.filePath = item.filePath.replace(/\\/g, '/')
|
|||
|
|
item.url = item.filePath
|
|||
|
|
// 如果url 是.MP4视频文件 item.title = '视频' 否则 item.title = '文件'
|
|||
|
|
if (item.url.includes('.mp4') || item.url.includes('.MP4')) {
|
|||
|
|
item.title = '视频'
|
|||
|
|
} else {
|
|||
|
|
item.title = '文件'
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
console.log('🚀 ~ getDetail ~ this.studyList:', this.studyList)
|
|||
|
|
},
|
|||
|
|
goToDocLeaning(item) {
|
|||
|
|
console.log('🚀 ~ goToDocLeaning ~ item:', item, this.examObj)
|
|||
|
|
const params = {
|
|||
|
|
taskId: this.opt.id,
|
|||
|
|
coursewareId: item.id,
|
|||
|
|
duration: item.duration || 0,
|
|||
|
|
learningProgress: item.learningProgress || 0,
|
|||
|
|
url: item.url,
|
|||
|
|
studyProgress: item.studyProgress || 0,
|
|||
|
|
taskLength: this.studyList.length,
|
|||
|
|
singId: item.singId,
|
|||
|
|
type: this.examObj?.id ? '' : '1'
|
|||
|
|
}
|
|||
|
|
if (item.title == '视频') {
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: '/pages/learningTasks/videoLearning?params=' + JSON.stringify(params)
|
|||
|
|
})
|
|||
|
|
} else {
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: '/pages/learningTasks/documentLearning?params=' + JSON.stringify(params)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 点击练习
|
|||
|
|
goToExercise() {
|
|||
|
|
console.log('练习', this.exerciseObj)
|
|||
|
|
if (this.exerciseObj.id) {
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: '/pages/myExercise/exercises?params=' + JSON.stringify(this.exerciseObj)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 点击考试
|
|||
|
|
goToExam() {
|
|||
|
|
console.log('考试', this.examObj)
|
|||
|
|
if (Number(this.examObj.score) > Number(this.examObj.passScore)) {
|
|||
|
|
uni.showToast({
|
|||
|
|
title: '已通过考试',
|
|||
|
|
icon: 'none'
|
|||
|
|
})
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
if (this.examObj.id) {
|
|||
|
|
const params = {
|
|||
|
|
...this.examObj,
|
|||
|
|
name: this.examObj.fileName,
|
|||
|
|
isStudyTask: true,
|
|||
|
|
taskId: this.opt.id,
|
|||
|
|
type: this.studyList.length > 0 ? '' : '1'
|
|||
|
|
}
|
|||
|
|
uni.navigateTo({
|
|||
|
|
url: '/pages/myExam/beforeExamExplain?params=' + JSON.stringify(params)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.content {
|
|||
|
|
padding: 0 20px;
|
|||
|
|
line-height: 1.5;
|
|||
|
|
|
|||
|
|
.title {
|
|||
|
|
font-size: 16px;
|
|||
|
|
font-weight: bold;
|
|||
|
|
margin-bottom: 10px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.period {
|
|||
|
|
font-size: 12px;
|
|||
|
|
color: #8a8a8a;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.collapse {
|
|||
|
|
margin-top: 30px;
|
|||
|
|
}
|
|||
|
|
.list-wrapper {
|
|||
|
|
margin: 20px 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|