Merge branch 'zcwyTeacher' into 'master'

Zcwy teacher

See merge request !40
This commit is contained in:
joshen
2023-09-06 19:18:02 +08:00
37 changed files with 2689 additions and 382 deletions

View File

@@ -16,13 +16,15 @@ VUE_APP_CESOURCE_BASE_API = '/socialApi'
VUE_APP_STAT_BASE_API = '/statApi'
# BOE系统网址
VUE_APP_BOE_WEB_URL = 'http://127.0.0.1'
VUE_APP_BOE_WEB_URL = 'https://u-pre.boe.com'
# BOE 移动端url
VUE_APP_BOE_MOBILE_URL = 'http://127.0.0.1:8082/mobile'
# VUE_APP_BOE_MOBILE_URL = 'http://127.0.0.1:8082/mobile'
VUE_APP_BOE_MOBILE_URL = 'https://u-pre.boe.com'
# File路径的基础url
VUE_APP_FILE_BASE_URL = 'http://127.0.0.1:9090/cdn/upload'
# VUE_APP_FILE_BASE_URL = 'http://127.0.0.1:9090/cdn/upload'
VUE_APP_FILE_BASE_URL='https://u-pre.boe.com/upload'
# File路径的基础url的相对路径加此项是为了不影响之前的路径配置
VUE_APP_FILE_RELATIVE_PATH = '/upload'
@@ -44,7 +46,8 @@ VUE_APP_MANAGER_API_PATH='/manageApi'
VUE_CLI_BABEL_TRANSPILE_MODULES = true
# scorm课件的播放url地址
VUE_APP_SCORM_URL = 'http://localhost:9083/scorm-player'
# VUE_APP_SCORM_URL = 'http://localhost:9083/scorm-player'
VUE_APP_SCORM_URL = 'https://u-pre.boe.com/newscorm/scorm-player'
#案例组织领域类型
VUE_APP_CASE_TYPE = '90'

View File

@@ -11,7 +11,7 @@
computed: {
...mapGetters(['userInfo'])
},
mounted(){
mounted() {
//从状态值中取,因为登录处理所以移动watch中
// console.log(this.userInfo);
// if(this.userInfo && this.userInfo.name!=''){

View File

@@ -0,0 +1,35 @@
// import ajax from '@/utils/xajax.js'
import ajax from '../ajax';
const baseURL = '/activityApi';
//notice新增
const saveOpinion = (data = {}) => ajax.postJson(baseURL, '/xboe/m/boe/opinion/save', data);
//工具列表
const toolList = (data = {}) => ajax.postJson(baseURL, '/xboe/m/boe/tools/list', data);
//工具下载
const toolDown = ({ urlStr, fileName }) => ajax.get('/systemapi', `/xboe/sys/xuploader/url/download?urlStr=${urlStr}&fileName=${fileName}`);
//通知列表
const noticeList = (data = {}) => ajax.postJson(baseURL, '/xboe/m/boe/notice/list', data);
//通知列表
const courselList = (data = {}) => ajax.postJson(baseURL, '/xboe/m/boe/course/list', data);
//通知根据id查询
const noticeDataById = (id) => ajax.get(baseURL, `/xboe/m/boe/notice/getDataById?id=${id}`);
//教师列表
const teachersList = (data = {}) => ajax.postJson(baseURL, '/xboe/m/boe/teachers/list', data);
//教师列表
const carouselList = (data = {}) => ajax.postJson(baseURL, '/xboe/m/boe/rotation/list', data);
export {
saveOpinion,
toolList,
toolDown,
noticeList,
noticeDataById,
courselList,
teachersList,
carouselList
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

View File

@@ -396,6 +396,13 @@ body {margin: 0px;padding: 0px;}
.xcontent{width: 1100px;}
.xcontent2{
width: 1100px;
.list {
grid-template-columns: repeat(4, 255px);
}
.toolImg{
width: 80px;
height: 80px;
}
}
.home-page-right{
width: 330px;
@@ -470,6 +477,13 @@ body {margin: 0px;padding: 0px;}
.xcontent{width: 1366px;}
.xcontent2{
width: 1366px;
//后添加的教师节
.list {
grid-template-columns: repeat(4, 332px);
}
.liList{
margin-top: 10px;
}
}
.rankimg{
width:76px;
@@ -513,6 +527,12 @@ body {margin: 0px;padding: 0px;}
.xcontent{width: 1690px;}
.xcontent2{
width: 1690px;
.list {
grid-template-columns: repeat(4, 400px);
}
.liList{
margin-top: 24px;
}
}
.rankimg{
width:86px;
@@ -555,6 +575,12 @@ body {margin: 0px;padding: 0px;}
.xcontent{width: 1880px;}
.xcontent2{
width: 1846px;
.list {
grid-template-columns: repeat(4, 445px);
}
.liList{
margin-top: 32px;
}
}
.home-page-right{
width: 395px;

View File

@@ -1,12 +1,8 @@
<template>
<!--用于显示课程的图片-->
<div style="border-radius: 5px;" class="img-box" id="img-box">
<el-image
style="background-color: #eeeeee;border-radius: 5px;"
:style="`width:${width};height:${height};`"
fit="fill "
:src="imageUrl"
>
<div style="border-radius: 5px;" class="img-box" id="img-box">
<el-image style="background-color: #eeeeee;border-radius: 5px;" :style="`width:${width};height:${height};`"
fit="fill " :src="imageUrl">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
@@ -32,46 +28,45 @@ export default {
props: {
course: {
type: Object,
default: () => {},
default: () => { },
},
height: {
type: String,
default: "100%",
},
text:{
text: {
type: Boolean,
default:true,
default: true,
},
width: {
type: String,
default: "100%",
},
},
computed: {
name(){
let name = '';
if(this.course && this.course.name && this.course.name !== '') {
name = this.course.name.replace('color:#FF0000','color:#fff');
}
if(this.course && this.course.courseName && this.course.courseName !== '') {
name = this.course.courseName.replace('color:#FF0000','color:#fff');
}
if(this.course && this.course.title && this.course.title !== '') {
name = this.course.title.replace('color:#FF0000','color:#fff');
}
return name;
// course.name || course.courseName || course.title
},
name() {
let name = '';
if (this.course && this.course.name && this.course.name !== '') {
name = this.course.name.replace('color:#FF0000', 'color:#fff');
}
if (this.course && this.course.courseName && this.course.courseName !== '') {
name = this.course.courseName.replace('color:#FF0000', 'color:#fff');
}
if (this.course && this.course.title && this.course.title !== '') {
name = this.course.title.replace('color:#FF0000', 'color:#fff');
}
return name;
// course.name || course.courseName || course.title
},
imageUrl() {
this.isShow = false;
if(this.course && this.course.coverImg && this.course.coverImg.startsWith('http')) {
if (this.course && this.course.coverImg && this.course.coverImg.startsWith('http')) {
return this.course.coverImg;
}
if(this.course && this.course.courseImage && this.course.courseImage.startsWith('http')) {
if (this.course && this.course.courseImage && this.course.courseImage.startsWith('http')) {
return this.course.courseImage;
}
if (this.course && this.course.coverImg && this.course.coverImg != "") {
if (this.course && this.course.coverImg && this.course.coverImg != "") {
return this.fileBaseUrl + this.course.coverImg;
} else if (
this.course &&
@@ -122,7 +117,7 @@ export default {
}
},
methods: {
imageError() {},
imageError() { },
},
};
</script>
@@ -130,43 +125,56 @@ export default {
<style lang="scss" scoped>
.text {
text-shadow: 0px 0px 2px #ffffff;
span{
span {
color: #ffffff !important;
}
}
.image-slot{
display: flex;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
.image-slot {
display: flex;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
}
.img-box {
width: 100%;
height: 100%;
position: relative;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
p {
display: -webkit-box;
// white-space:pre-wrap;
overflow: hidden;
// text-overflow:ellipsis;
word-break:break-all;
word-break: break-all;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
color: #ffffff;
position: absolute;
padding-right: 10px;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
.mini {
top: 30%;
left: 8%;
@@ -174,6 +182,7 @@ export default {
line-height: 24px;
-webkit-line-clamp: 2;
}
.mid {
top: 30%;
left: 8%;
@@ -181,6 +190,7 @@ export default {
line-height: 35px;
-webkit-line-clamp: 2;
}
.max {
top: 30%;
left: 8%;
@@ -188,12 +198,12 @@ export default {
line-height: 40px;
-webkit-line-clamp: 2;
}
.te-max {
top: 30%;
top: 30%;
left: 8%;
font-size: 20px;
line-height: 35px;
-webkit-line-clamp: 2;
}
}
</style>
}</style>

View File

@@ -42,6 +42,7 @@
<el-dropdown-item command="four" divided>U选小课堂</el-dropdown-item>
<el-dropdown-item command="five" divided>社招新员工</el-dropdown-item>
<el-dropdown-item command="six" divided>贡献者专区</el-dropdown-item>
<!-- <el-dropdown-item command="seven" divided>教师专区</el-dropdown-item> -->
</el-dropdown-menu>
</el-dropdown>
</div>
@@ -232,7 +233,7 @@ export default {
handleCommand(val) {
if (val === "four") {
this.$emit('showClass',true)
} else {
} else {
let urlPre = window.location.protocol + "//" + window.location.host;
// process.env.VUE_APP_BOE_WEB_URL
let obj = {
@@ -242,6 +243,7 @@ export default {
// four: 'https://m.qingxuetang.com/x/?appId=qxtcorp306130',
five: urlPre + "/boe/new-employee/index.html",
six: urlPre + "/web/contributor/index",
seven:this.webBaseUrl + '/grateful'
};
window.open(obj[val]);
}

View File

@@ -21,6 +21,7 @@
<el-dropdown-item command='three' divided>管理者进阶</el-dropdown-item>
<el-dropdown-item command='for' divided>U选小课堂</el-dropdown-item>
<el-dropdown-item command='five' divided>社招新员工</el-dropdown-item>
<!-- <el-dropdown-item command="seven" divided>教师专区</el-dropdown-item> -->
</el-dropdown-menu>
</el-dropdown>
</div>
@@ -68,7 +69,7 @@
<img v-if="userInfo.sex === 1 " src="../../../../public/images/Avatarman.png" alt="" style="width: 30px;height: 30px;vertical-align: middle;">
<img v-else src="../../../../public/images/Avatarwoman.png" alt="" style="width: 30px;height: 30px;vertical-align: middle;">
</span>
{{userInfo.name}}
</div>
<el-dropdown-menu slot="dropdown">
@@ -267,6 +268,7 @@ export default {
three: this.webBaseUrl + "/study/index?study=1",
// four: 'https://m.qingxuetang.com/x/?appId=qxtcorp306130',
five: urlPre + "/boe/new-employee/index.html",
seven: this.webBaseUrl + '/grateful'
};
window.open(obj[val]);
}
@@ -491,7 +493,7 @@ export default {
::v-deep.el-dropdown-menu {
text-align: center;
border: none !important;
}
::v-deep .el-avatar{
margin-right: 8px;
@@ -506,7 +508,7 @@ text-align: center;
color: #fff;
}
img{
}
::v-deep .dialog-signin{
background: transparent;

View File

@@ -3,279 +3,336 @@ import VueRouter from 'vue-router'
/* Layout */
import Layout from '@/layout/index'
import LayoutPortal from '@/layout/portal'
import Grateful from '@/views/grateful'
Vue.use(VueRouter)
export const constantRoutes = [{
path: '/redirect',
component: Layout,
hidden: true,
children: [{
path: '/redirect/:path(.*)',
component: (resolve) => require(['@/views/Redirect'], resolve)
}]
path: '/redirect',
component: Layout,
hidden: true,
children: [{
path: '/redirect/:path(.*)',
component: (resolve) => require(['@/views/Redirect'], resolve)
}]
}, {
path: '',
redirect: '/study'
path: '',
redirect: '/study'
},
{
path: '/loading',
hidden: true,
component: (resolve) => require(['@/views/Loading'], resolve),
name: 'loading',
meta: { title: '正在进入学习中心', icon: 'dashboard', noCache: true, affix: false },
path: '/loading',
hidden: true,
component: (resolve) => require(['@/views/Loading'], resolve),
name: 'loading',
meta: { title: '正在进入学习中心', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/login',
hidden: true,
component: (resolve) => require(['@/views/Login'], resolve),
name: 'login',
meta: { title: '京东方大学堂登录', icon: 'dashboard', noCache: true, affix: false },
path: '/login',
hidden: true,
component: (resolve) => require(['@/views/Login'], resolve),
name: 'login',
meta: { title: '京东方大学堂登录', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/index',
hidden: true,
component: (resolve) => require(['@/views/Index'], resolve),
name: 'index',
meta: { title: '首页', icon: 'dashboard', noCache: true, affix: false },
path: '/index',
hidden: true,
component: (resolve) => require(['@/views/Index'], resolve),
name: 'index',
meta: { title: '首页', icon: 'dashboard', noCache: true, affix: false },
},
// {
// path: '/grateful/index',
// hidden: true,
// component: (resolve) => require(['@/views/grateful'], resolve),
// name: 'gratefulIndex',
// meta: { title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: false },
// },
{
path: '/grateful',
component: Grateful,
redirect: '/grateful/index',
children: [
{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/grateful/GratefulHomePage'], resolve),
name: 'GratefulHomePage',
meta: { title: '感恩教师首页', icon: 'dashboard', noCache: true, affix: true, hidden:false }
},
{
path: 'teacherEmpowerment',
hidden: true,
component: (resolve) => require(['@/views/grateful/TeacherEmpowerment'], resolve),
name: 'TeacherEmpowerment',
meta: { title: '教师赋能', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'toolDown',
hidden: true,
component: (resolve) => require(['@/views/grateful/ToolDown'], resolve),
name: 'ToolDown',
meta: { title: '工具下载', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'gratefulNotice',
hidden: true,
component: (resolve) => require(['@/views/grateful/GratefulNotice'], resolve),
name: 'GratefulNotice',
meta: { title: '通知列表', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'noticeDetail',
hidden: true,
component: (resolve) => require(['@/views/grateful/NoticeDetail'], resolve),
name: 'NoticeDetail',
meta: { title: '通知详情', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
{
path: 'teacherOpinion',
hidden: true,
component: (resolve) => require(['@/views/grateful/TeacherOpinion'], resolve),
name: 'TeacherOpinion',
meta: { title: '师资大全', icon: 'dashboard', noCache: true, affix: true, hidden:true }
},
]
},
{
path: '/forward',
hidden: true,
component: (resolve) => require(['@/views/Forward'], resolve),
name: 'forward',
meta: { title: '详细信息', icon: 'dashboard', noCache: true, affix: false },
path: '/forward',
hidden: true,
component: (resolve) => require(['@/views/Forward'], resolve),
name: 'forward',
meta: { title: '详细信息', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/course',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Index'], resolve),
name: 'course',
meta: { title: '课程',keepAlive:true, icon: 'dashboard', noCache: true, affix: false },
path: '/course',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Index'], resolve),
name: 'course',
meta: { title: '课程', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/course/micro',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Micro'], resolve),
name: 'courseDetailMicro',
meta: { title: '课程详情', icon: 'dashboard', noCache: true, affix: false },
path: '/course/micro',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Micro'], resolve),
name: 'courseDetailMicro',
meta: { title: '课程详情', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/course/detail',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Detail'], resolve),
name: 'courseDetail',
meta: { title: '课程详情',keepAlive:true, icon: 'dashboard', noCache: true, affix: false },
path: '/course/detail',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Detail'], resolve),
name: 'courseDetail',
meta: { title: '课程详情', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
},
// 课程预览
{
path: '/course/microPreview',
hidden: true,
component: (resolve) => require(['@/views/portal/course/microPreview'], resolve),
name: 'microPreview',
meta: { title: '课程预览', icon: 'dashboard', noCache: true, affix: false },
path: '/course/microPreview',
hidden: true,
component: (resolve) => require(['@/views/portal/course/microPreview'], resolve),
name: 'microPreview',
meta: { title: '课程预览', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/course/rePreview',
hidden: true,
component: (resolve) => require(['@/views/portal/course/rePreview'], resolve),
name: 'courseRePreview',
meta: { title: '课程预览', icon: 'dashboard', noCache: true, affix: false },
path: '/course/rePreview',
hidden: true,
component: (resolve) => require(['@/views/portal/course/rePreview'], resolve),
name: 'courseRePreview',
meta: { title: '课程预览', icon: 'dashboard', noCache: true, affix: false },
},
//
// 外来链接
{
path: '/course/boeframe',
hidden: true,
component: (resolve) => require(['@/views/portal/boeframe'], resolve),
name: 'courseBoeframe',
meta: { title: '课程预览', icon: 'dashboard', noCache: true, affix: false },
path: '/course/boeframe',
hidden: true,
component: (resolve) => require(['@/views/portal/boeframe'], resolve),
name: 'courseBoeframe',
meta: { title: '课程预览', icon: 'dashboard', noCache: true, affix: false },
},
//外来链接
{
path: '/course/recorded',
path: '/course/recorded',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Recorded'], resolve),
name: 'courseDetailRecorded',
meta: { title: '课程详情', icon: 'dashboard', noCache: true, affix: false },
},
{
//此页面需要指定课程的参数
path: '/course/studyindex',
hidden: true,
component: (resolve) => require(['@/views/study/coursenew'], resolve),
name: 'courseStudyIndex',
meta: { title: '课程学习', keepAlive: true, icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/case',
hidden: true,
component: (resolve) => require(['@/views/portal/case/Index'], resolve),
name: 'case',
meta: { title: '案例', keepAlive: true, icon: 'dashboard', noCache: false, affix: true },
},
{
path: '/case/detail',
hidden: true,
component: (resolve) => require(['@/views/portal/case/Detail'], resolve),
name: 'caseDetail',
meta: { title: '案例详情', keepAlive: true, icon: 'dashboard', noCache: false, affix: true },
},
{
path: '/article',
hidden: true,
component: (resolve) => require(['@/views/portal/article/Index'], resolve),
name: 'article',
meta: { title: '文章', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/article/detail',
hidden: true,
component: (resolve) => require(['@/views/portal/article/Detail'], resolve),
name: 'articleDetail',
meta: { title: '文章详情', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/article/add',
hidden: true,
component: (resolve) => require(['@/views/portal/article/Add'], resolve),
name: 'articleAdd',
meta: { title: '发布文章', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/qa',
hidden: true,
component: (resolve) => require(['@/views/portal/qa/Index'], resolve),
name: 'qa',
meta: { title: '问答', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/message',
hidden: true,
component: (resolve) => require(['@/views/portal/user/Message'], resolve),
name: 'userMsg',
meta: { title: '我的消息', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/home',
hidden: true,
component: (resolve) => require(['@/views/homepage/Index'], resolve),
name: 'homePage',
redirect: '/home/:id',
meta: { title: '个人主页', icon: 'dashboard', noCache: true, affix: false },
children: [{
path: ':id',
hidden: true,
component: (resolve) => require(['@/views/portal/course/Recorded'], resolve),
name: 'courseDetailRecorded',
meta: { title: '课程详情', icon: 'dashboard', noCache: true, affix: false },
},
{
//此页面需要指定课程的参数
path: '/course/studyindex',
component: (resolve) => require(['@/views/homepage/page'], resolve),
name: 'page',
meta: { title: '个人主页', icon: 'dashboard', noCache: true, affix: true }
},
{
path: ':id/leaving',
hidden: true,
component: (resolve) => require(['@/views/study/coursenew'], resolve),
name: 'courseStudyIndex',
meta: { title: '课程学习',keepAlive:true, icon: 'dashboard', noCache: true, affix: false },
component: (resolve) => require(['@/views/homepage/leavingMessage'], resolve),
name: 'leavingMessage',
meta: { title: '留言', icon: 'dashboard', noCache: true, affix: true }
}
]
},
{
path: '/case',
path: '/comments',
hidden: true,
component: (resolve) => require(['@/views/portal/Comments'], resolve),
name: 'commentReply',
meta: { title: '评论回复', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/qa/answer',
hidden: true,
component: (resolve) => require(['@/views/portal/qa/Answer'], resolve),
name: 'qaAnswer',
meta: { title: '写回答', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/follow',
hidden: true,
component: (resolve) => require(['@/views/portal/follow'], resolve),
name: 'follow',
meta: { title: '我的关注', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/study',
component: Layout,
redirect: '/study/index',
children: [{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/portal/case/Index'], resolve),
name: 'case',
meta: { title: '案例',keepAlive:true, icon: 'dashboard', noCache: false, affix: true },
component: (resolve) => require(['@/views/StudyIndex'], resolve),
name: 'studyIndex',
meta: { title: '首页', icon: 'dashboard', noCache: true, affix: true }
}]
},
{
path: '/case/detail',
path: '/teacher',
component: Layout,
children: [{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/portal/case/Detail'], resolve),
name: 'caseDetail',
meta: { title: '案例详情',keepAlive:true, icon: 'dashboard', noCache: false, affix: true },
component: (resolve) => require(['@/views/TeacherIndex'], resolve),
name: 'teacherIndex',
meta: { title: '教师个人中心', icon: 'dashboard', noCache: true, affix: true }
}]
},
{
path: '/article',
path: '/manager',
component: Layout,
children: [{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/portal/article/Index'], resolve),
name: 'article',
meta: { title: '文章', icon: 'dashboard', noCache: true, affix: false },
component: (resolve) => require(['@/views/ManageIndex'], resolve),
name: 'managerIndex',
meta: { title: '管理员个人中心', icon: 'dashboard', noCache: true, affix: true }
}]
},
{
path: '/article/detail',
hidden: true,
component: (resolve) => require(['@/views/portal/article/Detail'], resolve),
name: 'articleDetail',
meta: { title: '文章详情', icon: 'dashboard', noCache: true, affix: false },
path: '/exam/test',
hidden: true,
component: (resolve) => require(['@/views/exam/Test'], resolve),
name: 'test',
meta: { title: '京东方大学堂考试', icon: 'dashboard', noCache: true, affix: true },
},
{
path: '/article/add',
hidden: true,
component: (resolve) => require(['@/views/portal/article/Add'], resolve),
name: 'articleAdd',
meta: { title: '发布文章', icon: 'dashboard', noCache: true, affix: false },
path: '/video/test',
hidden: true,
component: (resolve) => require(['@/views/portal/course/video'], resolve),
name: 'videotest',
meta: { title: '课程视频测试', icon: 'dashboard', noCache: true, affix: true },
},
{
path: '/qa',
hidden: true,
component: (resolve) => require(['@/views/portal/qa/Index'], resolve),
name: 'qa',
meta: { title: '问答', icon: 'dashboard', noCache: true, affix: false },
path: '/404',
component: (resolve) => require(['@/views/error/404'], resolve),
hidden: true
},
{
path: '/message',
hidden: true,
component: (resolve) => require(['@/views/portal/user/Message'], resolve),
name: 'userMsg',
meta: { title: '我的消息', icon: 'dashboard', noCache: true, affix: false },
path: '/401',
component: (resolve) => require(['@/views/error/401'], resolve),
hidden: true
},
{
path: '/home',
hidden: true,
component: (resolve) => require(['@/views/homepage/Index'], resolve),
name: 'homePage',
redirect: '/home/:id',
meta: { title: '个人主页', icon: 'dashboard', noCache: true, affix: false },
children: [{
path: ':id',
hidden: true,
component: (resolve) => require(['@/views/homepage/page'], resolve),
name: 'page',
meta: { title: '个人主页', icon: 'dashboard', noCache: true, affix: true }
},
{
path: ':id/leaving',
hidden: true,
component: (resolve) => require(['@/views/homepage/leavingMessage'], resolve),
name: 'leavingMessage',
meta: { title: '留言', icon: 'dashboard', noCache: true, affix: true }
}
]
},
{
path: '/comments',
hidden: true,
component: (resolve) => require(['@/views/portal/Comments'], resolve),
name: 'commentReply',
meta: { title: '评论回复', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/qa/answer',
hidden: true,
component: (resolve) => require(['@/views/portal/qa/Answer'], resolve),
name: 'qaAnswer',
meta: { title: '写回答', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/follow',
hidden: true,
component: (resolve) => require(['@/views/portal/follow'], resolve),
name: 'follow',
meta: { title: '我的关注', icon: 'dashboard', noCache: true, affix: false },
},
{
path: '/study',
component: Layout,
redirect: '/study/index',
children: [{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/StudyIndex'], resolve),
name: 'studyIndex',
meta: { title: '首页', icon: 'dashboard', noCache: true, affix: true }
}]
},
{
path: '/teacher',
component: Layout,
children: [{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/TeacherIndex'], resolve),
name: 'teacherIndex',
meta: { title: '教师个人中心', icon: 'dashboard', noCache: true, affix: true }
}]
},
{
path: '/manager',
component: Layout,
children: [{
path: 'index',
hidden: true,
component: (resolve) => require(['@/views/ManageIndex'], resolve),
name: 'managerIndex',
meta: { title: '管理员个人中心', icon: 'dashboard', noCache: true, affix: true }
}]
},
{
path: '/exam/test',
hidden: true,
component: (resolve) => require(['@/views/exam/Test'], resolve),
name: 'test',
meta: { title: '京东方大学堂考试', icon: 'dashboard', noCache: true, affix: true },
},
{
path: '/video/test',
hidden: true,
component: (resolve) => require(['@/views/portal/course/video'], resolve),
name: 'videotest',
meta: { title: '课程视频测试', icon: 'dashboard', noCache: true, affix: true },
},
{
path: '/404',
component: (resolve) => require(['@/views/error/404'], resolve),
hidden: true
},
{
path: '/401',
component: (resolve) => require(['@/views/error/401'], resolve),
hidden: true
},
{
path: '/500',
component: (resolve) => require(['@/views/error/500'], resolve),
hidden: true
path: '/500',
component: (resolve) => require(['@/views/error/500'], resolve),
hidden: true
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes: constantRoutes,
scrollBehavior(to, from, saveTop) {
if (saveTop) {
return saveTop;
} else {
return { x: 0, y: 0 }
}
},
mode: 'history',
base: process.env.BASE_URL,
routes: constantRoutes,
scrollBehavior(to, from, saveTop) {
if (saveTop) {
return saveTop;
} else {
return { x: 0, y: 0 }
}
},
})
export default router

View File

@@ -1308,6 +1308,8 @@ export default {
courseIds.push(item.id);
});
this.loadCouserTeacher(res.result, courseIds);
console.log(res.result,'lalalala');
this.courseList.list = res.result;
//this.couname = res.result.list.name;
// if (res.result.count - pageIndex * num < 8) {

View File

@@ -0,0 +1,891 @@
<template>
<div>
<div class="course-banner">
<div id="container" style="z-index: 99" v-if="resonimg.length == 1">
<!-- 当轮播图等于一张时 -->
<swiper :options="swiperOptiontwo">
<swiper-slide style="margin: 0 auto" v-for="(item, idx) in resonimg" :key="'a' + idx"
class="swiper-slide games pointer">
<div class="bannbox" :style="{
background: `url(${fileBaseUrl + item.image
}) no-repeat 100% / 100%`,
}"></div>
<img class="banner-img" style="margin: 0 auto;width:100%;" :src="fileBaseUrl + item.image" alt="" />
</swiper-slide>
</swiper>
</div>
<div id="container" style="z-index: 99" v-else>
<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"
class="swiper-slide games pointer">
<div class="bannbox" :style="{
background: `url(${fileBaseUrl + item.image
}) no-repeat 100% / 100%`,
}"></div>
<img class="banner-img" style="margin: 0 auto;width:100%;" :src="fileBaseUrl + item.image" alt="" />
</swiper-slide>
<div class="swiper-pagination" slot="pagination"></div>
</swiper>
</div>
</div>
<!-- 图片 -->
<div class="xindex-content">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="gratefulNav">
<div class="navImg">
<router-link to="/grateful/teacherOpinion">
<img src="../../assets/images/grateful/famousTeacher.png" alt="">
</router-link>
</div>
<div class="navNotice">
<div id="fixd-box" style="height: 100%;">
<div class="portal-ranking ranking-bg" style="height: 100%;display: flex;flex-direction: column;"
:class="showNoticeImg ? 'allPadding' : ''">
<div :class="showNoticeImg ? 'noticeBgc' : ''">
<div style="display: flex;justify-content: space-between;">
<p class="ranking-title">通知</p>
<router-link v-if="courseList.noticeList.length >= 6" to="/grateful/gratefulNotice"
style="font-size: 14px;">查看更多</router-link>
</div>
<ul>
<li v-for="(item, index) in courseList.noticeList" :key="index"
style="cursor: pointer;line-height: 22px;" class="liList">
<router-link :to="'/grateful/noticeDetail?id=' + item.id"
style="display: flex;align-items: center;">
<span class="portal-right-text blue-one">
<img :src="getPic(index)" alt="">
</span>
<div class="portal-title-desc"
style="flex: 1;font-size: 14px;display: flex;justify-content: space-between;">
<span class="title-line-ellipsis " style="flex: 1;">{{ item.name }}</span>
<span>{{ item.createTime.split(' ')[0] }}</span>
</div>
</router-link>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="navTool">
<div id="fixd-box" style="height: 100%;">
<div class="portal-ranking ranking-bg1" style="height: 100%;display: flex;flex-direction: column;"
:class="showToolImg ? 'allPadding' : ''">
<div :class="showToolImg ? 'toolBgc' : ''">
<div style="display: flex;justify-content: space-between;">
<p class="ranking-title">工具下载</p>
<router-link v-if="courseList.toolList.length >= 6" to="/grateful/toolDown"
style="font-size: 14px;">查看更多</router-link>
</div>
<ul>
<li v-for="(item, index) in courseList.toolList" :key="index"
style="cursor: pointer;line-height: 22px;" class="title-line-ellipsis liList"
@click="downTool(item)">
<span class="portal-right-text orange-one" v-if="index == 0">
<img :src="`${webBaseUrl}/images/list-01.png`" alt="">
</span>
<span class="portal-right-text orange-tow" v-if="index == 1">
<img :src="`${webBaseUrl}/images/list02.png`" alt="">
</span>
<span class="portal-right-text orange-three" v-if="index == 2">
<img :src="`${webBaseUrl}/images/list03.png`" alt="">
</span>
<span class="portal-right-text" v-if="index == 3">
<img :src="`${webBaseUrl}/images/list04.png`" alt="">
</span>
<span class="portal-right-text" v-if="index == 4">
<img :src="`${webBaseUrl}/images/list05.png`" alt="">
</span>
<span class="portal-right-text" v-if="index == 5">
<img :src="`${webBaseUrl}/images/listblue06.png`" alt="">
</span>
<span class="portal-title-desc" style="font-size: 14px;">{{ item.name.split('.')[0] }}</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 教师赋能 -->
<div class="xindex-content">
<div class="modules xcontent2">
<div class="xcontent2-main">
<!--内容块-->
<div class="modules-title xindex-main">
<span class="modules-text">教师赋能</span>
<span class="more">
<router-link to="/grateful/teacherEmpowerment">查看更多</router-link>
</span>
</div>
<div class="modules-list list">
<!--内容列表内容-->
<div v-for="(course, ccidx) in courseList.list" :key="'cc' + ccidx" class="xindex-course"
style="position: relative;margin-right: 0;">
<a @click="toCourseDetail(course)">
<div class="xindex-course-image">
<course-image :course="course"></course-image>
<span v-if="course.type == 20 || course.type == 10" class="course-type">录播课</span>
<span v-if="course.type == 30" class="course-type">面授课</span>
<span v-if="course.type == 40" class="course-type">学习项目</span>
</div>
<div style="width: 80%" :title="course.name" class="course-title portal-title-tow two-line-ellipsis">
{{ course.name }}
</div>
<div class="course-author">
<div class="course-author-left">
{{ course.teacher }}
<span class="study-num">{{ formatNum(course.studies) }}人学习</span>
</div>
<div style="display: flex">
<div v-if="course.score != '0'">
<span class="course-score-value" style="margin-left: 10px">{{ toScore(Number(course.score))
}}</span>
</div>
<div v-else class="course-score-no">未评分</div>
</div>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="float-tools" @click="() => (gratefulVisible = !gratefulVisible)">
<div class="content">
<img src="../../assets/images/grateful/suggestion.png" alt="" />
<span>给点建议</span>
</div>
</div>
<!-- 意见 -->
<el-dialog :close-on-click-modal="false" width="629px" :visible.sync="gratefulVisible" :append-to-body="true"
@closed="closeDlg">
<div class="dialogContent">
<div class="dialogTop">
<div class="words">
<div>欢迎留下您的宝贵建议</div>
</div>
</div>
<el-form :model="form">
<el-form-item>
<el-input type="textarea" placeholder="请输入内容......" v-model="form.textarea" class="textarea"></el-input>
</el-form-item>
<el-form-item>
<div style="display: flex; justify-content: center">
<el-button style="width: 100px;" @click="closeDlg">取消</el-button>
<el-button style="width: 100px;" @click="submitNotice" type="primary">确认</el-button>
</div>
</el-form-item>
</el-form>
</div>
</el-dialog>
</div>
</template>
<script>
import apiCourseStudy from "@/api/modules/courseStudy.js";
import courseImage from "@/components/Course/courseImage.vue";
import { toScore, formatUserNumber } from "@/utils/tools.js";
import { saveOpinion, noticeList, courselList, toolList, carouselList, toolDown } from '@/api/modules/grateful.js'
export default {
name: "Grateful",
components: {
courseImage,
},
data() {
return {
showNoticeImg: false,
showToolImg: false,
form: {
textarea: "",
},
gratefulVisible: false,
formatNum: formatUserNumber,
toScore,
// 列表
courseList: {
num: 12,
orderType: 2,
list: [],
noticeList: [],
toolList: []
},
resonimg: [],
fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
swiperOptiontwo: {
autoplay: false,
// noSwiping: true,
},
resonimg: [],
swiperOption: {
autoplay: {
delay: 2000,
disableOnInteraction: false, //解决滑动后不能轮播的问题
},
speed: 3000, //切换速度即slider自动滑动开始到结束的时间单位ms
loop: true, //循环切换
peed: 300, //循环速度
scrollbar: ".swiper-scrollbar",
pagination: {
el: ".swiper-pagination",
// type : 'progressbar', //分页器形状
clickable: true, //点击分页器的指示点分页器会控制Swiper切换
},
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
}
};
},
mounted() {
this.couresreso();
this.getCourseData(1);
this.getNoticeData()
this.getToolData()
},
methods: {
downTool(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}`)
// toolDown({
// urlStr: `${process.env.VUE_APP_BOE_WEB_URL}/upload${toolInfo.filePath}`,
// fileName: toolInfo.name
// }).then((result) => {
// const link = document.createElement('a');// 创建a标签
// let blob = new Blob([result.data], { type: '' }); // 设置文件类型
// link.style.display = "none";
// link.href = URL.createObjectURL(blob); // 创建URL
// link.setAttribute("download", `${toolInfo.name}`);
// document.body.appendChild(link);
// link.click();
// URL.revokeObjectURL(link.href);
// document.body.removeChild(link);
// })
},
couresreso() {
carouselList().then((res) => {
console.log(res);
const list = res.data.records.map(item => {
return {
image: item.picPath,
name: item.displayPage,
JumpUrl: '',
bgcolor: '',
...item
}
});
this.resonimg = list;
})
},
submitNotice() {
if (!this.form.textarea) return this.$message({ message: '请输入内容', type: 'error' })
saveOpinion({ content: this.form.textarea }).then(() => {
this.$message({ message: '提交成功', type: 'success' })
this.closeDlg()
})
},
getPic(index) {
return this.webBaseUrl + "/images/listblue0" + (index + 1) + ".png";
},
closeDlg() {
this.form.textarea = ''
this.gratefulVisible = false
},
toCourseDetail(item) {
console.log(item);
if (item.type == 10) {
//console.log("直接进入学习页面");
this.$router.push("/course/studyindex?id=" + item.courseId);
} else if (item.type == 20) {
apiCourseStudy.hasSignup(item.courseId).then((rs) => {
if (rs.status == 200) {
this.$router.push("/course/studyindex?id=" + item.courseId);
} else {
this.$router.push("/course/detail?id=" + item.courseId);
}
});
}
},
getCourseData(pageIndex) {
courselList({
pageNo: pageIndex,
pageSize: 8
}).then((res) => {
if (res.code == 200 && res.data.records.length > 0) {
console.log(res.data.records, '之前的');
// res.data.records.map((item) => {
// return {
// ...item,
// coverImg:item.coverImg
// }
// })
this.courseList.list = res.data.records;
} else {
console.log("加载课程信息失败:" + res.error);
}
});
},
getNoticeData() {
noticeList({
pageNo: 1,
pageSize: 6,
isTop: ''
}).then((res) => {
console.log(res, '通知');
if (res.data.records.length <= 3) {
this.showNoticeImg = true
}
this.courseList.noticeList = res.data.records || []
})
},
getToolData() {
toolList({
pageNo: 1,
pageSize: 6
}).then((result) => {
if (result.data.records.length <= 3) {
this.showToolImg = true
}
console.log(result.data.records, '哈哈哈哈');
this.courseList.toolList = result.data.records || []
})
},
},
};
</script>
<style scoped lang="scss">
.allPadding {
padding: 0px;
}
.noticeBgc {
height: 100%;
width: 100%;
background: url('../../assets/images/grateful/noticeBgc.png') no-repeat;
background-size: 100%;
background-position: left bottom;
padding: 20px;
border-radius: 8px;
}
.toolBgc {
height: 100%;
width: 100%;
background: url('../../assets/images/grateful/toolBgc.png') no-repeat;
background-size: 100%;
background-position: left bottom;
padding: 20px;
border-radius: 8px;
}
@media screen and (max-width: 1366px) {
.swiper-pagination {
top: 310px;
}
}
@media screen and (max-width: 1680px) and (min-width:1367px) {
.swiper-pagination {
top: 360px;
}
}
@media screen and (max-width: 1920px) and (min-width: 1681px) {
.swiper-pagination {
top: 360px;
}
}
@media screen and (min-width: 1921px) {
.swiper-pagination {
top: 360px;
}
}
.bannbox {
width: 100%;
height: 420px;
text-align: center;
filter: blur(5px);
z-index: -1;
background-size: 100% 100%;
}
::v-deep.swiper-slide .games .swiper-slide-active {
text-align: center !important;
}
#container {
position: absolute;
height: 420px;
top: 0;
width: 100%;
}
.banner-img {
height: 420px;
position: absolute;
top: 0;
left: 0;
right: 0;
transform: (-50%, -50%);
}
.course-banner {
height: 420px;
position: relative;
&::before {
content: url(../../assets/images/grateful/logo.png);
position: absolute;
top: 20px;
left: 40px;
z-index: 100
}
.swiper-button-prev {
height: 38px;
padding: 0 16px;
background: rgba($color: #000000, $alpha: 0.8) url("../../assets/images/icon/ban-left.png") no-repeat;
background-size: 12px 18px;
background-position: 16px 10px;
bottom: 66px;
border-radius: 19px 0 0 19px;
}
.swiper-button-next {
height: 38px;
bottom: 66px;
top: auto;
padding: 0 16px;
background: rgba($color: #000000, $alpha: 0.1) url("../../assets/images/icon/ban-right.png") no-repeat;
background-size: 12px 18px;
background-position: 6px 10px;
border-radius: 0 19px 19px 0;
}
.swiper-pagination-bullets {
left: 60px;
bottom: 66px;
}
::v-deep .swiper-pagination {
line-height: 25px;
height: 32px;
border-radius: 19px;
width: auto;
left: 45%;
padding: 0 20px;
border-radius: 19px;
.swiper-pagination-bullet {
position: relative;
width: 25px;
height: 5px;
margin-top: 10px;
background: #fff;
opacity: 1 !important;
border-radius: 2px;
}
.swiper-pagination-bullet::before {
content: "";
position: absolute;
top: -20px;
bottom: -20px;
left: -2px;
right: -2px;
}
.swiper-pagination-bullet-active {
height: 5px;
opacity: 1 !important;
margin-top: 10px;
width: 25px;
background: #387df7;
border-radius: 2px;
}
}
}
::v-deep .el-dialog__body {
background: linear-gradient(180deg, rgba(56, 125, 247, 0.2) 0%, rgba(166, 168, 255, 0) 100%) no-repeat;
background-size: 100% 136px;
}
::v-deep .el-dialog__header {
background: linear-gradient(180deg, rgba(56, 125, 247, 0.2) 0%, rgba(166, 168, 255, 0) 100%) no-repeat;
background-size: 100% 1000px;
}
.dialogContent {
.dialogTop {
display: flex;
justify-content: space-between;
margin-bottom: 40px;
.words {
font-size: 26px;
font-weight: 600;
color: #333333;
line-height: 37px;
}
}
}
.title-line-ellipsis {
display: -webkit-box;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
box-sizing: border-box;
word-break: break-all;
overflow: hidden;
}
.gratefulNav {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr;
column-gap: 40px;
.navImg {
img {
width: 100%;
height: 100%;
}
}
}
.textarea {
width: 100%;
::v-deep .el-textarea__inner {
min-height: 300px !important;
}
}
.float-tools {
position: fixed;
right: 0;
bottom: 40%;
z-index: 999;
cursor: pointer;
.content {
width: 152px;
height: 55px;
display: flex;
align-items: center;
background: linear-gradient(86deg, #00c8ff 0%, #167cff 100%);
border-radius: 100px 0px 0px 100px;
padding: 20px;
img {
width: 20px;
height: 20px;
}
span {
margin-left: 10px;
color: #fff;
font-size: 20px;
}
}
}
.xindex-course-image:hover {
transform: scale(1.2) translateY(-15px);
transition: all 0.6s;
}
.two-line-ellipsis {
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
box-sizing: border-box;
}
// 内容部分
.modules {
margin-top: 20px;
display: flex;
.modules-title {
padding: 0;
.modules-text {
height: 28px;
font-size: 20px;
font-family: PingFangSC-Semibold-, PingFangSC-Semibold;
font-weight: 700;
color: #333333;
}
.recommend {
vertical-align: text-bottom;
height: 26px;
}
.quyer-tag {
margin-left: 15px;
a {
color: #333333;
font-size: 14px;
margin: 0 15px;
display: inline-block;
text-decoration: none;
outline: none;
}
.current {
width: 44px;
height: 26px;
background: #387df7;
border-radius: 4px;
color: #fff;
line-height: 26px;
text-align: center;
}
}
.more {
float: right;
margin-top: 7px;
color: #333333;
font-size: 14px;
}
}
.modules-list {
margin-top: 30px;
.case-card {
margin-bottom: 15px;
.case-info-image-box {
position: relative;
.case-info {
width: 385px;
.case-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.case-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
}
}
.case-info-summary {
font-size: 12px;
color: #666666;
height: 82px;
line-height: 18px;
}
}
img {
width: 160px;
height: 105px;
position: absolute;
top: 5px;
right: 0;
}
}
.case-info-box {
.case-info {
.case-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.case-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
}
}
.case-info-summary {
font-size: 12px;
color: #666666;
height: 82px;
line-height: 18px;
}
}
}
.case-other-info {
height: 40px;
margin-top: 10px;
display: flex;
justify-content: space-between;
}
}
.article-card {
background: #fff;
border-radius: 8px;
.article-card-left {
.article-card-box {
.article-info-image-box {
border-radius: 4px;
.article-info {
height: 400px;
.article-info-title {
font-size: 16px;
color: #00253e;
font-weight: 500;
margin-bottom: 5px;
margin-top: 5px;
}
.article-info-summary {
font-size: 14px;
color: #6e7b84;
height: 160px;
line-height: 22px;
}
}
img {
width: 470px;
height: 330px;
}
}
}
}
.article-card-right {
flex: 1;
margin-left: 28px;
.article-card-box {
margin-bottom: 16px;
padding-bottom: 16px;
&:last-child {
margin-bottom: 0px;
padding-bottom: 0px;
}
.article-info-box {
.article-info {
display: flex;
.article-image {
width: 140px;
height: 105px;
margin-top: 10px;
margin-left: 20px;
}
.article-body {
flex: 1;
.article-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.article-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
font-weight: 500;
}
}
.article-info-summary {
padding-top: 9px;
font-size: 14px;
color: #666666;
height: 43px;
line-height: 18px;
font-weight: 500;
margin-bottom: 20px;
}
}
}
}
}
.article-card-box:not(:last-child) {
border-bottom: 1px solid #ededed;
}
}
.article-other-info {
display: flex;
}
}
.qa-card {
box-sizing: border-box;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.05);
border-radius: 8px;
background: #fff;
&:last-child {
margin-right: 0;
}
.qa-top {
& span:first-child {
height: 24px;
background: rgba($color: #387df7, $alpha: 0.05);
border-radius: 4px;
font-size: 12px;
color: #387df7;
}
span {
color: #6e7b84;
}
}
.qa-center {
position: relative;
background: rgba($color: #04243c, $alpha: 0.04);
border-radius: 4px;
.qa-views {
position: absolute;
color: #6e7b84;
}
}
.qa-char {
display: flex;
}
}
}
.list {
display: grid;
justify-content: space-between;
}
}
</style>

View File

@@ -0,0 +1,168 @@
<template>
<div>
<div class="noticeBanner">
</div>
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="navTop">
<router-link to="/grateful" class="nav">首页</router-link>&nbsp;>&nbsp;<span style="cursor: pointer;" class="nav">通知列表</span>
</div>
</div>
</div>
</div>
<!-- 教师赋能 -->
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="modules-list" style="margin-top: 0;">
<div style="padding:20px 70px;" class="bgc">
<div style="min-height: 600px;">
<!--内容列表内容-->
<div v-for="(item, ccidx) in list" :key="'cc' + ccidx" class="toolEvery" @click="noticeDetail(item)">
<div class="contnet">{{ item.name }}</div>
<div class="case-info-date portal-time">
<i class="el-icon-time" style="margin-right: 5px;"></i>
<time-show :time="item.createTime"></time-show>
</div>
</div>
</div>
<div v-if="total > 0">
<pagination style="background-color: rgba(0, 0, 0, 0);" :size="params.pageSize" :total="total"
:page="params.pageNo" @change-size="changePageSize" @change-page="changPage" :autoScroll="false">
</pagination>
</div>
</div>
<div v-if="list.length == 0" class="pagination-div">
<span class="notcoures">
<img :src="`${webBaseUrl}/images/nocase.png`" alt="">
<h5>暂无数据</h5>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import timeShow from "@/components/Portal/datetimeShow.vue";
import { noticeList } from '@/api/modules/grateful.js'
export default {
data: () => {
return {
list: [],
total: 0,
params: {
pageNo: 1,
pageSize: 10,
},
};
},
components: { timeShow },
mounted() {
this.getNoticeList()
},
methods: {
getNoticeList() {
noticeList(this.params).then((result) => {
console.log(result);
const { total, records } = result.data
this.total = total
this.list = records
})
},
noticeDetail(item) {
console.log(item);
this.$router.push('/grateful/noticeDetail?id=' + item.id)
},
getPic(index) {
return this.webBaseUrl + "/images/listblue0" + (index + 1) + ".png";
},
changePageSize(pageSize) {
this.params.pageSize = pageSize;
this.getNoticeList()
},
changPage(pageNo) {
this.params.pageNo = pageNo
this.getNoticeList()
},
},
};
</script>
<style scoped lang='scss'>
.nav:hover{
color: #387DF7;
}
.noticeBanner {
width: 100%;
height: 240px;
position: relative;
background: url('../../assets/images/grateful/noticeBanner.png') no-repeat;
background-size: 100% 100%;
&::before {
content: url(../../assets/images//grateful/noticeLogo.png);
position: absolute;
top: 20px;
left: 40px;
}
&::after {
content: '通知';
position: absolute;
bottom: 25px;
left: 180px;
color: #387DF7;
font-weight: 600;
font-size: 64px;
}
img {
width: 100%;
height: 240px;
}
}
.navTop {
color: #666;
}
.modules-list {
min-height: 682px;
background: #ffffff;
border-radius: 8px;
.pagination-div {
text-align: center;
padding: 70px 0;
}
.bgc {
background: linear-gradient(180deg,
rgba(56, 125, 247, 0.2) 0%,
rgba(166, 168, 255, 0) 100%) no-repeat;
background-size: 100% 166px;
border-radius: 8px;
}
.toolEvery {
height: 56px;
line-height: 56px;
font-size: 18px;
font-weight: 500;
color: #333333;
border-bottom: 1px solid rgba($color: #999, $alpha: 0.2);
display: flex;
justify-content: space-between;
cursor: pointer;
.contnet {
font-size: 18px;
font-weight: 500;
color: #333333;
}
}
}
</style>

View File

@@ -0,0 +1,150 @@
<template>
<div>
<div class="portal-header"></div>
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="navTop">
<div>
<router-link to="/grateful" class="nav">首页</router-link>&nbsp;>&nbsp;<router-link
to="/grateful/gratefulNotice" class="nav">通知列表</router-link>&nbsp;>&nbsp;<span style="cursor: pointer;"
class="nav">通知详情</span>
</div>
</div>
</div>
</div>
</div>
<!-- 教师赋能 -->
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="modules-list" style="margin-top: 0;">
<div class="bgc">
<div class="title">{{ name }}</div>
<!--内容列表内容-->
<div class="timeAndAuthor">
<div class="author">发布人{{ createName }}</div>
<div class="case-info-date portal-time">
<i class="el-icon-time" style="margin-right: 5px;"></i>
<time-show :time="createTime"></time-show>
</div>
</div>
<div class="topTitle">通知内容</div>
<!-- <div class="noticeContent" style="white-space: pre;">{{ content }}</div> -->
<div class="noticeContent" v-html="content"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import timeShow from "@/components/Portal/datetimeShow.vue";
import { noticeDataById } from '@/api/modules/grateful';
export default {
data: () => {
return {
content: '',
createName: '',
createTime: '',
name: ''
};
},
components: { timeShow },
mounted() {
noticeDataById(this.$route.query.id).then((result) => {
console.log(result);
const { content, createName, createTime, name } = result.data
this.content = content
this.createTime = createTime
this.createName = createName
this.name = name
})
},
methods: {
noticeDetail(item) {
},
getPic(index) {
return this.webBaseUrl + "/images/listblue0" + (index + 1) + ".png";
},
changePageSize(pageSize) {
this.courseList.pageSize = pageSize;
},
loadData(pindex) {
console.log(pindex);
},
},
};
</script>
<style scoped lang='scss'>
.nav:hover {
color: #387DF7;
}
.portal-header {
position: relative;
height: 72px;
background: #0078FC;
border: 1px solid rgba(61, 61, 61, 0.15);
backdrop-filter: blur(10px);
&::before {
content: url(../../assets/images//grateful/logo.png);
position: absolute;
left: 40px;
top: 20px;
}
}
.navTop {
color: #666;
}
.modules-list {
min-height: 555px;
background: #ffffff;
border-radius: 8px;
.bgc {
font-size: 18px;
font-weight: 600;
color: #000000;
background: linear-gradient(180deg,
rgba(56, 125, 247, 0.2) 0%,
rgba(166, 168, 255, 0) 100%) no-repeat;
background-size: 100% 166px;
border-radius: 8px;
padding: 40px 70px;
.title {
padding: 20px;
display: flex;
justify-content: space-between;
}
}
.timeAndAuthor {
padding: 0 20px;
.author {
font-size: 14px;
font-weight: 400;
color: #333333;
margin-bottom: 5px;
}
}
.topTitle {
display: flex;
justify-content: center;
font-size: 18px;
font-weight: 600;
margin-bottom: 30px;
}
.noticeContent {
padding: 0 80px;
}
}
</style>

View File

@@ -0,0 +1,501 @@
<template>
<div>
<div class="empBanner">
</div>
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="navTop">
<div>
<router-link to="/grateful" class="nav">首页</router-link>&nbsp;>&nbsp;
<span style="cursor: pointer;" class="nav">教师赋能</span>
</div>
<div style="position: relative;">
<el-input class="portal-input" placeholder="请输入课程名称" style="border-radius: 20px !important; "
@keyup.enter.native="searchJump()" clearable maxlength="50" v-model="param.name">
</el-input>
<el-button class="sear-but" @click="searchJump()" type="primary" size="mini">搜索</el-button>
</div>
</div>
</div>
</div>
</div>
<!-- 教师赋能 -->
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="modules-list list" style="margin-top: 0">
<!--内容列表内容-->
<div v-for="(course, ccidx) in list" :key="'cc' + ccidx" class="xindex-course" style="position: relative">
<a @click="toCourseDetail(course)">
<div class="xindex-course-image">
<course-image :course="course"></course-image>
<span v-if="course.type == 20 || course.type == 10" class="course-type">录播课</span>
<span v-if="course.type == 30" class="course-type">面授课</span>
<span v-if="course.type == 40" class="course-type">学习项目</span>
</div>
<div style="width: 80%" :title="course.name" v-html="course.name"
class="course-title portal-title-tow two-line-ellipsis"></div>
<div class="course-author">
<div class="course-author-left">
{{ course.teacher }}
<span class="study-num">{{ formatNum(course.studies) }}人学习</span>
</div>
<div style="display: flex">
<div v-if="course.score != '0'">
<span class="course-score-value" style="margin-left: 10px">{{ toScore(Number(course.score))
}}</span>
</div>
<div v-else class="course-score-no">未评分</div>
</div>
</div>
</a>
</div>
</div>
<div v-if="list.length == 0" class="pagination-div">
<span class="notcoures">
<img :src="`${webBaseUrl}/images/nocase.png`" alt="">
<h5>暂无数据</h5>
</span>
</div>
</div>
</div>
</div>
<div v-if="list.length !== 0" style="margin-bottom: 45px;">
<pagination :size="param.pageSize" :total="total" :page="param.pageNo" @change-size="changePageSize"
@change-page="loadData" style="background-color: rgba(0, 0, 0, 0);" :autoScroll="false"
:pageSizes="[12, 24, 36, 48]"></pagination>
</div>
</div>
</template>
<script>
import apiCourseStudy from "@/api/modules/courseStudy.js";
import courseImage from "@/components/Course/courseImage.vue";
import { toScore, formatUserNumber } from "@/utils/tools.js";
import { courselList } from '@/api/modules/grateful.js'
export default {
name: "TeacherEmpowerment",
components: {
courseImage,
},
data() {
return {
formatNum: formatUserNumber,
toScore,
list: [],
total: 0,
param: {
name: '',
pageNo: 1,
pageSize: 12
}
};
},
mounted() {
this.getCourseData();
},
methods: {
searchJump() {
this.param.pageNo = 1
this.getCourseData();
},
changePageSize(pageSize) {
this.param.pageSize = pageSize;
this.getCourseData()
},
loadData(pageNo) {
this.param.pageNo = pageNo
this.getCourseData()
},
getPic(index) {
return this.webBaseUrl + "/images/listblue0" + (index + 1) + ".png";
},
toCourseDetail(item) {
//二期调整,直接改成一个地址
//return this.webBaseUrl + '/course/detail?id=' + item.id;
let $this = this;
if (item.type == 10) {
//return this.webBaseUrl + "/course/studyindex?id=" + item.id;
//console.log("直接进入学习页面");
this.$router.push("/course/studyindex?id=" + item.courseId);
} else if (item.type == 20) {
apiCourseStudy.hasSignup(item.courseId).then((rs) => {
if (rs.status == 200) {
//return $this.webBaseUrl + "/course/studyindex?id=" + item.id;
this.$router.push("/course/studyindex?id=" + item.courseId);
} else {
//return $this.webBaseUrl + "/course/detail?id=" + item.id;
this.$router.push("/course/detail?id=" + item.courseId);
}
});
//return $this.webBaseUrl + "/course/detail?id=" + item.id;
}
},
//高亮
brightenKeyword(val, keyword) {
const Reg = new RegExp(keyword, 'i');
let res = '';
if (val) {
res = val.replace(Reg, `<span style="color: #3e7fff;">${keyword}</span>`);
return res;
}
},
getCourseData() {
courselList(this.param).then((res) => {
if (res.code == 200 && res.data.records.length > 0) {
console.log(res.data, '之前的');
res.data.records.forEach(item => {
item.name = this.brightenKeyword(item.name, this.param.name);
});
this.list = res.data.records;
this.total = res.data.total
} else {
console.log("加载课程信息失败:" + res.error);
}
});
}
},
};
</script>
<style scoped lang="scss">
.nav:hover {
color: #387DF7;
}
.empBanner {
width: 100%;
height: 240px;
position: relative;
background: url('../../assets/images/grateful/empBanner.png') no-repeat;
background-size: 100% 100%;
&::before {
content: url(../../assets/images//grateful/logo.png);
position: absolute;
top: 20px;
left: 40px;
}
&::after {
content: '教师赋能';
position: absolute;
bottom: 25px;
left: 180px;
color: #ffffff;
font-weight: 600;
font-size: 64px;
}
img {
width: 100%;
height: 240px;
}
}
.navTop {
color: #666;
display: flex;
justify-content: space-between;
.sear-but {
position: absolute;
bottom: 10%;
right: 5px;
}
}
.xindex-course-image:hover {
transform: scale(1.2) translateY(-15px);
transition: all 0.6s;
}
.two-line-ellipsis {
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
box-sizing: border-box;
}
// 内容部分
.modules {
margin-top: 20px;
display: flex;
.modules-title {
.modules-text {
height: 28px;
font-size: 20px;
font-family: PingFangSC-Semibold-, PingFangSC-Semibold;
font-weight: 700;
color: #333333;
}
.recommend {
vertical-align: text-bottom;
height: 26px;
}
.quyer-tag {
margin-left: 15px;
a {
color: #333333;
font-size: 14px;
margin: 0 15px;
display: inline-block;
text-decoration: none;
outline: none;
}
.current {
width: 44px;
height: 26px;
background: #387df7;
border-radius: 4px;
color: #fff;
line-height: 26px;
text-align: center;
}
}
.more {
float: right;
margin-top: 7px;
margin-right: 30px;
color: #333333;
font-size: 14px;
}
}
.pagination-div {
text-align: center;
padding: 70px 0;
}
.modules-list {
margin-top: 30px;
.case-card {
margin-bottom: 15px;
.case-info-image-box {
position: relative;
.case-info {
width: 385px;
.case-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.case-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
}
}
.case-info-summary {
font-size: 12px;
color: #666666;
height: 82px;
line-height: 18px;
}
}
img {
width: 160px;
height: 105px;
position: absolute;
top: 5px;
right: 0;
}
}
.case-info-box {
.case-info {
.case-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.case-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
}
}
.case-info-summary {
font-size: 12px;
color: #666666;
height: 82px;
line-height: 18px;
}
}
}
.case-other-info {
height: 40px;
margin-top: 10px;
display: flex;
justify-content: space-between;
}
}
.article-card {
background: #fff;
border-radius: 8px;
.article-card-left {
.article-card-box {
.article-info-image-box {
border-radius: 4px;
.article-info {
height: 400px;
.article-info-title {
font-size: 16px;
color: #00253e;
font-weight: 500;
margin-bottom: 5px;
margin-top: 5px;
}
.article-info-summary {
font-size: 14px;
color: #6e7b84;
height: 160px;
line-height: 22px;
}
}
img {
width: 470px;
height: 330px;
}
}
}
}
.article-card-right {
flex: 1;
margin-left: 28px;
.article-card-box {
margin-bottom: 16px;
padding-bottom: 16px;
&:last-child {
margin-bottom: 0px;
padding-bottom: 0px;
}
.article-info-box {
.article-info {
display: flex;
.article-image {
width: 140px;
height: 105px;
margin-top: 10px;
margin-left: 20px;
}
.article-body {
flex: 1;
.article-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.article-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
font-weight: 500;
}
}
.article-info-summary {
padding-top: 9px;
font-size: 14px;
color: #666666;
height: 43px;
line-height: 18px;
font-weight: 500;
margin-bottom: 20px;
}
}
}
}
}
.article-card-box:not(:last-child) {
border-bottom: 1px solid #ededed;
}
}
.article-other-info {
display: flex;
}
}
.qa-card {
box-sizing: border-box;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.05);
border-radius: 8px;
background: #fff;
&:last-child {
margin-right: 0;
}
.qa-top {
& span:first-child {
height: 24px;
background: rgba($color: #387df7, $alpha: 0.05);
border-radius: 4px;
font-size: 12px;
color: #387df7;
}
span {
color: #6e7b84;
}
}
.qa-center {
position: relative;
background: rgba($color: #04243c, $alpha: 0.04);
border-radius: 4px;
.qa-views {
position: absolute;
color: #6e7b84;
}
}
.qa-char {
display: flex;
}
}
}
.list {
display: grid;
justify-content: space-between;
}
}
</style>

View File

@@ -0,0 +1,180 @@
<template>
<div>
<div class="opinionBanner">
</div>
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="navTop">
<div>
<router-link to="/grateful" class="nav">首页</router-link>&nbsp;>&nbsp;
<span style="cursor: pointer;" class="nav">认证讲师库2023</span>
</div>
<div style="position: relative;">
<el-input class="portal-input" placeholder="请输入课程名称" style="border-radius: 20px !important; "
@keyup.enter.native="searchJump()" clearable maxlength="50" v-model="params.courseName">
</el-input>
<el-button class="sear-but" @click="searchJump()" type="primary" size="mini">搜索</el-button>
</div>
</div>
</div>
</div>
</div>
<!-- 教师赋能 -->
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main" style="width: 100%;">
<div class="modules-list" style="margin-top: 0;">
<div class="content">
<div style="min-height: 485px;width: 100%;">
<el-table style="width: 100%;" :data="list" stripe border>
<el-table-column label="课程名称" prop="courseName" align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="课程价值" prop="meaning" align="center" show-overflow-tooltip></el-table-column>
<el-table-column label="教师名称" prop="teacherName" align="center" min-width="50"></el-table-column>
<el-table-column label="教师工号" prop="teacherNo" align="center" min-width="50" fixed="right"></el-table-column>
</el-table>
</div>
<div v-if="list.length > 0" style="text-align: center;margin-top: 50px;">
<pagination style="background-color: rgba(0, 0, 0, 0);" :size="params.pageSize" :total="total"
:page="params.pageNo" @change-size="changePageSize" @change-page="loadData" :autoScroll="false">
</pagination>
</div>
<div v-if="list.length == 0" class="pagination-div">
<span class="notcoures">
<img :src="`${webBaseUrl}/images/nocase.png`" alt="">
<h5>暂无数据</h5>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import timeShow from "@/components/Portal/datetimeShow.vue";
import { teachersList } from "../../api/modules/grateful";
export default {
data: () => {
return {
total: 0,
list: [],
params: {
pageNo: 1,
pageSize: 10,
courseName: '',
}
};
},
components: { timeShow },
mounted() {
this.getTeachersList()
},
methods: {
getTeachersList() {
teachersList(this.params).then((result) => {
console.log(result);
const { total, records } = result.data
this.total = total;
this.list = records;
})
},
searchJump() {
this.params.pageNo = 1
this.getTeachersList()
},
loadData(pageNo) {
this.params.pageNo = pageNo
this.getTeachersList()
},
getPic(index) {
return this.webBaseUrl + "/images/listblue0" + (index + 1) + ".png";
},
changePageSize(pageSize) {
this.params.pageSize = pageSize;
this.getTeachersList()
},
},
};
</script>
<style scoped lang='scss'>
.nav:hover {
color: #387DF7;
}
.opinionBanner {
width: 100%;
height: 240px;
position: relative;
background: url('../../assets/images/grateful/opinionBanner.png');
// background-size: 100% 100%;
&::before {
content: url(../../assets/images//grateful/logo.png);
position: absolute;
top: 20px;
left: 40px;
}
&::after {
content: '认证讲师库2023';
position: absolute;
bottom: 25px;
left: 180px;
color: #ffffff;
font-weight: 600;
font-size: 64px;
}
img {
width: 100%;
height: 240px;
}
}
.navTop {
color: #666;
display: flex;
justify-content: space-between;
.sear-but {
position: absolute;
bottom: 10%;
right: 5px;
}
}
.modules-list {
min-height: 667px;
background: #ffffff;
border-radius: 8px;
.content {
padding: 40px 70px;
background: linear-gradient(180deg,
rgba(56, 125, 247, 0.2) 0%,
rgba(166, 168, 255, 0) 100%) no-repeat;
background-size: 100% 166px;
border-radius: 8px;
.pagination-div {
text-align: center;
padding: 70px 0;
}
}
.pagination-div {
text-align: center;
padding: 70px 0;
}
.sear-but {
position: absolute;
bottom: 10%;
right: 5px;
}
}
</style>

View File

@@ -0,0 +1,194 @@
<template>
<div>
<div class="toolBanner">
<div class="portal-header"></div>
</div>
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="navTop">
<div>
<router-link to="/grateful" class="nav">首页</router-link>&nbsp;>&nbsp;
<span style="cursor: pointer;" class="nav">下载工具</span>
</div>
</div>
</div>
</div>
</div>
<!-- 教师赋能 -->
<div class="xindex-content" style="padding: 0">
<div class="modules xcontent2">
<div class="xcontent2-main">
<div class="modules-list" style="margin-top: 0;">
<div v-if="total > 0" style="padding: 20px 70px;border-radius: 8px 8px 0 0;min-height: 600px;" class="bgc">
<!--内容列表内容-->
<div v-for="(tool, index) in list" :key="'cc' + index" class="toolEvery">
<div class="contnet">
{{ tool.name.split('.')[0] }}
</div>
<div class="btn">
<el-button @click="downLoad(tool)">立即下载</el-button>
</div>
</div>
</div>
<div>
<pagination :size="params.pageSize" :total="total" :page="params.pageIndex" @change-size="changePageSize"
@change-page="loadData" :autoScroll="false">
</pagination>
</div>
<div v-if="list.length == 0" class="pagination-div">
<span class="notcoures">
<img :src="`${webBaseUrl}/images/nocase.png`" alt="">
<h5>暂无工具</h5>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { toolList, toolDown } from '../../api/modules/grateful';
export default {
data: () => {
return {
list: [],
total: 0,
params: {
pageNo: 1,
pageSize: 10,
}
};
},
mounted() {
this.getToolList()
},
methods: {
async getToolList() {
const result = await toolList(this.params)
if (result.code === 200) {
const { total, records } = result.data
this.list = records
this.total = total
}
},
downLoad(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}`)
// toolDown({
// urlStr: `${process.env.VUE_APP_BOE_WEB_URL}/upload${toolInfo.filePath}`,
// fileName: toolInfo.name
// }).then((result) => {
// const link = document.createElement('a');// 创建a标签
// let blob = new Blob([result.data], { type: '' }); // 设置文件类型
// link.style.display = "none";
// link.href = URL.createObjectURL(blob); // 创建URL
// link.setAttribute("download", `${toolInfo.name}`);
// document.body.appendChild(link);
// link.click();
// URL.revokeObjectURL(link.href);
// document.body.removeChild(link);
// })
},
getPic(index) {
return this.webBaseUrl + "/images/listblue0" + (index + 1) + ".png";
},
changePageSize(pageSize) {
this.params.pageSize = pageSize;
this.getToolList()
},
loadData(pageNo) {
this.params.pageNo = pageNo;
this.getToolList()
},
},
};
</script>
<style scoped lang='scss'>
.nav:hover {
color: #387DF7;
}
.toolBanner {
width: 100%;
height: 240px;
position: relative;
background: url('../../assets/images/grateful/toolBanner.png') no-repeat;
background-size: 100% 100%;
&::after {
content: '下载工具';
position: absolute;
bottom: 25px;
left: 180px;
color: #ffffff;
font-weight: 600;
font-size: 64px;
}
.portal-header {
position: relative;
height: 72px;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(61, 61, 61, 0.15);
backdrop-filter: blur(10px);
&::before {
content: url(../../assets/images//grateful/logo.png);
position: absolute;
left: 40px;
top: 20px;
}
}
}
.navTop {
color: #666;
}
.bgc {
background: linear-gradient(180deg,
rgba(56, 125, 247, 0.2) 0%,
rgba(166, 168, 255, 0) 100%) no-repeat;
background-size: 100% 166px;
border-radius: 8px;
}
.modules-list {
min-height: 682px;
background: #ffffff;
border-radius: 8px;
.pagination-div {
text-align: center;
padding: 70px 0;
}
.toolEvery {
height: 56px;
line-height: 56px;
font-size: 18px;
font-weight: 500;
color: #333333;
border-bottom: 1px solid rgba($color: #999, $alpha: 0.2);
display: flex;
justify-content: space-between;
.btn {
button {
width: 140px;
height: 40px;
background: #387df7;
border: 0;
box-shadow: 1px 2px 8px 1px rgba(56, 125, 247, 0.3);
border-radius: 4px;
color: #ffffff;
line-height: 22px;
}
}
}
}
</style>

View File

@@ -0,0 +1,72 @@
<template>
<div class="main">
<!-- <div class="mianRouter"> -->
<router-view></router-view>
<!-- </div> -->
<!-- 底部 -->
<div class="grateful">
<img src="../../assets/images/grateful/gratefulFooter.png" alt="" />
</div>
</div>
</template>
<script>
export default {
name: "Grateful",
data() {
return {
};
}
};
</script>
<style scoped lang="scss">
.main {
background-color: #f2F5F7;
// height: 100%;
// display: flex;
// flex-direction: column;
// .mianRouter {
// flex: 1;
// }
}
.grateful {
width: 100%;
img {
width: 100%;
height: 100%;
}
}
.header {
height: 240px;
background: url('../../../public/images/courseBg.png') no-repeat;
background-size: 100% 100%;
.portal-header {
height: 72px;
display: flex;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(61, 61, 61, 0.15);
backdrop-filter: blur(10px);
.portal-top {
width: 100%;
margin: 0px 40px;
display: flex;
justify-content: space-between;
.portal-top-left {
display: flex;
justify-content: flex-start;
align-items: center;
}
}
}
}
</style>

View File

@@ -231,10 +231,8 @@ export default {
this.allRequests()
},
beforeRouteEnter(to, from, next) {
console.log(from, '哈哈哈');
console.log(to, '嘿嘿');
let time = new Date().getTime()
sessionStorage.setItem('startTime', time)
next()

View File

@@ -1,7 +1,8 @@
<template>
<div id="couser-list-content" class="couser-list-content">
<div class="course-banner">
<portal-header current="course" textColor="#fff" :keywords="keyword" @emitInput="emitInput" @showClass="showClass"></portal-header>
<portal-header current="course" textColor="#fff" :keywords="keyword" @emitInput="emitInput"
@showClass="showClass"></portal-header>
</div>
<div style="padding-top:30px">
<div class="xcontent2">
@@ -394,7 +395,7 @@
</template>
<!-- 线上品牌系列课程 -->
<template v-if="newData">
<div class="xcourse-card" style="margin-bottom: 0;margin-top: 36px;" v-for="(cinfo, cidx) in courseList" :key="cinfo.id">
<div class="xcourse-card" v-for="cinfo in courseList" :key="cinfo.id" style="margin-bottom: 0;margin-top: 36px;">
<div class="course-card" style="padding: 10px;">
<a @click="() => $message.success('如需了解详情请联系BOEU')">
<div class="course-img-box">
@@ -615,7 +616,7 @@ export default {
oneList: [], //一级分类{type:11}
twoList: [], //二级分类{type:12}
threeList: [],//三级分类{type:13}
searching:false,//是否正在搜索中
searching: false,//是否正在搜索中
resonimg: {},
formatDate,
@@ -631,7 +632,7 @@ export default {
// 查询信息
course: {
orderField: "studys",
companyId:'',
companyId: '',
keyword: '',//关键词
topOrder: true,
orderAsc: false,
@@ -666,12 +667,12 @@ export default {
created() {
let localKey = "user_" + this.userInfo.sysId + "_gids";
apiUserbasic.getInAudienceIds().then(rs => {
if (rs.status == 200) {
this.audiences = rs.result;
sessionStorage.setItem(localKey, this.audiences);
} else {
console.log(rs.message);
}
if (rs.status == 200) {
this.audiences = rs.result;
sessionStorage.setItem(localKey, this.audiences);
} else {
console.log(rs.message);
}
})
},
mounted() {
@@ -799,37 +800,37 @@ export default {
let hasData = sessionStorage.getItem(this.localSessionKey);
let $this = this;
if (hasData) {
let typeCodeList=JSON.parse(hasData);
typeCodeList.forEach(item=>{
if(item.type==0){
this.keyword=item.name;
}else if(item.type==1){
if(item.id==20){
$this.ctypeList[0].checked=true;
}else if(item.id==30){
$this.ctypeList[1].checked=true;
}else if(item.id==40){
$this.ctypeList[2].checked=true;
let typeCodeList = JSON.parse(hasData);
typeCodeList.forEach(item => {
if (item.type == 0) {
this.keyword = item.name;
} else if (item.type == 1) {
if (item.id == 20) {
$this.ctypeList[0].checked = true;
} else if (item.id == 30) {
$this.ctypeList[1].checked = true;
} else if (item.id == 40) {
$this.ctypeList[2].checked = true;
}
} else { //三级分类的处理,如果一个分类选中多个,显示哪个,显示第一个,是否可以
this.oneList.forEach(one => {
if (one.id == item.id && item.type == '11') {
this.navTitle = [{ ...one }]
one.checked = true
}
}else{ //三级分类的处理,如果一个分类选中多个,显示哪个,显示第一个,是否可以
this.oneList.forEach(one => {
if(one.id == item.id && item.type == '11'){
this.navTitle = [{ ...one }]
one.checked = true
one.children.forEach(two => {
if (two.id == item.id && item.type == '12') {
this.navTitle = [{ ...one }, { ...two }]
two.checked = true
}
one.children.forEach(two => {
if(two.id == item.id && item.type == '12'){
this.navTitle = [{ ...one }, { ...two }]
two.checked = true
}
two.children.forEach(three => {
if(three.id == item.id && item.type == '13'){
this.navTitle = [{ ...one }, { ...two }, { ...three }]
three.checked = true
}
})
two.children.forEach(three => {
if (three.id == item.id && item.type == '13') {
this.navTitle = [{ ...one }, { ...two }, { ...three }]
three.checked = true
}
})
})
})
}
})
}
@@ -1010,16 +1011,16 @@ export default {
// });
// }
// })
this.oneList.forEach(one=>{
if(one.checked){
one.children.forEach(two=>{
$this.twoList.push(two);
if(two.checked){
two.children.forEach(three=>{
$this.threeList.push(three);
})
}
});
this.oneList.forEach(one => {
if (one.checked) {
one.children.forEach(two => {
$this.twoList.push(two);
if (two.checked) {
two.children.forEach(three => {
$this.threeList.push(three);
})
}
});
}
})
},
@@ -1318,11 +1319,11 @@ export default {
// 查询
async search() {
//
if(this.searching){
if (this.searching) {
this.$message.warning("正在搜索中,请待搜索完成后再重新搜索");
return;
}
this.searching=true;
this.searching = true;
//测试时间格式化
// let s=1650973801;
// var d = new Date(1650973801*1000);
@@ -1370,11 +1371,11 @@ export default {
let isTopList = [];
// 隐藏loadMore
this.moreState = 2;
await apiCoursePortal.courseSearch(this.course).then(res => {
this.searching=false;
if (res.status == 200) {
this.totalPages = res.result.totalPages;
res.result.list.forEach(item => {
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('-');
@@ -1407,50 +1408,50 @@ export default {
if (this.newData) {
this.courseList = [
{
audiences: "",
companyId: "",
coverImg: "",
createdAt: "",
device: 3,
domainIds: "",
duration: 7,
endTime: "",
esId: "Z4LAbYkBfn0lSHQ9acXX",
id: "1091051270927183872",
isSetAudience: 0,
isTop: 0,
keywords: "回归,新建,在线,课程",
keywordsList: ['回归', '新建', '在线', '课程'],
maxDuration: "",
name: "人力资源知识技能晋升(人力资源总监空降现场,为各位答疑解惑",
openCourse: 0,
openEnroll: 0,
orderType: "",
publishTime: 1689748779,
resOwner: "",
score: 5,
source: 2,
startTime: "",
studies: 2,
studiesFormat: "",
summary: "",
sysType1: "966458733088919552",
sysType2: "966459050400600064",
sysType3: "1060578278816509959",
tags: "",
teacher: "张学智",
teacherCode: "",
title: "BOE",
topTime: "",
type: 20,
types: "",
remark: '备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备'
audiences: "",
companyId: "",
coverImg: "",
createdAt: "",
device: 3,
domainIds: "",
duration: 7,
endTime: "",
esId: "Z4LAbYkBfn0lSHQ9acXX",
id: "1091051270927183872",
isSetAudience: 0,
isTop: 0,
keywords: "回归,新建,在线,课程",
keywordsList: ['回归', '新建', '在线', '课程'],
maxDuration: "",
name: "人力资源知识技能晋升(人力资源总监空降现场,为各位答疑解惑",
openCourse: 0,
openEnroll: 0,
orderType: "",
publishTime: 1689748779,
resOwner: "",
score: 5,
source: 2,
startTime: "",
studies: 2,
studiesFormat: "",
summary: "",
sysType1: "966458733088919552",
sysType2: "966459050400600064",
sysType3: "1060578278816509959",
tags: "",
teacher: "张学智",
teacherCode: "",
title: "BOE",
topTime: "",
type: 20,
types: "",
remark: '备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备注备'
},
]
}
this.count = res?.result?.count
if(this.newData) {
this.count = 1
if (this.newData) {
this.count = 1
}
this.moreState = 3
} else {
@@ -1553,9 +1554,10 @@ export default {
</script>
<style scoped lang="scss">
.couser-list-content{
.couser-list-content {
min-height: 110%;
}
// 标题
.navTitle {
margin-bottom: 20px;
@@ -2388,5 +2390,4 @@ export default {
.option-active {
color: #387DF7;
}
</style>
}</style>

View File

@@ -128,12 +128,13 @@ module.exports = {
},
'/systemapi': {
// 目标代理服务器地址
target: 'http://127.0.0.1:9090',
// target: 'http://127.0.0.1:9090',
target: 'https://u-pre.boe.com',
changeOrigin: true,
logLevel:'debug',
secure: false,
pathRewrite: {
'^/systemapi': ''
// '^/systemapi': ''
}
},
'/uboeApi': {
@@ -156,22 +157,24 @@ module.exports = {
},
'/statApi': {
// 目标代理服务器地址
target: 'http://127.0.0.1:9080',
// target: 'http://127.0.0.1:9080',
target: 'https://u-pre.boe.com',
changeOrigin: true,
logLevel:'debug',
secure: false,
pathRewrite: {
'^/statApi': ''
// '^/statApi': ''
}
},
'/socialApi': {
// 目标代理服务器地址
target: 'http://127.0.0.1:9081',
// target: 'http://127.0.0.1:9081',
target: 'https://u-pre.boe.com',
changeOrigin: true,
logLevel:'debug',
secure: false,
pathRewrite: {
'^/socialApi': ''
// '^/socialApi': ''
}
},
'/report': {
@@ -183,13 +186,25 @@ module.exports = {
'^/report': '/report'
}
},
'/infrasApi': {
// 目标代理服务器地址
target: 'https://u-pre.boe.com',
changeOrigin: true,
secure: false,
},
'/activityApi': {
// 目标代理服务器地址
target: 'https://u-pre.boe.com',
changeOrigin: true,
secure: false,
},
},
},
css: {
extract: {
ignoreOrder: true
}
}
}