You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
house/fount/components/index/IndexHeader.vue

172 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<!-- 顶部导航栏组件 -->
<!-- <el-header> // 注释掉的默认顶部导航栏结构
<el-menu background-color="#00c292" text-color="#FFFFFF" active-text-color="#FFFFFF" mode="horizontal">
<div class="fl title">{{this.$project.projectName}}</div> // 显示项目名称
<div class="fr logout" style="display:flex;">
<el-menu-item index="3">
<div>{{this.$storage.get('role')}} {{this.$storage.get('adminName')}}</div> // 显示用户角色和用户名
</el-menu-item>
<el-menu-item @click="onLogout" index="2">
<div>退出登录</div> // 退出登录按钮
</el-menu-item>
</div>
</el-menu>
</el-header> -->
<!-- 自定义顶部导航栏 -->
<div class="navbar" :style="{backgroundColor:heads.headBgColor,height:heads.headHeight,boxShadow:heads.headBoxShadow,lineHeight:heads.headHeight}">
<!-- 左侧标题菜单 -->
<div class="title-menu" :style="{justifyContent:heads.headTitleStyle=='1'?'flex-start':'center'}">
<!-- 如果启用了头部图片则显示图片 -->
<el-image v-if="heads.headTitleImg" class="title-img" :style="{width:heads.headTitleImgWidth,height:heads.headTitleImgHeight,boxShadow:heads.headTitleImgBoxShadow,borderRadius:heads.headTitleImgBorderRadius}" :src="heads.headTitleImgUrl" fit="cover"></el-image>
<!-- 显示项目名称 -->
<div class="title-name" :style="{color:heads.headFontColor,fontSize:heads.headFontSize}">{{this.$project.projectName}}</div>
</div>
<!-- 右侧菜单 -->
<div class="right-menu">
<!-- 用户信息 -->
<div class="user-info" :style="{color:heads.headUserInfoFontColor,fontSize:heads.headUserInfoFontSize}">{{this.$storage.get('role')}} {{this.$storage.get('adminName')}}</div>
<!-- 退出到前台按钮 -->
<div class="logout" :style="{color:heads.headLogoutFontColor,fontSize:heads.headLogoutFontSize}" @click="onIndexTap">退出到前台</div>
<!-- 退出登录按钮 -->
<div class="logout" :style="{color:heads.headLogoutFontColor,fontSize:heads.headLogoutFontSize}" @click="onLogout">退</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false, // 对话框是否可见
ruleForm: {}, // 表单数据
user: {}, // 当前用户数据
heads: { // 头部样式配置
"headLogoutFontHoverColor": "rgba(41, 42, 42, 1)", // 退出按钮悬停时的文字颜色
"headFontSize": "20px", // 标题字体大小
"headUserInfoFontColor": "rgba(238, 221, 129, 1)", // 用户信息文字颜色
"headBoxShadow": "0 1px 6px #444", // 导航栏阴影
"headTitleImgHeight": "44px", // 标题图片高度
"headLogoutFontHoverBgColor": "rgba(247, 142, 142, 1)", // 退出按钮悬停时的背景颜色
"headFontColor": "rgba(153, 239, 237, 1)", // 标题文字颜色
"headTitleImg": false, // 是否启用标题图片
"headHeight": "60px", // 导航栏高度
"headTitleImgBorderRadius": "22px", // 标题图片圆角
"headTitleImgUrl": "http://codegen.caihongy.cn/20201021/cc7d45d9c8164b58b18351764eba9be1.jpg", // 标题图片地址
"headBgColor": "#4F4949", // 导航栏背景颜色
"headTitleImgBoxShadow": "0 1px 6px #444", // 标题图片阴影
"headLogoutFontColor": "rgba(153, 239, 237, 1)", // 退出按钮文字颜色
"headUserInfoFontSize": "16px", // 用户信息字体大小
"headTitleImgWidth": "44px", // 标题图片宽度
"headTitleStyle": "2", // 标题对齐方式1左对齐2居中
"headLogoutFontSize": "16px" // 退出按钮字体大小
}
};
},
created() {
this.setHeaderStyle(); // 初始化头部样式
},
mounted() {
let sessionTable = this.$storage.get("sessionTable"); // 获取会话表名
this.$http({
url: sessionTable + '/session', // 请求会话信息
method: "get"
}).then(({ data }) => {
if (data && data.code === 0) { // 如果请求成功
this.user = data.data; // 设置当前用户数据
} else {
let message = this.$message;
message.error(data.msg); // 显示错误信息
}
});
},
methods: {
onLogout() {
let storage = this.$storage;
let router = this.$router;
storage.remove("Token"); // 移除 Token
router.replace({ name: "login" }); // 跳转到登录页面
},
onIndexTap() {
window.location.href = `${this.$base.indexUrl}`; // 跳转到前台首页
},
setHeaderStyle() {
this.$nextTick(() => { // 确保 DOM 已更新
document.querySelectorAll('.navbar .right-menu .logout').forEach(el => { // 遍历退出按钮
el.addEventListener("mouseenter", e => { // 鼠标移入事件
e.stopPropagation();
el.style.backgroundColor = this.heads.headLogoutFontHoverBgColor; // 设置背景颜色
el.style.color = this.heads.headLogoutFontHoverColor; // 设置文字颜色
});
el.addEventListener("mouseleave", e => { // 鼠标移出事件
e.stopPropagation();
el.style.backgroundColor = "transparent"; // 恢复背景颜色
el.style.color = this.heads.headLogoutFontColor; // 恢复文字颜色
});
});
});
}
}
};
</script>
<style lang="scss" scoped>
.navbar {
height: 60px; // 导航栏高度
line-height: 60px; // 行高
width: 100%; // 宽度占满父容器
padding: 0 34px; // 内边距
box-sizing: border-box; // 使用标准盒模型
background-color: #ff00ff; // 背景颜色
position: relative; // 相对定位
z-index: 111; // 层级
.right-menu {
position: absolute; // 绝对定位
right: 34px; // 距离右侧的距离
top: 0; // 距离顶部的距离
height: 100%; // 高度占满父容器
display: flex; // 使用弹性布局
justify-content: flex-end; // 子元素右对齐
align-items: center; // 垂直居中对齐
z-index: 111; // 层级
.user-info {
font-size: 16px; // 字体大小
color: red; // 文字颜色
padding: 0 12px; // 内边距
}
.logout {
font-size: 16px; // 字体大小
color: red; // 文字颜色
padding: 0 12px; // 内边距
cursor: pointer; // 鼠标悬停时显示为手型
}
}
.title-menu {
display: flex; // 使用弹性布局
justify-content: flex-start; // 子元素左对齐
align-items: center; // 垂直居中对齐
width: 100%; // 宽度占满父容器
height: 100%; // 高度占满父容器
.title-img {
width: 44px; // 图片宽度
height: 44px; // 图片高度
border-radius: 22px; // 圆角
box-shadow: 0 1px 6px #444; // 阴影
margin-right: 16px; // 右侧外边距
}
.title-name {
font-size: 24px; // 字体大小
color: #fff; // 文字颜色
font-weight: 700; // 字体加粗
}
}
}
</style>