Compare commits
99 Commits
250219-pre
...
250324-bug
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0989360183 | ||
|
|
5e31f7d1a8 | ||
|
|
eaa7f04cd6 | ||
|
|
0d7a2ad353 | ||
|
|
9d9d663591 | ||
|
|
90b53a54b2 | ||
|
|
b89a8266e5 | ||
|
|
49137387f6 | ||
|
|
812c09d65c | ||
|
|
57a87db016 | ||
|
|
2536fca503 | ||
|
|
047b1f9bae | ||
|
|
7162d329ee | ||
|
|
d7d80e8244 | ||
|
|
af208d0a6d | ||
|
|
713f258c14 | ||
|
|
def3892edc | ||
|
|
51a8da4bdb | ||
|
|
6536e36857 | ||
|
|
1bf9398177 | ||
|
|
a5333952c9 | ||
|
|
127f191776 | ||
|
|
e9b9a14b69 | ||
|
|
11a1065df9 | ||
|
|
001452fa2e | ||
|
|
988a7a1e17 | ||
|
|
7fed1a3991 | ||
|
|
5448a9724d | ||
|
|
23928a0865 | ||
|
|
797c08d8fc | ||
|
|
a8d44d0169 | ||
|
|
567bed812b | ||
|
|
2e0fe475f2 | ||
|
|
04ecf6a971 | ||
|
|
5381416a05 | ||
|
|
216141dbd3 | ||
|
|
1dad88c59b | ||
|
|
0f3c53cb31 | ||
|
|
1f4416e9b1 | ||
|
|
2ffe9c1872 | ||
|
|
e74f14baa0 | ||
|
|
aa0fcf6ff0 | ||
|
|
9fba452d2d | ||
|
|
d33e27b3d0 | ||
|
|
3d3f2ebc6e | ||
|
|
b679502553 | ||
|
|
d027a4c56a | ||
|
|
c6b2c46311 | ||
|
|
181892de67 | ||
|
|
a2809f5347 | ||
|
|
609902aeb8 | ||
|
|
6399aa3352 | ||
|
|
23ffd002a7 | ||
|
|
96e0c0fb70 | ||
|
|
6382f6b04d | ||
|
|
4d783ce94d | ||
|
|
b686a9e2a2 | ||
|
|
b52ad264da | ||
|
|
511b3179f6 | ||
|
|
cc48f52fea | ||
|
|
5f230a6543 | ||
|
|
a78f6a0152 | ||
|
|
7c20a11687 | ||
|
|
5b5d73c905 | ||
|
|
09f06b1679 | ||
|
|
c0562c41c0 | ||
|
|
24a34fa779 | ||
|
|
1843c9e6aa | ||
|
|
ca25bd9d76 | ||
|
|
091c09204f | ||
|
|
31be7b053e | ||
|
|
178431e7df | ||
|
|
efbf778d80 | ||
|
|
14fdadcec3 | ||
|
|
33feddbe3a | ||
|
|
7756c28679 | ||
|
|
bb45487264 | ||
|
|
df77e5c7dc | ||
|
|
b22dc4539a | ||
|
|
db024ebc2a | ||
|
|
5e7580a936 | ||
|
|
00d272c3d0 | ||
|
|
398bbc675b | ||
|
|
d0a6807d2c | ||
|
|
f01283f530 | ||
|
|
b9ec8ed534 | ||
|
|
5f9da5cf03 | ||
|
|
1b3064f2ab | ||
|
|
24be910b83 | ||
|
|
6153daa98a | ||
|
|
4d0cae9346 | ||
|
|
67f2ff3e86 | ||
|
|
3588ef3e67 | ||
|
|
7fab8bb062 | ||
|
|
977af999a3 | ||
|
|
cc0362380e | ||
|
|
83838b2c1a | ||
|
|
f98fda4f78 | ||
|
|
6b6e8a4096 |
@@ -16,9 +16,9 @@
|
||||
<meta name="referrer" content="strict-origin-when-cross-origin"/>
|
||||
<link rel="icon" href="<%= BASE_URL %>logo/favicon.ico">
|
||||
<title>京东方大学堂</title>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
// if(window.top != window.self){
|
||||
// window.top.location=window.self.location;
|
||||
// }
|
||||
|
||||
@@ -62,7 +62,7 @@ const courseRecordList = function(data) {
|
||||
return ajax.postJson('/b1/system/teacher/teacher-course-list',data);
|
||||
}
|
||||
const getListByToken = function(data) {
|
||||
return ajax2.get('/manageApi',`/admin/teacherRecord/getListByToken?courseName=${data.courseName}&pageNo=${data.page}&pageSize=${data.pageSize}`);
|
||||
return ajax2.get('/manageApi',`/admin/teacherRecord/getListByToken?courseName=${data.courseName}&page=${data.page}&pageSize=${data.pageSize}`);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
import ajax from "@/api/ajax"
|
||||
//获取详情
|
||||
export const getList = (params) => ajax.get('/manageApi',`/stu/grow/getStuLearnInfo?userId=${params}`);
|
||||
//获取路径图详情
|
||||
export const taskList = (params) => ajax.get('/manageApi',`/stu/grow/taskList?growId=${params}`);
|
||||
//全岗位路径
|
||||
export const getFullJobPath = (params) => ajax.get('/manageApi',`/stu/grow/getFullJobPath`);
|
||||
//外部考试
|
||||
export const queryExternalExam = (params) => ajax.get('/manageApi',`/external/exam/queryExternalExam?externalId=${params.externalId}&type=14`);
|
||||
//外部考试点击调用
|
||||
export const submitExternalExam = (params) => ajax.postJson('/manageApi',`/stu/externalExam/submitExternalExam`,params);
|
||||
@@ -20,25 +20,7 @@ const getTaskNum = function(){
|
||||
const userTaskList = function(data){
|
||||
return ajax.postJson(baseURL,'/todoTask/queryTodoTaskDetail',data);
|
||||
}
|
||||
//已读
|
||||
const userRead = function(data){
|
||||
return ajax.postJson(baseURL,'/todoTask/read',data);
|
||||
}
|
||||
//查询未读数量
|
||||
const queryTaskCounts = function(obj){
|
||||
return ajax.postJson(baseURL,'/todoTask/queryTaskCounts',obj);
|
||||
}
|
||||
//领导力必修
|
||||
const leadership = function(data){
|
||||
return ajax.postJson(baseURL,'/todoTask/leadership',data);
|
||||
}
|
||||
//定制化学习 1.学习项目 2.学习路径
|
||||
const customized = function(data){
|
||||
return ajax.postJson(baseURL,'/todoTask/customized',data);
|
||||
}
|
||||
const compulsoryList = function(data){
|
||||
return ajax.postJson(baseURL,'/todoTask/compulsoryList',data);
|
||||
}
|
||||
|
||||
/**删除学习,取消报名*/
|
||||
const userDeleteStudy = function(data){
|
||||
return ajax.postJson(baseURL,'/stu/project/stuCancelEnrollment',data);
|
||||
@@ -55,11 +37,6 @@ const userRsSginupCourse = function(data){
|
||||
export default {
|
||||
getTaskNum,
|
||||
userTaskList,
|
||||
leadership,
|
||||
customized,
|
||||
compulsoryList,
|
||||
userDeleteStudy,
|
||||
userRsSginupCourse,
|
||||
queryTaskCounts,
|
||||
userRead
|
||||
userRsSginupCourse
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* 下载课件,一期是直接在新的窗口打开文件的地址就可以了。不采用流的方式下载
|
||||
*/
|
||||
import ajax from '@/utils/xajax.js'
|
||||
import ajax2 from '@/utils/xajax2.js'
|
||||
|
||||
/**
|
||||
* 分页查询,课件的管理列表
|
||||
@@ -50,9 +49,6 @@ const findList = function(data) {
|
||||
const saveUpload = function(data) {
|
||||
return ajax.post('/xboe/m/course/file/upload/save', data);
|
||||
}
|
||||
const saveUpload2 = function(data) {
|
||||
return ajax2.post('/xboe/m/course/file/upload/save', data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量更新,上传时,一个一个上传,下面的列表的保存,使用此方法
|
||||
@@ -89,7 +85,6 @@ const detail = function(id) {
|
||||
export default {
|
||||
pageList,
|
||||
saveUpload,
|
||||
saveUpload2,
|
||||
batchUpdate,
|
||||
detail,
|
||||
delFile
|
||||
|
||||
|
Before Width: | Height: | Size: 470 B |
|
Before Width: | Height: | Size: 442 B |
|
Before Width: | Height: | Size: 422 B |
|
Before Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 649 B |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 360 B |
|
Before Width: | Height: | Size: 280 B |
|
Before Width: | Height: | Size: 503 B |
|
Before Width: | Height: | Size: 625 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 586 B |
|
Before Width: | Height: | Size: 818 B |
|
Before Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -25,7 +25,7 @@
|
||||
<el-table-column label="创建时间" prop="sysCreateTime" width="100"></el-table-column>
|
||||
<el-table-column label="选择" width="70" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" @click="chooseCourseFile(scope.row,false)" type="primary">选择</el-button>
|
||||
<el-button size="mini" @click="chooseCourseFile(scope.row)" type="primary">选择</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -43,34 +43,23 @@
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="'上传新'+curComType.name">
|
||||
<div v-if="!courseFile.id||resType==10||resType==20">
|
||||
<div v-if="!courseFile.id">
|
||||
<div v-if="resType>20" style="padding-bottom: 10px;">
|
||||
<span style="font-weight: 700;">内容时长(分):</span>
|
||||
<span>
|
||||
<el-input-number v-model="duration" size="mini" :min="1" :max="100"></el-input-number>
|
||||
</span>
|
||||
</div>
|
||||
<el-upload class="upload-demo" :limit="1" :on-exceed="handleExceed" :on-remove="handleDelete" :headers="headers" :data="data" drag :action="uploadFileUrl" :on-success="handleUploadSuccess" :before-upload="handleBeforeUpload">
|
||||
<el-upload class="upload-demo" :headers="headers" :data="data" drag :action="uploadFileUrl" :on-success="handleUploadSuccess" :before-upload="handleBeforeUpload">
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">文件大小限制:{{curComType.maxSizeName}},支持的文件类型:{{curComType.fileTypes.join(',')}}</div>
|
||||
</el-upload>
|
||||
<div v-if="courseFile.id&&resType==10||resType==20" class="video_audio_info">
|
||||
<div class="info_item">
|
||||
<div class="item_text">名称:</div>
|
||||
<el-input v-model="courseFile.fileName" size="mini" style="width:300px;" placeholder="请输入名称"></el-input>
|
||||
</div>
|
||||
<div class="info_item">
|
||||
<div class="item_text">时长:</div>
|
||||
<el-input-number style="width:260px;" v-model="courseFile.duration" :precision="0" size="mini" :min="1" :max="999999999" placeholder="请输入时长" controls-position="right"></el-input-number>
|
||||
<div style="margin-left: 10px;">分钟</div>
|
||||
</div>
|
||||
<div class="btn"><el-button @click="chooseCourseFile(courseFile,true)" type="primary" size="mini">确定</el-button></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else style="text-align: center;">
|
||||
<div style="padding: 20px;">{{courseFile.fileName}} <span style="color: green;">上传成功</span></div>
|
||||
<div><el-button @click="chooseCourseFile(courseFile,true)" type="primary" size="mini">确定</el-button></div>
|
||||
<div><el-button @click="chooseCourseFile(courseFile)" type="primary" size="mini">确定</el-button></div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
@@ -101,7 +90,6 @@
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
courseWare: {},
|
||||
uploadFileUrl: process.env.VUE_APP_BASE_API + "/xboe/sys/xuploader/file/upload", // 上传的图片服务器地址
|
||||
data:{
|
||||
dir:'course'
|
||||
@@ -130,7 +118,6 @@
|
||||
},
|
||||
mounted() {
|
||||
this.courseFile={};
|
||||
this.courseWare = {};
|
||||
let $this=this;
|
||||
this.comTypes.some(ct=>{
|
||||
if(ct.resType==$this.resType){
|
||||
@@ -152,9 +139,6 @@
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
handleExceed(){
|
||||
this.$message({message:`只允许一次性上传一个`,type:'error',offset:100})
|
||||
},
|
||||
handleBeforeUpload(file) {
|
||||
if(file.name.lastIndexOf(".") ==-1) {
|
||||
this.$message({message:`文件格式不正确!`,type:'error',offset:100})
|
||||
@@ -188,28 +172,21 @@
|
||||
},
|
||||
// 上传成功回调
|
||||
handleUploadSuccess(res, file) {
|
||||
// console.log(res,file,'xixixixiix');
|
||||
//console.log(res);
|
||||
if(res.status == 200) {
|
||||
//上传到课件库
|
||||
//console.log(res.result);
|
||||
this.courseWare={
|
||||
let courseWare={
|
||||
fileName:res.result.displayName,
|
||||
fileType:res.result.fileType,
|
||||
filePath:res.result.filePath,
|
||||
resType:this.resType,
|
||||
orgId:this.orgId,
|
||||
orgName:this.orgName,
|
||||
duration:res.result.duration||this.duration,
|
||||
duration:this.duration,
|
||||
remark:'课程中直接上传'
|
||||
}
|
||||
this.$message({message:"上传成功",type:'success',offset:100});
|
||||
this.courseFile = {
|
||||
id: res.result.filePath,
|
||||
fileName:res.result.displayName.replace(/\.[^/.]+$/, ""),
|
||||
duration:res.result.duration,
|
||||
}
|
||||
return
|
||||
apiCourseFile.saveUpload(this.courseWare).then(rs=>{
|
||||
apiCourseFile.saveUpload(courseWare).then(rs=>{
|
||||
if(rs.status==200){
|
||||
this.courseFile=rs.result;
|
||||
this.$message({message:"上传成功",type:'success',offset:100});
|
||||
@@ -228,8 +205,7 @@
|
||||
},
|
||||
// 删除文件
|
||||
handleDelete(index) {
|
||||
this.courseFile = {};
|
||||
// this.fileList.splice(index, 1);
|
||||
this.fileList.splice(index, 1);
|
||||
//注意删除处理
|
||||
//this.$emit("remove", '');
|
||||
},
|
||||
@@ -272,33 +248,7 @@
|
||||
})
|
||||
|
||||
},
|
||||
chooseCourseFile(ccfile,isUpload){
|
||||
if(isUpload){
|
||||
if(this.resType == 10||this.resType == 20){
|
||||
if(!this.courseFile.fileName){
|
||||
this.$message({message:`${this.resType == 10?'视频':'音频'}名称不能为空`,type:'error',offset:100});
|
||||
return
|
||||
}
|
||||
if(!this.courseFile.duration){
|
||||
this.$message({message:"时长不能为空",type:'error',offset:100});
|
||||
return
|
||||
}
|
||||
this.courseWare.fileName = this.courseFile.fileName + '.' + this.courseWare.fileType
|
||||
this.courseWare.duration = this.courseFile.duration
|
||||
}
|
||||
apiCourseFile.saveUpload(this.courseWare).then(rs=>{
|
||||
if(rs.status==200){
|
||||
this.courseFile=rs.result;
|
||||
this.$message({message:"保存成功",type:'success',offset:100});
|
||||
this.$emit('choose', this.courseFile);
|
||||
}else{
|
||||
this.$message.error(rs.message);
|
||||
}
|
||||
}).catch(err=>{
|
||||
this.$message.error(err.message);
|
||||
})
|
||||
return
|
||||
}
|
||||
chooseCourseFile(ccfile){
|
||||
this.$emit('choose', ccfile);
|
||||
}
|
||||
}
|
||||
@@ -306,24 +256,4 @@
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.video_audio_info{
|
||||
margin-top: 10px;
|
||||
.info_item{
|
||||
width: 360px;
|
||||
margin-top: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.el-input-number .el-input__inner{
|
||||
text-align: left;
|
||||
}
|
||||
.item_text{
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
.btn{
|
||||
margin-top: 10px;
|
||||
width: 360px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1328,7 +1328,6 @@ export default {
|
||||
pass = false;
|
||||
}
|
||||
} else if(this.curContent.contentType == 10 || this.curContent.contentType == 20) {// 视频
|
||||
courseware.curriculumData.duration = Number((courseware.curriculumData.duration*60).toFixed(0));
|
||||
if(this.curContent.content !== JSON.stringify(courseware.curriculumData)) {
|
||||
pass = false;
|
||||
}
|
||||
|
||||
@@ -327,8 +327,10 @@ export default {
|
||||
},
|
||||
startTest(){
|
||||
apiExamPaper.newPaperContent(this.info.id).then(res=>{
|
||||
if(res.error == ''&&res.result != ''){
|
||||
if(!res.error&&res.result != ''){
|
||||
if(this.info.paperType==2){
|
||||
//TODO1
|
||||
console.log("调用开始考试 if paperType == 2")
|
||||
this.examPaper.json=res.result;
|
||||
let qitems=this.convertToItems(this.examPaper.json);
|
||||
this.paper ={items:qitems};
|
||||
@@ -336,9 +338,11 @@ export default {
|
||||
this.curItem=qitems[this.curIndex];
|
||||
this.startTime=new Date();//记录开始时间
|
||||
this.timerValue=this.info.testDuration;
|
||||
this.content.status=1;
|
||||
this.timer=setInterval(this.changeTimer,60000);
|
||||
this.testStart=true;
|
||||
}else{
|
||||
console.log("调用开始考试 else paperType != 2")
|
||||
let paper= {items:res.result};
|
||||
paper.items.forEach(item=>{
|
||||
if(item.type==101){
|
||||
@@ -571,7 +575,7 @@ export default {
|
||||
randomMode:this.info.randomMode,
|
||||
score:testScore,
|
||||
paperJson:JSON.stringify(this.paper),//原来是对象,这里要也要对象
|
||||
//startTime:formatDate(this.startTime),//此时间需要格式化,格式化时间可以放在util中
|
||||
startTime:formatDate(this.startTime),//此时间需要格式化,格式化时间可以放在util中
|
||||
//endTime:formatDate(now),
|
||||
}
|
||||
//计划考试的时长
|
||||
@@ -582,8 +586,15 @@ export default {
|
||||
apiStudy.saveExam(postData).then(res=>{
|
||||
this.thisTrue = true
|
||||
if(res.status == 200) {
|
||||
console.log("获取数据结果 考试 res ==>",res)
|
||||
this.records.push(res.result);
|
||||
this.content.status=9;//表已学习完,判断上级的章是否已完成
|
||||
//TODO 评分更改 最终完成
|
||||
if(res.result.score > res.result.passLine){
|
||||
this.content.status=9;//表已学习完,判断上级的章是否已完成
|
||||
}else{
|
||||
this.content.status=1;
|
||||
}
|
||||
|
||||
this.studyItemId=res.result.studyItemId;//第一次保存时是没有的,所以这里要赋值
|
||||
this.$alert('您本次考试得分:'+this.lastScore, '考试成绩', {
|
||||
confirmButtonText: '确定',
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
:show-file-list="showList"
|
||||
:data="data"
|
||||
:headers="headers"
|
||||
:on-remove="handleRemove"
|
||||
class="upload-file-uploader"
|
||||
ref="upload"
|
||||
>
|
||||
@@ -143,9 +142,6 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handleRemove(file, fileList){
|
||||
this.$emit('isTrue',false)
|
||||
},
|
||||
// 上传前校检格式和大小
|
||||
handleBeforeUpload(file) {
|
||||
if(this.beforeMsg){
|
||||
@@ -199,7 +195,6 @@ export default {
|
||||
// 上传失败
|
||||
handleUploadError(err) {
|
||||
this.isLoading = false;
|
||||
this.$emit('isTrue',false)
|
||||
this.$message({message:"上传失败, 请重试",type:'error',offset:100});
|
||||
},
|
||||
// 上传成功回调
|
||||
@@ -222,8 +217,7 @@ export default {
|
||||
if(delIdx>-1){
|
||||
fileList.splice(delIdx,1);
|
||||
}
|
||||
this.$emit('isTrue',true)
|
||||
this.$emit('isFalse',true)
|
||||
this.$emit("success", res);
|
||||
} else {
|
||||
this.isLoading = false;
|
||||
if(this.limit == 1){
|
||||
@@ -231,7 +225,8 @@ export default {
|
||||
}
|
||||
this.$message({message:"上传失败",type:'error',offset:100});
|
||||
}
|
||||
this.$emit("success", res);
|
||||
|
||||
// this.$emit("success", res);
|
||||
},
|
||||
// 删除文件
|
||||
handleDelete(index) {
|
||||
|
||||
@@ -149,9 +149,6 @@ import yearMedal from '@/components/Popup/China2023.vue';
|
||||
import apiBoeCourse from '@/api/boe/course.js';
|
||||
import {userAvatarText} from "@/utils/tools.js";
|
||||
import apiCase from "@/api/modules/cases.js";
|
||||
import apiManage from '@/api/manage/manage.js'
|
||||
import {getList} from '@/api/growth'
|
||||
import apiCourseStudy from '@/api/modules/courseStudy.js';
|
||||
export default {
|
||||
props: {
|
||||
current: {
|
||||
@@ -213,9 +210,11 @@ export default {
|
||||
this.sex = this.userInfo.sex;
|
||||
this.$store.dispatch('refrashMsg');
|
||||
this.loadBoeData();
|
||||
// console.log('this.userInfo::',this.userInfo)
|
||||
//this.loadPopupConfig();
|
||||
},
|
||||
methods: {
|
||||
|
||||
setCurIdentity(iden){
|
||||
this.$store.dispatch('SetCurIdentity',iden);
|
||||
},
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
<!-- <div style="color: red;">下面的表格标题及内容需要调整完善</div> -->
|
||||
<div>
|
||||
<el-tabs v-model="tabName" @tab-click="handleTabClick">
|
||||
<el-tabs style="width: 100%;" v-model="tabName" @tab-click="handleTabClick">
|
||||
<el-tab-pane label="报名管理" name="second">
|
||||
<!-- <div>已报名{{study.list.length}}人,共有0人报名未成功,共有{{study.list.length}}人通过审核</div> -->
|
||||
<el-row style="margin: 20px 0;" :gutter="20">
|
||||
@@ -863,4 +863,19 @@ export default {
|
||||
height: 400px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.el-tabs__nav-wrap::after {
|
||||
display: none; /* 隐藏滚动条轨道 */
|
||||
}
|
||||
|
||||
.el-tabs__nav-scroll {
|
||||
overflow: hidden; /* 隐藏滚动条滑块 */
|
||||
}
|
||||
|
||||
/* 隐藏垂直滚动条 */
|
||||
.el-table .el-table__body-wrapper::-webkit-scrollbar {
|
||||
display: none; /* Chrome, Safari, Opera*/
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
<svg-icon :icon-class="activeMenu == '/user/medal'?'myxunzhang-active':'myxunzhang'"></svg-icon>
|
||||
<span slot="title">我的勋章</span>
|
||||
</el-menu-item>
|
||||
<el-submenu index="myGrowth" v-show="curIdentity == 1">
|
||||
<el-submenu index="myGrowth" v-show="curIdentity == 1">
|
||||
<template slot="title">
|
||||
<!-- <i class="el-icon-s-grid"></i> -->
|
||||
<img src="../../assets/images/myGrowth.jpg" style="width: 1em;height: 1em;margin-right: 8px;"></img>
|
||||
@@ -433,6 +433,7 @@ export default {
|
||||
this.getLastStudy();
|
||||
//获取讲师认证中条数
|
||||
this.instructorCertification()
|
||||
console.log(this.userInfo,'userInfouserInfo')
|
||||
},
|
||||
mounted() {
|
||||
//console.log(this.userInfo.loginName,'this.userInfo.loginName');
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
@keydown.right.prevent="forwardCurrentTime"
|
||||
@keydown.up.prevent="increaseVolume"
|
||||
@keydown.down.prevent="lowerVolume"
|
||||
@keydown.esc.prevent="toggleFullScreen"
|
||||
tabindex="0"
|
||||
width="100%"
|
||||
height="100%"
|
||||
@@ -331,18 +330,9 @@ export default {
|
||||
|
||||
// 定时更新进度条
|
||||
if (this.isPlaying && !this.isMousedownProgress) {
|
||||
this.currentProgress = this.videoDom.currentTime / this.videoDom.duration;
|
||||
this.currentProgress =
|
||||
this.videoDom.currentTime / this.videoDom.duration;
|
||||
}
|
||||
// 视频播放时本地记录视频实时播放时长,视频设置了禁止拖动时执行
|
||||
if(!this.isDrag){
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
if(arr[this.blobId] < this.currentProgress || !arr[this.blobId]){
|
||||
arr[this.blobId] = parseFloat(this.currentProgress.toFixed(8))
|
||||
if(arr[this.blobId]) localStorage.setItem('videoProgressData',JSON.stringify(arr))
|
||||
}
|
||||
}
|
||||
|
||||
// 定时更新进度的文字显示
|
||||
this.updateProgressText();
|
||||
// 音量提示面板的定时隐藏
|
||||
@@ -375,7 +365,7 @@ export default {
|
||||
// 根据视频的readyState判断下一帧是否已加载,并控制loading的显示
|
||||
this.isShowLoading = this.videoDom.readyState < 3;
|
||||
//if()
|
||||
// console.log(this.videoDom.readyState,'视频播放');
|
||||
//console.log(this.videoDom.readyState,'this.videoDom.readyState');
|
||||
}, 1000);
|
||||
// 视频dom监听器,用于控制鼠标的显示
|
||||
this.videoDom.addEventListener("mousemove", () => {
|
||||
@@ -394,9 +384,26 @@ export default {
|
||||
console.log('\x1b[31m%s\x1b[0m','*****************加载失败**********')
|
||||
})
|
||||
// 监听全屏事件的变化,保存数据
|
||||
window.addEventListener("fullscreenchange", () => {
|
||||
window.addEventListener("F", () => {
|
||||
this.isFullscreen = this.isFullScreen();
|
||||
});
|
||||
document.addEventListener('fullscreenchange',this.handleFullscreenChange);
|
||||
document.addEventListener('webkitfullscreenchange',this.handleFullscreenChange );
|
||||
// this.videoDom.addEventListener('keydown', function(e){
|
||||
// //console.log('\x1b[31m%s\x1b[0m','*****************加载失败**********')
|
||||
// console.log("video is exit");
|
||||
// if(e.key === "Escape"){
|
||||
// console.log("按键 退出全屏 执行")
|
||||
// }
|
||||
// })
|
||||
|
||||
// this.videoDom.addEventListener("keydown", (e) => {
|
||||
// console.log("是否监听到");
|
||||
// if(e.keyCode == 27){
|
||||
// console.log("是否监听到 esc");
|
||||
// this.toggleFullScreen();
|
||||
// }
|
||||
// });
|
||||
},
|
||||
methods: {
|
||||
//当视频由于需要缓冲下一帧而停止,解决一直计时的问题
|
||||
@@ -468,22 +475,6 @@ export default {
|
||||
*/
|
||||
forwardCurrentTime() {
|
||||
let newCurrentTime = this.videoDom.currentTime + this.timeFastBack;
|
||||
// 禁止拖拽视频前进时,未观看视频不让前进播放
|
||||
if(!this.isDrag){
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
console.log('arr[this.blobId]::22',arr[this.blobId],this.currentProgress)
|
||||
if(arr[this.blobId] < this.currentProgress || !arr[this.blobId]){
|
||||
arr[this.blobId] = parseFloat(this.currentProgress.toFixed(8))
|
||||
|
||||
if(arr[this.blobId]) localStorage.setItem('videoProgressData',JSON.stringify(arr))
|
||||
}
|
||||
|
||||
if(time && arr[this.blobId]* this.videoDom.duration < this.newCurrentTime){
|
||||
return
|
||||
}
|
||||
}
|
||||
this.videoDom.currentTime = newCurrentTime;
|
||||
this.barrageTimelineStart = newCurrentTime;
|
||||
this.updateProgressBySetTime(newCurrentTime);
|
||||
@@ -504,15 +495,11 @@ export default {
|
||||
/* 点击进度条更新视频播放进度
|
||||
*/
|
||||
updateProgressByClickBar(value) {
|
||||
if(this.videoDom){
|
||||
|
||||
let duration = this.videoDom.duration;
|
||||
this.currentProgress = value;
|
||||
let new_current_time = Math.round(value * duration);
|
||||
this.barrageTimelineStart = new_current_time;
|
||||
this.videoDom.currentTime = new_current_time;
|
||||
console.log('value 222::',value,duration,new_current_time)
|
||||
}
|
||||
let duration = this.videoDom.duration;
|
||||
this.currentProgress = value;
|
||||
let new_current_time = Math.round(value * duration);
|
||||
this.barrageTimelineStart = new_current_time;
|
||||
this.videoDom.currentTime = new_current_time;
|
||||
},
|
||||
/* 通过新的播放时间更新视频播放进度
|
||||
*/
|
||||
@@ -569,6 +556,7 @@ export default {
|
||||
/* 切换“全屏”和“非全屏”模式
|
||||
*/
|
||||
toggleFullScreen() {
|
||||
console.log("toggleFullScreen 执行 ",this.isFullScreen())
|
||||
let element = this.$refs.area;
|
||||
if (!this.isFullScreen()) {
|
||||
if (element.requestFullscreen) {
|
||||
@@ -613,10 +601,6 @@ export default {
|
||||
},
|
||||
//开始播放
|
||||
startPlay:function(newTime){
|
||||
// console.log('开始播放::',newTime)
|
||||
// window.playVideoInterTime = setInterval(()=>{
|
||||
// console.log('视频播放:',newTime)
|
||||
// },2000)
|
||||
if(newTime){
|
||||
this.videoDom.currentTime = newTime;
|
||||
this.barrageTimelineStart = newTime;
|
||||
@@ -626,11 +610,27 @@ export default {
|
||||
this.videoDom.play();
|
||||
},
|
||||
onAudioTimeUpdate() {
|
||||
if(this.$refs.video){
|
||||
const currentTime = this.$refs.video.currentTime;
|
||||
this.$emit('onTimeUpdate', currentTime);
|
||||
}
|
||||
const currentTime = this.$refs.video.currentTime;
|
||||
this.$emit('onTimeUpdate', currentTime);
|
||||
},
|
||||
/**
|
||||
* 监听全屏变化
|
||||
*/
|
||||
handleFullscreenChange() {
|
||||
console.log("handleFullscreenChange gx this.isFullScreen()",this.isFullScreen())
|
||||
console.log("handleFullscreenChange gx this.isFullscreen",this.isFullscreen)
|
||||
|
||||
if(this.isFullscreen){
|
||||
this.isFullscreen = !!document.fullscreenElement;
|
||||
if (!this.isFullscreen) {
|
||||
// 退出全屏后的逻辑(如暂停视频、更新 UI 等)
|
||||
console.log('ESC 已退出全屏 handleFullscreenChange',this.isFullscreen);
|
||||
this.$emit('onFullscreen',false);//全屏
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
currentVolume: function () {
|
||||
@@ -641,6 +641,7 @@ export default {
|
||||
// 进度条到终点时修改播放状态
|
||||
this.isShowPlayer = false
|
||||
this.$emit('onPlayerPlaying', this.videoDom.currentTime,this.videoDom.duration)
|
||||
this.$emit('progress',this.currentProgress)
|
||||
if (this.currentProgress === 1) {
|
||||
this.isPlaying = false;
|
||||
this.$emit('onPlayerEnded', {})
|
||||
@@ -656,6 +657,7 @@ export default {
|
||||
src: function () {
|
||||
// 当视频地址变更时,重载视频
|
||||
this.videoDom.load();
|
||||
this.isPlaying = false
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -60,10 +60,12 @@ export default {
|
||||
window.addEventListener("mousemove", (e) => {
|
||||
if (this.is_mousedown_progress) {
|
||||
this.move(e);
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
window.addEventListener("mouseup", (e) => {
|
||||
this.up(e);
|
||||
e.preventDefault();
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
@@ -71,7 +73,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
down(e) {
|
||||
|
||||
// if(this.isDrag) {
|
||||
this.$emit("getMouseDownStatus", true);
|
||||
this.is_mousedown_progress = true;
|
||||
// 获取完整进度条的clientX(dom左上角)
|
||||
@@ -80,20 +82,28 @@ export default {
|
||||
this.current_width_px = e.clientX - init_clientX;
|
||||
// 设置当前的播放进度(同时作用于当前进度条的样式)
|
||||
let current = (e.clientX - init_clientX) / this.dom_full.clientWidth;
|
||||
if(current>1) current = 1;
|
||||
if(current<0) current = 0;
|
||||
var time = localStorage.getItem('videoProgressData');
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
//console.log('down arr:',this.isDrag,this.blobId,arr,arr[this.blobId],current)
|
||||
// 禁止拖动
|
||||
if(!this.isDrag && time && arr[this.blobId] < current) return;
|
||||
|
||||
this.$emit("updateProgress", current);
|
||||
// }
|
||||
|
||||
},
|
||||
move(e) {
|
||||
if (this.is_mousedown_progress) {
|
||||
let init_clientX = this.dom_full.getBoundingClientRect().left;
|
||||
this.current_width_px = e.clientX - init_clientX;
|
||||
let current = (e.clientX - init_clientX) / this.dom_full.clientWidth;
|
||||
if(current>1) current = 1;
|
||||
if(current<0) current = 0;
|
||||
var time = localStorage.getItem('videoProgressData');
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
//console.log('move arr:',this.isDrag,this.blobId,arr,arr[this.blobId],current)
|
||||
// 禁止拖动
|
||||
if(!this.isDrag && time && arr[this.blobId] < current) return;
|
||||
this.$emit("updateProgress", current);
|
||||
@@ -103,11 +113,14 @@ export default {
|
||||
if (this.is_mousedown_progress) {
|
||||
// 标记鼠标不处于按下的状态了
|
||||
this.is_mousedown_progress = false;
|
||||
this.$emit("getMouseDownStatus", false);
|
||||
// 松开鼠标后,即调整进度条后,此时的进度(0-1)
|
||||
let current = this.current_width_px / this.dom_full.clientWidth;
|
||||
if(current>1) current = 1;
|
||||
if(current<0) current = 0;
|
||||
var time = localStorage.getItem('videoProgressData');
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
//console.log('up arr:',this.isDrag,this.blobId,arr,arr[this.blobId],current)
|
||||
this.$emit("getMouseDownStatus", false);
|
||||
// 禁止拖动
|
||||
if(!this.isDrag && time && arr[this.blobId] < current) return;
|
||||
this.$emit("updateProgress", current);
|
||||
|
||||
@@ -80,7 +80,6 @@ export const pages=[
|
||||
{title:'正在学习',path:'courses',component:'study/Courses',hidden:false},
|
||||
{title:'历史记录',path:'history',component:'study/FinishCourses',hidden:false},
|
||||
{title:'学习路径图',path:'path',component:'study/StudyPath',hidden:false},
|
||||
{title:'成长路径',path:'growth',component:'study/Growth',hidden:false},
|
||||
{title:'学习项目',path:'project',component:'study/StudyProject',hidden:false}
|
||||
]},
|
||||
{title:'我的必修',path:'/growth',hidden:false,children:[
|
||||
|
||||
@@ -47,91 +47,70 @@ export const constantRoutes = [{
|
||||
// name: 'gratefulIndex',
|
||||
// meta: { title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: false },
|
||||
// },
|
||||
{
|
||||
path: '/grateful',
|
||||
component: Grateful,
|
||||
redirect: '/grateful/index',
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/GratefulHomePage'], resolve),
|
||||
name: 'GratefulHomePage',
|
||||
meta: { title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: true, hidden:false }
|
||||
},
|
||||
{
|
||||
path: 'teacherEmpowerment',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/TeacherEmpowerment'], resolve),
|
||||
name: 'TeacherEmpowerment',
|
||||
meta: { title: '教师赋能', icon: 'dashboard', noCache: true, affix: true, hidden:true }
|
||||
},
|
||||
{
|
||||
path: 'toolDown',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/ToolDown'], resolve),
|
||||
name: 'ToolDown',
|
||||
meta: { title: '工具下载', icon: 'dashboard', noCache: true, affix: true, hidden:true }
|
||||
},
|
||||
{
|
||||
path: 'gratefulNotice',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/GratefulNotice'], resolve),
|
||||
name: 'GratefulNotice',
|
||||
meta: { title: '通知列表', icon: 'dashboard', noCache: true, affix: true, hidden:true }
|
||||
},
|
||||
{
|
||||
path: 'noticeDetail',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/NoticeDetail'], resolve),
|
||||
name: 'NoticeDetail',
|
||||
meta: { title: '通知详情', icon: 'dashboard', noCache: true, affix: true, hidden:true }
|
||||
},
|
||||
{
|
||||
path: 'teacherOpinion',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/TeacherOpinion'], resolve),
|
||||
name: 'TeacherOpinion',
|
||||
meta: { title: '师资大全', icon: 'dashboard', noCache: true, affix: true, hidden:true }
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/forward',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/Forward'], resolve),
|
||||
name: 'forward',
|
||||
meta: { title: '详细信息', icon: 'dashboard', noCache: true, affix: false },
|
||||
},
|
||||
{
|
||||
path: '/course',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/portal/course/Index'], resolve),
|
||||
name: 'course',
|
||||
meta: { title: '课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
|
||||
},
|
||||
// {
|
||||
// path: '/growth',
|
||||
// hidden: true,
|
||||
// component: (resolve) => require(['@/views/study/Growth'], resolve),
|
||||
// name: 'growth',
|
||||
// meta: { title: '成长路径', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
|
||||
// },
|
||||
{
|
||||
path: '/growthpath',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/study/GrowthPath'], resolve),
|
||||
name: 'growthpath',
|
||||
meta: { title: '成长路径图', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
|
||||
},
|
||||
{
|
||||
path: '/ExamScore',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/study/ExamScore'], resolve),
|
||||
name: 'ExamScore',
|
||||
meta: { title: '成长路径图', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
|
||||
},
|
||||
{
|
||||
{
|
||||
path: '/grateful',
|
||||
component: Grateful,
|
||||
redirect: '/grateful/index',
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/GratefulHomePage'], resolve),
|
||||
name: 'GratefulHomePage',
|
||||
meta: {title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: true, hidden: false}
|
||||
},
|
||||
{
|
||||
path: 'teacherEmpowerment',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/TeacherEmpowerment'], resolve),
|
||||
name: 'TeacherEmpowerment',
|
||||
meta: {title: '教师赋能', icon: 'dashboard', noCache: true, affix: true, hidden: true}
|
||||
},
|
||||
{
|
||||
path: 'toolDown',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/ToolDown'], resolve),
|
||||
name: 'ToolDown',
|
||||
meta: {title: '工具下载', icon: 'dashboard', noCache: true, affix: true, hidden: true}
|
||||
},
|
||||
{
|
||||
path: 'gratefulNotice',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/GratefulNotice'], resolve),
|
||||
name: 'GratefulNotice',
|
||||
meta: {title: '通知列表', icon: 'dashboard', noCache: true, affix: true, hidden: true}
|
||||
},
|
||||
{
|
||||
path: 'noticeDetail',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/NoticeDetail'], resolve),
|
||||
name: 'NoticeDetail',
|
||||
meta: {title: '通知详情', icon: 'dashboard', noCache: true, affix: true, hidden: true}
|
||||
},
|
||||
{
|
||||
path: 'teacherOpinion',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/grateful/TeacherOpinion'], resolve),
|
||||
name: 'TeacherOpinion',
|
||||
meta: {title: '师资大全', icon: 'dashboard', noCache: true, affix: true, hidden: true}
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/forward',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/Forward'], resolve),
|
||||
name: 'forward',
|
||||
meta: {title: '详细信息', icon: 'dashboard', noCache: true, affix: false},
|
||||
},
|
||||
{
|
||||
path: '/course',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/portal/course/Index'], resolve),
|
||||
name: 'course',
|
||||
meta: {title: '课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false},
|
||||
},
|
||||
{
|
||||
path: '/courseRecommended',
|
||||
hidden: true,
|
||||
component: (resolve) => require(['@/views/portal/course/CourseRecommended'], resolve),
|
||||
|
||||
@@ -1,233 +0,0 @@
|
||||
import axios from 'axios'
|
||||
import qs from 'qs'
|
||||
import { Notification, MessageBox, Message } from 'element-ui'
|
||||
import store from '@/store'
|
||||
import { getToken } from '@/utils/token'
|
||||
import errorCode from '@/utils/errorCode'
|
||||
/**
|
||||
*request请求 axios.request(config)
|
||||
*requestJson请求 axios.request(config)
|
||||
*get请求 axios.get(url[, config])
|
||||
*post请求 axios.post(url[, data[, config]])
|
||||
*postJson请求 axios.post(url[, data[, config]])
|
||||
*put请求 axios.put(url[, data[, config]])
|
||||
*putJson请求 axios.put(url[, data[, config]])
|
||||
*patch请求 axios.patch(url[, data[, config]])
|
||||
*patchJson请求 axios.patch(url[, data[, config]])
|
||||
*delete请求 axios.delete(url[, config])
|
||||
*/
|
||||
|
||||
//const ReLoginUrl="/login";
|
||||
|
||||
const ReLoginUrl=process.env.VUE_APP_LOGIN_URL;
|
||||
|
||||
const TokenName='XBOE-Access-Token';
|
||||
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
|
||||
//只是用于发送json对象数据时使用post,put,patch
|
||||
const jsonRequest=axios.create({
|
||||
headers:{'Content-Type':'application/json;charset=utf-8'},
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: process.env.VUE_APP_BASE_API,
|
||||
//超时
|
||||
timeout: 60000,
|
||||
});
|
||||
//发送json对象的拦截器
|
||||
jsonRequest.interceptors.request.use(config => {
|
||||
//是否需要设置 token
|
||||
const isToken = (config.headers || {}).isToken === false
|
||||
if (getToken() && !isToken) {
|
||||
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
}
|
||||
return config
|
||||
}, error => {
|
||||
console.log(error)
|
||||
Promise.reject(error)
|
||||
})
|
||||
|
||||
// 响应拦截器
|
||||
jsonRequest.interceptors.response.use(res => {
|
||||
|
||||
const code = res.data.status || 200;
|
||||
if(code===200){
|
||||
return res.data
|
||||
}else{
|
||||
if(code == 6001){ //针对于老系统的处理
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = ReLoginUrl;
|
||||
})
|
||||
}else if(code === 401){
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = ReLoginUrl;
|
||||
})
|
||||
}else if(code === 402){
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = ReLoginUrl;
|
||||
})
|
||||
}else if(code===403){
|
||||
var msg='当前操作没有权限';
|
||||
Message({message: msg, type: 'error'});
|
||||
return Promise.reject(new Error(msg))
|
||||
//return res.data;
|
||||
}else if(code===302){
|
||||
location.href = ReLoginUrl;
|
||||
}else{
|
||||
//Message({message: res.data.message, type: 'error'});
|
||||
//console.log('err:' + res.data.error);
|
||||
//return Promise.reject(new Error(res.data.message))
|
||||
return res.data;
|
||||
}
|
||||
}
|
||||
},
|
||||
error => {
|
||||
console.log('err' + error)
|
||||
let { message } = error;
|
||||
if (message == "Network Error") {
|
||||
message = "网络异常,请稍后重试";
|
||||
}
|
||||
else if (message.includes("timeout")) {
|
||||
message = "系统接口请求超时";
|
||||
//location.href = this.webBaseUrl + ReLoginUrl;
|
||||
}
|
||||
else if (message.includes("Request failed with status code")) {
|
||||
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
||||
}
|
||||
Message({
|
||||
message: message,
|
||||
type: 'error',
|
||||
duration: 5 * 1000
|
||||
})
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
//用于普通的发送请求
|
||||
const formRequest=axios.create({
|
||||
headers:{'Content-Type':'application/x-www-form-urlencoded'},
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: process.env.VUE_APP_BASE_API,
|
||||
//超时
|
||||
timeout: 10000,
|
||||
})
|
||||
//发送json对象的拦截器
|
||||
formRequest.interceptors.request.use(config => {
|
||||
//是否需要设置 token
|
||||
const isToken = (config.headers || {}).isToken === false
|
||||
if (getToken() && !isToken) {
|
||||
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
}
|
||||
return config
|
||||
}, error => {
|
||||
console.log(error)
|
||||
Promise.reject(error)
|
||||
});
|
||||
formRequest.interceptors.response.use(res => {
|
||||
const code = res.data.status || 200;
|
||||
if(code===200){
|
||||
return res.data
|
||||
}else{
|
||||
if(code == 6001){ //针对于老系统的处理,因为老系统是字符串,所以这里不使用三等于号
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = ReLoginUrl;
|
||||
})
|
||||
}else if(code === 401){
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = ReLoginUrl;
|
||||
})
|
||||
}else if(code === 402){
|
||||
store.dispatch('LogOut').then(() => {
|
||||
location.href = ReLoginUrl;
|
||||
})
|
||||
}else if(code===403){
|
||||
var msg='当前操作没有权限';
|
||||
Message({message: msg, type: 'error'});
|
||||
return Promise.reject(new Error(msg))
|
||||
}else if(code===302){
|
||||
location.href = ReLoginUrl;
|
||||
}else{
|
||||
//Message({message: res.data.message, type: 'error'});
|
||||
//console.log('err' + res.data.error);
|
||||
//return Promise.reject(new Error(res.data.message))
|
||||
return res.data;//返回给用户做业务处理
|
||||
}
|
||||
}
|
||||
},
|
||||
error => {
|
||||
console.log('err' + error)
|
||||
let { message } = error;
|
||||
if (message == "Network Error") {
|
||||
message = "网络异常,请稍后重试";
|
||||
}
|
||||
else if (message.includes("timeout")) {
|
||||
message = "接口超时,请检查是否上传成功";
|
||||
//location.href = this.webBaseUrl + ReLoginUrl;
|
||||
}
|
||||
else if (message.includes("Request failed with status code")) {
|
||||
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
||||
}
|
||||
Message({
|
||||
message: message,
|
||||
type: 'error',
|
||||
duration: 5 * 1000
|
||||
})
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
//request请求
|
||||
const request=function(cfg){
|
||||
if(cfg.data){
|
||||
cfg.data=qs.stringify(cfg.data);
|
||||
}
|
||||
};
|
||||
//requestJson请求
|
||||
const requestJson=jsonRequest.request;
|
||||
//get请求
|
||||
const get=formRequest.request;
|
||||
//post请求
|
||||
const post=function(url,data,config){
|
||||
if(data){
|
||||
data=qs.stringify(data);
|
||||
}
|
||||
return formRequest.post(url,data,config);
|
||||
}
|
||||
//post请求
|
||||
const postForm=function(url,data,config){
|
||||
return formRequest.post(url,data,config);
|
||||
}
|
||||
//postJson请求
|
||||
const postJson=jsonRequest.post;
|
||||
//put请求
|
||||
const put=function(url,data,config){
|
||||
if(data){
|
||||
data=qs.stringify(data);
|
||||
}
|
||||
return formRequest.put(url,data,config);
|
||||
}
|
||||
//putJson请求
|
||||
const putJson=jsonRequest.put;
|
||||
//patch请求
|
||||
const patch=function(url,data,config){
|
||||
if(data){
|
||||
data=qs.stringify(data);
|
||||
}
|
||||
return formRequest.patch(url,data,config);
|
||||
}
|
||||
//patchJson请求
|
||||
const patchJson=jsonRequest.patch;
|
||||
//delete请求
|
||||
const del=formRequest.delete;
|
||||
|
||||
|
||||
export default {
|
||||
request,
|
||||
requestJson,
|
||||
get,
|
||||
post,
|
||||
postJson,
|
||||
put,
|
||||
putJson,
|
||||
patch,
|
||||
patchJson,
|
||||
del,
|
||||
postForm
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="box" :class="{ incl: url.includes('projectdetails') }">
|
||||
<portal-header style="background: #387DF7;" :hideSearch="true" textColor="#ffffff"></portal-header>
|
||||
<iframe :src="url" style="width: 100%;height: 100%;" frameborder="0" ref="iframe"></iframe>
|
||||
<portal-footer></portal-footer>
|
||||
<portal-footer v-if="isShowFooter"></portal-footer>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@@ -16,7 +16,8 @@ import portalFooter from "@/components/PortalFooter.vue";
|
||||
data(){
|
||||
return {
|
||||
url: "",
|
||||
boeUrl:process.env.VUE_APP_BOE_WEB_URL
|
||||
boeUrl:process.env.VUE_APP_BOE_WEB_URL,
|
||||
isShowFooter:true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -24,6 +25,10 @@ import portalFooter from "@/components/PortalFooter.vue";
|
||||
let to = this.$route.query.to;//跳转的地址,以 /开头的地址
|
||||
let urlPre=window.location.protocol+'//'+window.location.host;
|
||||
this.url=urlPre+to
|
||||
|
||||
if(to.includes('growthList')){
|
||||
this.isShowFooter = false
|
||||
}
|
||||
if(params){
|
||||
this.url=this.url+'?'+params;
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
<p class="personal-info">
|
||||
{{ cutOrgNamePath(userInfo.departFullName) }}
|
||||
</p>
|
||||
<span @click="goStudy">
|
||||
<a href="uc/study/task">
|
||||
<div class="personal-box" style="margin-bottom: 10px">
|
||||
<span>学习任务</span>
|
||||
<span v-if="studyTaskCount == 0" style="display: flex">
|
||||
@@ -106,7 +106,7 @@
|
||||
</span>
|
||||
<!-- <img class="personal-box-img" :src="`${webBaseUrl}/images/homeWu/agency.png`" alt="" srcset=""> -->
|
||||
</div>
|
||||
</span>
|
||||
</a>
|
||||
<div class="last-study-info">
|
||||
<div
|
||||
class="one-line-ellipsis"
|
||||
@@ -1078,10 +1078,6 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
fistTotals: 0,
|
||||
pathTotals: 0,
|
||||
growTotal: 0,
|
||||
courseNums: 0,
|
||||
Positive:[],
|
||||
showUClass: false,
|
||||
showLoginMedal: false, //是否显示登录勋章
|
||||
@@ -1180,7 +1176,7 @@ export default {
|
||||
this.getLevel();
|
||||
this.getQaAnswers();
|
||||
this.getLastStudy();
|
||||
this.setNumData()
|
||||
|
||||
//检查兴趣爱好是否已填报,
|
||||
//先检查本地session和 local 15天, 这两个值是在组件中设置的
|
||||
let sessionHobby = sessionStorage.getItem(
|
||||
@@ -1233,32 +1229,6 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
setNumData(){
|
||||
this.fistTotals = sessionStorage.getItem('fistTotals')
|
||||
this.pathTotals = sessionStorage.getItem('pathTotals')
|
||||
this.growTotal = sessionStorage.getItem('growTotal')
|
||||
this.courseNums = sessionStorage.getItem('courseNums')
|
||||
},
|
||||
goStudy(){
|
||||
const nums = this.fistTotals + this.pathTotals + this.growTotal;
|
||||
if(nums == 0 && this.courseNums>0){
|
||||
window.location.href = `${this.webBaseUrl}/uc/study/courses`;
|
||||
}else{
|
||||
if(this.nums == 0){
|
||||
window.location.href = `${this.webBaseUrl}/uc/study/task?type=9`;
|
||||
return
|
||||
}
|
||||
if(this.fistTotals != 0){
|
||||
window.location.href = `${this.webBaseUrl}/uc/study/task?type=1`;
|
||||
}else if (this.growTotal != 0){
|
||||
window.location.href = `${this.webBaseUrl}/uc/study/growth`;
|
||||
}else if (this.pathTotals != 0){
|
||||
window.location.href = `${this.webBaseUrl}/uc/study/task?type=2`;
|
||||
}else{
|
||||
window.location.href = `${this.webBaseUrl}/uc/study/task?type=9`;
|
||||
}
|
||||
}
|
||||
},
|
||||
getPositive() {
|
||||
// 这个是案例的好评
|
||||
// apiCase.queryComments(10).then(res => {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<!--
|
||||
<template>
|
||||
<div class="login" :style="`background: url(${webBaseUrl}/temp/background.jpg) no-repeat`">
|
||||
<el-form :model="form" ref="form" :rules="rules">
|
||||
@@ -24,7 +25,7 @@
|
||||
<el-form-item>
|
||||
<section>
|
||||
<el-checkbox v-model="rememberMe">记住密码</el-checkbox>
|
||||
<!-- <span>忘记密码</span> -->
|
||||
<!– <span>忘记密码</span> –>
|
||||
</section>
|
||||
</el-form-item>
|
||||
<el-form-item><el-button type="primary" @click="loginSubmit">点击登录</el-button></el-form-item>
|
||||
@@ -194,3 +195,4 @@
|
||||
}
|
||||
}
|
||||
</style>
|
||||
-->
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button-group>
|
||||
<el-button style="margin:0 5px" type="text" v-if="scope.row.recommendRank === ''" @click="suggest(scope.row)" icon="el-icon-medal">榜单推荐</el-button>
|
||||
<el-button style="margin:0 5px" type="text" v-if="scope.row.recommendRank === ''||scope.row.recommendRank === null" @click="suggest(scope.row)" icon="el-icon-medal">榜单推荐</el-button>
|
||||
<!-- <el-button type="text" @click="shareItem(scope.row)" icon="el-icon-share" style="margin:0 5px">推荐</el-button> -->
|
||||
<el-button style="margin:0 5px" v-if="!scope.row.isTop && scope.row.confidentialityLevel == '内部'" type="text"
|
||||
@click="setTop(scope.row)" icon="el-icon-top">置顶</el-button>
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
<el-checkbox v-model="deviceMobile" @change="isVisible(1)" label="移动端可见" border></el-checkbox>
|
||||
<el-checkbox v-model="devicePc" @change="isVisible(2)" label="pc端可见" border></el-checkbox>
|
||||
</div>
|
||||
<file-upload scorm="zip" dir="files" @isFalse="isFalseChange" @isTrue="isTrueChange" :beforeMsg="needOrg" :showList="true" :value="imageShowUrl" :limit="5" @success="handleUploadSuccess" @remove="handleRemoveSuccess"></file-upload>
|
||||
<file-upload scorm="zip" dir="files" :beforeMsg="needOrg" :showList="true" :value="imageShowUrl" :limit="5" @success="handleUploadSuccess" @remove="handleRemoveSuccess"></file-upload>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -159,7 +159,7 @@
|
||||
<el-table-column prop="fileName" label="文件名称"></el-table-column>
|
||||
<el-table-column prop="name" label="课件名称">
|
||||
<template slot-scope="scope">
|
||||
<el-input type="text" maxlength="50" v-model="scope.row.name"></el-input>
|
||||
<el-input type="text" v-model="scope.row.name"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="resType" label="类型" width="80">
|
||||
@@ -169,8 +169,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="duration" label="时长(分)" width="100">
|
||||
<template slot-scope="scope">
|
||||
<!-- <el-input type="number" :stpe="1" min="0" size="small" step-strictly v-model="scope.row.minute"></el-input> -->
|
||||
<el-input-number style="width: 78px;" :max="999" controls-position="right" size="small" :min="0" v-model="scope.row.minute" :step="1" step-strictly></el-input-number>
|
||||
<el-input type="number" size="small" v-model="scope.row.minute"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="可见性" width="100">
|
||||
@@ -195,7 +194,7 @@
|
||||
<span slot="footer">
|
||||
<!-- <el-button type="infor" @click="isVisible(1)">移动端可见</el-button>
|
||||
<el-button type="infor" @click="isVisible(2)">pc端可见</el-button> -->
|
||||
<el-button type="primary" @click="saveUpload()" :loading="isTrue">保存</el-button>
|
||||
<el-button type="primary" @click="saveUpload()">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog v-if="coursewareShow" title="预览课件" :close-on-click-modal="false" width="800px" :visible.sync="coursewareShow" custom-class="g-dialog">
|
||||
@@ -247,7 +246,7 @@
|
||||
<el-form-item label="课件类型">{{ getType(form.resType) }}</el-form-item>
|
||||
<el-form-item label="时长(分)">
|
||||
<!-- <el-input v-model="form.duration"></el-input> -->
|
||||
<el-input-number :precision="0" style="width:100%;text-align:left;" :min="1" placeholder="请输入数字" :max="99999999" show-word-limit controls-position="right" v-model="form.minute"></el-input-number>
|
||||
<el-input type="number" placeholder="请输入数字" :maxlength="32" show-word-limit v-model="form.minute"></el-input>
|
||||
<!-- <el-input-number max="" v-model="form.duration" controls-position="right"></el-input-number> -->
|
||||
</el-form-item>
|
||||
<el-form-item label="可见性">
|
||||
@@ -281,8 +280,6 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isTrue: false,
|
||||
isFalse: false,
|
||||
resOwnerListMap: [],
|
||||
//fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
|
||||
fileBaseUrl:this.$xpage.constants.fileBaseUrl, //获成动态获取的处理
|
||||
@@ -395,12 +392,6 @@ export default {
|
||||
this.search();
|
||||
},
|
||||
methods: {
|
||||
isTrueChange(val){
|
||||
this.isTrue = val
|
||||
},
|
||||
isFalseChange(val){
|
||||
this.isFalse = val
|
||||
},
|
||||
beforeCheck(){
|
||||
if(!this.upload.orgId ||!this.upload.orgName){
|
||||
return false;
|
||||
@@ -493,11 +484,7 @@ export default {
|
||||
this.form.device = 2;
|
||||
}
|
||||
//时长,秒与分钟的转化
|
||||
if(!this.form.minute){
|
||||
return this.$message.error('请输入时长');
|
||||
}else{
|
||||
this.form.duration = Number(this.form.minute) * 60;
|
||||
}
|
||||
//if(this.form.)
|
||||
try {
|
||||
const { status,message} = await coueseFile.batchUpdate([this.form]);
|
||||
if (status === 200) {
|
||||
@@ -568,7 +555,7 @@ export default {
|
||||
// remark: 备注说明,可以为空,不填
|
||||
};
|
||||
//try {
|
||||
coueseFile.saveUpload2(data).then(res=>{
|
||||
coueseFile.saveUpload(data).then(res=>{
|
||||
if(res.status==200){
|
||||
//console.log('上传文件成功:'+rs.result.displayName);
|
||||
res.result.device1 = true;
|
||||
@@ -577,18 +564,12 @@ export default {
|
||||
if(res.result.duration){
|
||||
res.result.minute=Math.round(res.result.duration/60); //四舍五入
|
||||
}
|
||||
if(res.result.duration==0){
|
||||
this.$message.error('上传的视频时长不能为0,请手动编辑时长');
|
||||
}
|
||||
this.fileList.push(res.result);
|
||||
this.isTrue = false;
|
||||
}else{
|
||||
this.$message.error(res.message);
|
||||
this.isFalse = false
|
||||
}
|
||||
}).catch (error=>{
|
||||
console.log(error,'error')
|
||||
this.isFalse = false
|
||||
//this.$message.error(error);
|
||||
});
|
||||
// const { result, status } = coueseFile.saveUpload(data);
|
||||
@@ -617,26 +598,16 @@ export default {
|
||||
},
|
||||
handleCloseCheck(done){
|
||||
//console.log('关闭的处理aaaaa');
|
||||
if(this.isTrue&&this.isFalse){
|
||||
this.$message.error('文件正在上传中,请耐心等待');
|
||||
return false;
|
||||
}
|
||||
if(this.fileList.length>0){
|
||||
this.$message.error('有待保存的上传文件,请执行保存操作');
|
||||
return false;
|
||||
}else{
|
||||
this.isTrue = false
|
||||
this.isFalse = false
|
||||
return done(true);
|
||||
}
|
||||
|
||||
},
|
||||
// 文件上传保存
|
||||
saveUpload() {
|
||||
if(this.fileList.length<=0){
|
||||
this.$message.error('请上传文件');
|
||||
return;
|
||||
}
|
||||
if(!this.upload.orgName){
|
||||
this.$message.success('请选择资源归属');
|
||||
return;
|
||||
@@ -657,20 +628,6 @@ export default {
|
||||
item.duration = item.minute ? parseFloat(item.minute) * 60 : 1800;
|
||||
});
|
||||
this.loading = true;
|
||||
const messageD = this.fileList.some(item =>{
|
||||
if(item.name == ''){
|
||||
this.$message.error('课件名称不能为空');
|
||||
return true;
|
||||
}else if(!item.minute||item.minute == undefined){
|
||||
this.$message.error('时长不能为空并且不能为0');
|
||||
return true;
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
})
|
||||
if(messageD){
|
||||
return
|
||||
}
|
||||
coueseFile.batchUpdate(this.fileList).then(rs => {
|
||||
if (rs.status === 200) {
|
||||
this.$message.success('保存成功');
|
||||
@@ -836,17 +793,6 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .el-input-number.is-controls-right .el-input__inner{
|
||||
padding-right: 20px;
|
||||
padding-left: 8px;
|
||||
text-align: left;
|
||||
}
|
||||
::v-deep .el-input-number__decrease{
|
||||
width: 16px;
|
||||
}
|
||||
::v-deep .el-input-number__increase{
|
||||
width: 16px;
|
||||
}
|
||||
.butpost{
|
||||
position: absolute;
|
||||
right: 1%;
|
||||
|
||||
@@ -195,7 +195,15 @@
|
||||
</template>
|
||||
</el-dialog>
|
||||
<!--课程管理-->
|
||||
<el-dialog custom-class="g-dialog" title="课程学习管理" width="900px" :visible.sync="manageStudy.dlgShow" :close-on-click-modal="false">
|
||||
<el-dialog
|
||||
custom-class="g-dialog"
|
||||
title="课程学习管理"
|
||||
width="900px"
|
||||
height="900px"
|
||||
:visible.sync="manageStudy.dlgShow"
|
||||
:close-on-click-modal="false"
|
||||
|
||||
>
|
||||
<manager :manageStudyData="manageStudyData" :isShowDialog="manageStudy.dlgShow"></manager>
|
||||
<template #footer>
|
||||
<el-button @click="manageStudy.dlgShow = false">关闭</el-button>
|
||||
@@ -668,8 +676,10 @@ export default {
|
||||
}
|
||||
apiCourse.pageList(this.params).then(rs=>{
|
||||
if(rs.status==200){
|
||||
this.pageData = rs.result.list;
|
||||
this.pageData = rs.result.list ? rs.result.list : [];
|
||||
// this.pageData = rs.result.list;
|
||||
this.page.count = rs.result.count;
|
||||
this.page.pageSize = rs.result.pageSize;
|
||||
}else{
|
||||
return this.$message.error(rs.message);
|
||||
}
|
||||
@@ -939,4 +949,8 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.el-dialog__body {
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div style="display: flex;justify-content: flex-start;">
|
||||
|
||||
<div><el-input v-model="keyword" placeholder="输入课程名称搜索" clearable></el-input></div>
|
||||
<div style="padding-left: 10px;"><el-button @click="recordList(1)" type="primary" icon="el-icon-search">搜索</el-button></div>
|
||||
<div style="padding-left: 10px;"><el-button @click="recordList()" type="primary" icon="el-icon-search">搜索</el-button></div>
|
||||
<div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" @click="keyword = ''" type="primary" >重置</el-button></div>
|
||||
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button></div>
|
||||
<div style="padding: 0px 5px;"><el-button type="primary" @click="exportStudentOfTearcher()" icon="el-icon-search" size="small" round>导出学员信息</el-button></div>
|
||||
@@ -14,13 +14,10 @@
|
||||
</div>
|
||||
<div style="margin-top:20px;">
|
||||
<el-table :data="pageData" border stripe>
|
||||
<el-table-column
|
||||
label="课程编号"
|
||||
prop="index"
|
||||
width="100px">
|
||||
<template v-slot="scope">
|
||||
<span>{{scope.$index+1}}</span>
|
||||
</template>
|
||||
<el-table-column
|
||||
label="课程时间"
|
||||
prop="courseTime"
|
||||
width="200px">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="课程名称"
|
||||
@@ -28,57 +25,38 @@
|
||||
width="200px">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="课程日期"
|
||||
prop="teachingDate"
|
||||
width="200px">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="内容分类"
|
||||
prop="courseTypeName"
|
||||
width="200px">
|
||||
</el-table-column>
|
||||
<el-table-column label="课程类型" prop="type" width="120px">
|
||||
<template v-slot="scope">
|
||||
<span>{{
|
||||
{
|
||||
"0": "在线课",
|
||||
"1": "面授课",
|
||||
"2": "课程开发",
|
||||
"3": "作业员入模培训",
|
||||
"4": "其他",
|
||||
}[scope.row.type+'']
|
||||
}}</span>
|
||||
</template>
|
||||
label="开课场地"
|
||||
prop="address"
|
||||
width="240px">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="学习总人数"
|
||||
prop="studys"
|
||||
width="120px"
|
||||
label="所属课程"
|
||||
prop="parentCourse"
|
||||
width="120px">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="所属项目"
|
||||
prop="parentProject"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
label="授课时长(分钟)"
|
||||
prop="teaching"
|
||||
width="120px"
|
||||
label="所属路径"
|
||||
prop="parentRoute"
|
||||
width="200px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
label="学习总人数"
|
||||
prop="studentNumber"
|
||||
width="100px"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
label="时长(分钟)"
|
||||
width="100px"
|
||||
prop="period"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
label="评分"
|
||||
prop="score"
|
||||
width="100px"
|
||||
></el-table-column>
|
||||
<el-table-column label="开课状态" width="100px" prop="courseStatus">
|
||||
<template v-slot="scope">
|
||||
<span>{{
|
||||
{
|
||||
"0": "未开课",
|
||||
"1": "已开课",
|
||||
}[scope.row.courseStatus+'']
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="备注"
|
||||
width="200px"
|
||||
prop="remark"
|
||||
prop="score"
|
||||
></el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
@@ -187,14 +165,14 @@ methods: {
|
||||
let req = {
|
||||
// userId:"6B049FAF-C314-7CCF-0D28-0D23F4C42531",
|
||||
userId: this.userInfo.sysId,
|
||||
courseName:this.keyword,
|
||||
page:pageIndex,
|
||||
pageSize:this.pageInfo.pageSize||10
|
||||
keyword:this.keyword,
|
||||
page:pageIndex,
|
||||
pageSize:10
|
||||
}
|
||||
apiCourse.getListByToken(req).then(res=>{
|
||||
if(res.code == 200) {
|
||||
this.pageData = res.data.records;
|
||||
this.pageInfo.total = Number(res.data.total);
|
||||
apiCourse.courseRecordList(req).then(res=>{
|
||||
if(res.status == 200) {
|
||||
this.pageData = res.result.list;
|
||||
this.pageInfo = res.result.pageInfo;
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'error',
|
||||
|
||||
@@ -73,11 +73,10 @@
|
||||
|
||||
<!-- // 成绩控制需要结束状态 -->
|
||||
<el-button type="text" v-if="scope.row.published" @click="viewResults(scope.row)">成绩</el-button>
|
||||
<el-button type="text" v-if="scope.row.refType == 14" @click="deleteData(scope.row)">删除</el-button>
|
||||
<el-button type="text" v-if="scope.row.published&&scope.row.refType !== 14" @click="pushResults(scope.row)">推送</el-button>
|
||||
<el-button type="text" v-if="scope.row.published" @click="pushResults(scope.row)">推送</el-button>
|
||||
<!-- <el-button type="text" v-if="scope.row.published" @click="creatQrCode(scope.row)">二维码</el-button> -->
|
||||
<el-button type="text" v-if="scope.row.published&&scope.row.refType !== 14" @click="releaseData(scope.row,false)">取消发布</el-button>
|
||||
<el-dropdown v-if="scope.row.refType !== 14" type="text" style="margin-left:10px">
|
||||
<el-button type="text" v-if="scope.row.published" @click="releaseData(scope.row,false)">取消发布</el-button>
|
||||
<el-dropdown type="text" style="margin-left:10px">
|
||||
<el-button type="text" > 更多 <i class="el-icon-arrow-down el-icon--right"></i> </el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<!-- <el-dropdown-item command="a">查看</el-dropdown-item> -->
|
||||
@@ -500,7 +499,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="状态">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.status == 9 ? '已完成' : scope.row.status == 1?'进行中':'未开始' }}
|
||||
{{ scope.row.status == 9 ? '已完成' : '未开始' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="完成时间" prop="lastTime">
|
||||
@@ -1078,10 +1077,6 @@ export default {
|
||||
})
|
||||
},
|
||||
deleteData(row) {
|
||||
if(row.refType == 14 && row.refStatus == 1){
|
||||
this.$message.error('该考试已被专业力必修引用,不能删除!')
|
||||
return
|
||||
}
|
||||
this.$confirm('此操作将永久删除该考试, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<ul>
|
||||
<li>考试时长: {{ testPaper.testDuration }}分钟</li>
|
||||
<li>及格线: {{ testPaper.passLine }}</li>
|
||||
<li v-if="testPaper.entranceTime">开始时间: {{ testPaper.entranceTime }}</li>
|
||||
<li v-if="testPaper.entranceTime">开始时间:{{ testPaper.entranceTime }}</li>
|
||||
<li v-if="testPaper.times">尝试次数: {{ testPaper.times }}</li>
|
||||
<li v-if="testPaper.deadlineTime">结束时间: {{ testPaper.deadlineTime }}</li>
|
||||
</ul>
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
</div>
|
||||
<el-table :data="tableData" style="width: 100%" v-if="loading == 2">
|
||||
<el-table-column prop="endTime" label="完成时间" width="200"></el-table-column>
|
||||
<el-table-column prop="startTime" label="完成时间" width="180"></el-table-column>
|
||||
<el-table-column prop="score" align="center" label="成绩">
|
||||
<template slot-scope="scope">
|
||||
<span>{{toScoreTow(scope.row.score)}}分</span>
|
||||
@@ -500,7 +500,6 @@ export default {
|
||||
// $this.saveUserTest();
|
||||
// },10000);
|
||||
}
|
||||
this.saveUserTest()
|
||||
}else{
|
||||
this.startButton = false;
|
||||
this.$message.error('加载试卷内容失败:'+rs.message);
|
||||
|
||||
@@ -4,18 +4,6 @@
|
||||
<div class="navbar">
|
||||
<div style="display: flex; flex: 1">
|
||||
<div class="nav-title">我的专业力必修</div>
|
||||
<div class="nav-total">
|
||||
<div class="total-num">{{ totalData.total }}</div>
|
||||
<div class="total-text">总任务数</div>
|
||||
</div>
|
||||
<div class="nav-total">
|
||||
<div class="total-num">{{ totalData.completed }}</div>
|
||||
<div class="total-text">已完成数量</div>
|
||||
</div>
|
||||
<div class="nav-total">
|
||||
<div class="total-num">{{ totalData.unfinished }}</div>
|
||||
<div class="total-text">未完成数量</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -45,92 +33,108 @@
|
||||
<div class="growth-btn" @click="jumpRouter(item)">去学习</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tip-title">说明</div>
|
||||
<div class="tip-content">
|
||||
{{ item.description || "暂无说明" }}
|
||||
</div>
|
||||
<template v-if="item.description">
|
||||
<div class="tip-title">说明</div>
|
||||
<div class="tip-content">
|
||||
{{ item.description || "暂无说明" }}
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="progress-title">学习进度</div>
|
||||
|
||||
<div class="progress-content">
|
||||
<div class="f-j-b" style="margin-bottom: 10px">
|
||||
<div class="f-a-c">
|
||||
<div style="font-weight: 700; font-size: 16px; color: #333333">
|
||||
必修进度
|
||||
</div>
|
||||
<div style="font-size: 20px; color: #999999; margin-left: 12px">
|
||||
<div style="font-size: 16px; color: #333333">必修进度</div>
|
||||
<div style="font-size: 18px; color: #999999; margin-left: 12px">
|
||||
{{ item.requiredTaskCompletedNum }}/{{ item.requiredTaskNum }}
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-weight: bold; font-size: 20px; color: #0077ec">
|
||||
<div style="font-size: 18px; color: #0077ec">
|
||||
{{ requiredTaskCompletionRate(item) }}%
|
||||
</div>
|
||||
</div>
|
||||
<el-progress
|
||||
:stroke-width="8"
|
||||
:stroke-width="6"
|
||||
:show-text="false"
|
||||
:percentage="requiredTaskCompletionRate(item)"
|
||||
color="#0077EC"
|
||||
></el-progress>
|
||||
</div>
|
||||
<div class="progress-content">
|
||||
<div class="f-j-b" style="margin-bottom: 10px">
|
||||
<div class="f-a-c">
|
||||
<div style="font-weight: 700; font-size: 16px; color: #333333">
|
||||
选修进度
|
||||
<template v-if="item.electiveTaskNum !== 0">
|
||||
<div class="progress-content">
|
||||
<div class="f-j-b" style="margin-bottom: 10px">
|
||||
<div class="f-a-c">
|
||||
<div style="font-size: 16px; color: #333333">选修进度</div>
|
||||
<div style="font-size: 18px; color: #999999; margin-left: 12px">
|
||||
{{ item.electiveTaskCompletedNum }}/{{ item.electiveTaskNum }}
|
||||
</div>
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="light"
|
||||
:content="`还需完成${item.electivePoorNum}个选修任务`"
|
||||
placement="top-start"
|
||||
>
|
||||
<i class="el-icon-question"></i>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<div style="font-size: 20px; color: #999999; margin-left: 12px">
|
||||
{{ item.electiveTaskCompletedNum }}/{{ item.electiveTaskNum }}
|
||||
<div style="font-size: 18px; color: #0077ec">
|
||||
{{ electiveTaskCompletionRate(item) }}%
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-weight: bold; font-size: 20px; color: #0077ec">
|
||||
{{ electiveTaskCompletionRate(item) }}%
|
||||
</div>
|
||||
<el-progress
|
||||
:stroke-width="6"
|
||||
:show-text="false"
|
||||
color="#0077EC"
|
||||
:percentage="electiveTaskCompletionRate(item)"
|
||||
></el-progress>
|
||||
</div>
|
||||
<el-progress
|
||||
:stroke-width="8"
|
||||
:show-text="false"
|
||||
:percentage="electiveTaskCompletionRate(item)"
|
||||
></el-progress>
|
||||
</div>
|
||||
</template>
|
||||
<div class="progress-content">
|
||||
<div class="f-j-b" style="margin-bottom: 10px">
|
||||
<div class="f-a-c">
|
||||
<div style="font-weight: 700; font-size: 16px; color: #333333">
|
||||
总进度
|
||||
</div>
|
||||
<div style="font-size: 20px; color: #999999; margin-left: 12px">
|
||||
<div style="font-size: 16px; color: #333333">总进度</div>
|
||||
<div style="font-size: 18px; color: #999999; margin-left: 12px">
|
||||
{{ item.totalTaskCompletedNum }}/{{ item.totalTaskNum }}
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-weight: bold; font-size: 20px; color: #0077ec">
|
||||
<div style="font-size: 18px; color: #0077ec">
|
||||
{{ totalTaskCompletionRate(item) }}%
|
||||
</div>
|
||||
</div>
|
||||
<el-progress
|
||||
:stroke-width="8"
|
||||
:stroke-width="6"
|
||||
:show-text="false"
|
||||
color="#0077EC"
|
||||
:percentage="totalTaskCompletionRate(item)"
|
||||
></el-progress>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="!list || list.length < 2"></template>
|
||||
<div class="growth-right">
|
||||
<div class="title">专业力必修</div>
|
||||
<div
|
||||
:key="item.id"
|
||||
class="item-growth"
|
||||
:class="activeItem.id == item.id ? 'active' : ''"
|
||||
v-for="item of list"
|
||||
>
|
||||
<div class="icon"></div>
|
||||
<div @click="handlerAnchor(item)">
|
||||
{{ item.growthName }}
|
||||
<div class="growth-bg-icon">
|
||||
<img src="@/assets/images/growth/growth-bg-icon.png" />
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="!list.length">
|
||||
<div class="empty">
|
||||
<el-empty :image-size="200"></el-empty>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<template v-if="!list.length">
|
||||
<el-empty :image-size="200"></el-empty>
|
||||
</template>
|
||||
<!-- <template v-if="!list || list.length < 2">
|
||||
<div class="growth-right">
|
||||
<div class="title">专业力必修</div>
|
||||
<div
|
||||
:key="item.id"
|
||||
class="item-growth"
|
||||
:class="activeItem.id == item.id ? 'active' : ''"
|
||||
v-for="item of list"
|
||||
>
|
||||
<div class="icon"></div>
|
||||
<div @click="handlerAnchor(item)">
|
||||
{{ item.growthName }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template> -->
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@@ -166,6 +170,8 @@ export default {
|
||||
num = num * 100;
|
||||
num = num.toFixed(0);
|
||||
return Number(num);
|
||||
} else if (item.electiveTaskNum == 0) {
|
||||
return 100;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
@@ -237,6 +243,18 @@ export default {
|
||||
justify-content: center;
|
||||
}
|
||||
.growth {
|
||||
.empty {
|
||||
height: 600px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.el-icon-question {
|
||||
color: #387df7;
|
||||
font-size: 16px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.handler-add-padding {
|
||||
padding: 100px 38px 66px 40px !important;
|
||||
margin-top: -80px;
|
||||
@@ -250,8 +268,14 @@ export default {
|
||||
background: #ffffff;
|
||||
padding: 30px 38px 66px 40px;
|
||||
margin-bottom: 35px;
|
||||
position: relative;
|
||||
.growth-bg-icon {
|
||||
position: absolute;
|
||||
right: 92px;
|
||||
bottom: 0;
|
||||
}
|
||||
.progress-title {
|
||||
font-weight: 700;
|
||||
// font-weight: 700;
|
||||
font-size: 18px;
|
||||
color: #000000;
|
||||
margin: 28px 0 20px 0;
|
||||
@@ -260,16 +284,15 @@ export default {
|
||||
margin-bottom: 28px;
|
||||
}
|
||||
.tip-title {
|
||||
font-weight: 700;
|
||||
// font-weight: 700;
|
||||
font-size: 18px;
|
||||
color: #000000;
|
||||
margin: 30px 0 10px 0;
|
||||
}
|
||||
.tip-content {
|
||||
font-weight: 700;
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
color: #333333;
|
||||
line-height: 40px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.growth-nav {
|
||||
display: flex;
|
||||
@@ -279,12 +302,12 @@ export default {
|
||||
border-bottom: 2px solid #f5f5f5;
|
||||
}
|
||||
.growth-name {
|
||||
font-weight: 500;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
color: #0071ed;
|
||||
}
|
||||
.growth-state {
|
||||
font-size: 14px;
|
||||
font-size: 15px;
|
||||
margin-right: 18px;
|
||||
}
|
||||
.growth-btn {
|
||||
@@ -303,14 +326,15 @@ export default {
|
||||
.navbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 130px;
|
||||
height: 90px;
|
||||
padding-left: 40px;
|
||||
margin-bottom: 10px;
|
||||
color: #ffffff;
|
||||
background-image: url(../../assets/images/growth/growth-bg.png);
|
||||
background-size: 100% 100%;
|
||||
.nav-title {
|
||||
font-weight: 700;
|
||||
font-size: 22px;
|
||||
font-size: 18px;
|
||||
margin-right: 10%;
|
||||
}
|
||||
.nav-total {
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import top from '@/components/PortalHeader.vue'
|
||||
import top from '../../layout/components/TopNav/Index.vue'
|
||||
import UcHeader from '@/components/HomePage/homePage.vue'
|
||||
import MedalImg from '@/components/Portal/medalImg.vue';
|
||||
import apiStat from '@/api/phase2/stat.js';
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
{img:'01',url:'1265897142383042560'},
|
||||
{img:'02',url:'1265697724606210048'},
|
||||
{img:'003',url:'1280185851054231552'},
|
||||
{img:'04',url:''},
|
||||
{img:'04',url:'1321778585966247936'},
|
||||
],
|
||||
}
|
||||
},
|
||||
|
||||
@@ -185,11 +185,11 @@
|
||||
<div class="back_num" v-if="numIsFalse">
|
||||
<div class="search_div_num">
|
||||
当前已检索 <span style="color:#FF4040 ;">
|
||||
{{ caseList.count }}</span> 条数据
|
||||
{{ this.caseList.count }}</span> 条数据
|
||||
</div>
|
||||
</div>
|
||||
<div class="data-content">
|
||||
<div v-for="item in caseList.list" :key="isTimeData?item.browsingHistoryId : item.id" class="case-list">
|
||||
<div v-for="item in this.caseList.list" :key="isTimeData?item.browsingHistoryId : item.id" class="case-list">
|
||||
<div class="case-info">
|
||||
<div class="case-info-cont">
|
||||
<!-- <router-link :to="'/case/detail?id=' + item.id"> -->
|
||||
@@ -270,7 +270,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="caseList.showPagCount > queryCondition.pageSize">
|
||||
<div v-if="this.caseList.showPagCount > queryCondition.pageSize">
|
||||
<pagination :size="queryCondition.pageSize" :total="caseList.count" :page="queryCondition.pageIndex"
|
||||
layout="total, prev, pager, next, jumper" @change-page="currentChange"></pagination>
|
||||
</div>
|
||||
@@ -279,7 +279,7 @@
|
||||
<!-- <span class="pag-text" @click="loadMore()" v-if="moreState == 1">加载更多</span>
|
||||
<span class="pag-text-msg" v-else-if="moreState == 2">数据加载中</span>
|
||||
<span class="pag-text-msg" v-else-if="moreState == 3">没有更多数据了</span> -->
|
||||
<span class="notcoures" v-if="caseList.list.length == 0">
|
||||
<span class="notcoures" v-if="this.caseList.list.length == 0">
|
||||
<img :src="`${webBaseUrl}/images/nocase.png`" alt="">
|
||||
<h5>暂无案例,请优先学习其它案例吧~</h5>
|
||||
</span>
|
||||
@@ -555,7 +555,7 @@ export default {
|
||||
name: '',
|
||||
years: [],
|
||||
// 随机
|
||||
notInIds: [],//重复的id
|
||||
// notInIds: [],//重复的id
|
||||
orderField: "id",
|
||||
orderAsc: false,//排序
|
||||
sysType1:'',
|
||||
@@ -1507,7 +1507,7 @@ export default {
|
||||
};
|
||||
});
|
||||
res.result.list.forEach(item=>{
|
||||
item.viewRankTags = item.viewRankTags.slice(0,2)
|
||||
item.viewRankTags = item.viewRankTags?.slice(0,2)||[]
|
||||
})
|
||||
this.caseList.list = res.result.list
|
||||
this.getCaseUserData(res.result.list);
|
||||
@@ -1562,7 +1562,7 @@ export default {
|
||||
};
|
||||
});
|
||||
res.result.list.forEach(item=>{
|
||||
item.viewRankTags = item.viewRankTags.slice(0,2)
|
||||
item.viewRankTags = item.viewRankTags?.slice(0,2)||[]
|
||||
})
|
||||
this.caseList.list = res.result.list
|
||||
this.getCaseUserData(res.result.list);
|
||||
@@ -1599,12 +1599,17 @@ export default {
|
||||
} else {
|
||||
this.moreState = 3;
|
||||
}
|
||||
// console.log(res?.result?.list ,'有没有数据');
|
||||
if(res.result.list.length ===0){
|
||||
this.moreState = 3;
|
||||
this.isSeach = false;
|
||||
}
|
||||
console.log(res?.result?.list ,'有没有数据1');
|
||||
res.result.list.forEach(item=>{
|
||||
item.viewRankTags = item.viewRankTags.slice(0,2)
|
||||
item.viewRankTags = item.viewRankTags?.slice(0,2)||[]
|
||||
})
|
||||
console.log(res?.result?.list ,'有没有数据2');
|
||||
this.caseList.list = res.result.list
|
||||
this.getCaseUserData(res.result.list);
|
||||
// this.getCaseUserData(res.result.list);
|
||||
// 给所有的赋值
|
||||
this.caseList.count = res.result.count;
|
||||
this.caseList.showPagCount = res.result.count;
|
||||
|
||||
@@ -1,140 +1,135 @@
|
||||
<template>
|
||||
<div>
|
||||
<div style="margin-top: 50px;" v-if="page.count==0">
|
||||
<el-empty description="您当前暂无学习数据~"></el-empty>
|
||||
<div style="display: flex;justify-content:space-between; padding: 12px 32px 10px 18px;">
|
||||
<div style="display: flex;justify-content: flex-start;">
|
||||
<span class="title-myqalist">我报名的</span>
|
||||
<div style="margin-left:5px">
|
||||
<el-select v-model="courseType" class="uc-select" clearable placeholder="类型">
|
||||
<el-option label="全部类型" value=""></el-option>
|
||||
<!-- <el-option label="微课" :value="10"></el-option> -->
|
||||
<el-option label="录播课" :value="20"></el-option>
|
||||
<!-- <el-option label="在线课" value="online-course"></el-option> -->
|
||||
<!-- <el-option label="面授课" value="face-course"></el-option>
|
||||
<el-option label="学习项目" value="project"></el-option> -->
|
||||
<el-option label="线下课" :value="30"></el-option>
|
||||
<el-option label="学习项目" :value="40"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<el-select style="margin-left:12px" class="uc-select" v-model="status" clearable placeholder="学习进度">
|
||||
<el-option label="所有进度" value="0"></el-option>
|
||||
<el-option label="未开始" :value="1"></el-option>
|
||||
<el-option label="进行中" :value="2"></el-option>
|
||||
<el-option label="已完成" :value="9"></el-option>
|
||||
<!-- <el-option label="已停用" :value="3"></el-option> -->
|
||||
</el-select>
|
||||
<div style="padding-left: 12px;"><el-input class="uc-input" v-model="params.courseName" clearable placeholder="搜索名称"></el-input></div>
|
||||
<div style="padding-left: 12px;"><el-button type="primary" class="search-btn" icon="el-icon-search" @click="findStudys(true)">搜索</el-button></div>
|
||||
<div style="padding-left: 12px"><el-button type="primary" class="search-btn" icon="el-icon-refresh-right" @click="reset()">重置</el-button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div style="display: flex;justify-content:space-between; padding: 12px 32px 10px 18px;">
|
||||
<div style="display: flex;justify-content: flex-start;">
|
||||
<span class="title-myqalist">我报名的</span>
|
||||
<div style="margin-left:5px">
|
||||
<el-select v-model="courseType" class="uc-select" clearable placeholder="类型">
|
||||
<el-option label="全部类型" value=""></el-option>
|
||||
<!-- <el-option label="微课" :value="10"></el-option> -->
|
||||
<el-option label="录播课" :value="20"></el-option>
|
||||
<!-- <el-option label="在线课" value="online-course"></el-option> -->
|
||||
<!-- <el-option label="面授课" value="face-course"></el-option>
|
||||
<el-option label="学习项目" value="project"></el-option> -->
|
||||
<el-option label="线下课" :value="30"></el-option>
|
||||
<el-option label="学习项目" :value="40"></el-option>
|
||||
</el-select>
|
||||
<div class="uc-list" v-loading="loading">
|
||||
<div class="uc-course" v-for="(item,idx) in couresList" :key="idx">
|
||||
<div class="uc-course-img" style="width: 260px;height:144px" @click="jumpRouter(item)">
|
||||
<course-image :course="item"></course-image>
|
||||
<div class="uc-type">
|
||||
<span v-if="item.courseType==10">录播</span>
|
||||
<span v-if="item.courseType==20">录播</span>
|
||||
<span v-if="item.courseType==30">线下课</span>
|
||||
<span v-if="item.courseType==40">学习项目</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uc-course-info" @click="jumpRouter(item)">
|
||||
<div class="uc-course-name" style="cursor: pointer;">
|
||||
|
||||
<div style="flex:1;">
|
||||
<a v-html="$keywordActiveShow(item.courseName,params.courseName)" class="uc-title two-line-ellipsis"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding-top:6px" class="uc-course-text"><i class="el-icon-time" style="margin-right:4px"></i>报名时间:{{ formatsec(Number(item.startTime) * 1000 )}}</div>
|
||||
<div v-if="item.courseType==30">
|
||||
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-location-outline" style="margin-right:4px"></i>面授地点:{{ item.courseAddress }}</div>
|
||||
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-timer" style="margin-right:4px"></i>上课时间:{{ formatsec(Number(item.attendCourseTime) * 1000 ) }}</div>
|
||||
</div>
|
||||
<div v-else style="width: 80%;margin-top: 20px;display: flex;">
|
||||
<div style="color: #333333;font-size: 14px;"><i class="el-icon-s-operation" style="margin-right:4px"></i>当前进度:</div>
|
||||
<div style="width:170px;padding-top: 5px;">
|
||||
<el-progress :percentage="item.progress" color="#FFA050"></el-progress>
|
||||
</div>
|
||||
<el-select style="margin-left:12px" class="uc-select" v-model="status" clearable placeholder="学习进度">
|
||||
<el-option label="所有进度" value="0"></el-option>
|
||||
<el-option label="未开始" :value="1"></el-option>
|
||||
<el-option label="进行中" :value="2"></el-option>
|
||||
<el-option label="已完成" :value="9"></el-option>
|
||||
<!-- <el-option label="已停用" :value="3"></el-option> -->
|
||||
</el-select>
|
||||
<div style="padding-left: 12px;"><el-input class="uc-input" v-model="params.courseName" clearable placeholder="搜索名称"></el-input></div>
|
||||
<div style="padding-left: 12px;"><el-button type="primary" class="search-btn" icon="el-icon-search" @click="findStudys(true)">搜索</el-button></div>
|
||||
<div style="padding-left: 12px"><el-button type="primary" class="search-btn" icon="el-icon-refresh-right" @click="reset()">重置</el-button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uc-list" v-loading="loading">
|
||||
<div class="uc-course" v-for="(item,idx) in couresList" :key="idx">
|
||||
<div class="uc-course-img" style="width: 260px;height:144px" @click="jumpRouter(item)">
|
||||
<course-image :course="item"></course-image>
|
||||
<div class="uc-type">
|
||||
<span v-if="item.courseType==10">录播</span>
|
||||
<span v-if="item.courseType==20">录播</span>
|
||||
<span v-if="item.courseType==30">线下课</span>
|
||||
<span v-if="item.courseType==40">学习项目</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uc-course-info" @click="jumpRouter(item)">
|
||||
<div class="uc-course-name" style="cursor: pointer;">
|
||||
|
||||
<div style="flex:1;">
|
||||
<a v-html="$keywordActiveShow(item.courseName,params.courseName)" class="uc-title two-line-ellipsis"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding-top:6px" class="uc-course-text"><i class="el-icon-time" style="margin-right:4px"></i>报名时间:{{ formatsec(Number(item.startTime) * 1000 )}}</div>
|
||||
<div class="uc-course-btns">
|
||||
<!-- <div style="text-align: right;">
|
||||
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
|
||||
<el-dropdown trigger="click" style="display: none;">
|
||||
<span class="el-dropdown-link">
|
||||
<svg-icon style="margin-right: 0;font-size:26px;" icon-class="spot"></svg-icon>
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown" class="dropdown-box">
|
||||
<el-dropdown-item command="a">
|
||||
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div> -->
|
||||
<div v-if="item.courseType==30">
|
||||
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-location-outline" style="margin-right:4px"></i>面授地点:{{ item.courseAddress }}</div>
|
||||
<div class="uc-course-text" style="margin-top: 8px;"><i class="el-icon-timer" style="margin-right:4px"></i>上课时间:{{ formatsec(Number(item.attendCourseTime) * 1000 ) }}</div>
|
||||
</div>
|
||||
<div v-else style="width: 80%;margin-top: 20px;display: flex;">
|
||||
<div style="color: #333333;font-size: 14px;"><i class="el-icon-s-operation" style="margin-right:4px"></i>当前进度:</div>
|
||||
<div style="width:170px;padding-top: 5px;">
|
||||
<el-progress :percentage="item.progress" color="#FFA050"></el-progress>
|
||||
<div v-if="item.applyStatus==10"><!--「报名待审核」展示为「等待审核」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">等待审核</el-button></div>
|
||||
<!-- <div><el-button style="margin-top:30px;text-align: right;" type="text" size="small">取消报名</el-button></div> -->
|
||||
</div>
|
||||
<div v-if="item.applyStatus==20"><!--「报名取消」」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">已取消</el-button></div>
|
||||
<div><el-button @click.stop="reSignupCourse(item)" style="margin-top:30px;text-align: right;" type="text" size="small">重新报名</el-button></div>
|
||||
</div>
|
||||
<div v-if="item.applyStatus==30"><!--「报名审核通过」展示为「报名成功」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名成功</el-button></div>
|
||||
</div>
|
||||
<div v-if="item.applyStatus==40"><!--「审核拒绝」展示为「报名失败」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名失败</el-button></div>
|
||||
<div style="margin-top:30px;text-align: right;">
|
||||
<el-button @click.stop="reSignupCourse(item)" type="text" size="small">重新报名</el-button>
|
||||
<el-button @click.stop="delItem(item,idx)" type="text" size="small">删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="item.applyStatus==50"><!--「报名已删除」展示为「报名已删除」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名已删除</el-button></div>
|
||||
<div><el-button @click.stop="delItem(item,idx)" style="margin-top:30px;text-align: right;" type="text" size="small">删除</el-button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uc-course-btns">
|
||||
<!-- <div style="text-align: right;">
|
||||
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
|
||||
<el-dropdown trigger="click" style="display: none;">
|
||||
<span class="el-dropdown-link">
|
||||
<svg-icon style="margin-right: 0;font-size:26px;" icon-class="spot"></svg-icon>
|
||||
</span>
|
||||
<el-dropdown-menu slot="dropdown" class="dropdown-box">
|
||||
<el-dropdown-item command="a">
|
||||
<el-button class="del" @click.stop="delItem(item,idx)" type="text" icon="el-icon-delete" size="mini" title="删除"></el-button>
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div> -->
|
||||
<div v-if="item.courseType==30">
|
||||
<div v-if="item.applyStatus==10"><!--「报名待审核」展示为「等待审核」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">等待审核</el-button></div>
|
||||
<!-- <div><el-button style="margin-top:30px;text-align: right;" type="text" size="small">取消报名</el-button></div> -->
|
||||
<div v-else >
|
||||
<span @click.stop="jumpRouter(item)">
|
||||
<!-- <el-button style="margin-top:30px" v-if="item.progress==0" type="primary" size="small">开始学习</el-button> -->
|
||||
<el-button style="margin-top:30px" v-if="item.progress<100" type="primary" size="small">继续学习</el-button>
|
||||
<el-button style="margin-top:30px" v-if="item.progress==100" type="primary" size="small">回顾</el-button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="couresList.length > 0 " style="text-align: center;margin-top:57px;">
|
||||
<el-pagination background
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
:current-page="page.pageIndex"
|
||||
:page-sizes="[10, 20, 30, 40]"
|
||||
:page-size="page.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="page.count">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<div class="list-wu">
|
||||
<div v-if="loading"> <span>加载中...</span> </div>
|
||||
<div v-else class="home-no-list">
|
||||
<div v-if="page.count==0 && !loading">
|
||||
<div v-if="isSearch">
|
||||
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">未找到您要搜索的内容</p>
|
||||
</div>
|
||||
<div v-if="item.applyStatus==20"><!--「报名取消」」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">已取消</el-button></div>
|
||||
<div><el-button @click.stop="reSignupCourse(item)" style="margin-top:30px;text-align: right;" type="text" size="small">重新报名</el-button></div>
|
||||
<div v-else >
|
||||
<img class="img" style="width:360px;height:226px" :src="`${webBaseUrl}/images/homeWu/no-madel.png`" alt="" srcset="">
|
||||
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">您还没有报名课程哦~</p>
|
||||
</div>
|
||||
<div v-if="item.applyStatus==30"><!--「报名审核通过」展示为「报名成功」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名成功</el-button></div>
|
||||
</div>
|
||||
<div v-if="item.applyStatus==40"><!--「审核拒绝」展示为「报名失败」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名失败</el-button></div>
|
||||
<div style="margin-top:30px;text-align: right;">
|
||||
<el-button @click.stop="reSignupCourse(item)" type="text" size="small">重新报名</el-button>
|
||||
<el-button @click.stop="delItem(item,idx)" type="text" size="small">删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="item.applyStatus==50"><!--「报名已删除」展示为「报名已删除」-->
|
||||
<div><el-button style="margin-top:30px" type="primary" disabled size="small">报名已删除</el-button></div>
|
||||
<div><el-button @click.stop="delItem(item,idx)" style="margin-top:30px;text-align: right;" type="text" size="small">删除</el-button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else >
|
||||
<span @click.stop="jumpRouter(item)">
|
||||
<!-- <el-button style="margin-top:30px" v-if="item.progress==0" type="primary" size="small">开始学习</el-button> -->
|
||||
<el-button style="margin-top:30px" v-if="item.progress<100" type="primary" size="small">继续学习</el-button>
|
||||
<el-button style="margin-top:30px" v-if="item.progress==100" type="primary" size="small">回顾</el-button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="couresList.length > 0 " style="text-align: center;margin-top:57px;">
|
||||
<el-pagination background
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
:current-page="page.pageIndex"
|
||||
:page-sizes="[10, 20, 30, 40]"
|
||||
:page-size="page.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="page.count">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<div class="list-wu">
|
||||
<div v-if="loading"> <span>加载中...</span> </div>
|
||||
<div v-else class="home-no-list">
|
||||
<div v-if="page.count==0 && !loading">
|
||||
<div v-if="isSearch">
|
||||
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">未找到您要搜索的内容</p>
|
||||
</div>
|
||||
<div v-else >
|
||||
<img class="img" style="width:360px;height:226px" :src="`${webBaseUrl}/images/homeWu/no-madel.png`" alt="" srcset="">
|
||||
<p class="text" style="color: #333333;margin-top:50px;font-size: 14px">您还没有报名课程哦~</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -258,8 +253,8 @@ export default {
|
||||
if(res.status==200){
|
||||
let localCourseIds=[];//本地在线课程的id集合
|
||||
res.result.list.forEach(item=>{
|
||||
if(item.courseImage.startsWith('/upload')){
|
||||
item.courseImage=$this.fileUrl+item.courseImage.substring(7)
|
||||
if(item.courseImage?.startsWith('/upload')){
|
||||
item.courseImage=$this.fileUrl+item.courseImage?.substring(7)
|
||||
}
|
||||
if(item.source==2){
|
||||
localCourseIds.push(item.id);
|
||||
|
||||
@@ -1,567 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div style="background-color: #0078fc;">
|
||||
<portalHeader textColor="#fff" class="qa-nav" @emitInput="emitInput" @showClass="showClass"></portalHeader>
|
||||
</div>
|
||||
<div style=" background: #0078fc;height: 150px;width: 100%;position: absolute;top: 0;z-index:-9999;"></div>
|
||||
<div class="moreactive" style="padding: 30px">
|
||||
<!-- 面包屑导航 -->
|
||||
<div class="crumb">
|
||||
<div>学习任务</div>
|
||||
<div style="margin-left: 6px; margin-right: 6px">/</div>
|
||||
<div>外部考试</div>
|
||||
<div style="margin-left: 6px; margin-right: 6px">/</div>
|
||||
<div style="font-weight: 700; font-size: 16px">考试详情</div>
|
||||
<div class="return">
|
||||
<div style="background: #fff;display: flex;color:#0073FB;align-items: center;justify-content: center;border-radius: 6px;width: 92px;height: 32px;" @click="returnclick">
|
||||
<!-- <div style="color:#0073FB;display: flex;align-items: center;"> -->
|
||||
<img class="img2" style="margin-right:11px;cursor: pointer;" src="../../assets/images/growth/return.png" />
|
||||
<span>返回</span>
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 面包屑导航 -->
|
||||
<!-- 详细信息 -->
|
||||
<div class="detailinfo">
|
||||
<div class="detail">
|
||||
<div class="detailT">
|
||||
<div class="left">
|
||||
<div class="debateTitle" style="color:rgba(51, 51, 51, 1);font-size:20px;margin-top:46px;">【考试】{{ this.$route.query.pName }}</div>
|
||||
<div class="title">
|
||||
<img
|
||||
style="width: 20px; height: 20px"
|
||||
src="../../assets/images/growth/yuan.png"
|
||||
/>
|
||||
<div class="text">数据来源</div>
|
||||
<div class="box"></div>
|
||||
</div>
|
||||
<div class="all" style="font-size:14px;color:rgba(51, 51, 48, 1);">
|
||||
{{ datainfo.source ? datainfo.source : "-" }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detailT" style="margin-top:20px;height:671px;">
|
||||
<div class="left">
|
||||
<div class="title">
|
||||
<img
|
||||
style="width: 20px; height: 20px"
|
||||
src="../../assets/images/growth/yuan.png"
|
||||
/>
|
||||
<div class="text">考试说明</div>
|
||||
<div class="box"></div>
|
||||
</div>
|
||||
<!-- <div style="display: flex; align-items: center"></div> -->
|
||||
<div class="all" style="font-size:14px;color:rgba(51, 51, 48, 1);">
|
||||
<div>
|
||||
{{ datainfo.examinationExplain ? datainfo.examinationExplain : "暂无考试说明" }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 详细信息 -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import portalHeader from '@/components/PortalHeader.vue';
|
||||
import {queryExternalExam,submitExternalExam} from '@/api/growth/index'
|
||||
export default {
|
||||
name: "ExamScore",
|
||||
components: { portalHeader },
|
||||
data() {
|
||||
return {
|
||||
hasPrev: false,
|
||||
hasNext: false,
|
||||
exname: "",
|
||||
datainfo: {},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
queryExternalExam({
|
||||
externalId: this.$route.query.courseId
|
||||
}).then(res=>{
|
||||
console.log(res,'res')
|
||||
this.datainfo = res.data
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
returnclick () {
|
||||
this.$router.back();
|
||||
},
|
||||
emitInput(val) {
|
||||
this.queryKeyWord = val;
|
||||
this.isSeach = true;
|
||||
this.search();
|
||||
},
|
||||
showClass(flag) {
|
||||
if (flag) {
|
||||
this.showUClass = flag;
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.moreactive {
|
||||
.crumb {
|
||||
color: #fff;
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
line-height: 24px;
|
||||
position: relative;
|
||||
}
|
||||
.return{
|
||||
position: absolute;
|
||||
right: 1%;
|
||||
.text{
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
.preNext {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
|
||||
.content {
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
width: 43px;
|
||||
height: 14px;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: -6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 23px;
|
||||
height: 23px;
|
||||
border-radius: 50%;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.debateTitle {
|
||||
margin-top: 15px;
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
height: 24px;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
.detailinfo {
|
||||
width: 100%;
|
||||
margin-top: 20px;
|
||||
display: flex;
|
||||
|
||||
.detail {
|
||||
flex: 1;
|
||||
// margin-right: 20px;
|
||||
.detailT {
|
||||
min-height: 95px;
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
color: rgba(51, 51, 51, 1);
|
||||
display: flex;
|
||||
padding-bottom: 20px;
|
||||
|
||||
.left {
|
||||
margin-left: 48px;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.right {
|
||||
width: 417px;
|
||||
margin-right: 48px;
|
||||
|
||||
.righttitle {
|
||||
display: flex;
|
||||
padding-top: 39px;
|
||||
position: relative;
|
||||
|
||||
.text {
|
||||
margin-left: 8px;
|
||||
font-size: 16px;
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.box {
|
||||
width: 75px;
|
||||
height: 10px;
|
||||
background-color: rgba(36, 120, 255, 0.15);
|
||||
position: absolute;
|
||||
left: 23px;
|
||||
top: 53px;
|
||||
}
|
||||
}
|
||||
|
||||
.timebox {
|
||||
width: 417px;
|
||||
height: 149px;
|
||||
background: linear-gradient(90deg, #b6c6e1 0%, #89aed6 100%);
|
||||
border-radius: 4px;
|
||||
margin-top: 42px;
|
||||
}
|
||||
|
||||
.innertime {
|
||||
margin-top: 17px;
|
||||
margin-left: 55px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.endtime {
|
||||
margin-left: 10px;
|
||||
margin-top: 16px;
|
||||
width: 397px;
|
||||
height: 81px;
|
||||
background: #f2f5f7;
|
||||
border-radius: 0px 8px 0px 8px;
|
||||
|
||||
.endtimetext {
|
||||
margin-top: 25px;
|
||||
margin-left: 46px;
|
||||
|
||||
.te {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
color: #4a9cf8;
|
||||
line-height: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.explain {
|
||||
margin-top: 30px;
|
||||
width: 416px;
|
||||
padding-bottom: 50px;
|
||||
background: #f2f5f7;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.explaincontent {
|
||||
width: 368px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: #333330;
|
||||
line-height: 24px;
|
||||
margin-left: 24px;
|
||||
margin-top: 47px;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-top: 39px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.title .text {
|
||||
margin-left: 8px;
|
||||
font-size: 16px;
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.title .box {
|
||||
width: 75px;
|
||||
height: 10px;
|
||||
background-color: rgba(36, 120, 255, 0.15);
|
||||
position: absolute;
|
||||
left: 23px;
|
||||
top: 53px;
|
||||
}
|
||||
|
||||
.all {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
// width: 1280px;
|
||||
margin-right: 48px;
|
||||
margin-top: 43px;
|
||||
|
||||
.allbox1 {
|
||||
margin-right: 22px;
|
||||
background: linear-gradient(
|
||||
0deg,
|
||||
rgba(160, 193, 230, 0) 0%,
|
||||
rgba(161, 195, 231, 0.2) 100%
|
||||
);
|
||||
}
|
||||
|
||||
.allbox2 {
|
||||
margin-right: 22px;
|
||||
background: linear-gradient(
|
||||
0deg,
|
||||
rgba(177, 219, 229, 0) 0%,
|
||||
rgba(172, 216, 227, 0.2) 100%
|
||||
);
|
||||
}
|
||||
|
||||
.allbox3 {
|
||||
background: linear-gradient(
|
||||
0deg,
|
||||
rgba(195, 209, 234, 0) 0%,
|
||||
rgba(191, 206, 231, 0.2) 100%
|
||||
);
|
||||
}
|
||||
|
||||
.item {
|
||||
// width: 410px;
|
||||
width: calc(100% - 44px);
|
||||
height: 149px;
|
||||
text-align: center;
|
||||
border-radius: 4px;
|
||||
|
||||
.item1 {
|
||||
color: #089dff;
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
margin-top: 36px;
|
||||
}
|
||||
|
||||
.item2 {
|
||||
color: #333330;
|
||||
font-size: 14px;
|
||||
margin-top: 29px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.join {
|
||||
// width: 1280px;
|
||||
margin-right: 48px;
|
||||
// min-height: 408px;
|
||||
// background: #f5f6f7;
|
||||
// border-radius: 8px;
|
||||
margin-top: 32px;
|
||||
margin-left: 21px;
|
||||
flex: 1;
|
||||
|
||||
.stem {
|
||||
display: flex;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: #333330;
|
||||
line-height: 38px;
|
||||
}
|
||||
|
||||
.options {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.radio {
|
||||
margin-top: 14px;
|
||||
margin-left: -16px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.radio label {
|
||||
line-height: 20px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-weight: normal;
|
||||
|
||||
.opt-text {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
color: #333330;
|
||||
line-height: 18px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.radio .option {
|
||||
width: 19px;
|
||||
height: 18px;
|
||||
// position: absolute;
|
||||
// top: 1px;
|
||||
// // top: 32px;
|
||||
// left: 0px;
|
||||
background-size: cover;
|
||||
// background: url(../../assets/image/noselect.png) no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.radio input[type="radio"] {
|
||||
display: inline-block;
|
||||
margin-right: -3px;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.radio input[type="radio"]:checked + div {
|
||||
// background: url(../../assets/image/select.png) no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.imgcontent {
|
||||
display: flex;
|
||||
|
||||
.imgone {
|
||||
width: 140px;
|
||||
height: 140px;
|
||||
border-radius: 8px;
|
||||
// background-image: url(../../assets/image/px.png);
|
||||
background-size: 100% 100%;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
|
||||
.ontitle {
|
||||
margin-top: 27px;
|
||||
font-size: 14px;
|
||||
color: #333330;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.detailB {
|
||||
min-height: 363px;
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
margin-top: 20px;
|
||||
|
||||
.el-tabs__item {
|
||||
height: 69px;
|
||||
padding: 25px 7px 0px 52px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.el-tabs__nav-wrap::after {
|
||||
background-color: rgba(56, 125, 247, 0.2);
|
||||
}
|
||||
|
||||
.enclosure {
|
||||
height: 89px;
|
||||
margin-left: 51px;
|
||||
margin-right: 40px;
|
||||
// border-bottom: 1px solid rgba(56, 125, 247, 0.2);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.enclosureL {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #677d86;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.download {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
color: #2478ff;
|
||||
line-height: 24px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.work {
|
||||
margin-left: 51px;
|
||||
margin-right: 40px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: 37px;
|
||||
}
|
||||
|
||||
.work .question {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #333330;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.work .active {
|
||||
width: 82px;
|
||||
height: 28px;
|
||||
background: linear-gradient(90deg, #a5d4e0 0%, #b4dce6 100%);
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
margin-right: 11px;
|
||||
}
|
||||
|
||||
.work .unactive {
|
||||
width: 80px;
|
||||
height: 26px;
|
||||
border: 1px solid #a5d4e0;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #a5d4e0;
|
||||
line-height: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 11px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.work .btncolor {
|
||||
background: linear-gradient(90deg, #84aad2 0%, #a4c5e9 100%);
|
||||
}
|
||||
|
||||
.work .bordercolor {
|
||||
border: 1px solid #85aad2;
|
||||
}
|
||||
|
||||
.work .fontcolor {
|
||||
color: rgba(133, 170, 210, 1);
|
||||
}
|
||||
|
||||
.work .submit {
|
||||
width: 126px;
|
||||
height: 46px;
|
||||
background: #2478ff;
|
||||
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
|
||||
border-radius: 4px;
|
||||
font-size: 16px;
|
||||
font-weight: 800;
|
||||
color: #ffffff;
|
||||
line-height: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,653 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div v-if="Object.keys(detailData).length" class="growth">
|
||||
<div class="growth_heads">
|
||||
<div class="growth_left">
|
||||
<div class="left_text">我的专业力必修</div>
|
||||
<el-popover
|
||||
placement="right"
|
||||
width="437"
|
||||
trigger="hover"
|
||||
:visible-arrow="false"
|
||||
v-model="explainBody"
|
||||
popper-class="growth_explain"
|
||||
>
|
||||
<div slot="reference" class="growth_i">
|
||||
<div class="growth_mark">?</div>
|
||||
</div>
|
||||
<div class="growth_explain1">
|
||||
<div class="growth_explain_text">
|
||||
<div class="text">根据您的归属组织、您所在岗位、职级,已为您自动匹配“{{detailData.growName || ''}}”,抓紧时间学习吧~</div>
|
||||
<div class="explain_close" @click="explainBody = false"></div>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover>
|
||||
</div>
|
||||
<div class="growth_right">
|
||||
<div class="right_text">什么是专业力必修</div>
|
||||
<div class="growth_img" @click="checkedTrue">
|
||||
<img class="img" src="../../assets/images/growth/mark.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="growth_body">
|
||||
<div class="body_head">
|
||||
<div class="head_left">{{detailData.growName || ''}}</div>
|
||||
<div class="head_right">
|
||||
<div class="head_right_one">{{detailData.organizationName || ''}}</div>
|
||||
<div class="head_right_two">
|
||||
<span class="head_right_sta">学习状态:</span>
|
||||
<span class="head_right_status" :style="{color: ['#FF8336','#31AF0D','#409EFF '][detailData.studyStatus]}"> {{detailData.studyStatus==0?'未开始':detailData.studyStatus==1?'已完成':'进行中'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <el-popover
|
||||
placement="bottom-end"
|
||||
width="300"
|
||||
trigger="click"
|
||||
:visible-arrow="false"
|
||||
v-model="downBody"
|
||||
offset="0"
|
||||
popper-class="growth_body_down"
|
||||
>
|
||||
<div slot="reference" class="growth_body_shared">
|
||||
<img class="shared_img" src="../../assets/images/growth/growthRight.png" alt="">
|
||||
<span class="shared_text">共享文档</span>
|
||||
</div>
|
||||
<div class="growth_body_down">
|
||||
<div class="down_head">
|
||||
<span class="down_head_text">共享文档</span>
|
||||
<div class="down_close" @click="downBody = false">
|
||||
<img class="down_close_img" src="../../assets/images/growth/close.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="down_over">
|
||||
<div class="down_body" v-for="itme in 10">
|
||||
<div class="down_body_left">
|
||||
<img class="left_img" src="../../assets/images/growth/ppt.png" alt="">
|
||||
<span title="人工智能启蒙讲解讲义.pptx" class="left_text">人工智能启蒙讲解讲义.pptx</span>
|
||||
</div>
|
||||
<div class="down_btn">
|
||||
<span class="down_btn_text">下载</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover> -->
|
||||
|
||||
<div v-if="detailData.remark" class="body_explain">
|
||||
<div class="body_explain_icon">
|
||||
<img class="body_explain_img" src="../../assets/images/growth/growthLeft.png" alt="">
|
||||
<div class="body_explain_text">说明</div>
|
||||
</div>
|
||||
<div class="body_explain_item">
|
||||
<div class="body_explain_text">
|
||||
{{detailData.remark || ''}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body_schedule" v-if="detailData.taskNum > 0">
|
||||
<div class="body_schedule_icon">
|
||||
<img class="body_schedule_img" src="../../assets/images/growth/growthTime.png" alt="">
|
||||
<div class="body_schedule_text">学习进度</div>
|
||||
</div>
|
||||
<div class="body_schedule_item">
|
||||
<div class="body_schedule_one">
|
||||
<div class="body_schedule_left">
|
||||
<div style="margin-bottom: 9px;">总任务</div>
|
||||
<div>当前任务</div>
|
||||
</div>
|
||||
<div class="body_schedule_right">
|
||||
<div style="margin-bottom: 9px;">{{detailData.taskNum}}门</div>
|
||||
<div :title="detailData.currentTaskName">{{detailData.currentTaskName.length>30?detailData.currentTaskName.slice(0,30)+'...':detailData.currentTaskName}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body_schedule_two">
|
||||
<div class="body_schedule_pro">
|
||||
<div class="pro_text">总进度</div>
|
||||
<div style="display: flex;align-items: center;">
|
||||
<el-progress style="width: 213px;" :show-text="false" :stroke-width="10" :percentage="Number(((detailData.overallCompletionRate || 0)*100).toFixed(2))"></el-progress>
|
||||
<div class="text">{{ Number(((detailData.overallCompletionRate || 0)*100).toFixed(2)) || 0 }}%</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body_schedule_btn" @click="startLearn">
|
||||
<span class="body_schedule_text">{{detailData.overallCompletionRate==0?'开始学习':detailData.overallCompletionRate==1?'回顾':'继续学习'}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<el-empty :image-size="200"></el-empty>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-dialog
|
||||
title="专业力必修说明"
|
||||
:visible.sync="centerDialogVisible"
|
||||
width="476px"
|
||||
style="margin-top: 30vh;"
|
||||
center>
|
||||
<div class="dialog_body">
|
||||
<div class="dialog_body_text">
|
||||
本功能针对学员所在组织、岗位、职级自动匹配专业力必修任务,完成专业力必修任务方可晋升
|
||||
</div>
|
||||
<div @click="centerDialogVisible = false" class="dialog_body_btn">
|
||||
<span>我已阅读</span>
|
||||
</div>
|
||||
<div class="dialog_body_foot">
|
||||
<el-checkbox v-model="checked">下次进入不再弹窗</el-checkbox>
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
<el-empty v-else :image-size="200"></el-empty>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getList} from '@/api/growth'
|
||||
import {mapGetters} from 'vuex'
|
||||
export default {
|
||||
name: 'Growth',
|
||||
data() {
|
||||
return {
|
||||
downBody: false,
|
||||
explainBody: false,
|
||||
centerDialogVisible: false,
|
||||
checked: false,
|
||||
detailData: {},
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
getList(this.userInfo.aid).then(res=>{
|
||||
if(res.code == 200 ){
|
||||
this.detailData = res.data
|
||||
}
|
||||
if(res.code == 4){
|
||||
// this.$message({
|
||||
// type: 'error',
|
||||
// message: res.msg
|
||||
// })
|
||||
}
|
||||
})
|
||||
if(localStorage.getItem("checkedGrowth") != null){
|
||||
this.centerDialogVisible = localStorage.getItem("checkedGrowth") === "true"
|
||||
}else{
|
||||
this.centerDialogVisible = true
|
||||
}
|
||||
},
|
||||
watch:{
|
||||
checked(){
|
||||
this.checkedVisible()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
startLearn(){
|
||||
this.$router.push({
|
||||
path: '/growthpath',
|
||||
query: {growId:this.detailData.growId,name: this.detailData.growName,isTrue: true,status:this.detailData.overallCompletionRate}
|
||||
})
|
||||
},
|
||||
checkedTrue(){
|
||||
this.centerDialogVisible = true
|
||||
this.checked = localStorage.getItem("checkedGrowth") === "false"
|
||||
},
|
||||
checkedVisible(){
|
||||
// this.centerDialogVisible = false
|
||||
localStorage.setItem("checkedGrowth",!this.checked)
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['userInfo'])
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
::v-deep .el-dialog__header{
|
||||
height: 68px;
|
||||
background: linear-gradient( 180deg, #E1DAFF 0%, #FFFFFF 100%);
|
||||
padding-top: 23px;
|
||||
margin-bottom: 36px;
|
||||
}
|
||||
::v-deep .el-dialog__body{
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.growth_body_down{
|
||||
background-image: url(../../assets/images/growth/fileBack.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size:100%;
|
||||
width: 487px;
|
||||
max-height: 452px;
|
||||
position: absolute;
|
||||
right: -120px;
|
||||
top: -22px;
|
||||
padding-right: 32px;
|
||||
.down_head{
|
||||
margin-top: 57px;
|
||||
margin-bottom: 34px;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
.down_head_text{
|
||||
width: 96px;
|
||||
height: 28px;
|
||||
font-weight: 600;
|
||||
font-size: 24px;
|
||||
color: #387DF7;
|
||||
line-height: 28px;
|
||||
text-align: left;
|
||||
}
|
||||
.down_close{
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
right: 37px;
|
||||
top: -18px;
|
||||
.down_close_img{
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.down_over{
|
||||
padding: 0px 40px 0px 63px;
|
||||
overflow-y: auto;
|
||||
max-height: 309px;
|
||||
.down_body{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 22px;
|
||||
.down_body_left{
|
||||
display: flex;
|
||||
.left_img{
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
.left_text{
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
margin-left: 18px;
|
||||
width: 210px;
|
||||
height: 20px;
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
color: #677D86;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
.down_btn{
|
||||
cursor: pointer;
|
||||
width: 70px;
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #387DF7;
|
||||
text-align: center;
|
||||
.down_btn_text{
|
||||
width: 28px;
|
||||
height: 20px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #387DF7;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.growth_explain{
|
||||
top: 347xp !important;
|
||||
.growth_explain1{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 487px;
|
||||
height: 170px;
|
||||
margin: -37px;
|
||||
background: url("../../assets/images/growth/explain.png") no-repeat;
|
||||
background-size: 100%;
|
||||
.growth_explain_text{
|
||||
width: 376px;
|
||||
height: 56px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
line-height: 28px;
|
||||
text-align: left;
|
||||
position: relative;
|
||||
.text{
|
||||
display: -webkit-box;
|
||||
word-wrap: break-word;
|
||||
word-break:break-all;
|
||||
overflow: hidden;
|
||||
text-overflow:ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp:2;
|
||||
}
|
||||
.explain_close{
|
||||
cursor: pointer;
|
||||
background-image: url(../../assets/images/growth/close.png);
|
||||
z-index: 99999;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
position: absolute;
|
||||
right: -21px;
|
||||
top: -26px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.growth{
|
||||
.dialog_body{
|
||||
height: 238px;
|
||||
margin-bottom: 32px;
|
||||
.dialog_body_text{
|
||||
width: 372px;
|
||||
height: 52px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
line-height: 26px;
|
||||
text-align: left;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 56px;
|
||||
}
|
||||
.dialog_body_btn{
|
||||
cursor: pointer;
|
||||
width: 152px;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 31px;
|
||||
height: 40px;
|
||||
background: #387DF7;
|
||||
box-shadow: 1px 2px 8px 1px rgba(56,125,247,0.38);
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
line-height: 40px;
|
||||
color: #ffffff;
|
||||
font-size: 14px;
|
||||
}
|
||||
.dialog_body_foot{
|
||||
margin: 0 0 40px 61px;
|
||||
}
|
||||
}
|
||||
.growth_heads{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin: 10px 43px 29px 40px;
|
||||
position: relative;
|
||||
.growth_left{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
line-height: 40px;
|
||||
.left_text{
|
||||
// width: 108px;
|
||||
height: 25px;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
color: #333333;
|
||||
text-align: left;
|
||||
}
|
||||
.growth_i{
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-left: 6px;
|
||||
border: 1px solid #999999;
|
||||
border-radius: 100%;
|
||||
margin-top: 13px;
|
||||
.growth_mark{
|
||||
color: #999999;
|
||||
line-height: 15px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.growth_right{
|
||||
width: 158px;
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
background: #387DF7;
|
||||
box-shadow: 1px 2 12px 1px rgba(56,125,247,0.34);
|
||||
border-radius: 16px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
.right_text{
|
||||
// width: 112px;
|
||||
height: 22px;
|
||||
font-weight: 400;
|
||||
font-size: 13px;
|
||||
color: #FFFFFF;
|
||||
text-align: left;
|
||||
}
|
||||
.growth_img{
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-left: 10px;
|
||||
.img{
|
||||
width: 100%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.growth_body{
|
||||
// max-width: 1340px;
|
||||
height: 574px;
|
||||
background: #FFFFFF;
|
||||
border-radius: 10px;
|
||||
border: 1px solid #E4EDFE;
|
||||
margin: 0 41px 0px 38px;
|
||||
position: relative;
|
||||
.growth_body_shared{
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 46px;
|
||||
top: 107px;
|
||||
.shared_img{
|
||||
width: 21px;
|
||||
height: 18px;
|
||||
}
|
||||
.shared_text{
|
||||
width: 64px;
|
||||
height: 22px;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
color: #409EFF;
|
||||
line-height: 22px;
|
||||
text-align: left;
|
||||
margin-left: 9px;
|
||||
}
|
||||
}
|
||||
.body_head{
|
||||
// max-width: 1066px;
|
||||
height: 70px;
|
||||
background: linear-gradient( 180deg, #DEEBFF 0%, #FFFFFF 100%);
|
||||
border-radius: 10px 10px 0px 0px;
|
||||
border: 1px solid #E4EDFE;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 23px;
|
||||
.head_left{
|
||||
// width: 272px;
|
||||
// height: 28px;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
color: #387DF7;
|
||||
// line-height: 28px;
|
||||
text-align: left;
|
||||
margin: 23px 0 0 26px;
|
||||
}
|
||||
.head_right{
|
||||
// width: 326px;
|
||||
height: 22px;
|
||||
font-weight: 400;
|
||||
font-size: 13px;
|
||||
color: #666660;
|
||||
line-height: 22px;
|
||||
margin: 25px 36px 0 0;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
line-height: 22px;
|
||||
.head_right_one{
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.head_right_two{
|
||||
margin-left: 14px;
|
||||
.head_right_sta{
|
||||
|
||||
}
|
||||
.head_right_status{
|
||||
color: #409EFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.body_explain{
|
||||
margin-bottom: 20px;
|
||||
.body_explain_icon{
|
||||
display: flex;
|
||||
margin-left: 28px;
|
||||
margin-bottom: 20px;
|
||||
.body_explain_img{
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.body_explain_text{
|
||||
width: 32px;
|
||||
height: 22px;
|
||||
font-weight: 600;
|
||||
font-size: 13px;
|
||||
color: #333333;
|
||||
line-height: 22px;
|
||||
text-align: left;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
.body_explain_item{
|
||||
margin-left: 28px;
|
||||
margin-right: 36px;
|
||||
// max-width: 1003px;
|
||||
max-height: 80px;
|
||||
background: #F5F6F7;
|
||||
border-radius: 8px;
|
||||
padding: 18px 20px 18px 13px;
|
||||
.body_explain_text{
|
||||
// max-width: 970px;
|
||||
max-height: 45px;
|
||||
font-weight: 400;
|
||||
font-size: 11px;
|
||||
color: #333333;
|
||||
line-height: 22px;
|
||||
display: -webkit-box;
|
||||
word-wrap: break-word;
|
||||
word-break:break-all;
|
||||
overflow: hidden;
|
||||
text-overflow:ellipsis;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp:2;
|
||||
}
|
||||
}
|
||||
}
|
||||
.body_schedule{
|
||||
.body_schedule_icon{
|
||||
display: flex;
|
||||
margin-bottom: 27px;
|
||||
.body_schedule_img{
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-left: 28px;
|
||||
margin-top: 3px;
|
||||
}
|
||||
.body_schedule_text{
|
||||
width: 64px;
|
||||
height: 22px;
|
||||
font-weight: 600;
|
||||
font-size: 13px;
|
||||
color: #333333;
|
||||
line-height: 22px;
|
||||
text-align: left;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
.body_schedule_item{
|
||||
margin-left: 58px;
|
||||
.body_schedule_one{
|
||||
display: flex;
|
||||
margin-bottom: 41px;
|
||||
.body_schedule_left{
|
||||
min-width: 52px;
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
color: #3B3C4A;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
}
|
||||
.body_schedule_right{
|
||||
margin-left: 13px;
|
||||
min-width: 65px;
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
color: #2E72F2;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
.body_schedule_two{
|
||||
display: flex;
|
||||
.body_schedule_pro{
|
||||
width: 250px;
|
||||
height: 30px;
|
||||
.pro_text{
|
||||
width: 42px;
|
||||
height: 18px;
|
||||
font-weight: 400;
|
||||
font-size: 11px;
|
||||
color: #666660;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.text{
|
||||
font-weight: 400;
|
||||
font-size: 10px;
|
||||
color: #333333;
|
||||
margin-left: 15px;
|
||||
line-height: 14px;
|
||||
}
|
||||
}
|
||||
.body_schedule_btn{
|
||||
width: 112px;
|
||||
cursor: pointer;
|
||||
height: 32px;
|
||||
margin-left: 35px;
|
||||
margin-top: 6px;
|
||||
background: #409EFF;
|
||||
box-shadow: 1px 2 12px 1px rgba(56,125,247,0.34);
|
||||
border-radius: 3px;
|
||||
text-align: center;
|
||||
line-height: 30px;
|
||||
.body_schedule_text{
|
||||
width: 52px;
|
||||
height: 18px;
|
||||
font-weight: 400;
|
||||
font-size: 13px;
|
||||
color: #FFFFFF;
|
||||
line-height: 18px;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,89 +1,80 @@
|
||||
<template>
|
||||
<div>
|
||||
<div style="margin-top: 50px;" v-if="isType == 9||couresList.length == 0">
|
||||
<el-empty description="您当前暂无学习数据~"></el-empty>
|
||||
<!-- <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 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 v-else>
|
||||
<!-- <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 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 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 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 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 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>
|
||||
@@ -116,48 +107,19 @@ export default {
|
||||
keyword:'',
|
||||
formatsec,
|
||||
couresList:[],
|
||||
total: 0,
|
||||
isType: null,
|
||||
typeClass: true,
|
||||
total: 0
|
||||
};
|
||||
},
|
||||
watch:{
|
||||
'$route': {
|
||||
handler(to, from) {
|
||||
console.log('type变化了', to.query.type);
|
||||
this.isType = to.query.type;
|
||||
this.totalNums = sessionStorage.getItem('totalNums')
|
||||
if(this.totalNums == 0){
|
||||
this.isType = 9
|
||||
}
|
||||
if(this.isType != 9){
|
||||
this.loadBoeData();
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.loadBoeData();
|
||||
this.getPossData()
|
||||
this.totalNums = sessionStorage.getItem('totalNums')
|
||||
},
|
||||
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;
|
||||
// type: 0 新任管理者,1 学习项目 2 学习路径图 3 成长路径
|
||||
let type = {1:'2',2:'1',3:'0'}[item.cmtask_type]
|
||||
if(this.$route.query.type==1 || !this.$route.query.type){
|
||||
type = '0'
|
||||
}
|
||||
// apiManage.userRead({type,id:item.cmtask_id})
|
||||
if(item.cmtask_type==1){ //学习路径图
|
||||
let params=encodeURIComponent('routerId='+item.cmtask_id);
|
||||
//this.$router.push('/forward?to='+studentPath+'/pathdetails¶ms='+params);
|
||||
@@ -168,9 +130,6 @@ export default {
|
||||
}else if(item.cmtask_type==3){
|
||||
let pushUrl=`/course/boeframe?id=${item.cmtask_id}&type=3`;
|
||||
this.$router.push(pushUrl);
|
||||
}else if(item.cmtask_type==4){
|
||||
let params=encodeURIComponent('projectId='+item.cmtask_id);
|
||||
this.$router.push('/forward?to='+studentPath+'/projectdetails¶ms='+params);
|
||||
}
|
||||
},
|
||||
getPossData(){
|
||||
@@ -198,56 +157,17 @@ export default {
|
||||
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){
|
||||
//定制化学习
|
||||
apiManage.compulsoryList(params).then(res=>{
|
||||
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;
|
||||
this.total =parseInt(res.data.total);
|
||||
this.couresList = res.data.records;
|
||||
}else{
|
||||
this.$message.error('查询数据失败:'+res.msg);
|
||||
}
|
||||
this.loading=false;
|
||||
}).catch(()=>{
|
||||
this.loading=false;
|
||||
this.loading=false;
|
||||
})
|
||||
}else{
|
||||
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;
|
||||
})
|
||||
// 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;
|
||||
@@ -276,31 +196,6 @@ export default {
|
||||
</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;
|
||||
|
||||
@@ -167,7 +167,6 @@
|
||||
</div>
|
||||
<!-- 课程单元 -->
|
||||
<div class="course-units" v-if="tab == 1">
|
||||
|
||||
<div :style="`height: ${controlHeight}px;overflow-y: auto;`">
|
||||
<div class="catalog" v-if="courseInfo.type == 20">
|
||||
<div v-for="(item, index) in catalogTree" :key="index" :name="index">
|
||||
@@ -292,7 +291,8 @@
|
||||
<!-- <span style="font-size: 12px; color:#666666 ;">( {{cutOrgNamePath(item.authorInfo.orgInfo)}} )</span> -->
|
||||
</div>
|
||||
<!-- <div class="teacher-remark" v-html="item.authorInfo.sign"></div> -->
|
||||
<div class="teacher-remark">{{cutOrgNamePath(item.authorInfo.orgInfo)}}</div>
|
||||
<div v-if="item.teacherType === 1 " class="teacher-remark">{{cutOrgNamePath(item.authorInfo.orgInfo)}}</div>
|
||||
<div v-else>{{item.supplier}}</div>
|
||||
</div>
|
||||
<div style="padding-top:15px;width:70px;">
|
||||
<followButton v-if="item.teacherName!=='BOE教师'" :auto="true" size="small" :aid="item.teacherId"></followButton>
|
||||
@@ -401,7 +401,6 @@
|
||||
studyId: '', //当前学习的id
|
||||
initContentId: '', //初始化当前学习的内容节
|
||||
blobUrl: '', //播放的文件地址,新添加,采用blob方式
|
||||
blobId: '', //播放的文件地址,对应的contents ID
|
||||
contentData: {
|
||||
studyItemId: '',
|
||||
status: 1
|
||||
@@ -455,7 +454,6 @@
|
||||
cumulativeDuration:0, //非音频累计时长
|
||||
maxDuration:0, //非音频最大时长
|
||||
defaultMaxTime:1800, //非音频默认最大时间
|
||||
videoIndex: 0 // 当前视频index
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -503,7 +501,7 @@
|
||||
}
|
||||
treeList.push(treeNode);
|
||||
});
|
||||
console.log(treeList,'treeList')
|
||||
// console.log(treeList,'treeList')
|
||||
return treeList;
|
||||
}
|
||||
},
|
||||
@@ -643,18 +641,19 @@
|
||||
createPlayUrl(fid, u) {
|
||||
let nowDate = new Date();
|
||||
let ctime = parseInt(nowDate.getTime() / 1000);
|
||||
const userNo = this.userInfo.userNo
|
||||
let beforeUrl = parseInt(nowDate.getTime() / 1000) + '/' + fid + '/' + userNo;
|
||||
let beforeUrl = parseInt(nowDate.getTime() / 1000) + '/' + fid;
|
||||
//console.log(beforeUrl,'beforeUrl');
|
||||
let urlSign = encodeURIComponent(encrypt(beforeUrl));
|
||||
// console.log(urlSign,'urlSign');
|
||||
//console.log(urlSign,'urlSign');
|
||||
cookies.set('PLAYSIGN_TIME', ctime); //写客户端的cookie保存
|
||||
//以下判断是为了区分本地环境和服务器环境
|
||||
if (process.env.NODE_ENV == 'development') {
|
||||
this.blobUrl = process.env.VUE_APP_FILE_BASE_URL + u;
|
||||
} else {
|
||||
this.blobUrl = process.env.VUE_APP_BASE_API + '/xboe/m/course/cware/resource?sign=' + urlSign ;
|
||||
this.blobUrl = process.env.VUE_APP_BASE_API + '/xboe/m/course/cware/resource?sign=' + urlSign;
|
||||
}
|
||||
// console.log('this.contentData.id:',this.contentData.id)
|
||||
this.blobId = this.contentData.id
|
||||
//console.log(this.blobUrl,'this.blobUrl');
|
||||
},
|
||||
widthOpen(url) {
|
||||
@@ -691,8 +690,6 @@
|
||||
//let url=process.env.VUE_APP_BASE_API+'/xboe/m/course/file/show?cf='+this.curriculumData.url;
|
||||
//let url=this.fileBaseUrl+this.curriculumData.url;
|
||||
this.createPlayUrl(r.contentRefId, this.curriculumData.url);
|
||||
|
||||
this.blobId = r.id
|
||||
} else if (r.contentType == 40) {
|
||||
// if (r.content != '' && r.content.indexOf('.pdf') == -1) {
|
||||
apiCourseFile.detail(r.contentRefId).then(cfrs => {
|
||||
@@ -819,6 +816,28 @@
|
||||
$this.controlHeight=h-95;
|
||||
//console.log(h,$this.controlHeight,'$this.controlHeight');
|
||||
})
|
||||
|
||||
|
||||
//console.log('this.contentData11:',this.contentData,this.curriculumData)
|
||||
// 视频设置禁用处理逻辑,如果用户已全部观看完该视频,则设置为能全部拖动的逻辑,把isDrag设置为true即可,同时删除本地存储的数据
|
||||
if(this.contentData.progressVideo ===1){
|
||||
var obj = JSON.parse(this.contentData.content)
|
||||
obj.isDrag = true
|
||||
this.contentData.content = JSON.stringify(obj)
|
||||
this.curriculumData.isDrag = true
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
//alert(con.progressVideo+'--'+con.id + '--'+JSON.stringify(arr))
|
||||
delete arr[this.contentData.id];
|
||||
localStorage.setItem('videoProgressData',JSON.stringify(arr))
|
||||
}
|
||||
if(this.contentData.progressVideo>0 && this.contentData.progressVideo !==1){
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
arr[this.contentData.id] = this.contentData.progressVideo
|
||||
localStorage.setItem('videoProgressData',JSON.stringify(arr))
|
||||
}
|
||||
|
||||
},
|
||||
isShowTime(){
|
||||
if(this.isContentTypeTwo != this.contentData.contentType){
|
||||
@@ -831,19 +850,6 @@
|
||||
if(!this.isCrowd){
|
||||
return
|
||||
}
|
||||
// 视频设置禁用处理逻辑,如果用户已全部观看完该视频,则设置为能全部拖动的逻辑,把isDrag设置为true即可,同时删除本地存储的数据
|
||||
if(r.progressVideo ===1){
|
||||
var obj = JSON.parse(r.content)
|
||||
obj.isDrag = true
|
||||
r.content = JSON.stringify(obj)
|
||||
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
delete arr[r.id];
|
||||
localStorage.setItem('videoProgressData',JSON.stringify(arr))
|
||||
|
||||
}
|
||||
|
||||
if (i != undefined && i!=-1 && index != undefined && r.status < 9) {
|
||||
if (this.courseInfo.orderStudy) {
|
||||
//判断上个是否学完
|
||||
@@ -888,9 +894,6 @@
|
||||
}
|
||||
}
|
||||
this.changePlayRes(r,item);
|
||||
console.log('r, i, index,item::',r, i, index,item)
|
||||
this.videoIndex = i
|
||||
this.blobId = r.id
|
||||
},
|
||||
loadScorePraiseAndTrample() {
|
||||
//加载是否请过分
|
||||
@@ -954,9 +957,9 @@
|
||||
this.interactRuning = true;
|
||||
let teacherId='';
|
||||
if(this.teachers.length>0){
|
||||
teacherId=this.teachers[0].teacherId;
|
||||
teacherId=this.teachers[0].teacherId;
|
||||
}else{
|
||||
teacherId=this.courseInfo.sysCreateAid
|
||||
teacherId=this.courseInfo.sysCreateAid
|
||||
}
|
||||
let postData = {
|
||||
objType: 1,
|
||||
@@ -1137,6 +1140,8 @@
|
||||
// }
|
||||
// }
|
||||
this.playerBoxShow = false;
|
||||
// this.onPlayerPlayFullscreen()
|
||||
// this.$watermark.set(this.userInfo.name + this.userInfo.loginName);
|
||||
let $this = this;
|
||||
//这里有些不准备,如果文件未能加载,这个事件就是错误的
|
||||
this.isAppendTime=true;
|
||||
@@ -1154,6 +1159,7 @@
|
||||
// }
|
||||
// }
|
||||
},
|
||||
|
||||
onFullscreen(full) {
|
||||
let divId = 'videowatermark';
|
||||
var div = document.getElementById('myVideoPlayer')
|
||||
@@ -1173,41 +1179,21 @@
|
||||
"position:absolute;pointer-events: none; width: 100%;height: 100%;top:0;left:0;bottom: 0;right: 0; display: flex;justify-content: center;flex-wrap: wrap;overflow: hidden; opacity:0.3;padding-top:10px";
|
||||
div.appendChild(div3);
|
||||
} else {
|
||||
console.log("去除水印 ---- gx ----");
|
||||
var markDiv = div.querySelector("#" + divId);
|
||||
console.log("去除水印 ---- gx markDiv ----",markDiv);
|
||||
if (markDiv) {
|
||||
div.removeChild(markDiv);
|
||||
console.log("执行去除水印 ---- gx markDiv ----",markDiv);
|
||||
div.removeChild(markDiv);
|
||||
}
|
||||
}
|
||||
},
|
||||
// 视频播放结束时执行调用 studyVideoTime
|
||||
EndedstudyVideoTime(){
|
||||
let postData = {
|
||||
itemId: this.contentData.studyItemId,
|
||||
videoTime: this.contentData.lastStudyTime
|
||||
}
|
||||
console.log('this.curriculumData 111::',this.curriculumData,this.contentData.id)
|
||||
if(!this.curriculumData.isDrag && this.contentData.progressVideo !=1){
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
if(arr[this.blobId]) {
|
||||
postData.progressVideo = arr[this.blobId]
|
||||
postData.contentId = this.contentList[this.videoIndex].id
|
||||
postData.courseId = this.contentList[this.videoIndex].courseId
|
||||
}
|
||||
}
|
||||
apiStudy.studyVideoTime(postData).then(rs => {
|
||||
if (rs.status != 200) {
|
||||
console.log('记录播放时间错误');
|
||||
}
|
||||
});
|
||||
},
|
||||
onPlayerPause() {
|
||||
//console.log("暂停");
|
||||
this.stopStudyTime();
|
||||
},
|
||||
onPlayerEnded() {
|
||||
this.playerBoxShow = true;
|
||||
this.EndedstudyVideoTime()
|
||||
this.stopStudyTime();
|
||||
if(this.contentData.status < 9) {
|
||||
this.finishStudyItem();
|
||||
@@ -1245,24 +1231,26 @@
|
||||
if (intTime > 10 && intTime != this.contentData.lastStudyTime && saveTime == 0 && this.contentData
|
||||
.studyItemId != '') {
|
||||
this.contentData.lastStudyTime = intTime;
|
||||
this.EndedstudyVideoTime()
|
||||
// let postData = {
|
||||
// itemId: this.contentData.studyItemId,
|
||||
// videoTime: intTime
|
||||
// };
|
||||
// var time = localStorage.getItem('videoProgressData')
|
||||
// var arr = time&&JSON.parse(time) || {}
|
||||
// if(arr[this.blobId] && !this.isDrag) {
|
||||
// postData.progressVideo = arr[this.blobId]
|
||||
// postData.contentId = this.contentList[this.videoIndex].id
|
||||
// postData.courseId = this.contentList[this.videoIndex].courseId
|
||||
// }
|
||||
// //console.log('记录播放时间')
|
||||
// apiStudy.studyVideoTime(postData).then(rs => {
|
||||
// if (rs.status != 200) {
|
||||
// console.log('记录播放时间错误');
|
||||
// }
|
||||
// });
|
||||
let postData = {
|
||||
itemId: this.contentData.studyItemId,
|
||||
videoTime: intTime
|
||||
};
|
||||
//console.log('this.courseInfo:',this.contentData)
|
||||
if(!this.curriculumData.isDrag && this.contentData.progressVideo !=1){
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) {
|
||||
postData.progressVideo = arr[this.blobId]
|
||||
postData.contentId = this.contentData.id
|
||||
postData.courseId = this.contentData.courseId
|
||||
}
|
||||
}
|
||||
//console.log('记录播放时间')
|
||||
apiStudy.studyVideoTime(postData).then(rs => {
|
||||
if (rs.status != 200) {
|
||||
console.log('记录播放时间错误');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1295,24 +1283,26 @@
|
||||
if (intTime > 10 && intTime != this.contentData.lastStudyTime && saveTime == 0 && this.contentData
|
||||
.studyItemId) {
|
||||
this.contentData.lastStudyTime = intTime;
|
||||
this.EndedstudyVideoTime()
|
||||
// let postData = {
|
||||
// itemId: this.contentData.studyItemId,
|
||||
// videoTime: intTime
|
||||
// };
|
||||
// var time = localStorage.getItem('videoProgressData')
|
||||
// var arr = time&&JSON.parse(time) || {}
|
||||
// if(arr[this.blobId] && !this.isDrag) {
|
||||
// postData.progressVideo = arr[this.blobId]
|
||||
// postData.contentId = this.contentList[this.videoIndex].id
|
||||
// postData.courseId = this.contentList[this.videoIndex].courseId
|
||||
// }
|
||||
// //console.log('记录播放时间')
|
||||
// apiStudy.studyVideoTime(postData).then(rs => {
|
||||
// if (rs.status != 200) {
|
||||
// console.log('记录播放时间错误');
|
||||
// }
|
||||
// });
|
||||
let postData = {
|
||||
itemId: this.contentData.studyItemId,
|
||||
videoTime: intTime
|
||||
};
|
||||
//console.log('this.courseInfo:',this.contentData)
|
||||
if(!this.curriculumData.isDrag && this.contentData.progressVideo !=1){
|
||||
var time = localStorage.getItem('videoProgressData')
|
||||
var arr = time&&JSON.parse(time) || {}
|
||||
if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) {
|
||||
postData.progressVideo = arr[this.blobId]
|
||||
postData.contentId = this.contentData.id
|
||||
postData.courseId = this.contentData.courseId
|
||||
}
|
||||
}
|
||||
//console.log('记录播放时间')
|
||||
apiStudy.studyVideoTime(postData).then(rs => {
|
||||
if (rs.status != 200) {
|
||||
console.log('记录播放时间错误');
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
audioPlay() {
|
||||
@@ -1470,6 +1460,7 @@
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (this.courseInfo.type == 10) {
|
||||
///console.log(this.contentList[0],'ccccc11111')
|
||||
this.showRes(this.contentList[0]);
|
||||
@@ -1482,9 +1473,7 @@
|
||||
} else {
|
||||
//console.log(this.contentList[0],'ccccc3333')
|
||||
this.showRes(this.contentList[playIndex]);
|
||||
//this.videoIndex = playIndex
|
||||
}
|
||||
this.videoIndex = playIndex
|
||||
}
|
||||
},
|
||||
saveScormStudy() {
|
||||
|
||||
@@ -62,32 +62,32 @@
|
||||
<div class="tab-bm">{{cutOrgNamePath(ran.authorInfo.orgInfo)}}</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="jy tab-jy">
|
||||
<div v-if="experience.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.total}}</div>
|
||||
<div v-if="experience.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.months}}</div>
|
||||
<div v-if="experience.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.years}}</div>
|
||||
<div v-if="experience.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.weeks}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- v-if="experience.data.rankingNo>5" -->
|
||||
<div style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
|
||||
<div class="omit">
|
||||
<div>.</div> <div>.</div> <div>.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="jy tab-jy">
|
||||
<div v-if="experience.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.total}}</div>
|
||||
<div v-if="experience.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.months}}</div>
|
||||
<div v-if="experience.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.years}}</div>
|
||||
<div v-if="experience.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;">{{ran.weeks}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- v-if="experience.data.rankingNo>5" -->
|
||||
<div class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
|
||||
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{experience.data.rankingNo}}</div>
|
||||
<div class="tab-name" v-if="userInfo.aid">
|
||||
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
|
||||
<div>
|
||||
<span style="color: #0059FF;">{{userInfo.name}}</span>
|
||||
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="experience.data.rankingNo>5" style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
|
||||
<div v-if="experience.data.rankingNo>5" class="omit">
|
||||
<div>.</div> <div>.</div> <div>.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="experience.data.rankingNo>5" class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
|
||||
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{experience.data.rankingNo}}</div>
|
||||
<div class="tab-name" v-if="userInfo.aid">
|
||||
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
|
||||
<div>
|
||||
<span style="color: #0059FF;">{{userInfo.name}}</span>
|
||||
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="jy tab-jy">
|
||||
<div v-if="experience.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{experience.data.total}}</div>
|
||||
@@ -163,30 +163,30 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
|
||||
<div class="omit">
|
||||
<div>.</div> <div>.</div> <div>.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
|
||||
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDuration.data.rankingNo}}</div>
|
||||
<div class="tab-name" v-if="userInfo.aid">
|
||||
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
|
||||
<div>
|
||||
<span style="color: #0059FF;">{{userInfo.name}}</span>
|
||||
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="jy tab-jy">
|
||||
<div v-if="learningDuration.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.total)}}</div>
|
||||
<div v-if="learningDuration.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.months)}}</div>
|
||||
<div v-if="learningDuration.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.years)}}</div>
|
||||
<div v-if="learningDuration.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.weeks)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="learningDuration.data.rankingNo>5" style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
|
||||
<div v-if="learningDuration.data.rankingNo>5" class="omit">
|
||||
<div>.</div> <div>.</div> <div>.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="learningDuration.data.rankingNo>5" class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
|
||||
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDuration.data.rankingNo}}</div>
|
||||
<div class="tab-name" v-if="userInfo.aid">
|
||||
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
|
||||
<div>
|
||||
<span style="color: #0059FF;">{{userInfo.name}}</span>
|
||||
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="jy tab-jy">
|
||||
<div v-if="learningDuration.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.total)}}</div>
|
||||
<div v-if="learningDuration.field == 'months'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.months)}}</div>
|
||||
<div v-if="learningDuration.field == 'years'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.years)}}</div>
|
||||
<div v-if="learningDuration.field == 'weeks'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{formatSecondToHour(learningDuration.data.weeks)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="page-ranking-col Duration">
|
||||
@@ -253,22 +253,22 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
|
||||
<div class="omit">
|
||||
<div>.</div> <div>.</div> <div>.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="learningDays.data.rankingNo>5" style="margin-top:20px;border-bottom: 1px solid #ddd;padding-bottom:40px">
|
||||
<div v-if="learningDays.data.rankingNo>5" class="omit">
|
||||
<div>.</div> <div>.</div> <div>.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
|
||||
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDays.data.rankingNo}}</div>
|
||||
<div class="tab-name" v-if="userInfo.aid">
|
||||
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
|
||||
<div>
|
||||
<span style="color: #0059FF;">{{userInfo.name}}</span>
|
||||
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="learningDays.data.rankingNo>5" class="table-hear" style="margin-top:40px;border-bottom: 1px solid #ddd;padding-bottom:20px">
|
||||
<div style="color: #0059FF;line-height: 40px;padding-left:14px;font-size: 16px;" class="tab-rank" >{{learningDays.data.rankingNo}}</div>
|
||||
<div class="tab-name" v-if="userInfo.aid">
|
||||
<author-img :avatar="userInfo.avatar" :aid="userInfo.aid" :sex="userInfo.sex"></author-img>
|
||||
<div>
|
||||
<span style="color: #0059FF;">{{userInfo.name}}</span>
|
||||
<div class="tab-bm" style="color: #0059FF;">{{cutOrgNamePath(userInfo.departFullName)}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="jy tab-jy">
|
||||
<div v-if="learningDays.field == 'total'" style="font-size: 18px;color: #333333;font-weight: 600;color: #0059FF;">{{learningDays.data.total}}</div>
|
||||
|
||||
@@ -124,11 +124,17 @@ module.exports = {
|
||||
// 114.115.162.187 测试环境
|
||||
// 192.168.0.107 晋宇
|
||||
proxy: {
|
||||
// "/professional": {
|
||||
// // target: 'https://u-pre.boe.com',
|
||||
// // target: 'http://192.168.86.195:32002',
|
||||
// target: 'http://192.168.68.211:32002',
|
||||
// changeOrigin: true,
|
||||
// },
|
||||
"/growth": {
|
||||
target: 'https://u-pre.boe.com',
|
||||
// target: 'http://192.168.86.195:32002',
|
||||
changeOrigin: true,
|
||||
},
|
||||
|
||||
'/manageApi': {
|
||||
// 目标代理服务器地址
|
||||
target: 'https://u-pre.boe.com',
|
||||
|
||||