Compare commits

...

40 Commits

Author SHA1 Message Date
xu
3d7ca1cc20 【bug:SZX-1155】在线课程管理列表中,增加两列:审核人和审核时间。 2025-11-11 16:16:41 +08:00
xu
ebae7f6c0b 【bug:SZX-1155】在线课程管理列表中,增加两列:审核人和审核时间。并修改页面样式,让表格可以左右滚动显示完整。 2025-11-11 16:06:32 +08:00
xu
91f06d4ed6 【bug:SZX-1155】在线课程管理列表中,增加两列:审核人和审核时间。并修改页面样式,让表格可以左右滚动显示完整。 2025-11-11 15:30:20 +08:00
xu
9b3b3b94ef 【bug:SZX-1155】在线课程管理列表中,增加两列:审核人和审核时间。并修改页面样式,让表格可以左右滚动显示完整。 2025-11-11 14:49:14 +08:00
xu
427ff20531 Revert "【bug:SZX-1155】在线课程管理列表中,增加两列:审核人和审核时间。"
This reverts commit 6c5e189448.
2025-11-07 15:48:21 +08:00
xu
6c5e189448 【bug:SZX-1155】在线课程管理列表中,增加两列:审核人和审核时间。 2025-11-05 15:49:29 +08:00
joshen
c3f53515b9 Merge branch '202599-da' 2025-09-19 18:58:47 +08:00
087be5dd38 fix: 修复分数异常展示的问题 2025-09-19 13:43:23 +08:00
joshen
1772c972b9 Merge branch '202599-da' 2025-09-18 18:51:50 +08:00
dong.ai
91bafcb5b9 调整字体展示位置 2025-09-15 17:15:47 +08:00
dong.ai
8c533c5f3a 修改字体大小 2025-09-15 17:02:45 +08:00
dong.ai
bb17784501 修改图片大小,背景图片 2025-09-15 16:32:23 +08:00
dong.ai
69530fe6ad 标题展示隐藏判断2 2025-09-15 14:01:32 +08:00
dong.ai
b1cd8e2f63 标题展示隐藏判断 2025-09-15 13:57:19 +08:00
dong.ai
7335dd4eba 首页教师名称展示 2025-09-15 13:45:35 +08:00
3860087fac feat: 增加搜索标签展示,修复样式问题,提示语修改 2025-09-15 11:36:08 +08:00
046509f70d fix: 修复课程名称展示异常的问题 2025-09-15 10:06:35 +08:00
bf0ae91184 feat: 优化调用显示方案 2025-09-15 10:06:35 +08:00
f61742a0b9 fix: 修复教师无法展示的问题 2025-09-14 22:09:03 +08:00
dong.ai
c886a80193 教师展示 2025-09-14 21:30:12 +08:00
05ad90b025 fix: 修复标签无法正常高亮的问题 2025-09-14 21:23:56 +08:00
f3833a23fa style: 优化选择年份和边距 2025-09-14 21:16:02 +08:00
d957a8d44b fix: 修复 主页图片无法正常展示的问题 2025-09-14 21:16:01 +08:00
dong.ai
89ed79828f 修复跳转详情2 2025-09-14 21:09:57 +08:00
dong.ai
b926590edc 修改跳转详情 2025-09-14 21:04:21 +08:00
19bc757dc2 fix: 修复 systype 错误的问题 2025-09-14 20:59:38 +08:00
f3a1036b64 feat: 样式修改,功能修复 2025-09-14 20:50:42 +08:00
3c1650b751 Merge branch '2025-912-hz' into 202599-da
# Conflicts:
#	src/api/phase2/index.js
2025-09-14 20:30:44 +08:00
ff2bdb4ae5 fix: 修复获取课程精品课标记时间年份列表
# Conflicts:
#	src/api/phase2/index.js
2025-09-14 20:29:53 +08:00
dong.ai
14fb53ccd3 解决冲突 2025-09-14 20:10:29 +08:00
dong.ai
72f9661150 Merge branch '202599-da' of https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/learning-system-portal into 202599-da 2025-09-14 19:43:10 +08:00
dong.ai
7806afc5f7 还原代码 2025-09-14 19:40:05 +08:00
e1af233c5f feat: 完成精品课程专区的内容 2025-09-14 19:39:41 +08:00
2738493030 fix: 修复刷新页面自动调整错误的问题 2025-09-14 19:39:08 +08:00
480a4f5564 chore: 修正路由名称拼写错误 2025-09-14 19:39:06 +08:00
dong.ai
205bf5469f 字段展示 2025-09-14 19:08:21 +08:00
0b0789feda feat: 右侧菜单高度调整为 650 2025-09-09 17:51:26 +08:00
70bb87a17a feat: 溢出控制高度的代码, 防止内容塌陷 2025-09-09 17:51:25 +08:00
4e60811542 feat: 溢出控制高度的代码, 防止内容塌陷 2025-09-09 17:51:24 +08:00
670788339
075fdb1913 认证讲师库删除年份后缀 2025-09-09 17:39:58 +08:00
9 changed files with 245 additions and 145 deletions

BIN
public/images/qualityBg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -53,6 +53,14 @@ const courselist=function (data){
const qualitylist=function (data){ const qualitylist=function (data){
return httpAjax.post(baseURL,'/quality/home/qualityItem',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/qualityYearList',{});
}
/** /**
* 首页新课程推荐列表 * 首页新课程推荐列表
*/ */
@@ -68,5 +76,6 @@ export default {
courselist, courselist,
newCases, newCases,
getRecommendList, getRecommendList,
qualitylist qualitylist,
qualityPageList
} }

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 : ''">
<router-link to="/course">课程 <a @click="handleChangeCourse">课程
<div :class="current == 'course' ? 'nav-bottbor' : ''"></div> <div :class="current == 'course' ? 'nav-bottbor' : ''"></div>
</router-link> </a>
</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,6 +214,12 @@ 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

@@ -2,7 +2,6 @@ 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)
@@ -363,13 +362,13 @@ export const constantRoutes = [{
component: (resolve) => require(['@/views/error/500'], resolve), component: (resolve) => require(['@/views/error/500'], resolve),
hidden: true hidden: true
}, },
{ {
path: '/quailtyCourse', path: '/qualityCourse',
hidden: true, hidden: true,
component: (resolve) => require(['@/views/portal/course/quailtyCourse'], resolve), component: (resolve) => require(['@/views/portal/course/qualityCourse'], resolve),
name: 'course', name: 'qualityCourse',
meta: {title: '精品课课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false}, meta: {title: '精品课课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false},
}, }
] ]

View File

@@ -162,14 +162,14 @@
<!-- </div> --> <!-- </div> -->
<!-- 精品课模块 --> <!-- 精品课模块 -->
<div class="xcontent2-main"> <div class="xcontent2-main">
<div class="modules-title xindex-main" v-if="this.qusisityList.list.length>0"> <div class="modules-title xindex-main" v-if="this.qusisityList.list.length > 0">
<!-- <span class="modules-text" style="color: #3D86F4;">精品课</span> --> <!-- <span class="modules-text" style="color: #3D86F4;">精品课</span> -->
<span class="quyer-tag" style="margin-left: 0px;"> <span class="quyer-tag" style="margin-left: 0px;">
<!-- <img src="../assets/images/tutoring1.pn" alt=""> --> <!-- <img src="../assets/images/tutoring1.pn" alt=""> -->
<img class="modules-text" style="height: 24px;" src="../assets/images/course/courseTitle.png" alt=""> <img class="modules-text" style="height: 28px;" src="../assets/images/course/courseTitle.png" alt="">
</span> </span>
<span class="more"> <span class="more">
<router-link to="/quailtyCourse">查看更多>></router-link> <router-link to="/qualityCourse">查看更多>></router-link>
</span> </span>
</div> </div>
@@ -212,7 +212,7 @@
</div> </div>
<div class="course-author"> <div class="course-author">
<div class="course-author-left"> <div class="course-author-left">
{{ course.authorInfo.teacherName }} {{ course.authorInfo.name }}
<span class="study-num" <span class="study-num"
>{{ formatNum(course.studyNum) }}人学习</span >{{ formatNum(course.studyNum) }}人学习</span
@@ -233,7 +233,7 @@
<!--内容块--> <!--内容块-->
<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
@@ -1505,21 +1505,27 @@ export default {
//二期调整,直接改成一个地址 //二期调整,直接改成一个地址
//return this.webBaseUrl + '/course/detail?id=' + item.id; //return this.webBaseUrl + '/course/detail?id=' + item.id;
let $this = this; let $this = this;
let cId = "";
if (item.id) {
cId = item.id;
} else {
cId = item.courseId;
}
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=" + cId);
} else if (item.type == 20) { } else if (item.type == 20) {
apiCourseStudy.hasSignup(item.id?item.id:item.courseId).then((rs) => { apiCourseStudy.hasSignup(cId).then((rs) => {
if (rs.status == 200) { if (rs.status == 200) {
//return $this.webBaseUrl + "/course/studyindex?id=" + item.id; //return $this.webBaseUrl + "/course/studyindex?id=" + cId;
this.$router.push("/course/studyindex?id=" + item.id?item.id:item.courseId); this.$router.push("/course/studyindex?id=" + cId);
} else { } else {
//return $this.webBaseUrl + "/course/detail?id=" + item.id; //return $this.webBaseUrl + "/course/detail?id=" + cId;
this.$router.push("/course/detail?id=" + item.id?item.id:item.courseId); this.$router.push("/course/detail?id=" + cId);
} }
}); });
//return $this.webBaseUrl + "/course/detail?id=" + item.id; //return $this.webBaseUrl + "/course/detail?id=" + cId;
} }
}, },
orderTypeFilter(val) { orderTypeFilter(val) {
@@ -1562,7 +1568,20 @@ export default {
aid: this.userInfo.aid, aid: this.userInfo.aid,
} }
apiIndex.qualitylist(course).then((res) => { apiIndex.qualitylist(course).then((res) => {
console.log(res,'jinpinsjfhhfjash--------------------------'); let courseIds = [];
res.data.result.forEach((item) => {
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
code: "",
sex: null,
};
courseIds.push(item.courseId);
});
this.loadCouserTeacher(res.data.result, courseIds);
console.log(res.data.result,'--------------------------');
this.qusisityList.list = res.data.result; this.qusisityList.list = res.data.result;
}) })
}, },
@@ -1765,7 +1784,7 @@ export default {
let userIds = []; let userIds = [];
list.forEach((item, index) => { list.forEach((item, index) => {
cres.result.some((courseTeahcer) => { cres.result.some((courseTeahcer) => {
if (courseTeahcer.courseId == item.id) { if (courseTeahcer.courseId == (item.id||item.courseId)) {
if (courseTeahcer.teacherIds) { if (courseTeahcer.teacherIds) {
userIds.push(courseTeahcer.teacherIds[0]); userIds.push(courseTeahcer.teacherIds[0]);
item.authorInfo.aid = courseTeahcer.teacherIds[0]; item.authorInfo.aid = courseTeahcer.teacherIds[0];
@@ -3115,6 +3134,6 @@ export default {
background: linear-gradient(135deg, #e6f7ff, #f0f8ff, #ffffff); background: linear-gradient(135deg, #e6f7ff, #f0f8ff, #ffffff);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
border: 1px solid #d9edf7; border: 1px solid #d9edf7;
overflow: hidden; //overflow: hidden;
} }
</style> </style>

View File

@@ -123,6 +123,16 @@
</el-table-column> </el-table-column>
<el-table-column label="创建人" prop="sysCreateBy"></el-table-column> <el-table-column label="创建人" prop="sysCreateBy"></el-table-column>
<el-table-column label="创建时间" prop="sysCreateTime" width="230px" show-overflow-tooltip></el-table-column> <el-table-column label="创建时间" prop="sysCreateTime" width="230px" show-overflow-tooltip></el-table-column>
<el-table-column label="审核人" prop="auditUser" width="130px" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.auditUser || '-' }}
</template>
</el-table-column>
<el-table-column label="审核时间" prop="auditTime" width="230px" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.auditTime || '-' }}
</template>
</el-table-column>
<el-table-column label="是否停用" width="130px"> <el-table-column label="是否停用" width="130px">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.enabled == true ? '启用' : '停用' }} {{ scope.row.enabled == true ? '启用' : '停用' }}

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">认证讲师库2023</span> <span style="cursor: pointer;" class="nav">认证讲师库</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

@@ -28,7 +28,7 @@
<div class="course-title-style"> <div class="course-title-style">
<div class="imgTilte"> <div class="imgTilte">
<div>精品课程</div> <div>精品课程</div>
<div>COURSE</div> <!-- <div>COURSE</div> -->
</div> </div>
</div> </div>
<div class="course-list"> <div class="course-list">
@@ -67,34 +67,47 @@
</div> </div>
<!-- 右侧 --> <!-- 右侧 -->
<div class="xcontent2-main content-div"> <div class="xcontent2-main content-div">
<!-- 内容导航 --> <!-- 内容导航 -->
<div class="topNav" v-if="!newData"> <div class="topNav" v-if="!newData" style="display: flex; flex-direction: row;background-color:#fff;">
<div class="search-div nav" style="height: 100px;flex: 1;"> <div>
<div @click="handleTypeAllClick(1)" class="option-item" :class="{ 'option-active': ctypeTagAll }"> <div class="search-div nav" style="height: 100px;flex: 1;">
<a>全部</a> <div @click="handleTypeClick(ctypeList[0], ctypeList)" class="option-item"
<span :class="ctypeTagAll ? 'nav-bottbor' : ''"></span> :class="{ 'option-active': ctypeList[0].checked }">
<a>全部</a>
<span :class="ctypeList[0].checked ? 'nav-bottbor' : ''"></span>
</div>
<div @click="handleTypeClick(ctypeList[1], ctypeList)" class="option-item"
:class="{ 'option-active': ctypeList[1].checked }">
<a>内部专享</a>
<span :class="ctypeList[1].checked ? 'nav-bottbor' : ''"></span>
</div>
<div @click="handleTypeClick(ctypeList[2], ctypeList)" class="option-item"
:class="{ 'option-active': ctypeList[2].checked }">
<a>外部精选</a>
<span :class="ctypeList[2].checked ? 'nav-bottbor' : ''"></span>
</div>
</div> </div>
<div @click="handleTypeClick(ctypeList[0], ctypeList)" class="option-item"
:class="{ 'option-active': ctypeList[0].checked }">
<a>内部专享</a>
<span :class="ctypeList[0].checked ? 'nav-bottbor' : ''"></span>
</div>
<div @click="handleTypeClick(ctypeList[1], ctypeList)" class="option-item"
:class="{ 'option-active': ctypeList[1].checked }">
<a>外部精选</a>
<span :class="ctypeList[1].checked ? 'nav-bottbor' : ''"></span>
</div>
<div style="display: flex;justify-content: space-between;">
<el-input placeholder="请输入关键字" v-model="keyword" @input="handleInput" clearable
style="width: 300px;"></el-input>
</div> </div>
<div style="display: flex;justify-content: space-between; align-items: center;">
<span style="margin-right: 10px;" class="option-item">请选择年份 </span>
<el-select v-model="yearChosen" multiple>
<el-option
v-for="year in years"
v-if="year"
:key="year"
:label="year"
:value="year">
</el-option>
</el-select>
</div> </div>
</div> </div>
<!-- 清除 --> <!-- 清除 -->
<!-- <div v-if="stagList.length > 0 && !newData" class="search-div" style="padding: 0;margin-bottom: 20px;"> <div v-if="stagList.length > 0 && !newData" class="search-div" style="padding: 0;margin-bottom: 20px;">
<div class="searchbar" style="background-color:#f6f7fb;display: flex;justify-content: space-between;"> <div class="searchbar" style="background-color:#f6f7fb;display: flex;justify-content: space-between;">
<div style="line-height: 30px;"> <div style="line-height: 30px;">
<span class="item-title"> 搜索条件</span> <span class="item-title"> 搜索条件</span>
@@ -105,20 +118,20 @@
<el-button type="primary" size="mini" @click="handleClearTags">清除</el-button> <el-button type="primary" size="mini" @click="handleClearTags">清除</el-button>
</div> </div>
</div> </div>
</div> --> </div>
<!-- 标题最新最热好评率 --> <!-- 标题最新最热好评率 -->
<div class="xcourse-list" style="background-color: #fff;border-radius: 8px;padding:0 25px;"> <div class="xcourse-list" style="background-color: #fff;border-radius: 8px;padding:0 25px;">
<div class="order-div" v-if="!newData"> <div class="order-div" v-if="!newData">
<span class="quyer-tag"> <span class="quyer-tag">
<el-button type="text" class="order-class" @click="orderChange('studys')" <el-button type="text" class="order-class" @click="orderChange('DEFAULT')"
:class="{ actice: course.orderField == 'studys' }">全部课程</el-button> :class="{ actice: course.orderField == 'DEFAULT' }">全部课程</el-button>
<el-button type="text" class="order-class" @click="orderChange('studys')" <el-button type="text" class="order-class" @click="orderChange('HOT')"
:class="{ actice: course.orderField == 'studys1' }">最热</el-button> :class="{ actice: course.orderField == 'HOT' }">最热</el-button>
<el-button type="text" class="order-class" @click="orderChange('publishTime')" <el-button type="text" class="order-class" @click="orderChange('NEW')"
:class="{ actice: course.orderField == 'publishTime' }">最新</el-button> :class="{ actice: course.orderField == 'NEW' }">最新</el-button>
<el-button type="text" class="order-class" @click="orderChange('score')" <el-button type="text" class="order-class" @click="orderChange('GOOD')"
:class="{ actice: course.orderField == 'score' }">好评率</el-button> :class="{ actice: course.orderField == 'GOOD' }">好评率</el-button>
</span> </span>
<span class="order-count"> <span class="order-count">
共找到<span>{{ count }}</span>个结果 共找到<span>{{ count }}</span>个结果
@@ -134,7 +147,7 @@
<span v-if="cinfo.type == 30" class="course-type-left">线下课</span> <span v-if="cinfo.type == 30" class="course-type-left">线下课</span>
<span v-if="cinfo.type == 40" class="course-type-left">学习项目</span> <span v-if="cinfo.type == 40" class="course-type-left">学习项目</span>
</div> </div>
<div class="course-title two-line-ellipsis" :title="cinfo.title" v-html="cinfo.name"></div> <div class="course-title two-line-ellipsis" :title="cinfo.title" v-html="cinfo.courseName"></div>
<!-- 关键字 --> <!-- 关键字 -->
<div class="keywordInfo-every"> <div class="keywordInfo-every">
<div class="keywordInfo" v-for="(keyword, index) in cinfo.keywordsActive" :key="index"> <div class="keywordInfo" v-for="(keyword, index) in cinfo.keywordsActive" :key="index">
@@ -147,25 +160,25 @@
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
<!-- {{cinfo}}-->
<div class="couresstartTime"> <div class="couresstartTime">
<span v-if="cinfo.type == 30 && cinfo.startTime">开课时间{{ cinfo.startTime }}</span> <span v-if="cinfo.type == 30 && cinfo.startTime">开课时间{{ cinfo.startTime }}</span>
</div> </div>
<div class="course-info"> <div class="course-info">
<div class="course-info-user" style="max-width: 100px;" v-if="cinfo.teacher"> <div class="course-info-user" style="max-width: 100px;" v-if="cinfo.teacherName">
<el-tooltip :content="cinfo.teacher" placement="bottom" effect="light"> <el-tooltip :content="cinfo.teacherName.split(',')[0]" placement="bottom" effect="light">
<span class="course-info-author">{{ cinfo.teacher }}</span> <span class="course-info-author">{{ cinfo.teacherName.split(',')[0] }}</span>
</el-tooltip> </el-tooltip>
</div> </div>
<div class="course-info-user"> <div class="course-info-user">
<span class="course-info-studys">{{ formatNum(cinfo.studies) }}人学习</span> <span class="course-info-studys">{{ formatNum(cinfo.studyNum) }}人学习</span>
</div> </div>
<div class="course-info-score"> <div class="course-info-score">
<div style="display: flex;"> <div style="display: flex;">
<interactBar :type="1" nodeWidth="20px" :data="cinfo" :courseExclusive="true" :comments="false" <interactBar :type="1" nodeWidth="20px" :data="cinfo" :courseExclusive="true" :comments="false"
:praises="false" :shares="false" :views="false"></interactBar> :praises="false" :shares="false" :views="false"></interactBar>
<div v-if="cinfo.score"> <div v-if="cinfo.courseScore">
<span class="course-score-value">{{ toScore(cinfo.score) }}</span> <span class="course-score-value">{{ toScore(cinfo.courseScore) }}</span>
</div> </div>
<div v-else class="course-score-no">未评分</div> <div v-else class="course-score-no">未评分</div>
</div> </div>
@@ -204,10 +217,10 @@
<!-- <span class="pag-text-msg" v-else-if="moreState == 3 && courseList.length > 0">没有更多数据了</span> --> <!-- <span class="pag-text-msg" v-else-if="moreState == 3 && courseList.length > 0">没有更多数据了</span> -->
<span class="notcoures" v-if="moreState == 3 && courseList.length == 0"> <span class="notcoures" v-if="moreState == 3 && courseList.length == 0">
<img :src="`${webBaseUrl}/images/nocouresimg.png`" alt=""> <img :src="`${webBaseUrl}/images/nocouresimg.png`" alt="">
<h5>暂无课程请优先学习其它课程吧</h5> <h5>当前分类下暂未标记精品课</h5>
</span> </span>
<div v-if="courseList.length > 0"> <div v-if="courseList.length > 0">
<pagination :size="course.pageSize" :total="count" :page="course.pageIndex" <pagination :size="course.pageSize" :total="Number(count)" :page="course.pageIndex"
layout="total, prev, pager, next, jumper" @change-page="currentChange"></pagination> layout="total, prev, pager, next, jumper" @change-page="currentChange"></pagination>
</div> </div>
</div> </div>
@@ -264,29 +277,26 @@
</div> </div>
</template> </template>
<script> <script>
import { mapGetters, mapActions } from "vuex"; import {mapActions, mapGetters} from "vuex";
import couresinteract from '@/components/Portal/course/couresinteract.vue'; import couresinteract from '@/components/Portal/course/couresinteract.vue';
import portalHeader from "@/components/PortalHeader.vue"; import portalHeader from "@/components/PortalHeader.vue";
import portalFooter from "@/components/PortalFooter.vue"; import portalFooter from "@/components/PortalFooter.vue";
import portalFloatTools from "@/components/PortalFloatTools.vue"; import portalFloatTools from "@/components/PortalFloatTools.vue";
import authorInfo from "@/components/Portal/authorInfo.vue"; import authorInfo from "@/components/Portal/authorInfo.vue";
import courseItem from "@/components/Portal/course/courseItem.vue"; import courseItem from "@/components/Portal/course/courseItem.vue";
import apiCoursePortal from "@/api/modules/coursePortal.js";
import apiCourseStudy from "@/api/modules/courseStudy.js"; import apiCourseStudy from "@/api/modules/courseStudy.js";
import courseForm from "@/components/Course/courseForm.vue"; import courseForm from "@/components/Course/courseForm.vue";
import apiType from "@/api/modules/type.js"; import apiType from "@/api/modules/type.js";
import apiCourse from "@/api/modules/coursePortal.js"; import apiCourse from "@/api/modules/coursePortal.js";
import apiOldCourse from "@/api/boe/course.js";
import apiTeacher from "@/api/modules/teacher.js";
import apiUser from "@/api/system/user.js";
import scene from "@/api/modules/scene.js"; import scene from "@/api/modules/scene.js";
import apiUserbasic from "@/api/boe/userbasic.js"; import apiUserbasic from "@/api/boe/userbasic.js";
import interactBar from "@/components/Portal/interactBar.vue"; import interactBar from "@/components/Portal/interactBar.vue";
import courseImage from "@/components/Course/courseImage.vue"; import courseImage from "@/components/Course/courseImage.vue";
import { courseType, getType, toScore, formatDate, formatUserNumber, formatDateByFmt } from "@/utils/tools.js"; import {formatDate, formatUserNumber, toScore} from "@/utils/tools.js";
import { deepClone, param } from "../../../utils";
import apiSearchterm from "@/api/modules/searchterm.js"; import apiSearchterm from "@/api/modules/searchterm.js";
import apiPlace from "@/api/phase2/place.js" import apiPlace from "@/api/phase2/place.js"
import {qualityCourseTimeMark, qualityPageList} from "@/api/phase2"
export default { export default {
name: "index", name: "index",
components: { components: {
@@ -306,6 +316,7 @@ export default {
let list = []; let list = [];
}, },
//
stagList() { // stagList() { //
let list = []; let list = [];
if (this.keyword) { if (this.keyword) {
@@ -316,11 +327,12 @@ export default {
checked: true checked: true
}) })
} }
this.ctypeList.forEach(item => { //
if (item.checked) { // this.ctypeList.forEach(item => {
list.push(item); // if (item.checked) {
} // list.push(item);
}); // }
// });
this.oneList.forEach(one => { this.oneList.forEach(one => {
var twoChildChecked = false;// var twoChildChecked = false;//
one.children.forEach(two => { one.children.forEach(two => {
@@ -387,6 +399,10 @@ export default {
}, },
data() { data() {
return { return {
/** 被选择的精品课程*/
courseChosen: void 0,
yearChosen: [],
years: [],
newData: false,//线 newData: false,//线
navTitle: [], navTitle: [],
// //
@@ -394,9 +410,9 @@ export default {
count: 0,// count: 0,//
showUClass: false, showUClass: false,
ctypeList: [ ctypeList: [
{ type: 1, id: 20, name: '录播课', checked: false }, { type: 1, id: 0, name: '全部', checked: true },
{ type: 1, id: 30, name: '线下课', checked: false }, { type: 1, id: 1, name: '内部专享', checked: false },
{ type: 1, id: 40, name: '学习项目', checked: false }, { type: 1, id: 2, name: '外部精选', checked: false },
], ],
id: '', id: '',
oneList: [], //{type:11} oneList: [], //{type:11}
@@ -417,7 +433,7 @@ export default {
fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL, fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
// //
course: { course: {
orderField: "studys", orderField: "DEFAULT",
companyId: '', companyId: '',
keyword: '',// keyword: '',//
topOrder: true, topOrder: true,
@@ -463,7 +479,11 @@ export default {
}) })
}, },
mounted() { mounted() {
let screenWidth = window.screen.availWidth;
qualityCourseTimeMark().then(response=>{
this.years = response.data.result
})
// let screenWidth = window.screen.availWidth;
// if (screenWidth < 1280) { // if (screenWidth < 1280) {
// this.course.pageSize = 9; // this.course.pageSize = 9;
// this.columns = 3; // this.columns = 3;
@@ -625,6 +645,7 @@ export default {
}, },
// //
stagClose(tag, tagIndex) { stagClose(tag, tagIndex) {
this.courseChosen = void 0;
tag.checked = false; tag.checked = false;
if (tag.type == 0) { if (tag.type == 0) {
this.keyword = ''; this.keyword = '';
@@ -670,9 +691,10 @@ export default {
handleClearTags() { handleClearTags() {
// //
this.keyword = ''; this.keyword = '';
this.ctypeList.forEach(item => { //
item.checked = false; // this.ctypeList.forEach(item => {
}); // item.checked = false;
// });
this.oneList.forEach(one => { this.oneList.forEach(one => {
one.checked = false; one.checked = false;
one.children.forEach(two => { one.children.forEach(two => {
@@ -682,6 +704,8 @@ export default {
}) })
}) })
}); });
//
this.courseChosen = void 0;
this.twoList = []; this.twoList = [];
this.threeList = []; this.threeList = [];
this.navTitle = []; this.navTitle = [];
@@ -691,20 +715,20 @@ export default {
}, },
// (线) // (线)
handleTypeClick(item, list) { handleTypeClick(item, list) {
item.checked = !item.checked; // item.checked = !item.checked;
//使使 //使使
// list.forEach(row=>{ list.forEach(row=>{
// row.checked=false; row.checked=false;
// }) })
// item.checked=true; item.checked=true;
this.searchData(); this.searchData();
}, },
// //
handleOptionClick(item, level, list) { handleOptionClick(item, level, list) {
// 线 // 线
this.newData = item.newData; this.newData = item.newData;
console.log(this.newData); this.courseChosen = item.id
console.log(item, "---------");
// //
this.oneList.forEach(one => { this.oneList.forEach(one => {
one.checked = false; one.checked = false;
@@ -902,7 +926,6 @@ export default {
// //
emitInput(val) { emitInput(val) {
this.keyword = val; this.keyword = val;
//this.stagList;
this.searchData(); this.searchData();
}, },
@@ -1105,7 +1128,7 @@ export default {
return list; return list;
}, },
// //
async search() { async search () {
// //
if (this.searching) { if (this.searching) {
this.$message.warning("正在搜索中,请待搜索完成后再重新搜索"); this.$message.warning("正在搜索中,请待搜索完成后再重新搜索");
@@ -1160,40 +1183,66 @@ export default {
// loadMore // loadMore
this.moreState = 2; this.moreState = 2;
this.course.userId = this.userInfo.aid this.course.userId = this.userInfo.aid
await apiCoursePortal.courseSearch(this.course).then(res => {
this.searching = false;
if (res.status == 200) {
this.totalPages = res.result.totalPages;
res.result.list.forEach(item => {
if (item.startTime != '') {
item.startTime = formatDateByFmt(new Date(item.startTime * 1000), 'yyyy-MM-dd hh:mm')
//let time = item.startTime.split('-');
//item.startTime = `${time[0]}${time[1]}${time[2]}`
}
//
if (item.teacher) {
item.teacher = item.teacher.split(',').filter(itemValue => itemValue !== 'BOE教师').join(',');
// if (dotIdx > 0) {
// item.teacher = item.teacher.substring(0, dotIdx);
// }
}
if (item.teacher && item.teacher == 'BOE教师') {
item.teacher = '';
}
// //
item.title = item.name; const params = JSON.parse(JSON.stringify(this.course))
if (that.course.keyword) { //
item.name = that.brightenKeyword(item.name, that.course.keyword); const {pageIndex, orderField, userId} = params
item.keywordsActive = that.brightenKeywords(item.keywordsList, that.course.keyword) params.pageNum = pageIndex
console.log(item.keywordsActive); params.orderByType = orderField
} else { params.courseSource = this.ctypeList.findIndex(e => e.checked)
item.name = item.name; this.yearChosen.length && (params.years = this.yearChosen)
} params.courseName = this.keyword
}); delete params.userId
console.log(res.result.list,'data') params.aid = userId
this.courseList = res?.result?.list ?? [] params.sysType = this.courseChosen
console.log(this.courseList);
console.log(`params`, params)
await qualityPageList(params).then(res => {
this.searching = false;
console.log(res.status)
if (res.status === 200) {
this.totalPages = res.data.result.pages;
// res.result.list.forEach(item => {
// if (item.startTime != '') {
// item.startTime = formatDateByFmt(new Date(item.startTime * 1000), 'yyyy-MM-dd hh:mm')
// //let time = item.startTime.split('-');
// //item.startTime = `${time[0]}${time[1]}${time[2]}`
// }
// //
// if (item.teacher) {
// item.teacher = item.teacher.split(',').filter(itemValue => itemValue !== 'BOE').join(',');
// // if (dotIdx > 0) {
// // item.teacher = item.teacher.substring(0, dotIdx);
// // }
// }
// if (item.teacher && item.teacher == 'BOE') {
// item.teacher = '';
// }
//
// //
// item.title = item.name;
// if (that.course.keyword) {
// item.name = that.brightenKeyword(item.name, that.course.keyword);
// item.keywordsActive = that.brightenKeywords(item.keywordsList, that.course.keyword)
// console.log(item.keywordsActive);
// } else {
// item.name = item.name;
// }
// });
const list = res.data.result.records ?? []
// list.forEach(course=>{
// const id = course.courseId
//
// apiCourse.getTeacherByCourseIDs([id]).then(res=>{
// console.log(res, "ids res")
// course.teacher = res.result[0].names[0]
// console.log(`course.teacher`, course.teacher)
// })
// })
this.courseList = list
if (this.newData) { if (this.newData) {
this.courseList = [ this.courseList = [
{ {
@@ -1238,7 +1287,7 @@ console.log(res.result.list,'data')
}, },
] ]
} }
this.count = res?.result?.count this.count = res.data.result.total
if (this.newData) { if (this.newData) {
this.count = 1 this.count = 1
} }
@@ -1246,6 +1295,7 @@ console.log(res.result.list,'data')
} else { } else {
this.moreState = 2; this.moreState = 2;
} }
}) })
.catch(err => { .catch(err => {
this.moreState = 2; this.moreState = 2;
@@ -1338,6 +1388,11 @@ console.log(res.result.list,'data')
// this.$router.push(`/course/micro?id=${id}`); // this.$router.push(`/course/micro?id=${id}`);
// } // }
} }
},
watch:{
yearChosen(){
this.searchData()
}
} }
}; };
</script> </script>
@@ -1378,7 +1433,7 @@ console.log(res.result.list,'data')
.course-title-style { .course-title-style {
position: relative; position: relative;
height: 100px; height: 100px;
background-image: url('../../../../public/images/courseBg.png'); background-image: url('../../../../public/images/qualityBg.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
display: flex; display: flex;
@@ -1386,19 +1441,20 @@ console.log(res.result.list,'data')
.imgTilte { .imgTilte {
& div:first-child { div {
padding-left: 40px; padding-left: 20px;
font-size: 30px; font-size: 50px;
color: #FFFFFF; color: #FFFFFF;
font-weight: 500;
} }
& div:last-child { // & div:last-child {
padding-left: 40px; // padding-left: 40px;
font-size: 20px; // font-size: 20px;
color: #FFFFFF; // color: #FFFFFF;
opacity: .5; // opacity: .5;
font-family: ArialMT !important; // font-family: ArialMT !important;
} // }
} }
} }
@@ -2057,13 +2113,13 @@ console.log(res.result.list,'data')
.search-div { .search-div {
background: #fff; background: #fff;
padding: 10px 25px; padding: 10px 15px;
border-radius: 8px; border-radius: 8px;
::v-deep .el-input { ::v-deep .el-input {
width: 420px; width: 420px;
height: 38px; height: 38px;
margin-bottom: 13px; //margin-bottom: 13px;
.el-input__inner { .el-input__inner {
height: 38px; height: 38px;

View File

@@ -177,7 +177,7 @@
</div> </div>
<!-- 课程单元 --> <!-- 课程单元 -->
<div class="course-units" v-if="tab == 1"> <div class="course-units" v-if="tab == 1">
<div :style="`height: ${controlHeight}px;overflow-y: auto;`"> <div style="min-height: 350px;max-height: 650px ;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
@@ -816,7 +816,8 @@
}else if(h>500){ }else if(h>500){
h=h+60; h=h+60;
} }
$this.controlHeight=h-95; // 移除高度控制 防止内容塌陷
// $this.controlHeight=h-95;
}) })
@@ -1800,7 +1801,7 @@
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 { .course-player-container {