Files
AI-interview-web/src/layout/Layout.vue
2025-09-08 17:31:33 +08:00

137 lines
3.6 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>
<!-- 整体后台布局容器 -->
<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>