Files
learning-system-portal/src/components/PortalHeader.vue
2023-09-08 13:34:25 +08:00

578 lines
19 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="portal-header">
<div class="portal-top" :style="{color:textColor}">
<div class="portal-top-left">
<div class="portal-top-logo">
<img src="../assets/logo/logo-white.png" v-if="textColor == '#fff' || textColor == '#ffffff'" style="width:160px;height: 27px;" />
<img src="../assets/logo/logo.png" v-else style="width:160px;height: 27px;" />
</div>
<div class="portal-top-nav">
<div class="top-nav" :style="{color:textColor}" :class="current == 'index' ? activeNav : ''">
<router-link to="/index" >首页
<div :class="current == 'index' ? 'nav-bottbor' : ''"></div>
</router-link>
</div>
<div class="top-nav" :style="{color:textColor}" :class="current == 'course' ? activeNav : ''">
<router-link to="/course">课程
<div :class="current == 'course' ? 'nav-bottbor' : ''"></div>
</router-link>
</div>
<div class="top-nav" :style="{color:textColor}" :class="current == 'case' ? activeNav : ''">
<router-link to="/case">案例
<div :class="current == 'case' ? 'nav-bottbor' : ''"></div>
</router-link>
</div>
<div class="top-nav" :style="{color:textColor}" :class="current == 'article' ? activeNav : ''">
<router-link to="/article">文章
<div :class="current == 'article' ? 'nav-bottbor' : ''"></div>
</router-link>
</div>
<div class="top-nav" :style="{color:textColor}" :class="current == 'qa' ? activeNav : ''">
<router-link to="/qa" >问答
<div :class="current == 'qa' ? 'nav-bottbor' : ''"></div>
</router-link>
</div>
<div class="top-nav">
<el-dropdown placement="bottom" @command="handleCommand">
<span class="el-dropdown-link" style="font-size:16px;cursor: pointer;" :style="{color:textColor}">专区</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="one">BOE系列公开课</el-dropdown-item>
<el-dropdown-item command="two" divided>Grow180</el-dropdown-item>
<el-dropdown-item command="three" divided>管理者进阶</el-dropdown-item>
<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>
<div class="top-nav" :style="{color:textColor}" :class="current == 'follow' ? activeNav : ''">
<router-link to="/follow">我的关注
<div :class="current == 'follow' ? 'nav-bottbor' : ''"></div>
</router-link>
</div>
</div>
</div>
<div class="portal-top-right">
<div v-if="goSearch !=10" style="position: relative;">
<el-input class="portal-input" v-show="!hideSearch" placeholder="搜索全部" style="border-radius: 20px !important; " @keyup.enter.native="searchJump()" clearable maxlength="50" v-model="keyword" >
<el-select v-if="current == 'index'" v-model="findType" style="width: 75px; border-radius:20px !important;" slot="prepend" placeholder="请选择">
<el-option label="课程" value="1"></el-option>
<el-option label="案例" value="2"></el-option>
<el-option label="文章" value="3"></el-option>
<el-option label="问答" value="4"></el-option>
<!-- <el-option label="专区" value="5"></el-option> -->
</el-select>
</el-input>
<el-button v-show="!hideSearch" class="sear-but" @click="searchJump()" type="primary" size="mini">搜索</el-button>
</div>
<div class="person-action">
<!-- 消息 -->
<!-- <el-link v-if="current == 'qa'" class="person-action-index" type="primary" style="margin-right:10px; color:#333;" :href="`${webBaseUrl}${isTiao ? '/uc/study/task' : '/uc/study/courses'}`" :underline="false">个人中心</el-link>
<el-link v-else class="person-action-index" type="primary" style="margin-right:10px; color:#fff;" :href="`${webBaseUrl}${isTiao ? '/uc/study/task' : '/uc/study/courses'}`" :underline="false">个人中心</el-link> -->
<!-- <el-link type="primary" @click="logout()" icon="el-icon-switch-button" :underline="false">退出</el-link> -->
<div class="person-action-item">
<el-badge class="person-action-index" :value="userMsg" :hidden="userMsg == 0">
<el-tooltip content="消息" placement="bottom" effect="light" :visible-arrow="false" popper-class="text-tooltip">
<!-- <el-link type="primary" :href="`${webBaseUrl}/message/center/index`" :underline="false"> -->
<router-link to="/message/center/index">
<svg-icon :style="{color:textColor}" style="margin-right: 0;font-size:22px;" icon-class="messfff"></svg-icon>
</router-link>
<!-- </el-link> -->
</el-tooltip>
</el-badge>
</div>
<div class="person-action-item">
<el-dropdown class="person-action-index">
<span class="el-dropdown-link">
<span :style="{color:textColor}">学员</span>
<i :style="{color:textColor}" class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item><router-link to="/index">学员</router-link></el-dropdown-item>
<el-dropdown-item v-if="identity == 2 || identity == 5" @click.native="setCurIdentity(2)"><router-link to="/need/waitaudit">教师</router-link></el-dropdown-item>
<el-dropdown-item v-if="identity == 3 || identity == 5" ><a :href="managerPath+'/learningpath'">管理员</a></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="person-action-item">
<el-dropdown>
<div class="el-dropdown-link" style="display:flex" :style="{color:textColor}">
<div class="person-action-index">
<div v-if="userInfo.avatar !== '' " class="user-avatar">
<img :src="userInfo.avatar" style="width: 35px;height: 35px;"/>
</div>
<div v-else class="uavatar">
<div v-if="sex === 1 "><img src="../../public/images/Avatarman.png" alt="" style="width: 30px;height: 30px;"></div>
<div v-else><img src="../../public/images/Avatarwoman.png" alt="" style="width: 30px;height: 30px;"></div>
</div>
</div>
<div style="font-weight: 400;font-size: 16px; margin-top: 8px;">{{userInfo.name}}</div>
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="setCurIdentity(1)"><a :href="`${webBaseUrl}${isTiao ? '/uc/study/task' : '/uc/study/courses'}`">个人中心</a></el-dropdown-item>
<el-dropdown-item><router-link :to="'/home/'+userInfo.aid">个人主页</router-link></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="person-action-item">
<div class="person-action-index pointer" :style="{color:textColor}" @click="logout()">
<svg-icon style="margin-right: 4px;font-size:16px;" icon-class="white-out"></svg-icon>登出
</div>
</div>
</div>
</div>
</div>
<popup></popup><yearMedal></yearMedal>
</div>
</template>
<script>
import { mapGetters, mapActions } from 'vuex';
import apiMessage from '@/api/system/message.js';
import popup from '@/components/AlertPopup.vue';
import yearMedal from '@/components/Popup/China2023.vue';
import apiBoeCourse from '@/api/boe/course.js';
import {userAvatarText} from "@/utils/tools.js";
export default {
props: {
current: {
type: String,
default: '',
},
hideSearch:{
type: Boolean,
default: false,
},
textColor:{
type: String,
default: '',
},
goSearch:{
type: Number,
default: 0,
},
keywords:{
type:String,
default:''
}
},
components:{popup,yearMedal},
computed: {
...mapGetters(['userInfo','curIdentity', 'userMsg','identity','studyTaskCount']),
avatarText(){
return userAvatarText(this.userInfo.name);
},
activeNav(){
return {
'top-nav-active-blue': this.textColor=='#000000',
'top-nav-active-white': this.textColor=='#fff' || this.textColor=='#ffffff',
}
}
},
watch:{
keywords(newval){
console.log(newval,9999);
if(this.findType == '1'){
this.keyword = newval
}
}
},
data() {
return {
popupConfig:{},
ctx:process.env.VUE_APP_PUBLIC_PATH,
managerPath:process.env.VUE_APP_MANAGER_PATH,
fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
findType: '1',
keyword: '',
isTiao: false,
sex:'',
};
},
mounted() {
this.sex = this.userInfo.sex;
this.$store.dispatch('refrashMsg');
this.loadBoeData();
//this.loadPopupConfig();
},
methods: {
setCurIdentity(iden){
this.$store.dispatch('SetCurIdentity',iden);
},
tomy(){
console.log('lll')
},
loadBoeData() {
if(this.studyTaskCount>0){
this.isTiao = true;
}else{
this.isTiao = false;
}
// let params = {
// // keyword:this.keyword,
// page: 1,
// size: 10
// // cmtask_status:this.cmtask_status,
// // cmtask_name:this.cmtask_name,
// };
// apiBoeCourse.cmtaskList(params).then(res => {
// if (res.status == 200 && res.result.count > 0) {
// this.isTiao = true;
// } else {
// this.isTiao = false;
// }
// });
},
handleCommand(val) {
if (val === "four") {
this.$emit('showClass',true)
} else {
let urlPre = window.location.protocol + "//" + window.location.host;
// process.env.VUE_APP_BOE_WEB_URL
let obj = {
one: urlPre + "/web/teacherLesson",
two: urlPre + "/grow180/login",
three: this.webBaseUrl + "/study/index?study=1",
// four: 'https://m.qingxuetang.com/x/?appId=qxtcorp306130',
five: urlPre + "/boe/new-employee/index.html",
six: urlPre + "/web/contributor/index",
seven: this.webBaseUrl + '/grateful/index'
};
window.open(obj[val]);
}
},
handleUcCommand(val) {
if (val == 'uc') {
window.location.href = `${this.webBaseUrl}${this.isTiao ? '/uc/study/task' : '/uc/study/courses'}`;
} else if (val == 'logout') {
this.logout();
}
},
searchJump() {
if(this.current == 'index') {
if (this.findType == '1') {
if(this.keyword==''){return;}
// 课程
location.href=`${this.webBaseUrl}/course?keyword=${this.keyword}`;
//window.open(`${this.webBaseUrl}/course?keyword=${this.keyword}`);
} else if (this.findType == '2') {
if(this.keyword==''){return;}
// 案例
location.href=`${this.webBaseUrl}/case?keyword=${this.keyword}`;
//window.open(`${this.webBaseUrl}/case?keyword=${this.keyword}`);
} else if (this.findType == '3') {
if(this.keyword==''){return;}
//文章
location.href=`${this.webBaseUrl}/article?keyword=${this.keyword}`;
//window.open(`${this.webBaseUrl}/article?keyword=${this.keyword}`);
} else if (this.findType == '4') {
if(this.keyword==''){return;}
// 问答
location.href=`${this.webBaseUrl}/qa?keyword=${this.keyword}`;
//window.open(`${this.webBaseUrl}/qa?keyword=${this.keyword}`);
} else if (this.findType == '5') {
// 专区,专区要单独的写,因为不是一个系统呀
window.open(`${this.webBaseUrl}/zone?keyword=${this.keyword}`);
}
} else {
this.$emit('emitInput',this.keyword)
if(this.goSearch == 1) {
if(this.keyword==''){return;}
// 课程
location.href=`${this.webBaseUrl}/course?keyword=${this.keyword}`;
} else if (this.goSearch == 2) {
if(this.keyword==''){return;}
// 案例
// location.href=`${this.webBaseUrl}/case?keyword=${this.keyword}`;
this.$router.push(`/case?keyword=${this.keyword}`)
//window.open(`${this.webBaseUrl}/case?keyword=${this.keyword}`);
} else if (this.goSearch == 3) {
if(this.keyword==''){return;}
//文章
location.href=`${this.webBaseUrl}/article?keyword=${this.keyword}`;
//window.open(`${this.webBaseUrl}/article?keyword=${this.keyword}`);
} else if (this.goSearch == 4) {
if(this.keyword==''){return;}
// 问答
location.href=`${this.webBaseUrl}/qa?keyword=${this.keyword}`;
//window.open(`${this.webBaseUrl}/qa?keyword=${this.keyword}`);
} else if (this.goSearch == 5) {
// 专区,专区要单独的写,因为不是一个系统呀
window.open(`${this.webBaseUrl}/zone?keyword=${this.keyword}`);
}
}
},
logout() {
this.$confirm('您确定要退出系统吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
//location.href = this.webBaseUrl + '/login';
sessionStorage.setItem('dialog_session_show'+this.userInfo.aid,null); // 清除兴趣采集的"关闭"缓存
location.href = process.env.VUE_APP_LOGIN_URL;
});
})
.catch(() => {});
},
//获取未读消息数量
getMsgNum() {
apiMessage.isRead().then(res => {
if (res.status == 200) {
this.msgNum = res.result;
}
});
}
}
};
</script>
<style scoped rel="stylesheet/scss" lang="scss">
::v-deep .el-dropdown-menu__item:not(.is-disabled):hover{
background-color: #fff !important;
color: #0059FF !important;
}
::v-deep.el-dropdown-menu {
text-align: center;
border: none !important;
}
//定义消息的图标的样式按ui未完成
.msg-icon{
font-size:16px;
background-color:#fff;
border-radius:50%;
}
.top-nav-active-blue{
color: #387DF7;
a{color:#387DF7;}
div{
width: 75%;
height: 4px;
top: 75%;
left: 13%;
background: #387DF7;
border-radius: 5px;
position: absolute;
}
}
.top-nav-active-white{
color: #fff;
a{color:#fff;}
div{
width: 75%;
height: 4px;
top: 75%;
left: 13%;
background: #fff;
border-radius: 5px;
position: absolute;
}
}
.sear-but{
position: absolute;
bottom: 10%;
right: 5px;
}
::v-deep .el-input__inner{
border-radius: 6px;
border-right: none;
}
::v-deep .el-badge__content.is-fixed {
right: 10px;
}
.portal-header {
// margin: 0 87px;
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;
.portal-top-logo{
}
.portal-top-nav{
display: flex;
justify-content: space-around;
margin-left: 20px;
}
}
.portal-top-right{
flex:1;
display: flex;
justify-content: flex-end;
align-items: center;
}
//width: 1050px;
.person-action{
display: flex;
justify-content: flex-end;
align-items: center;
margin-left: 10px;
.person-action-index{
//margin-left: 40px;
font-size: 16px;
font-weight: 400;
}
// ::v-deep .message-count{
// //margin-right: 20px;
// i{
// font-size: 26px;
// color:#409EFF;
// }
// // ::v-deep .el-badge__content.is-fixed {
// // right: 48px;
// // }
// }
::v-deep.el-avatar{
margin-right: 8px;
img{
width: 100% !important;
}
}
.el-button{
margin-left: 15px;
margin-top: 1px;
// font-size: 14px;
}
}
}
.person-action-item{
margin-left: 30px;
}
.top-nav {
font-size: 16px;
// text-align: center;
font-weight: 400;
color: #000000;
line-height: 72px;
padding: 0px 10px;
white-space:nowrap;
position: relative;
}
//此处理应该移到单独的一个样式中比较好
@media screen and (max-width: 1366px){
.top-nav {
padding: 0px 10px;
}
.person-action-item{
margin-left: 20px;
}
}
@media screen and (max-width: 1680px) and (min-width:1367px){
.top-nav {
padding: 0px 15px;
}
.person-action-item{
margin-left: 30px;
}
}
@media screen and (max-width: 1920px) and (min-width: 1681px){
.top-nav {
padding: 0px 30px;
}
.person-action-item{
margin-left: 40px;
}
}
@media screen and (min-width: 1921px){
.top-nav {
padding: 0px 40px;
}
.person-action-item{
margin-left: 45px;
}
}
::v-deep .el-badge {
.el-badge__content {
top: 0px;
}
}
::v-deep .el-input-group__append {
// padding: 0px 5px;
// color: #fff;
// background: #588afc;
// border: 1px solid #333333;
border-radius: 0 20px 20px 0;
border-left: none;
background: rgba(255,255,255,0.12);
}
.message-count a {
color: #858d99;
font-size: 24px;
margin-top: 0px !important;
}
::v-deep .el-badge {
margin-top: 0 !important;
}
::v-deep .el-link.el-link--primary:hover {
color: #588afc;
}
.el-dropdown-link {
cursor: pointer;
color: #000000;
}
.uavatar{
div{
border-radius: 50%;
img{
border-radius: 50%;
width: 30px;
height: 30px;
}
}
width: 30px;
height: 30px;
line-height: 30px;
font-size: 14px;
margin-right: 8px;
border-radius: 50%;
}
.user-avatar{
display: inline-block;
border-radius: 50%;
img{
border-radius: 50%;
width: 30px;
height: 30px;
}
width: 30px;
height: 30px;
line-height: 30px;
font-size: 14px;
margin-right: 8px;
border-radius: 50%;
}
</style>