Files
learning-system-portal/src/views/study/TaskList.vue
2024-06-28 13:30:08 +08:00

382 lines
12 KiB
Vue
Raw 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>
<div>
<!-- <div style="display:flex; padding-left:20px; width:100%">
<div style="width:100px">完成情况</div>
<div class="progress"><div class="msg">课程完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.course" status="warning" class="progressItem"> </el-progress> </div>
<div class="progress" ><div class="msg">项目完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.project" status="success" class="progressItem"> </el-progress> </div>
<div class="progress"><div class="msg">路径图完成情况</div> <el-progress :text-inside="true" :stroke-width="16" :percentage="porcessData.router" class="progressItem"> </el-progress> </div>
</div> -->
<div v-if="isType == 2" class="title">
<div class="item" style="margin-right: 19px;" :class="typeClass == 1?'item1':'item'" @click="learnType(1)">学习项目</div>
<div class="item" :class="typeClass == 2?'item1':'item'" @click="learnType(2)">学习路径</div>
</div>
<div style="display: flex; justify-content: space-between; padding: 12px 32px 10px 22px;">
<div style="display: flex; justify-content: flex-start">
<div>
<el-select class="search-input" v-model="status" clearable placeholder="学习进度">
<el-option label="全部" value=""></el-option>
<el-option label="未开始" value="0"></el-option>
<el-option label="进行中" value="1"></el-option>
<el-option label="已完成" value="2"></el-option>
</el-select>
</div>
<div style="padding-left: 10px"><el-input v-model="params.cmtask_name" clearable placeholder="搜索名称"></el-input></div>
<div class="button-class" style="padding-left: 10px"><el-button type="primary" icon="el-icon-search" @click="search()">搜索</el-button></div>
<div class="button-class" style="padding-left: 10px"><el-button type="primary" icon="el-icon-refresh-right" @click="reset()">重置</el-button></div>
</div>
</div>
<!--课程列表内容-->
<div class="uc-list" v-if="couresList.length > 0">
<div class="uc-course" v-for="(item, idx) in couresList" @click="jumpRouter(item)" :key="idx">
<div class="uc-course-img">
<img :src="item.cmtask_imgurl" />
<span class="spanname" v-if="item.cmtask_type==1">学习路径图</span>
<span class="spanname" v-if="item.cmtask_type==2">学习项目</span>
<!-- 类型3不显示20230307 东吴说已确认的修改 -->
<!-- <span class="spanname" v-if="item.cmtask_type==3">老系统必修任务</span> -->
</div>
<div class="uc-course-info">
<!-- 任务名称 -->
<div class="uc-course-name one-line-ellipsis" style="cursor: pointer">
<span v-if="item.type==10" class="uc-course-type2">录播</span>
<span v-if="item.type==20" class="uc-course-type2">录播</span>
<!-- <a href="/course/detail?id=" target="_blank"> {{item.name}}</a> -->
<span v-html="item.cmtask_name"></span>
</div>
<!-- <div class="uc-course-source" @click="jumpRouter(item)">来源{{ item.cmtask_name }}</div> -->
<div style="padding-top: 18px; " class="uc-course-text">学习进度
<span v-if="item.cmtask_user_status==0">未开始</span>
<span v-if="item.cmtask_user_status==1">进行中</span>
<span v-if="item.cmtask_user_status==2">已完成</span>
</div>
<!-- <div class="uc-course-time">推送时间{{ formatsec(Number(item.updated_at) * 1000 )}}</div> -->
<div class="uc-course-time">推送时间{{ item.created_at}}</div>
</div>
<div class="uc-course-btns">
<el-button @click="jumpRouter(item)" type="primary" size="small">开始学习</el-button>
</div>
</div>
<div style="height:150px; text-align: center; margin-top:57px;" >
<el-pagination background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:current-page="page"
:page-size="size"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</div>
<!-- </div> -->
<div v-else class="zan-wu">
<div v-if="loading">
<span v-if="couresList.length==0">正在加载数据...</span>
<span v-else>查询中...</span>
</div>
<div v-else>
<span v-if="couresList.length==0">没有查询到相关内容</span>
</div>
</div>
</div>
</template>
<script>
import studyItem from '@/components/Course/studyItem.vue';
import apiManage from '@/api/manage/manage.js'
import { getToken } from '@/utils/token'
import {formatsec} from '@/utils/datetime.js'
import axios from 'axios'
export default {
name: 'ucStudyTask',
components: { studyItem },
data() {
return {
status: '',
params:{
cmtask_name:'',
cmtask_status:'',
type:'',
},
porcessData:{
course:0,
project:0,
router:0,
},
loading:true,
size:10,
page:1,
keyword:'',
formatsec,
couresList:[],
total: 0,
isType: null,
typeClass: true,
};
},
watch:{
'$route': {
handler(to, from) {
console.log('type变化了', to.query.type);
this.isType = to.query.type;
this.loadBoeData();
},
immediate: true
}
},
mounted() {
this.loadBoeData();
this.getPossData()
},
methods: {
learnType(item){
this.typeClass = item
this.reset()
},
jumpRouter(item) {
//location.href=`${this.webBaseUrl}/course/boeframe?id=${item.cmtask_id}`;
//let urlPre=window.location.protocol+'//'+window.location.host;
let studentPath=process.env.VUE_APP_STUDENT_PATH;
if(item.cmtask_type==1){ //学习路径图
let params=encodeURIComponent('routerId='+item.cmtask_id);
//this.$router.push('/forward?to='+studentPath+'/pathdetails&params='+params);
this.$router.push('/forward?to='+studentPath+'/pathchapterdetails&params='+params);
}else if(item.cmtask_type==2){ //学习项目
let params=encodeURIComponent('projectId='+item.cmtask_id);
this.$router.push('/forward?to='+studentPath+'/projectdetails&params='+params);
}else if(item.cmtask_type==3){
let pushUrl=`/course/boeframe?id=${item.cmtask_id}&type=3`;
this.$router.push(pushUrl);
}
},
getPossData(){
axios({
method: "POST",
url: '/report/boeu/studyInfo',
params: {},
headers:{token:getToken(),}
}).then((res) => {
console.log('111',res.data.result)
// this.porcessData=response.data.data
this.porcessData.course=Math.floor(res.data.result.course.total === 0 ? 0: (res.data.result.course.completion/res.data.result.course.total)*100)
this.porcessData.project=Math.floor(res.data.result.project.total === 0 ? 0: (res.data.result.project.completion/res.data.result.project.total)*100)
this.porcessData.router=Math.floor(res.data.result.router.total === 0 ? 0: (res.data.result.router.completion/res.data.result.router.total)*100)
})
},
loadBoeData() {
if(this.status !== '5') {
this.params.cmtask_status = this.status;
}
let params={
pageNo:this.page,
pageSize:this.size,
cmtask_user_status:this.params.cmtask_status,
cmtask_name:this.params.cmtask_name,
}
this.loading=true;
if(this.isType == 1){
//领导力必修
apiManage.leadership(params).then(res=>{
if(res.code==200){
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
}).catch(()=>{
this.loading=false;
})
}else if (this.isType == 2){
//定制化学习
if(this.typeClass == 1){
apiManage.customized(params).then(res=>{
if(res.code==200){
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
}).catch(()=>{
this.loading=false;
})
}else{
apiManage.compulsoryList(params).then(res=>{
if(res.code==200){
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
}).catch(()=>{
this.loading=false;
})
}
}else{
apiManage.userTaskList(params).then(res=>{
if(res.code==200){
this.total =parseInt(res.data.total);
this.couresList = res.data.records;
}else{
this.$message.error('查询数据失败:'+res.msg);
}
this.loading=false;
}).catch(()=>{
this.loading=false;
})
}
},
search(){
this.page=1;
this.loadBoeData()
},
reset() {
this.loading=false;
this.params.cmtask_name = '',
this.params.type = '',
this.params.cmtask_status = ''
this.status = '';
this.page=1;
this.loadBoeData();
},
handleSizeChange(value) {
this.size = value;
this.loadBoeData();
},
//改变条数的回调
handleCurrentChange(value) {
this.page = value;
this.loadBoeData();
}
}
};
</script>
<style scoped lang="scss">
.title{
display: flex;
margin-left: 22px;
margin-bottom: 6px;
.item{
width: 100px;
height: 46px;
line-height: 46px;
text-align: center;
font-size: 18px;
color: #666666;
}
.item1{
// border-bottom: #409EFF 4px solid;
position: relative;
&::before {
content: "";
position: absolute;
bottom: 0;
left: 10px;
width: 80px;
border-bottom: 4px solid #409EFF;
}
}
}
.progress{
width:calc((100% - 100px) / 3);
display: flex;
.msg{
width:120px;
}
.progressItem{
margin-left: 20px;
width:calc(100% - 160px);
height: 10px;
}
}
.zan-wu{
text-align: center;
font-size: 20px;
margin-top: 70px;
color: #ccc;
}
.one-line-ellipsis {
display: -webkit-box;
white-space: pre-wrap;
overflow: hidden;
text-overflow:ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
box-sizing: border-box;
}
.button-class{
// height: 42px;
}
.uc-list{
padding-left: 22px;
}
.uc-course-time{
color: #666;
font-size: 14px;
}
.uc-badge {
margin-top: 10px;
margin-right: 40px;
}
.spanname {
position: absolute;
background-color: #6a99a4;
color:#ffffff;
padding: 4px 10px;
font-size: 12px;
bottom: 0px;
z-index: 100;
left: 0px;
}
.uc-course {
cursor: pointer;
display: flex;
justify-content: space-around;
border-bottom: 1px solid #E8E8E8;
margin-right: 32px;
padding: 20px 0px 15px 0px ;
.uc-course-img {
width: 212px;
height: 119px;
position: relative;
img {
width: 100%;
height: 100%;
}
}
.uc-course-info {
// width: 50%;
flex: 1;
line-height: 28px;
padding: 0px 10px;
.uc-course-name {
font-size: 18px;
color: #333;
margin-top: -3px;
font-weight: 700;
}
.uc-course-text {
color: #444;
margin-bottom:3px;
font-size: 16px;
margin-top: 20px;
}
}
.uc-course-btns {
text-align: right;
margin-top: 80px;
width: 100px;
height: 44px;
}
}
</style>