06. Vue3搭建后台管理系统
本节课做完后你可以达到这样效果

搭建后台基本框架

配置导航菜单
点击 menu 里面的某一项 跳转页面怎么做?

高亮显示当前展示的路由
可以通过 router.currentRoute.value.path 获取当前展示的路由
:default-active="router.currentRoute.value.path"
图片取色器
https://www.jyshare.com/front-end/6214/#65ae8f
#e6ecf7
主体区域
配置一个 card 卡片样式

.card {
background-color: white;
padding: 10px;
border-radius: 5px;
box-shadow: 0 0 8px rgba(0, 0, 0, .12);
}
配置标题和 Logo
头像 url:
https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png
本节课源码 Manager.vue
<template>
<div>
<!-- 头部开始 -->
<div style="height: 60px; background-color: #3c7fff; display: flex; align-items: center">
<div style="width: 200px; display: flex; align-items: center; padding-left: 15px">
<img style="width: 40px" src="@/assets/logo.png" alt="">
<span style="font-size: 22px; color: white; margin-left: 5px">后台管理系统</span>
</div>
<div style="flex: 1"></div>
<div style="width: fit-content; display: flex; align-items: center; padding-right: 10px">
<img src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png" alt="" style="width: 40px; height: 40px">
<span style="color: white; margin-left: 5px">青哥哥</span>
</div>
</div>
<!-- 头部结束 -->
<!-- 下面部分开始 -->
<div style="display: flex">
<!-- 左侧导航菜单开始 -->
<div style="width: 200px; border-right: 1px solid #ddd; min-height: calc(100vh - 60px)">
<el-menu router :default-active="router.currentRoute.value.path" :default-openeds="['1']" style="border: 0">
<el-menu-item index="/manager/home">
<el-icon><House /></el-icon>
系统首页
</el-menu-item>
<el-menu-item index="/manager/data">
<el-icon><DataAnalysis /></el-icon>
数据统计
</el-menu-item>
<el-sub-menu index="1">
<template #title>
<el-icon><User /></el-icon>
<span>用户管理</span>
</template>
<el-menu-item>管理员信息</el-menu-item>
<el-menu-item>普通用户信息</el-menu-item>
</el-sub-menu>
<el-menu-item index="/manager/home">
<el-icon><UserFilled /></el-icon>
个人信息
</el-menu-item>
<el-menu-item index="/manager/home">
<el-icon><SwitchButton /></el-icon>
退出登录
</el-menu-item>
</el-menu>
</div>
<!-- 左侧导航菜单结束 -->
<!-- 右侧主体区域开始 -->
<div style="flex: 1; width: 0; background-color: #f5f7ff; padding: 10px">
<RouterView />
</div>
<!-- 右侧主体区域结束 -->
</div>
<!-- 下面部分结束 -->
</div>
</template>
<script setup>
import router from "@/router/index.js";
</script>
<style>
.el-menu .is-active {
background-color: #e6ecf7 !important;
}
</style>
Data.vue
<template>
<div>
<div class="card" style="margin-bottom: 5px">
<el-input style="width: 240px; margin-right: 10px" v-model="data.name" placeholder="请输入名称查询" prefix-icon="Search"></el-input>
<el-button type="primary">查 询</el-button>
<el-button type="warning">重 置</el-button>
</div>
<div class="card" style="margin-bottom: 5px">
<el-button type="primary">新 增</el-button>
<el-button type="warning">批量删除</el-button>
<el-button type="info">导入</el-button>
<el-button type="success">导出</el-button>
</div>
<div class="card" style="margin-bottom: 5px">
<el-table :data="data.tableData" stripe>
<el-table-column label="日期" prop="date" />
<el-table-column label="名称" prop="name" />
<el-table-column label="地址" prop="address" />
</el-table>
<div style="margin-top: 15px">
<el-pagination
v-model:current-page="data.pageNum"
v-model:page-size="data.pageSize"
:page-sizes="[5, 10, 15, 20]"
background
layout="total, sizes, prev, pager, next, jumper"
:total="data.total"
/>
</div>
</div>
</div>
</template>
<script setup>
import { reactive } from "vue";
import { Search } from "@element-plus/icons-vue"
const data = reactive({
name: null,
tableData: [
{ id: 1, date: '2024-10-11', name: '亲哥哥哥', address: '安徽合肥' },
{ id: 2, date: '2024-10-12', name: '小鲁班', address: '上海浦东' },
{ id: 3, date: '2024-10-13', name: '小妲己', address: '北京大兴' },
],
pageNum: 1,
pageSize: 10,
total: 47
})
</script>
<style scoped>
</style>