Files
AI-interview-web/src/layout/Layout.vue

137 lines
3.6 KiB
Vue
Raw Normal View History

2025-09-08 17:31:33 +08:00
<template>
<!-- 整体后台布局容器 -->
<el-container class="layout-container">
<!-- 侧边栏 -->
<el-aside width="220px" class="sidebar">
<!-- Logo区域 -->
<div class="logo-container">
<el-icon class="logo-icon"><ChatDotSquare /></el-icon>
<span class="logo-title">AI面试官</span>
</div>
<!--
el-scrollbar: Element Plus的滚动条组件
通过CSS设置其高度为100%它会自动在内容溢出时显示滚动条
否则滚动条不显示解决了您提出的问题
-->
<el-scrollbar style="height: calc(100% - 60px);">
<el-menu
:default-active="$route.path"
background-color="#0a192f"
text-color="#8892b0"
active-text-color="#64ffda"
:router="true"
>
<el-menu-item index="/">
<el-icon><House /></el-icon>
<span>仪表盘</span>
</el-menu-item>
<el-menu-item index="/interview">
<el-icon><ChatLineRound /></el-icon>
<span>模拟面试</span>
</el-menu-item>
<el-menu-item index="/question-bank">
<el-icon><MessageBox /></el-icon>
<span>题库管理</span>
</el-menu-item>
<el-menu-item index="/history">
<el-icon><Finished /></el-icon>
<span>会话历史</span>
</el-menu-item>
<el-menu-item index="/answer-record">
<el-icon><List /></el-icon>
<span>答题记录</span>
</el-menu-item>
</el-menu>
</el-scrollbar>
</el-aside>
<!-- 右侧主内容区 -->
<el-container>
<el-header class="header">
<div class="header-title">欢迎使用AI模拟面试平台</div>
</el-header>
<el-main class="main-content">
<router-view v-slot="{ Component }">
<transition name="fade-transform" mode="out-in">
<component :is="Component" />
</transition>
</router-view>
</el-main>
</el-container>
</el-container>
</template>
<script setup>
import {House, ChatLineRound, MessageBox, ChatDotSquare, Finished, List} from '@element-plus/icons-vue';
</script>
<style scoped>
.layout-container {
height: 100vh;
}
/* 更新后的侧边栏样式 */
.sidebar {
background-color: #0a192f; /* 更深、更现代的科技蓝 */
transition: width 0.28s;
}
.logo-container {
display: flex;
align-items: center;
justify-content: center;
height: 60px;
background-color: #0a192f;
color: #ccd6f6;
font-size: 1.3em;
font-weight: 600;
}
.logo-icon {
margin-right: 12px;
color: #64ffda; /* 高亮颜色 */
}
.el-menu {
border-right: none;
}
/* 菜单项激活时的样式 */
.el-menu-item.is-active {
background-color: #112240 !important; /* 深色背景 */
border-left: 3px solid #64ffda; /* 左侧高亮条 */
}
.el-menu-item:hover {
background-color: #112240; /* 悬浮背景色 */
}
.header {
display: flex;
align-items: center;
background-color: #fff;
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
padding: 0 20px;
}
.header-title {
font-size: 1.1em;
color: #303133;
}
.main-content {
padding: 20px;
background-color: #f0f2f5;
}
.fade-transform-enter-active,
.fade-transform-leave-active {
transition: all 0.5s;
}
.fade-transform-enter-from,
.fade-transform-leave-to {
opacity: 0;
transform: translateX(-30px);
}
</style>