Compare commits

..

9 Commits

26 changed files with 350 additions and 5277 deletions

View File

@@ -1,208 +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=process.env.VUE_APP_LOGIN_URL;
const TokenName = 'token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
//用于普通的发送请求
const formRequest = axios.create({
//headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
let curToken = getToken();
//curToken='eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2NzIzMTE2MTIsImV4cCI6MTY3MjMxODgxMiwiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.a4f41376e994c5fcd3ab537ce17572ef4c633863f87785cf7b6ffa353e2ed51c';
if (curToken && !isToken) {
config.headers[TokenName] = curToken // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
//console.log(res);
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code === 401) {
// store.dispatch('LogOut').then(() => {
// location.href = this.webBaseUrl + ReLoginUrl;
// })
console.error('', res.data);
return Promise.reject(new Error('接口返回未登录'))
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
console.log('err', error)
let {message} = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
} else if (message.includes("timeout")) {
message = "网络异常或接口错误,请求超时";
} 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 = formRequest.request;
/**
* get请求 ,只有url
*/
const get = function (baseURL, url) {
return request({
baseURL,
url: url,
method: 'get',
headers: {'Content-Type': 'application/json'}
})
}
/**
* post请求
* @param {Object} url
* @param {Object} postData
*/
const post = function (baseURL, url, postData) {
// if (postData) {
// postData = qs.stringify(postData);
// }
return request({
baseURL,
url: url,
method: 'post',
data: postData,
headers: {'Content-Type': 'application/json'}
})
}
//post请求
const postForm = function (baseURL, url, data) {
return request({
baseURL,
url,
data,
method: 'post',
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
}
// const postJson=jsonRequest.post;
const postJson = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
method: 'post',
data: postData,
headers: {'Content-Type': 'application/json;charset=utf-8'},
})
}
// 导出文件请求定义
const postJsonToFile = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
method: 'post',
data: postData,
headers: {'Content-Type': 'application/json;charset=utf-8'},
responseType: 'blob'
})
}
const getJsonToFile = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
method: 'get',
data: postData,
headers: {'Content-Type': 'application/json;charset=utf-8'},
responseType: 'blob'
})
}
/**
* put请求
*/
const put = function (baseURL, url, data) {
if (data) {
data = qs.stringify(data);
}
return request({
baseURL,
url: url,
method: 'put',
data: data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
}
const putJson = function (baseURL, url, data) {
return request({
baseURL,
url: url,
method: 'put',
data: data,
headers: {'Content-Type': 'application/json;charset=utf-8'},
})
}
export default {
tokenName: TokenName,
request,
get,
post,
postJson,
postJsonToFile,
put,
putJson,
getJsonToFile
}

View File

@@ -1,7 +1,7 @@
/** /**
* 课程的操作,课程的添加,修改,列表查询,课程的审核发布等操作。 * 课程的操作,课程的添加,修改,列表查询,课程的审核发布等操作。
* 针对于管理员,教师的功能 * 针对于管理员,教师的功能
* *
**/ **/
import ajax from '@/utils/xajax.js' import ajax from '@/utils/xajax.js'
@@ -170,9 +170,7 @@ const updateContentOrders = function(cid,items) {
const detail = function(id) { const detail = function(id) {
return ajax.get('/xboe/m/course/manage/detail?id=' + id); return ajax.get('/xboe/m/course/manage/detail?id=' + id);
} }
const getDictIds = function(pid,type) {
return ajax.get(`/xboe/m/course/manage/getDictIds?pid=${pid}&type=${type}`);
}
/** /**
* 更新内容的名称 * 更新内容的名称
* @param {Object} data * @param {Object} data
@@ -276,7 +274,7 @@ const countWaitAudit = function() {
} }
/** /**
* [已用courseAudit中的hrbpAuditList替换] * [已用courseAudit中的hrbpAuditList替换]
* 当前用户需要审核的课程列表 * 当前用户需要审核的课程列表
* @param {Object} query 同pageList * @param {Object} query 同pageList
*/ */
@@ -285,9 +283,9 @@ const auditList = function(query) {
} }
/** /**
* 【已移到courseAudit中】 * 【已移到courseAudit中】
* 教师需要审核的课程列表 * 教师需要审核的课程列表
*/ */
const teacherAuditList = function(query) { const teacherAuditList = function(query) {
return ajax.post('/xboe/m/course/audit/teacher-course', query); return ajax.post('/xboe/m/course/audit/teacher-course', query);
@@ -448,7 +446,6 @@ export default {
findUpdateLogs, findUpdateLogs,
getUpdateLog, getUpdateLog,
detail, detail,
getDictIds,
saveContent, saveContent,
pageList, pageList,
setEnabled, setEnabled,

View File

@@ -1,7 +1,5 @@
import ajax from '@/utils/xajax.js' import ajax from '@/utils/xajax.js'
import http from '../unionAjax' import http from '../unionAjax'
import httpAjax from '../httpAjax'
const baseURL = process.env.VUE_APP_MANAGER_API_PATH; const baseURL = process.env.VUE_APP_MANAGER_API_PATH;
@@ -49,18 +47,6 @@ const articlelist=function (type){
const courselist=function (data){ const courselist=function (data){
return ajax.post('/xboe/portal/index/courselist',data); return ajax.post('/xboe/portal/index/courselist',data);
} }
// 精品课信息列表
const qualitylist=function (data){
return httpAjax.post(baseURL,'/quality/home/qualityItem',data);
}
// 精品课分页查询
export const qualityPageList=function (data){
return httpAjax.post(baseURL,'/quality/home/qualityPages',data);
}
// 课程精品课标记时间年份列表
export const qualityCourseTimeMark=function (){
return httpAjax.post(baseURL,'/quality/manage/createYearList',{});
}
/** /**
* 首页新课程推荐列表 * 首页新课程推荐列表
*/ */
@@ -75,7 +61,5 @@ export default {
articlelist, articlelist,
courselist, courselist,
newCases, newCases,
getRecommendList, getRecommendList
qualitylist,
qualityPageList
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -141,7 +141,6 @@
<el-radio style="margin-right: 10px;" v-model="courseInfo.device" :label="1">PC端可见</el-radio> <el-radio style="margin-right: 10px;" v-model="courseInfo.device" :label="1">PC端可见</el-radio>
<el-radio style="margin-right: 10px;" v-model="courseInfo.device" :label="2">移动端可见</el-radio> <el-radio style="margin-right: 10px;" v-model="courseInfo.device" :label="2">移动端可见</el-radio>
<el-radio style="margin-right: 10px;" v-model="courseInfo.device" :label="3">多端可见</el-radio> <el-radio style="margin-right: 10px;" v-model="courseInfo.device" :label="3">多端可见</el-radio>
<el-radio style="margin-right: 10px;" v-model="courseInfo.device" v-if="isPermission" :label="4">仅内网访问</el-radio>
</el-form-item> </el-form-item>
<el-form-item v-if="!weike.onlyRequired" label="课程来源"> <el-form-item v-if="!weike.onlyRequired" label="课程来源">
<el-radio-group v-model="courseInfo.source"> <el-radio-group v-model="courseInfo.source">
@@ -306,7 +305,6 @@
<el-radio v-model="courseInfo.device" :label="1">PC端可见</el-radio> <el-radio v-model="courseInfo.device" :label="1">PC端可见</el-radio>
<el-radio v-model="courseInfo.device" :label="2">移动端可见</el-radio> <el-radio v-model="courseInfo.device" :label="2">移动端可见</el-radio>
<el-radio v-model="courseInfo.device" :label="3">多端可见</el-radio> <el-radio v-model="courseInfo.device" :label="3">多端可见</el-radio>
<el-radio style="margin-right: 10px;" v-model="courseInfo.device" v-if="isPermission" :label="4">仅内网访问</el-radio>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="课程来源"> <el-form-item label="课程来源">
@@ -490,8 +488,6 @@ export default {
refType:'' refType:''
}, },
visibleShow:false, visibleShow:false,
isPermission:false,
dicts:[],
extendRefId:'', extendRefId:'',
extendRefType:'', extendRefType:'',
courseTeachers: [], //课程的老师 courseTeachers: [], //课程的老师
@@ -531,11 +527,7 @@ export default {
dlgShow: false dlgShow: false
}, },
rightTypeId: {}, rightTypeId: {},
catalogSortDialogShow: false, catalogSortDialogShow: false
selectedOrg: {
orgId: null,
name: ''
}
}; };
}, },
created() { created() {
@@ -560,18 +552,14 @@ export default {
}, },
watch: { watch: {
courseInfo: { courseInfo: {
handler(newVal, oldVal) { handler(newVal) {
// 需要保存 //需要保存
this.requireSaveCourse = true; this.requireSaveCourse = true;
console.log("--- watch比较 = ", oldVal.orgId, newVal.orgId);
this.checkOrgPermission(newVal.orgId);
}, },
deep: true deep: true
} }
}, },
mounted() { mounted() {
this.getDictIds();
let extendFlag=this.$route.query.f; //是否是管理端过来的 let extendFlag=this.$route.query.f; //是否是管理端过来的
this.extendRefId=this.$route.query.refId; this.extendRefId=this.$route.query.refId;
this.extendRefType=this.$route.query.refType; this.extendRefType=this.$route.query.refType;
@@ -593,19 +581,6 @@ export default {
this.loadUserGroup(); this.loadUserGroup();
}, },
methods: { methods: {
// 检查机构权限
checkOrgPermission(orgId) {
console.log("--- 监测组织id orgId = ",orgId)
console.log("--- this.isPermission = ",this.isPermission)
console.log("--- device = ",this.courseInfo.device)
if (!orgId) {
this.isPermission = false;
return;
}
console.log("--- this.dicts = ",this.dicts)
this.isPermission = this.dicts.includes(orgId);
console.log("--- 监听结束 this.isPermission = ",this.isPermission)
},
// 关键字的更改 // 关键字的更改
changeKeywords(option){ changeKeywords(option){
if(option.target.value){ if(option.target.value){
@@ -910,27 +885,11 @@ export default {
this.courseCoverurl = ''; this.courseCoverurl = '';
this.courseInfo.coverImg = ''; this.courseInfo.coverImg = '';
}, },
//获取字典信息
async getDictIds() {
console.log("--- 获取字典信息 1 = ", this.dicts);
try {
const response = await apiCourse.getDictIds(637, 1); // 确保返回 Promise
console.log("--- 获取字典信息 2 result= ", response);
if (response.status === 200) {
this.dicts = response.result.dicts; // 正确提取 dicts
console.log("--- 获取字典信息 3 = ", this.dicts);
}
} catch (error) {
console.error("获取字典信息失败:", error);
}
},
//获取课程信息 //获取课程信息
async getDetail(id) { async getDetail(id) {
this.curCourseId = id; this.curCourseId = id;
this.orgName=''; this.orgName='';
this.isPermission = false; let $this = this;
let $this = this;
try { try {
const { result, status } = await apiCourse.detail(id); const { result, status } = await apiCourse.detail(id);
if (status === 200) { if (status === 200) {
@@ -947,10 +906,7 @@ export default {
this.contentInfo.list = result.contents; this.contentInfo.list = result.contents;
this.sectionInfo.list = result.sections; this.sectionInfo.list = result.sections;
this.courseTeachers = result.teachers; //课程的老师信息 this.courseTeachers = result.teachers; //课程的老师信息
this.isPermission = result.isPermission; //课程的老师信息
this.dicts = result.dicts; //课程的老师信息
console.log("--- 编辑查看 this.isPermission = ",this.isPermission)
console.log("--- 编辑查看 this.dicts = ",this.dicts)
if(!this.courseInfo.orgId){ if(!this.courseInfo.orgId){
//根据课程创建者获取机构id //根据课程创建者获取机构id
apiUser.getOrgSimpleByUserId(result.course.sysCreateAid).then(ors=>{ apiUser.getOrgSimpleByUserId(result.course.sysCreateAid).then(ors=>{

View File

@@ -109,7 +109,7 @@ export default {
if(res.status==200){ if(res.status==200){
this.info=res.result; this.info=res.result;
//检查是否过期 //检查是否过期
if(res.result.deadTime!='' && res.result.deadTime != null){ if(res.result.deadTime!=''){
var d = new Date(res.result.deadTime); var d = new Date(res.result.deadTime);
var now=new Date(); var now=new Date();
if(now.getTime() > d.getTime()){ if(now.getTime() > d.getTime()){

View File

@@ -97,7 +97,7 @@
<a style="display: flex;align-items: center;" @click="showReply(com)"> <a style="display: flex;align-items: center;" @click="showReply(com)">
<!-- <svg-icon icon-class="comment" style="margin-right: 0px;font-size: 16px;"></svg-icon> --> <!-- <svg-icon icon-class="comment" style="margin-right: 0px;font-size: 16px;"></svg-icon> -->
<div class="is_comment"></div> <div class="is_comment"></div>
<span>回复</span> <span>回复</span>
</a> </a>
<!--必须当前登录人是一个人--> <!--必须当前登录人是一个人-->
<a style="display: flex;align-items: center;" v-if="userInfo.aid==com.sysCreateAid" @click="delCommnet(com,comIdx)"> <a style="display: flex;align-items: center;" v-if="userInfo.aid==com.sysCreateAid" @click="delCommnet(com,comIdx)">
@@ -558,7 +558,7 @@
this.$message.error(res.message); this.$message.error(res.message);
} }
}); });
this.loadData(false);
} }
}, },
@@ -633,6 +633,7 @@
this.$message.error(res.message); this.$message.error(res.message);
} }
}); });
this.loadData(false);
}, },
delCommnet(com,idx){ delCommnet(com,idx){
if(com.replyList!='' && com.replyList.length>0){ if(com.replyList!='' && com.replyList.length>0){

View File

@@ -44,7 +44,7 @@
<!-- <svg-icon v-else style="margin-right: 0;" :style="{'font-size':(size+2)+'px'}" :icon-class="isFavorite?'scactive2':'xihuan'"></svg-icon> --> <!-- <svg-icon v-else style="margin-right: 0;" :style="{'font-size':(size+2)+'px'}" :icon-class="isFavorite?'scactive2':'xihuan'"></svg-icon> -->
<div v-else class="is_favorite" :class="isFavorite?'is_favorite_a':'is_favorite'"></div> <div v-else class="is_favorite" :class="isFavorite?'is_favorite_a':'is_favorite'"></div>
</el-tooltip> </el-tooltip>
<span v-if="!courseExclusive" class="interact-bar-value"> {{ data.favorites? data.favorites:data.hasCollect?number(data.hasCollect):1}}</span> <span v-if="!courseExclusive" class="interact-bar-value"> {{ data.favorites? data.favorites:0}}</span>
</div> </div>
<div v-if="shares" @click="addShare()" :style="`min-width: ${nodeWidth};`" class="interact-bar-btn" :class="{cursor:!readonly}"> <div v-if="shares" @click="addShare()" :style="`min-width: ${nodeWidth};`" class="interact-bar-btn" :class="{cursor:!readonly}">
<el-tooltip effect="light" content="分享" placement="top" :visible-arrow="false" popper-class="text-tooltip"> <el-tooltip effect="light" content="分享" placement="top" :visible-arrow="false" popper-class="text-tooltip">
@@ -114,8 +114,6 @@ export default {
shares:0, shares:0,
praises:0, praises:0,
views:0, views:0,
courseId:'',
courseName:''
} }
} }
}, },
@@ -236,7 +234,7 @@ export default {
created(){ created(){
}, },
mounted() { mounted() {
if(this.data && (this.data.id||this.data.courseId) && !this.readonly){ if(this.data && this.data.id && !this.readonly){
this.checkHas(); this.checkHas();
} }
@@ -310,7 +308,7 @@ export default {
} }
let msgPageParams=this.pageParams; let msgPageParams=this.pageParams;
if(!msgPageParams){ if(!msgPageParams){
msgPageParams=this.data.id ?this.data.id: this.data.courseId; msgPageParams=this.data.id;
} }
let message={ let message={
content, content,
@@ -333,9 +331,9 @@ export default {
}) })
}, },
checkHas(){ checkHas(){
if(this.type>0 && !this.readonly && (this.data.id||this.data.courseId)){ if(this.type>0 && !this.readonly && this.data.id){
if(this.favorites){ if(this.favorites){
apiFavorites.has(this.type,(this.data.id || this.data.courseId)).then(rs=>{ apiFavorites.has(this.type,this.data.id).then(rs=>{
if(rs.status==200 && rs.result){ if(rs.status==200 && rs.result){
this.isFavorite=true; this.isFavorite=true;
}else{ }else{
@@ -508,11 +506,9 @@ export default {
return; return;
} }
//需要判断是否已点赞,已点赞的不再加 //需要判断是否已点赞,已点赞的不再加
console.log(this.data,'---------------');
let postData={ let postData={
objType:this.type, objType:this.type,
objId:this.data.id ?this.data.id: this.data.courseId, objId:this.data.id,
title:'', title:'',
} }
if(this.loading) { if(this.loading) {
@@ -520,7 +516,7 @@ export default {
} }
this.loading=true; this.loading=true;
if(this.type==1){ if(this.type==1){
postData.title=this.data.name?this.data.name:this.data.courseName; postData.title=this.data.name;
}else if(this.type==60){ }else if(this.type==60){
postData.title=this.data.content; postData.title=this.data.content;
} else if(this.type==5){ } else if(this.type==5){
@@ -529,7 +525,7 @@ export default {
postData.title=this.data.title; postData.title=this.data.title;
} }
if(this.isFavorite) {// 已经收藏,再次点击取消收藏 if(this.isFavorite) {// 已经收藏,再次点击取消收藏
apiFavorites.remove(this.type,this.data.id ?this.data.id: this.data.courseId).then(res=>{ apiFavorites.remove(this.type,this.data.id).then(res=>{
this.loading=false; this.loading=false;
if(res.status==200){ if(res.status==200){
this.isFavorite=false; this.isFavorite=false;
@@ -558,7 +554,7 @@ export default {
this.$store.dispatch("unicomFavorites",true) this.$store.dispatch("unicomFavorites",true)
} }
//if(this.type===2||this.type===4){ //if(this.type===2||this.type===4){
this.messageSave(this.data.id ?this.data.id: this.data.courseId,this.data.title,this.userInfo.name,this.data.sysCreateBy,this.data.sysCreateAid,'收藏了我发布的'); this.messageSave(this.data.id,this.data.title,this.userInfo.name,this.data.sysCreateBy,this.data.sysCreateAid,'收藏了我发布的');
//} //}
this.$message({message:'已加入收藏',type:'success'}); this.$message({message:'已加入收藏',type:'success'});
//this.$emit('addFavorite',res.result);//添加收藏,如果是true代表添加成功false代表已存在 //this.$emit('addFavorite',res.result);//添加收藏,如果是true代表添加成功false代表已存在

View File

@@ -13,9 +13,9 @@
</router-link> </router-link>
</div> </div>
<div class="top-nav" :style="{color:textColor}" :class="current == 'course' ? activeNav : ''"> <div class="top-nav" :style="{color:textColor}" :class="current == 'course' ? activeNav : ''">
<a @click="handleChangeCourse">课程 <router-link to="/course">课程
<div :class="current == 'course' ? 'nav-bottbor' : ''"></div> <div :class="current == 'course' ? 'nav-bottbor' : ''"></div>
</a> </router-link>
</div> </div>
<div class="top-nav" :style="{color:textColor}" :class="current == 'case' ? activeNav : ''"> <div class="top-nav" :style="{color:textColor}" :class="current == 'case' ? activeNav : ''">
<router-link to="/case">案例 <router-link to="/case">案例
@@ -214,12 +214,6 @@ export default {
//this.loadPopupConfig(); //this.loadPopupConfig();
}, },
methods: { methods: {
handleChangeCourse() {
const paths = ["/course","/qualityCourse"]
// 如果是 课程 和 精品课程, 那么就不再重定向
const needReload = paths.findIndex(e=> e === this.$route.path) === -1
if (needReload) this.$router.push({path: paths[0]})
},
setCurIdentity(iden){ setCurIdentity(iden){
this.$store.dispatch('SetCurIdentity',iden); this.$store.dispatch('SetCurIdentity',iden);

View File

@@ -317,7 +317,7 @@ export default {
} }
setInterval(() => { setInterval(() => {
console.log('当前状态:',this.currentProgress,this.isDrag,this.videoDom.currentTime , this.videoDom.duration) //console.log('this.currentProgress::',this.currentProgress,this.isDrag,this.videoDom.currentTime , this.videoDom.duration)
// 视频播放时本地记录视频实时播放时长,视频设置了禁止拖动时执行 // 视频播放时本地记录视频实时播放时长,视频设置了禁止拖动时执行
if(!this.isDrag){ if(!this.isDrag){
var time = localStorage.getItem('videoProgressData') var time = localStorage.getItem('videoProgressData')
@@ -364,11 +364,6 @@ export default {
} }
// 根据视频的readyState判断下一帧是否已加载并控制loading的显示 // 根据视频的readyState判断下一帧是否已加载并控制loading的显示
this.isShowLoading = this.videoDom.readyState < 3; this.isShowLoading = this.videoDom.readyState < 3;
console.log("当前缓存:"+this.videoDom.readyState)
if (this.videoDom.readyState < 3){
console.log("详细信息",this.videoDom)
console.log("卡了",this.videoDom.readyState)
}
//if() //if()
//console.log(this.videoDom.readyState,'this.videoDom.readyState'); //console.log(this.videoDom.readyState,'this.videoDom.readyState');
}, 1000); }, 1000);

View File

@@ -37,6 +37,7 @@ export default {
}, },
isDrag:{ isDrag:{
type: Boolean, type: Boolean,
default: true,
}, },
blobId:{ blobId:{
type: String, type: String,

View File

@@ -2,6 +2,7 @@ import Vue from 'vue'
import VueRouter from 'vue-router' import VueRouter from 'vue-router'
/* Layout */ /* Layout */
import Layout from '@/layout/index' import Layout from '@/layout/index'
import LayoutPortal from '@/layout/portal'
import Grateful from '@/views/grateful' import Grateful from '@/views/grateful'
Vue.use(VueRouter) Vue.use(VueRouter)
@@ -361,15 +362,7 @@ export const constantRoutes = [{
path: '/500', path: '/500',
component: (resolve) => require(['@/views/error/500'], resolve), component: (resolve) => require(['@/views/error/500'], resolve),
hidden: true hidden: true
},
{
path: '/qualityCourse',
hidden: true,
component: (resolve) => require(['@/views/portal/course/qualityCourse'], resolve),
name: 'qualityCourse',
meta: {title: '精品课课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false},
} }
] ]
const router = new VueRouter({ const router = new VueRouter({

View File

@@ -153,87 +153,11 @@
</div> </div>
</div> </div>
<div class="xindex-content"> <div class="xindex-content">
<!-- 推荐课程 --> <!-- 推荐课程 -->
<div class="modules xcontent2"> <div class="modules xcontent2">
<!-- <div class="xcontent2-main"> -->
<!--内容块-->
<!-- </div> -->
<!-- 精品课模块 -->
<div class="xcontent2-main"> <div class="xcontent2-main">
<div class="modules-title xindex-main" v-if="this.qusisityList.list.length>0">
<!-- <span class="modules-text" style="color: #3D86F4;">精品课</span> -->
<span class="quyer-tag" style="margin-left: 0px;">
<!-- <img src="../assets/images/tutoring1.pn" alt=""> -->
<img class="modules-text" style="height: 24px;" src="../assets/images/course/courseTitle.png" alt="">
</span>
<span class="more">
<router-link to="/quailtyCourse">查看更多>></router-link>
</span>
</div>
<div
v-for="(course, eIndex) in exquisiteList"
:key="'cc' + eIndex"
class="xindex-course courseBg"
style="position: relative;margin-top: 20px;"
>
<div style="position: absolute; right: 25px; bottom: 72px">
<interactBar
nodeWidth="20px"
:courseExclusive="true"
:type="1"
:data="course"
:comments="false"
:praises="false"
:shares="false"
:views="false"
>
</interactBar>
<!-- <svg-icon style="font-size: 32px;margin-top: -5px;" icon-class="collectedCourse"></svg-icon> -->
</div>
<a @click="toCourseDetail(course)">
<div class="xindex-course-image">
<course-image :course="course"></course-image>
<!-- <span v-if="course.type == 20 || 10" class="course-type"
>录播课</span
> -->
<img v-if="course.type == 20 || 10" src="../assets/images/course/courseTag.png" class="course-type" style="background: none;" alt="">
</div>
<div
style="width: 80%"
:title="course.courseName"
class="course-title portal-title-tow two-line-ellipsis"
>
{{ course.courseName }}
</div>
<div class="course-author">
<div class="course-author-left">
{{ course.authorInfo.teacherName }}
<span class="study-num"
>{{ formatNum(course.studyNum) }}人学习</span
>
</div>
<div style="display: flex">
<div v-if="course.courseScore">
<span class="course-score-value" style="margin-left: 10px"
>{{ toScore(course.courseScore) }}</span
>
</div>
<div v-else class="course-score-no">未评分</div>
</div>
</div>
</a>
</div>
<!--内容块--> <!--内容块-->
<div class="modules-title xindex-main" v-if="courseComputedOneList.length > 0"> <div class="modules-title xindex-main">
<span class="modules-text">推荐课程</span> <span class="modules-text">推荐课程</span>
<span class="quyer-tag"> <span class="quyer-tag">
<a <a
@@ -1213,9 +1137,6 @@ export default {
orderType: 2, orderType: 2,
list: [], list: [],
}, },
qusisityList: {
list: [],
},
// 推荐课程 // 推荐课程
recommendedList:{ recommendedList:{
list: [], list: [],
@@ -1243,7 +1164,6 @@ export default {
}, },
mounted() { mounted() {
this.getCourseData(1); this.getCourseData(1);
this.getEsqusiteList();
this.getRecommendList(); this.getRecommendList();
this.getPositive() this.getPositive()
this.getCaseData(); this.getCaseData();
@@ -1307,10 +1227,6 @@ export default {
courseComputedTwoList(){ courseComputedTwoList(){
return this.courseList.list.slice(3) return this.courseList.list.slice(3)
}, },
// 精品课展示
exquisiteList() {
return this.qusisityList.list.slice(0,3)
},
}, },
methods: { methods: {
getPositive() { getPositive() {
@@ -1508,15 +1424,15 @@ export default {
if (item.type == 10) { if (item.type == 10) {
//return this.webBaseUrl + "/course/studyindex?id=" + item.id; //return this.webBaseUrl + "/course/studyindex?id=" + item.id;
//console.log("直接进入学习页面"); //console.log("直接进入学习页面");
this.$router.push("/course/studyindex?id=" + item.id?item.id:item.courseId); this.$router.push("/course/studyindex?id=" + item.id);
} else if (item.type == 20) { } else if (item.type == 20) {
apiCourseStudy.hasSignup(item.id?item.id:item.courseId).then((rs) => { apiCourseStudy.hasSignup(item.id).then((rs) => {
if (rs.status == 200) { if (rs.status == 200) {
//return $this.webBaseUrl + "/course/studyindex?id=" + item.id; //return $this.webBaseUrl + "/course/studyindex?id=" + item.id;
this.$router.push("/course/studyindex?id=" + item.id?item.id:item.courseId); this.$router.push("/course/studyindex?id=" + item.id);
} else { } else {
//return $this.webBaseUrl + "/course/detail?id=" + item.id; //return $this.webBaseUrl + "/course/detail?id=" + item.id;
this.$router.push("/course/detail?id=" + item.id?item.id:item.courseId); this.$router.push("/course/detail?id=" + item.id);
} }
}); });
//return $this.webBaseUrl + "/course/detail?id=" + item.id; //return $this.webBaseUrl + "/course/detail?id=" + item.id;
@@ -1556,16 +1472,6 @@ export default {
} }
}) })
}, },
//精品课展示
getEsqusiteList(){
let course = {
aid: this.userInfo.aid,
}
apiIndex.qualitylist(course).then((res) => {
console.log(res,'jinpinsjfhhfjash--------------------------');
this.qusisityList.list = res.data.result;
})
},
getCourseData(pageIndex) { getCourseData(pageIndex) {
this.isNext = false; this.isNext = false;
let { orderType, num } = this.courseList; let { orderType, num } = this.courseList;
@@ -2755,7 +2661,6 @@ export default {
// padding-bottom: 10px; // padding-bottom: 10px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20px;
.course-author-left { .course-author-left {
font-size: 14px; font-size: 14px;
@@ -3104,17 +3009,4 @@ export default {
} }
} }
} }
.courseBg{
// width: 332px;
// height: 323px;
// background: url("../assets/images/course/courseBackground.png") no-repeat;
// background-size: 100% 100%; /* 或 use 'contain' */
// background-position: center;
// border: none;
border-radius: 12px;
background: linear-gradient(135deg, #e6f7ff, #f0f8ff, #ffffff);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
border: 1px solid #d9edf7;
overflow: hidden;
}
</style> </style>

View File

@@ -9,7 +9,7 @@
<el-button @click="recordList()" type="primary" icon="el-icon-search">搜索</el-button> <el-button @click="recordList()" type="primary" icon="el-icon-search">搜索</el-button>
</div> </div>
<div style="padding: 0px 5px;"> <div style="padding: 0px 5px;">
<el-button icon="el-icon-refresh-right" @click="keyword = ''" type="primary">重置</el-button> <el-button icon="el-icon-refresh-right" @click="reset()" type="primary">重置</el-button>
</div> </div>
<div style="padding: 0px 5px;"> <div style="padding: 0px 5px;">
<el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button> <el-button type="primary" @click="exportFile()" icon="el-icon-search" size="small" round>导出</el-button>
@@ -25,8 +25,9 @@
<!-- <div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" type="primary" size="small" round>导出学员信息</el-button></div> --> <!-- <div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" type="primary" size="small" round>导出学员信息</el-button></div> -->
</div> </div>
<div style="margin-top:20px;"> <div style="margin-top:20px;">
<el-table :data="pageData" border stripe> <el-table :data="pageData" border stripe style="width: 100%">
<el-table-column <el-table-column
fixed
label="序号" label="序号"
prop="index" prop="index"
width="100px"> width="100px">
@@ -252,6 +253,26 @@ export default {
} }
}) })
}, },
reset(){
let req = {
courseName: "",
pageNo: this.pageInfo.pageIndex,
pageSize: this.pageInfo.pageSize
}
apiCourse.getListByToken(req).then(res => {
if (res.status == 200) {
this.pageData = res.data.records;
this.pageInfo.pageSize = Number(res.data.size);
this.pageInfo.total = Number(res.data.total);
this.pageInfo.page = Number(res.data.current);
} else {
this.$message({
type: 'error',
message: res.message
});
}
})
},
// 每页显示的条数事件 // 每页显示的条数事件
handleSizeChange(val) { handleSizeChange(val) {

View File

@@ -5,8 +5,8 @@
<!-- 当轮播图等于一张时 --> <!-- 当轮播图等于一张时 -->
<swiper :options="swiperOptiontwo"> <swiper :options="swiperOptiontwo">
<swiper-slide style="margin: 0 auto" v-for="(item, idx) in resonimg" :key="'a' + idx" <swiper-slide style="margin: 0 auto" v-for="(item, idx) in resonimg" :key="'a' + idx"
class="swiper-slide games pointer" > class="swiper-slide games pointer">
<div class="bannbox" @click="handleCarouselClick(item)" :style="{ <div class="bannbox" :style="{
background: `url(${fileBaseUrl + item.image background: `url(${fileBaseUrl + item.image
}) center center no-repeat`, }) center center no-repeat`,
}"></div> }"></div>
@@ -17,8 +17,8 @@
<div id="container" style="z-index: 99" v-else> <div id="container" style="z-index: 99" v-else>
<swiper :options="swiperOption" ref="mySwiper" v-if="resonimg.length > 1"> <swiper :options="swiperOption" ref="mySwiper" v-if="resonimg.length > 1">
<swiper-slide style="margin: 0 auto" v-for="(item, idx) in resonimg" :key="'b' + idx" <swiper-slide style="margin: 0 auto" v-for="(item, idx) in resonimg" :key="'b' + idx"
class="swiper-slide games pointer" > class="swiper-slide games pointer">
<div class="bannbox" @click="handleCarouselClick(item)" :style="{ <div class="bannbox" :style="{
background: `url(${fileBaseUrl + item.image background: `url(${fileBaseUrl + item.image
}) center center no-repeat`, }) center center no-repeat`,
}"></div> }"></div>
@@ -220,7 +220,7 @@ export default {
autoplay: false, autoplay: false,
// noSwiping: true, // noSwiping: true,
}, },
// resonimg: [], resonimg: [],
swiperOption: { swiperOption: {
autoplay: { autoplay: {
delay: 2000, delay: 2000,
@@ -249,13 +249,6 @@ export default {
this.getToolData() this.getToolData()
}, },
methods: { methods: {
// 添加点击轮播图跳转的方法
handleCarouselClick(item) {
if (item.url) {
window.open(item.url, '_blank');
}
},
downTool(toolInfo) { downTool(toolInfo) {
console.log(toolInfo); console.log(toolInfo);
window.open(`/activityApi/xboe/m/boe/tools/url/download?urlStr=${process.env.VUE_APP_BOE_WEB_URL}/upload${toolInfo.filePath}&fileName=${toolInfo.name}`) window.open(`/activityApi/xboe/m/boe/tools/url/download?urlStr=${process.env.VUE_APP_BOE_WEB_URL}/upload${toolInfo.filePath}&fileName=${toolInfo.name}`)

View File

@@ -8,7 +8,7 @@
<div class="navTop"> <div class="navTop">
<div> <div>
<router-link to="/grateful" class="nav">首页</router-link>&nbsp;>&nbsp; <router-link to="/grateful" class="nav">首页</router-link>&nbsp;>&nbsp;
<span style="cursor: pointer;" class="nav">认证讲师库</span> <span style="cursor: pointer;" class="nav">认证讲师库2023</span>
</div> </div>
<div style="position: relative;"> <div style="position: relative;">
<el-input class="portal-input" placeholder="请输入课程名称" style="border-radius: 20px !important; " <el-input class="portal-input" placeholder="请输入课程名称" style="border-radius: 20px !important; "

View File

@@ -20,7 +20,7 @@
</div> </div>
<div class="label"> <div class="label">
<author :aid="caseDetail.sysCreateAid" :onlyAvatar="true" :avatar="authorInfo.avatar" <author :aid="caseDetail.sysCreateAid" :onlyAvatar="true" :avatar="authorInfo.avatar"
:sex="authorInfo.sex" :name="authorInfo.name"></author> :sex="authorInfo.sex"></author>
<span>案主{{ authorInfo.name }} ({{ authorInfo.orgInfo }})</span> <span>案主{{ authorInfo.name }} ({{ authorInfo.orgInfo }})</span>
<!-- <span>案主{{ authorInfo.name }}</span> <!-- <span>案主{{ authorInfo.name }}</span>
<span>工号{{ authorInfo.code }}</span> <span>工号{{ authorInfo.code }}</span>

View File

@@ -1609,7 +1609,7 @@ export default {
}) })
console.log(res?.result?.list ,'有没有数据2'); console.log(res?.result?.list ,'有没有数据2');
this.caseList.list = res.result.list this.caseList.list = res.result.list
this.getCaseUserData(res.result.list); // this.getCaseUserData(res.result.list);
// 给所有的赋值 // 给所有的赋值
this.caseList.count = res.result.count; this.caseList.count = res.result.count;
this.caseList.showPagCount = res.result.count; this.caseList.showPagCount = res.result.count;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -22,101 +22,91 @@
<div class="course-playbox" ref="coursePlayerBox" id="id_course_player_box"> <div class="course-playbox" ref="coursePlayerBox" id="id_course_player_box">
<div class="course-player" ref="coursePlayer" id="id_course_player"> <div class="course-player" ref="coursePlayer" id="id_course_player">
<div> <div>
<div v-if="renderCourse"> <div v-if="resType == null || resType == 0">
<div v-if="resType == null || resType == 0"> <!--先显示视频图片-->
<!--先显示视频图片--> <course-image v-if="courseInfo.id != ''" :course="courseInfo"></course-image>
<course-image v-if="courseInfo.id != ''" :course="courseInfo"></course-image> </div>
</div> <div v-if="resType == 10" style="position: relative;">
<div v-if="resType == 10" style="position: relative;"> <videoPlayer ref="myVideoPlayer" id="myVideoPlayer" @progress="progress" :src="blobUrl" :blobId="blobId" @onPlayerPlaying="onPlayerPlaying"
<videoPlayer ref="myVideoPlayer" id="myVideoPlayer" @progress="progress" :src="blobUrl" :blobId="blobId" @onPlayerPlaying="onPlayerPlaying" :initTime="contentData.lastStudyTime" :notePlay="notePlay" @onPlayerPlay="onPlayerPlay"
:initTime="contentData.lastStudyTime" :notePlay="notePlay" @onPlayerPlay="onPlayerPlay" :isDrag="curriculumData.isDrag" @onFullscreen="onFullscreen" @onPlayerPause="onPlayerPause"
:isDrag="curriculumData.isDrag" @onFullscreen="onFullscreen" @onPlayerPause="onPlayerPause" @onPlayerEnded="onPlayerEnded" :isCrowd="isCrowd" @onTimeUpdate="handleAudioTimeUpdate"></videoPlayer>
@onPlayerEnded="onPlayerEnded" :isCrowd="isCrowd" @onTimeUpdate="handleAudioTimeUpdate"></videoPlayer> <div class="player-box" v-if="playerBoxShow">
<div class="player-box" v-if="playerBoxShow"> <div class="player-praise" style="cursor: pointer;">
<div class="player-praise" style="cursor: pointer;"> <div @click="praiseContent">
<div @click="praiseContent"> <img class="icon-small" v-if="isPraise" :src="require('@/assets/images/icon/praise-active.png')" />
<img class="icon-small" v-if="isPraise" :src="require('@/assets/images/icon/praise-active.png')" /> <img class="icon-small" v-else :src="require('@/assets/images/icon/zhan.png')" />
<img class="icon-small" v-else :src="require('@/assets/images/icon/zhan.png')" /> <!-- {{ courseInfo.praises }} -->
<!-- {{ courseInfo.praises }} --> <div style="color:#fff;cursor: pointer;"></div>
<div style="color:#fff;cursor: pointer;"></div>
</div>
<div style="margin-left: 15px;cursor: pointer;" @click="treadContent">
<img class="icon-small" v-if="isTrample"
:src="require('@/assets/images/icon/trample-active.png')" />
<img class="icon-small" v-else :src="require('@/assets/images/icon/cai.png')" />
<!-- {{ courseInfo.trampleCount }} -->
<div style="color:#fff;cursor: pointer;"></div>
</div>
</div> </div>
<div v-if="!scoreInfo.has" class="player-rate"> <div style="margin-left: 15px;cursor: pointer;" @click="treadContent">
<img class="icon-small" v-if="isTrample"
:src="require('@/assets/images/icon/trample-active.png')" />
<img class="icon-small" v-else :src="require('@/assets/images/icon/cai.png')" />
<!-- {{ courseInfo.trampleCount }} -->
<div style="color:#fff;cursor: pointer;"></div>
</div>
</div>
<div v-if="!scoreInfo.has" class="player-rate">
<el-rate v-model="scoreInfo.score" text-color="#ff9900" score-template="{value}" void-color="#fff" @change="addScore"></el-rate> <el-rate v-model="scoreInfo.score" text-color="#ff9900" score-template="{value}" void-color="#fff" @change="addScore"></el-rate>
</div>
<div v-if="scoreInfo.has" style="padding-top: 5px;display: flex;">
<div class="player-rate" style="padding-left: 35px;">
<el-rate disabled v-model="courseInfo.score" :allow-half="true"></el-rate>
</div> </div>
<div v-if="scoreInfo.has" style="padding-top: 5px;display: flex;"> <span class="score-text" style="margin-top:35px">
<div class="player-rate" style="padding-left: 35px;">
<el-rate disabled v-model="courseInfo.score" :allow-half="true"></el-rate>
</div>
<span class="score-text" style="margin-top:35px">
<span style="color:#ffb30f;">{{ toScore(courseInfo.score) }}</span> <span style="color:#ffb30f;">{{ toScore(courseInfo.score) }}</span>
<span style="font-size: 12px;color: #fff"></span> <span style="font-size: 12px;color: #fff"></span>
</span> </span>
</div>
</div> </div>
</div> </div>
<div v-if="resType == 20">
<div class="con-audio">
<div class="con-audio-title">{{ contentData.contentName }}</div>
<div class="con-audio-player">
<audioPlayer v-if="resType == 20" :url="blobUrl" :name="contentData.contentName" @onPlaying="audioPlaying" :isDrag="curriculumData.isDrag"
@onPlay="audioPlay" @onPause="audioPause" @onPlayEnd="audioEnd"></audioPlayer>
</div>
</div>
</div>
<div v-if="resType == 40">
<div style="padding: 10px;color: #ed0000; " v-if="curCFile.converStatus < 2 && !contentData.content">
<div>此课程内容无法预览请联系管理员</div>
</div>
<div style="padding: 10px;color: #ed0000;" v-if="curCFile.converStatus == 3 && !contentData.content">
此课程内容无法预览请联系管理员
</div>
<pdfPreview :autoScroll="true" v-if="resType == 40" :filePath="fileBaseUrl + contentData.content">
</pdfPreview>
</div>
<div v-if="resType == 41">
<div style="padding: 20px;" v-html="contentData.content"></div>
</div>
<div v-if="resType == 50" style="min-height: 500px;">
<iframe v-if="scormUrl" :src="scormUrl" frameborder="0" border="0px" style="width:100%;height:500px;border:0px;"></iframe>
</div>
<div v-if="resType == 52">
<div v-if="contentData.content != ''">
<div class="hyper-link" v-if="conLink.openType == 2">
<div class="hyper-link-row">{{ contentData.contentName }}</div>
<div class="hyper-link-row">{{ conLink.url }}</div>
</div>
<div v-if="conLink.openType == 1"><iframe :src="conLink.url"
style="width: 100%;border:0px;min-height: 473px;" frameborder="0"></iframe></div>
</div>
</div>
<div v-if="resType == 60">
<homework @submit="homeWorkSubmit" v-if="resType == 60 && studyId != ''" :studyId="studyId" :content="contentData"></homework>
</div>
<div v-if="resType == 61">
<exam @startTest="startTest" v-if="resType == 61 && studyId != '' " :studyId="studyId" :content="contentData"></exam>
</div>
<div v-if="resType == 62" style="padding:5px">
<assess v-if="resType == 62 && studyId != '' && contentData.id" :studyId="studyId" :content="contentData">
</assess>
</div>
</div> </div>
<div v-if="!renderCourse && Internet ==2" style="margin:350px 250px" class="jianjie pdftext" id="pdfPreview"> <div v-if="resType == 20">
<div style="margin-top:40px;font-weight:700;font-size: 22px;color: #ccc"> <div class="con-audio">
<span>十分抱歉您当前的网络环境不符合观看要求为了保障课程信息的安全您需要接入公司内网才能观看</span> <div class="con-audio-title">{{ contentData.contentName }}</div>
<div class="con-audio-player">
<audioPlayer v-if="resType == 20" :url="blobUrl" :name="contentData.contentName" @onPlaying="audioPlaying" :isDrag="curriculumData.isDrag"
@onPlay="audioPlay" @onPause="audioPause" @onPlayEnd="audioEnd"></audioPlayer>
</div>
</div> </div>
<div style="margin-top:20px;text-align:center" @click="refreshPage"> </div>
<el-button type="primary">重新检测</el-button> <div v-if="resType == 40">
<div style="padding: 10px;color: #ed0000; " v-if="curCFile.converStatus < 2 && !contentData.content">
<div>此课程内容无法预览请联系管理员</div>
</div> </div>
<div style="padding: 10px;color: #ed0000;" v-if="curCFile.converStatus == 3 && !contentData.content">
此课程内容无法预览请联系管理员
</div>
<pdfPreview :autoScroll="true" v-if="resType == 40" :filePath="fileBaseUrl + contentData.content">
</pdfPreview>
</div>
<div v-if="resType == 41">
<div style="padding: 20px;" v-html="contentData.content"></div>
</div>
<div v-if="resType == 50" style="min-height: 500px;">
<iframe v-if="scormUrl" :src="scormUrl" frameborder="0" border="0px" style="width:100%;height:500px;border:0px;"></iframe>
</div>
<div v-if="resType == 52">
<div v-if="contentData.content != ''">
<div class="hyper-link" v-if="conLink.openType == 2">
<div class="hyper-link-row">{{ contentData.contentName }}</div>
<div class="hyper-link-row">{{ conLink.url }}</div>
</div>
<div v-if="conLink.openType == 1"><iframe :src="conLink.url"
style="width: 100%;border:0px;min-height: 473px;" frameborder="0"></iframe></div>
</div>
</div>
<div v-if="resType == 60">
<homework @submit="homeWorkSubmit" v-if="resType == 60 && studyId != ''" :studyId="studyId" :content="contentData"></homework>
</div>
<div v-if="resType == 61">
<exam @startTest="startTest" v-if="resType == 61 && studyId != '' " :studyId="studyId" :content="contentData"></exam>
</div>
<div v-if="resType == 62" style="padding:5px">
<assess v-if="resType == 62 && studyId != '' && contentData.id" :studyId="studyId" :content="contentData">
</assess>
</div> </div>
</div> </div>
<!--交互部分--> <!--交互部分-->
@@ -177,7 +167,7 @@
</div> </div>
<!-- 课程单元 --> <!-- 课程单元 -->
<div class="course-units" v-if="tab == 1"> <div class="course-units" v-if="tab == 1">
<div style="min-height: 350px;max-height: 650px ;overflow-y: auto;"> <div :style="`height: ${controlHeight}px;overflow-y: auto;`">
<div class="catalog" v-if="courseInfo.type == 20"> <div class="catalog" v-if="courseInfo.type == 20">
<div v-for="(item, index) in catalogTree" :key="index" :name="index"> <div v-for="(item, index) in catalogTree" :key="index" :name="index">
<el-menu <el-menu
@@ -295,7 +285,7 @@
<div v-else><img src="../../../public/images/Avatarwoman.png" alt=""></div> <div v-else><img src="../../../public/images/Avatarwoman.png" alt=""></div>
</div> </div>
</div> </div>
<div class="teacher-info"> <div class="teacher-info" @click="toUserHome(item)" title="点击进入他的主页">
<div class="teacher-name"> <div class="teacher-name">
<span> {{ item.teacherName }}</span> <span> {{ item.teacherName }}</span>
<!-- <span style="font-size: 12px; color:#666666 ;">( {{cutOrgNamePath(item.authorInfo.orgInfo)}} )</span> --> <!-- <span style="font-size: 12px; color:#666666 ;">( {{cutOrgNamePath(item.authorInfo.orgInfo)}} )</span> -->
@@ -313,17 +303,6 @@
</div> </div>
</div> </div>
</div> </div>
<el-dialog class="protocol" :close-on-click-modal="false" :visible="protocolDialogVisible" width="30%"
:show-close="false">
<div class="protocol-title">{{warnTitle}}</div>
<div class="protocol-content">
&emsp;&emsp;{{warn}}
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="protocolDialogVisible = false">
</el-button>
</span>
</el-dialog>
<!-- <div><portal-footer></portal-footer></div> --> <!-- <div><portal-footer></portal-footer></div> -->
</div> </div>
</template> </template>
@@ -390,7 +369,6 @@
}, },
data() { data() {
return { return {
protocolDialogVisible: false,
tentative: false, tentative: false,
isContentTypeTwo: null, isContentTypeTwo: null,
isContentType: null, isContentType: null,
@@ -412,7 +390,6 @@
curCFile: { curCFile: {
converStatus: 4, converStatus: 4,
}, },
Internet: 3,//1是成功 2是是失败 3是检测中
radio: '', radio: '',
interactRuning: false, interactRuning: false,
playerBoxShow: false, playerBoxShow: false,
@@ -454,7 +431,6 @@
getType: getType, getType: getType,
ctabName: 'catalog', ctabName: 'catalog',
resType: null, resType: null,
renderCourse: true,
activeNames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], activeNames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
scoreInfo: { scoreInfo: {
dlgShow: false, dlgShow: false,
@@ -478,12 +454,9 @@
cumulativeDuration:0, //非音频累计时长 cumulativeDuration:0, //非音频累计时长
maxDuration:0, //非音频最大时长 maxDuration:0, //非音频最大时长
defaultMaxTime:1800, //非音频默认最大时间 defaultMaxTime:1800, //非音频默认最大时间
warn:"测试内容",
warnTitle:"测试标题",
} }
}, },
mounted() { mounted() {
this.getInternet();
// 增加的用户受众id // 增加的用户受众id
let localKey = "user_" + this.userInfo.sysId + "_gids"; let localKey = "user_" + this.userInfo.sysId + "_gids";
let hasIds = sessionStorage.getItem(localKey); let hasIds = sessionStorage.getItem(localKey);
@@ -531,6 +504,10 @@
return treeList; return treeList;
} }
}, },
destroyed(){
this.cleanAppendTime();
this.stopStudyTime();
},
methods: { methods: {
handleOpen(key,path){ handleOpen(key,path){
if(this.isFalse){ if(this.isFalse){
@@ -545,13 +522,13 @@
}, },
noteChange(){ noteChange(){
//视频点定位,直接到播放的视频位置 //视频点定位,直接到播放的视频位置
this.timer = new Date().getTime() this.timer = new Date().getTime()
}, },
//清空追加学习时长事件 //清空追加学习时长事件
cleanAppendTime(){ cleanAppendTime(){
if(this.appendStudyOtherHandle){ if(this.appendStudyOtherHandle){
window.clearTimeout(this.appendStudyOtherHandle); window.clearTimeout(this.appendStudyOtherHandle);
} }
}, },
//非音视频课学习时长的增加,每一分钟保存一次 //非音视频课学习时长的增加,每一分钟保存一次
appendStudyOtherTime() { appendStudyOtherTime() {
@@ -562,46 +539,46 @@
if (!this.contentData.id) { if (!this.contentData.id) {
return; return;
} }
//每一分钟保存一次 //每一分钟保存一次
// 取消阅读的每分钟六十秒的计时,最多是设置的时间或默认时间 // 取消阅读的每分钟六十秒的计时,最多是设置的时间或默认时间
let $this=this; let $this=this;
let startTime = new Date().getTime(); let startTime = new Date().getTime();
this.appendStudyOtherHandle = setTimeout(function() { this.appendStudyOtherHandle = setTimeout(function() {
let endTime = new Date().getTime(); let endTime = new Date().getTime();
let totalTime = Math.round((endTime - startTime) / 1000); let totalTime = Math.round((endTime - startTime) / 1000);
$this.cumulativeDuration += totalTime; $this.cumulativeDuration += totalTime;
if($this.cumulativeDuration <= $this.maxDuration){ if($this.cumulativeDuration <= $this.maxDuration){
//发送时长 //发送时长
$this.sendStudyOtherTime(totalTime); $this.sendStudyOtherTime(totalTime);
//递归调用 //递归调用
$this.appendStudyOtherTime(); $this.appendStudyOtherTime();
}else{ }else{
clearTimeout(this.appendStudyOtherHandle); clearTimeout(this.appendStudyOtherHandle);
$this.cumulativeDuration = 0; $this.cumulativeDuration = 0;
$this.maxDuration = 0; $this.maxDuration = 0;
} }
}, 1000*60); }, 1000*60);
}, },
sendStudyOtherTime(totalTime){ sendStudyOtherTime(totalTime){
//静默处理 //静默处理
apiStat.sendEvent({ apiStat.sendEvent({
"key": "StudyCourseOther",//课程学习的key "key": "StudyCourseOther",//课程学习的key
"title": "非音视频课内容",//事件的标题 "title": "非音视频课内容",//事件的标题
"parameters":"second:" + totalTime,//second:value 本次的学习时长 "parameters":"second:" + totalTime,//second:value 本次的学习时长
"content": "学习课程",//事件的内容 "content": "学习课程",//事件的内容
"objId": this.courseInfo.id,//课程的id "objId": this.courseInfo.id,//课程的id
"objType": "1",//类型 "objType": "1",//类型
"source":"page", "source":"page",
"objInfo": ""+this.courseInfo.name, "objInfo": ""+this.courseInfo.name,
"aid":this.userInfo.aid, //当前登录人的id "aid":this.userInfo.aid, //当前登录人的id
"aname":this.userInfo.name,//当前人的姓名 "aname":this.userInfo.name,//当前人的姓名
"status": 1 //状态 "status": 1 //状态
}).then(rs=>{ }).then(rs=>{
if(rs.status != 200) { if(rs.status != 200) {
console.log(rs.message); console.log(rs.message);
} }
}); });
}, },
//笔记组件触发,播放指定时间 //笔记组件触发,播放指定时间
onPlayVideo(contentId,time){ onPlayVideo(contentId,time){
@@ -610,32 +587,32 @@
console.log(contentId,this.contentData.id,'两个内容id'); console.log(contentId,this.contentData.id,'两个内容id');
let $this=this; let $this=this;
if(this.contentData.id==contentId){ if(this.contentData.id==contentId){
this.onPlayerPause() this.onPlayerPause()
this.contentData.lastStudyTime=time; this.contentData.lastStudyTime=time;
setTimeout(() => { setTimeout(() => {
$this.$refs.myVideoPlayer.startPlay(time); $this.$refs.myVideoPlayer.startPlay(time);
}, 10) }, 10)
console.log('开始播放1'); console.log('开始播放1');
}else{ }else{
//通过contentId //通过contentId
let toResContent=null; let toResContent=null;
this.contentList.forEach(c => { this.contentList.forEach(c => {
if(c.id==contentId){ if(c.id==contentId){
c.lastStudyTime=time; c.lastStudyTime=time;
toResContent=c; toResContent=c;
}
});
if(toResContent){
this.changePlayRes(toResContent);
setTimeout(() => {
$this.$refs.myVideoPlayer.startPlay(time);
}, 10)
console.log('开始播放2');
}else{
this.$message.error('资源已不存在或更换过,已无法定位');
} }
});
if(toResContent){
this.changePlayRes(toResContent);
setTimeout(() => {
$this.$refs.myVideoPlayer.startPlay(time);
}, 10)
console.log('开始播放2');
}else{
this.$message.error('资源已不存在或更换过,已无法定位');
}
} }
this.playerBoxShow = false; this.playerBoxShow = false;
}, },
@@ -713,23 +690,23 @@
}else if(r.contentType==50){ //scorm }else if(r.contentType==50){ //scorm
this.scormUrl=''; this.scormUrl='';
apiCourseFile.detail(r.contentRefId).then(cfrs => { apiCourseFile.detail(r.contentRefId).then(cfrs => {
if(cfrs.status==200){ if(cfrs.status==200){
this.curCFile = cfrs.result; this.curCFile = cfrs.result;
//this.scormUrl=cfrs //this.scormUrl=cfrs
let pars='?mode=normal&r='+Math.random(); let pars='?mode=normal&r='+Math.random();
pars+='&scormId='+this.curCFile.id; pars+='&scormId='+this.curCFile.id;
pars+='&courseId='+this.courseId; pars+='&courseId='+this.courseId;
pars+='&contentId='+r.id; pars+='&contentId='+r.id;
pars+='&studentId='+this.userInfo.aid; pars+='&studentId='+this.userInfo.aid;
pars+='&studentName='+encodeURIComponent(this.userInfo.name); pars+='&studentName='+encodeURIComponent(this.userInfo.name);
pars+='&lmsId='+this.studyId; pars+='&lmsId='+this.studyId;
pars+='&scoId=';//不指定scorm模块自动根据学习记录定位 pars+='&scoId=';//不指定scorm模块自动根据学习记录定位
let urlPre=window.location.protocol; let urlPre=window.location.protocol;
let configUrl=process.env.VUE_APP_SCORM_URL; let configUrl=process.env.VUE_APP_SCORM_URL;
configUrl=urlPre+configUrl.substring(configUrl.indexOf(':')+1); configUrl=urlPre+configUrl.substring(configUrl.indexOf(':')+1);
this.scormUrl=configUrl+pars;//播放的首页 this.scormUrl=configUrl+pars;//播放的首页
} }
}); });
}else if (r.contentType == 52) { }else if (r.contentType == 52) {
@@ -760,12 +737,12 @@
setTimeout(() => { setTimeout(() => {
this.isContentTypeTwo = r.contentType this.isContentTypeTwo = r.contentType
$this.isShowTime() $this.isShowTime()
}, 2000); }, 2000);
} }
} }
//以下是学习记录,50是scorm项目 //以下是学习记录,50是scorm项目
if (this.contentData.contentType > 20 && this.contentData.contentType !== 50) { //非视频类的 if (this.contentData.contentType > 20 && this.contentData.contentType !== 50) { //非视频类的
//用户的学习时长,非音视频课程学习,单独的处理 //用户的学习时长,非音视频课程学习,单独的处理
this.isAppendTime = false; this.isAppendTime = false;
this.appendStudyOtherHandle = setTimeout(function() { this.appendStudyOtherHandle = setTimeout(function() {
@@ -775,18 +752,18 @@
// 没有设置默认时长三十分钟, // 没有设置默认时长三十分钟,
$this.maxDuration = r.duration !== 0 ? r.duration * 2 : $this.defaultMaxTime; $this.maxDuration = r.duration !== 0 ? r.duration * 2 : $this.defaultMaxTime;
$this.$store.dispatch("userTrigger", { $this.$store.dispatch("userTrigger", {
"key": "StudyCourseOther",//课程学习的key "key": "StudyCourseOther",//课程学习的key
"title": "非音视频课内容",//事件的标题 "title": "非音视频课内容",//事件的标题
"parameters":"second:15",//second:value 本次的学习时长 "parameters":"second:15",//second:value 本次的学习时长
"content": "学习课程",//事件的内容 "content": "学习课程",//事件的内容
"objId": $this.courseInfo.id,//课程的id "objId": $this.courseInfo.id,//课程的id
"objType": "1",//类型 "objType": "1",//类型
"source":"page", "source":"page",
"objInfo": ""+$this.courseInfo.name, "objInfo": ""+$this.courseInfo.name,
"aid":$this.userInfo.aid, //当前登录人的id "aid":$this.userInfo.aid, //当前登录人的id
"aname":$this.userInfo.name,//当前人的姓名 "aname":$this.userInfo.name,//当前人的姓名
"status": 1 //状态 "status": 1 //状态
}); });
$this.appendStudyOtherTime(); $this.appendStudyOtherTime();
}, 15000); //非音视频课程学习,十五秒后记录 }, 15000); //非音视频课程学习,十五秒后记录
this.isContentType = this.contentData.contentType this.isContentType = this.contentData.contentType
@@ -803,21 +780,20 @@
this.$nextTick(function(){ this.$nextTick(function(){
if (r.contentType == 10) { if (r.contentType == 10) {
console.log('视频处理lastStudyTime',this.contentData.lastStudyTime) console.log('视频处理lastStudyTime',this.contentData.lastStudyTime)
console.log('视频处理progressVideo',this.contentData.progressVideo) console.log('视频处理progressVideo',this.contentData.progressVideo)
this.$refs.myVideoPlayer.updateProgressByClickBar2(this.contentData.lastStudyTime,this.contentData.progressVideo); this.$refs.myVideoPlayer.updateProgressByClickBar2(this.contentData.lastStudyTime,this.contentData.progressVideo);
} }
let h=$this.$refs.coursePlayer.offsetHeight; let h=$this.$refs.coursePlayer.offsetHeight;
//解决获取高度不正的问题 //解决获取高度不正的问题
if(h>400 && h<500){ if(h>400 && h<500){
h=h+40; h=h+40;
}else if(h>500){ }else if(h>500){
h=h+60; h=h+60;
} }
// 移除高度控制 防止内容塌陷 $this.controlHeight=h-95;
// $this.controlHeight=h-95;
}) })
@@ -959,9 +935,9 @@
this.interactRuning = true; this.interactRuning = true;
let teacherId=''; let teacherId='';
if(this.teachers.length>0){ if(this.teachers.length>0){
teacherId=this.teachers[0].teacherId; teacherId=this.teachers[0].teacherId;
}else{ }else{
teacherId=this.courseInfo.sysCreateAid teacherId=this.courseInfo.sysCreateAid
} }
let postData = { let postData = {
objType: 1, objType: 1,
@@ -1102,7 +1078,7 @@
class: 'catalog-cell-state1' class: 'catalog-cell-state1'
}; };
} }
break; break;
} }
return data; return data;
}, },
@@ -1163,8 +1139,8 @@
var markDiv = div.querySelector("#" + divId); var markDiv = div.querySelector("#" + divId);
console.log("去除水印 ---- gx markDiv ----",markDiv); console.log("去除水印 ---- gx markDiv ----",markDiv);
if (markDiv) { if (markDiv) {
console.log("执行去除水印 ---- gx markDiv ----",markDiv); console.log("执行去除水印 ---- gx markDiv ----",markDiv);
div.removeChild(markDiv); div.removeChild(markDiv);
} }
} }
}, },
@@ -1223,9 +1199,9 @@
var time = localStorage.getItem('videoProgressData') var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {} var arr = time&&JSON.parse(time) || {}
if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) { if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) {
postData.progressVideo = arr[this.blobId] postData.progressVideo = arr[this.blobId]
// postData.contentId = this.contentData.id // postData.contentId = this.contentData.id
// postData.courseId = this.contentData.courseId // postData.courseId = this.contentData.courseId
} }
} }
//console.log('记录播放时间') //console.log('记录播放时间')
@@ -1283,9 +1259,9 @@
var time = localStorage.getItem('videoProgressData') var time = localStorage.getItem('videoProgressData')
var arr = time&&JSON.parse(time) || {} var arr = time&&JSON.parse(time) || {}
if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) { if(arr[this.blobId] && this.contentData.progressVideo<arr[this.blobId]) {
postData.progressVideo = arr[this.blobId] postData.progressVideo = arr[this.blobId]
// postData.contentId = this.contentData.id // postData.contentId = this.contentData.id
// postData.courseId = this.contentData.courseId // postData.courseId = this.contentData.courseId
} }
} }
//console.log('记录播放时间') //console.log('记录播放时间')
@@ -1323,17 +1299,6 @@
audiences:this.audiences audiences:this.audiences
}).then(rs => { }).then(rs => {
if (rs.status == 200) { if (rs.status == 200) {
if(rs.result.isPermission){
this.protocolDialogVisible=true
}
if (!rs.result.isPermission || (rs.result.isPermission && this.Internet==1)){
// this.getInternet()
this.renderCourse = true
}else{
// this.Internet=1;
this.renderCourse = false
this.protocolDialogVisible=true
}
if(rs.result.contents.length==0){ if(rs.result.contents.length==0){
$this.$message.error('课程内容已删除或课程已不再使用'); $this.$message.error('课程内容已删除或课程已不再使用');
return; return;
@@ -1344,11 +1309,11 @@
} }
//设置必须的字段 //设置必须的字段
if(rs.result.contents.length==1){ if(rs.result.contents.length==1){
$this.tab=2; $this.tab=2;
//console.log('内容只有一个'); //console.log('内容只有一个');
} }
if(!rs.result.isCrowd){ if(!rs.result.isCrowd){
$this.$message.error('您没有查看该课程的权限'); $this.$message.error('您没有查看该课程的权限');
} }
// 是否播放 // 是否播放
this.isCrowd = rs.result.isCrowd this.isCrowd = rs.result.isCrowd
@@ -1392,8 +1357,7 @@
} }
} }
this.courseInfo = rs.result.course; this.courseInfo = rs.result.course;
this.warn = rs.result.warn;
this.warnTitle = rs.result.warnTitle;
if (rs.result.teachers && rs.result.teachers.length > 0) { if (rs.result.teachers && rs.result.teachers.length > 0) {
let userIds = []; let userIds = [];
let ctoUsers = []; let ctoUsers = [];
@@ -1422,53 +1386,12 @@
this.totalContent = rs.result.contents.length; this.totalContent = rs.result.contents.length;
//加载学习的数据 //加载学习的数据
this.loadStudyData(rs.result); this.loadStudyData(rs.result);
} else { } else {
this.$message.error(rs.message); this.$message.error(rs.message);
} }
}); });
}, },
refreshPage() {
location.reload();
// this.getInternet();
// this.loadData();
},
getXmlHttpRequest() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
},
// 检测是否为内网
getInternet() {
this.Internet = 3;
let $this = this;
let xmlhttp = this.getXmlHttpRequest();
let timedOut = false;
let timer = setTimeout(function () {
timedOut = true;
xmlhttp.abort();
}, 1000);
xmlhttp.open("HEAD", window.location.protocol + "//uapi.boe.com.cn/500.html", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
clearTimeout(timer);
$this.Internet = 1;
} else {
clearTimeout(timer);
// $this.protocolDialogVisible=true
$this.Internet = 2;
}
} else {
if (timedOut) return;//忽略中止请求
clearTimeout(timer);//取消等待的超时
}
}
},
loadStudyData(result) { loadStudyData(result) {
let $this=this; let $this=this;
this.loadScorePraiseAndTrample(); this.loadScorePraiseAndTrample();
@@ -1591,37 +1514,37 @@
progress(val) { progress(val) {
const progressValue = parseFloat(val) * 100; const progressValue = parseFloat(val) * 100;
this.sendEventProgress = Number(progressValue.toFixed(2)); this.sendEventProgress = Number(progressValue.toFixed(2));
}, },
saveStudyDuration(duration) { //保存本地存储的学习时长 saveStudyDuration(duration) { //保存本地存储的学习时长
if (duration > 0) { if (duration > 0) {
//发送用户学习事件 //发送用户学习事件
//console.log('保存到后台学习时长='+duration); //console.log('保存到后台学习时长='+duration);
let postData={ let postData={
"key": "StudyCourse",//课程学习的key "key": "StudyCourse",//课程学习的key
"title": "学习课程",//事件的标题 "title": "学习课程",//事件的标题
"parameters":"second:"+duration,//second:value,total:value 本次的学习时长 "parameters":"second:"+duration,//second:value,total:value 本次的学习时长
"content": "学习课程【"+this.courseInfo.name+"】",//事件的内容 "content": "学习课程【"+this.courseInfo.name+"】",//事件的内容
"objId": this.courseInfo.id,//课程的id "objId": this.courseInfo.id,//课程的id
"objType": "1",//类型 "objType": "1",//类型
"source":"page", "source":"page",
"objInfo": ""+this.courseInfo.name, "objInfo": ""+this.courseInfo.name,
"aid":this.userInfo.aid, //当前登录人的id "aid":this.userInfo.aid, //当前登录人的id
"aname":this.userInfo.name,//当前人的姓名 "aname":this.userInfo.name,//当前人的姓名
"status": 1, //状态 "status": 1, //状态
"contentId": this.contentData.id, "contentId": this.contentData.id,
}
if(this.resType == 10){
postData.progress = this.sendEventProgress;
}
//静默处理
apiStat.sendEvent(postData).then(rs=>{
if(rs.status == 200) {
// this.appendStartTime = new Date();//重新计时
// studyUtil.clearStudyDuration(); //清除本地存储
} else {
console.log(rs.message);
} }
}); if(this.resType == 10){
postData.progress = this.sendEventProgress;
}
//静默处理
apiStat.sendEvent(postData).then(rs=>{
if(rs.status == 200) {
// this.appendStartTime = new Date();//重新计时
// studyUtil.clearStudyDuration(); //清除本地存储
} else {
console.log(rs.message);
}
});
// let postAppendData = { // let postAppendData = {
// id: this.appentId, // id: this.appentId,
// studyId: this.studyId, // studyId: this.studyId,
@@ -1643,13 +1566,13 @@
}, },
//结束追加学习时长 //结束追加学习时长
stopStudyTime(){ stopStudyTime(){
//console.log('停止追加学习时长'); //console.log('停止追加学习时长');
this.isAppendTime=false; this.isAppendTime=false;
//暂停让他为空 从新计时 //暂停让他为空 从新计时
this.appendStartTime = null this.appendStartTime = null
if (this.appendHandle != null) { if (this.appendHandle != null) {
window.clearTimeout(this.appendHandle); window.clearTimeout(this.appendHandle);
} }
}, },
appendStudyTime() { appendStudyTime() {
// 暂停的时候重新从十五秒开始计时 // 暂停的时候重新从十五秒开始计时
@@ -1671,11 +1594,11 @@
this.appendHandle && window.clearTimeout(this.appendHandle); this.appendHandle && window.clearTimeout(this.appendHandle);
//启动下次追加学习时长 //启动下次追加学习时长
this.appendHandle = setTimeout(() => { this.appendHandle = setTimeout(() => {
let endTime = new Date().getTime(); let endTime = new Date().getTime();
this.appentInterval = 60 this.appentInterval = 60
let totalTime = Math.round((endTime - this.appendStartTime) / 1000); let totalTime = Math.round((endTime - this.appendStartTime) / 1000);
this.appendStudyTime(); this.appendStudyTime();
this.saveStudyDuration(totalTime) this.saveStudyDuration(totalTime)
}, this.appentInterval * 1000); }, this.appentInterval * 1000);
}, },
@@ -1741,30 +1664,26 @@
}, },
handleAudioTimeUpdate(currentTime) { handleAudioTimeUpdate(currentTime) {
// if(this.contentStudysLength.length == 0){ // if(this.contentStudysLength.length == 0){
let params = { let params = {
studyId: this.studyId, //学习id, studyId: this.studyId, //学习id,
courseId: this.courseId, //课程id, courseId: this.courseId, //课程id,
contentId: this.contentData.id, //内容id, contentId: this.contentData.id, //内容id,
contentType: this.contentData.contentType, contentType: this.contentData.contentType,
contentName: this.contentData.contentName, //内容名称 contentName: this.contentData.contentName, //内容名称
progress: 1, progress: 1,
status: 2, status: 2,
contentTotal: this.totalContent contentTotal: this.totalContent
}; };
if(currentTime > 2 && this.trueFalse){ if(currentTime > 2 && this.trueFalse){
apiStudy.studyContent(params).then(()=>{ apiStudy.studyContent(params).then(()=>{
if(this.contentData.status<2){ if(this.contentData.status<2){
this.contentData.status = 2; this.contentData.status = 2;
} }
}) })
this.trueFalse = false this.trueFalse = false
} }
}, },
}, },
destroyed(){
this.cleanAppendTime();
this.stopStudyTime();
},
} }
</script> </script>
@@ -1801,44 +1720,21 @@
margin: 20px auto; margin: 20px auto;
.course-playbox { .course-playbox {
background-color: #fff; background-color: #fff;
//min-height: 400px; min-height: 400px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.course-player-container {
display: flex;
flex-direction: column;
height: 100%;
}
.course-player{ //内容播放区域 .course-player{ //内容播放区域
flex: 4; // 80%高度 flex:1;
min-width: 700px; min-width: 700px;
// min-height: 400px; min-height: 400px;
// max-height: 800px; max-height: 800px;
height: 80%; //height: 100%;
border: 1px solid #ffffff; border: 1px solid #ffffff;
padding-right: 20px; padding-right: 20px;
background-color: rgb(238, 238, 238);
// overflow: auto; // overflow: auto;
} }
.course-control{ //内容控制区域 .course-control{ //内容控制区域
width: 420px; width: 420px;
}
}
@media screen and (max-width: 1200px) {
.course-playbox,
.course-infobox {
flex-direction: column;
}
.course-player,
.course-info {
min-width: 100%;
padding-right: 0;
}
.course-control,
.course-teacher {
width: 100%;
margin-top: 20px;
} }
} }
.course-infobox { .course-infobox {
@@ -1960,10 +1856,13 @@
} }
.player-box { .player-box {
position: relative; position: absolute;
width: 100%; // top: 62px;
max-width: 300px; // left: 184px;
margin: 20px auto; width: 300px;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
height: 187px; height: 187px;
background: rgba(74, 74, 74, .5); background: rgba(74, 74, 74, .5);
border-radius: 33px; border-radius: 33px;
@@ -2106,7 +2005,6 @@
} }
.course-interact { .course-interact {
flex: 1; // 20%高度
height: 54px; height: 54px;
// padding-top: 10px; // padding-top: 10px;
// padding-right: 10px; // padding-right: 10px;
@@ -2470,18 +2368,4 @@
height: 200px; height: 200px;
background: url('../../../public/images/couresdetail.png'); background: url('../../../public/images/couresdetail.png');
} }
.protocol {
.protocol-title {
font-size: 20px;
font-weight: 600;
text-align: center;
margin-bottom: 25px;
}
.protocol-content {
font-size: 14px;
line-height: 25px;
}
}
</style> </style>

View File

@@ -88,9 +88,9 @@
<div> <div>
<div class="textbut-box"> <div class="textbut-box">
<div style="padding-top: 8px;"> <div style="padding-top: 8px;">
<interactBar v-if="item.type == 1" nodeWidth="60px" :readonly="true" :type="6" :data="item" :shares="false" :comments="false" :answers="true" :clickAnswer="true" :views="false"></interactBar> <interactBar v-if="item.type == 1" nodeWidth="60px" :readonly="true" :type="6" :data="item" :shares="false" :comments="true" :answers="false" :clickAnswer="true" :views="false"></interactBar>
</div> </div>
<el-button @click="deleteNote(item)" style=" margin-right: 10px;" class="textbut" type="text"><svg-icon icon-class="notedel" ></svg-icon>删除</el-button> <el-button @click="deleteNote(item)" style=" margin-right: 10px;margin-left: 15px" class="textbut" type="text"><svg-icon icon-class="notedel" ></svg-icon>删除</el-button>
<el-button @click="edit(item)" class="textbut" type="text"><svg-icon icon-class="noteedit" ></svg-icon> 编辑</el-button> <el-button @click="edit(item)" class="textbut" type="text"><svg-icon icon-class="noteedit" ></svg-icon> 编辑</el-button>
</div> </div>
</div> </div>

View File

@@ -195,9 +195,7 @@ export default {
if(num == 1) { if(num == 1) {
this.editdata.isAuto = true; this.editdata.isAuto = true;
} }
if(this.imgContent.length > 0) { this.editdata.content = this.imgContent.join();
this.editdata.content = this.imgContent.join();
}
apiNote.update(this.editdata).then(res=>{ apiNote.update(this.editdata).then(res=>{
if(res.status == 200) { if(res.status == 200) {
localStorage.removeItem(this.localStorageKey); //清空本地缓存 localStorage.removeItem(this.localStorageKey); //清空本地缓存

View File

@@ -23,7 +23,7 @@
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="total">累计</el-dropdown-item> <el-dropdown-item command="total">累计</el-dropdown-item>
<el-dropdown-item command="now">当前</el-dropdown-item> <el-dropdown-item command="now">当前</el-dropdown-item>
<!-- <el-dropdown-item command="weeks">本周</el-dropdown-item> <!-- <el-dropdown-item command="weeks">本周</el-dropdown-item>
<el-dropdown-item command="months">本月</el-dropdown-item> <el-dropdown-item command="months">本月</el-dropdown-item>
<el-dropdown-item command="years">本年</el-dropdown-item> --> <el-dropdown-item command="years">本年</el-dropdown-item> -->
@@ -33,10 +33,10 @@
</div> </div>
<div class="myselftext"> <div class="myselftext">
<div class="myranking"> <div class="myranking">
{{isNow ? '当前' : '累计'}}排名 : <span> {{currentUserRankingTotalData.rankNo}}</span> {{isNow ? '当前' : '累计'}}排名 : <span> {{currentUserRankingTotalData.rankNo}}</span>
</div> </div>
<div class="myexperience"> <div class="myexperience">
{{isNow ? '当前' : '累计'}}经验值 : <span>{{currentUserRankingTotalData.rankValue}}</span> {{isNow ? '当前' : '累计'}}经验值 : <span>{{currentUserRankingTotalData.rankValue}}</span>
</div> </div>
</div> </div>
@@ -117,7 +117,7 @@
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="total">累计</el-dropdown-item> <el-dropdown-item command="total">累计</el-dropdown-item>
<el-dropdown-item command="now">当前</el-dropdown-item> <el-dropdown-item command="now">当前</el-dropdown-item>
<!-- <el-dropdown-item command="weeks">本周</el-dropdown-item> <!-- <el-dropdown-item command="weeks">本周</el-dropdown-item>
<el-dropdown-item command="months">本月</el-dropdown-item> <el-dropdown-item command="months">本月</el-dropdown-item>
<el-dropdown-item command="years">本年</el-dropdown-item> --> <el-dropdown-item command="years">本年</el-dropdown-item> -->
@@ -127,10 +127,10 @@
</div> </div>
<div class="myselftext"> <div class="myselftext">
<div class="myranking"> <div class="myranking">
{{isStudyTime ? '当前' : '累计'}}排名 : <span> {{learningDurationTotalData.rankNo}}</span> {{isStudyTime ? '当前' : '累计'}}排名 : <span> {{learningDurationTotalData.rankNo}}</span>
</div> </div>
<div class="myexperience"> <div class="myexperience">
{{isStudyTime ? '当前' : '累计'}}学习时长: <span> {{formatSecondToHour(learningDurationTotalData.rankValue)}}</span> h {{isStudyTime ? '当前' : '累计'}}学习时长: <span> {{formatSecondToHour(learningDurationTotalData.rankValue)}}</span> h
</div> </div>
</div> </div>
<div class="exp-table" style="margin-top:20px;"> <div class="exp-table" style="margin-top:20px;">
@@ -206,7 +206,7 @@
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="total">累计</el-dropdown-item> <el-dropdown-item command="total">累计</el-dropdown-item>
<!-- <el-dropdown-item command="now">当前</el-dropdown-item> --> <el-dropdown-item command="now">当前</el-dropdown-item>
<!-- <el-dropdown-item command="weeks">本周</el-dropdown-item> <!-- <el-dropdown-item command="weeks">本周</el-dropdown-item>
<el-dropdown-item command="months">本月</el-dropdown-item> <el-dropdown-item command="months">本月</el-dropdown-item>
<el-dropdown-item command="years">本年</el-dropdown-item> --> <el-dropdown-item command="years">本年</el-dropdown-item> -->
@@ -216,10 +216,10 @@
</div> </div>
<div class="myselftext"> <div class="myselftext">
<div class="myranking"> <div class="myranking">
{{isStudyDay ? '当前' : '累计'}}排名 : <span> {{learningDaysTotalData.rankNo}}</span> {{isStudyDay ? '当前' : '累计'}}排名 : <span> {{learningDaysTotalData.rankNo}}</span>
</div> </div>
<div class="myexperience"> <div class="myexperience">
{{isStudyDay ? '当前' : '累计'}}学习天数 : <span>{{learningDaysTotalData.rankValue}}</span> {{isStudyDay ? '当前' : '累计'}}学习天数 : <span>{{learningDaysTotalData.rankValue}}</span>
</div> </div>
</div> </div>
<div class="exp-table" style="margin-top:20px;"> <div class="exp-table" style="margin-top:20px;">
@@ -311,7 +311,7 @@ export default {
formatSecondToHour:formatSecondToHour, formatSecondToHour:formatSecondToHour,
experience:{ experience:{
field:'now', field:'now',
name:'当前', name:'当前',
data:{ data:{
rankingNo:0, rankingNo:0,
total:0 total:0
@@ -320,7 +320,7 @@ export default {
}, },
learningDuration:{ learningDuration:{
field:'now', field:'now',
name:'当前', name:'当前',
data:{ data:{
rankingNo:0, rankingNo:0,
total:0 total:0