介绍
V3 Admin Vite 是一个免费开源的中后台管理系统基础解决方案,基于 Vue3、TypeScript、Element Plus、Pinia 和 Vite 等主流技术。另外还有:
目录结构
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 
 | ├─ .husky
 ├─ .vscode
 ├─ public
 │  ├─ favicon.ico
 │  ├─ app-loading.css
 ├─ src
 │  ├─ api
 │  ├─ assets
 │  ├─ components
 │  ├─ config
 │  ├─ constant
 │  ├─ directives
 │  ├─ hooks
 │  ├─ icons
 │  ├─ layout
 │  ├─ plugins
 │  ├─ router
 │  ├─ store
 │  ├─ styles
 │  ├─ utils
 │  └─ views
 │  ├─ App.vue
 │  └─ main.ts
 ├─ tests
 ├─ types
 ├─ .env.development
 ├─ .env.production
 ├─ .env.staging
 ├─ .eslintrc.js
 ├─ .prettier.config.js
 ├─ tsconfig.json
 ├─ unocss.config.ts
 └─ vite.config.ts
 
 | 
路由配置
路由的定义以及配置在 @/src/router/index.ts 文件里,比如登录路由配置:
| 12
 3
 4
 5
 6
 7
 
 | {path: "/login",
 component: () => import("@/views/login/index.vue"),
 meta: {
 hidden: true
 }
 }
 
 | 
平台自定义的配置项都在 meta 属性下,而其他的比如 path、component、redirect、children、name 属性是 vue-router 自带的。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 
 | redirect: 'noRedirect'
 
 
 
 name: 'router-name'
 
 meta: {
 
 title: 'title'
 
 
 svgIcon: 'svg name'
 
 
 elIcon: 'element-plus icon name'
 
 
 hidden: true
 
 
 roles: ['admin', 'editor']
 
 
 breadcrumb: false
 
 
 affix: true
 
 
 
 
 
 alwaysShow: true
 
 
 
 
 activeMenu: '/dashboard'
 
 
 
 
 keepAlive: false
 }
 
 | 
为了让编辑器对这些配置项有类型提示,TS 定义文件放在了 @/types/vue-router.d.ts 中,需要改造或者新增配置项时,也应该同步修改这个文件。
路由缓存
设置路由缓存必须同时满足这四个条件:
- 路由 keepAlive为true。
- 路由有 Name。
- 页面有 Name。
- 路由和页面 Name 保持一致。
以表格组件路由为例:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | {path: "/table",
 component: Layout,
 redirect: "/table/element-plus",
 name: "Table",
 meta: {
 title: "表格",
 elIcon: "Grid"
 },
 children: [{
 path: "element-plus",
 component: () => import("@/views/table/element-plus/index.vue"),
 name: "ElementPlus",
 meta: {
 title: "Element Plus",
 keepAlive: true
 }
 },
 {
 path: "vxe-table",
 component: () => import("@/views/table/vxe-table/index.vue"),
 name: "VxeTable",
 meta: {
 title: "Vxe Table",
 keepAlive: true
 }
 }
 ]
 }
 
 | 
两个路由的 Name 分别是 ElementPlus 和 VxeTable,我们还需要去对应的页面上配置相同的 Name:


配置好 Name 后,页面上输入一些筛选条件,然后切换到其他页面再切换回来发现这些数据还在就表示缓存成功了:

动态路由
- 把不需要判断权限的路由放置在常驻路由 constantRoutes中,如/login、/dashboard。
- asyncRoutes中放置需要动态判断权限并通过- addRoute动态添加的路由。
- 注意:动态路由必须配置 name属性,不然重置路由时,会漏掉没有该属性的动态路由,可能会导致业务 BUG。
布局配置
- 布局的内容大致是:

页面的右侧默认有一个设置按钮,点击设置按钮后展开的布局配置界面,所有内置的可配置的选项:

在 @/src/config/layout.ts 布局配置文件里将 showSettings 配置项的布尔值修改为 false 即可关闭设置按钮。
- 每个选项可以通过界面去配置,也可以直接修改他们对应的配置项,这些配置项也是在 @/src/config/layout.ts中的,配置项和界面的对应关系如下:

设置标签图标
- 以首页为例,假如不设置图标,则 - svgIcon或- elIcon属性为空:
 | 12
 3
 4
 
 | meta: {title: "首页",
 affix: true
 }
 
 |  
 
 
 
- 假如想使用 - Element Plus的 Icon,那你应该去 官网 找一个符合要求的图标并复制它的名字。例如这个名为- House的 Icon,我们直接用- elIcon配置项使用它:
 | 12
 3
 4
 5
 
 | meta: {title: "首页",
 elIcon: "House",
 affix: true
 }
 
 |  
 
 
 
- 假如想使用本地的 - SVG图标,应该将静态资源复制到- @/src/icons/svg目录下,例如这个名为- dashboard的图标:
 

| 12
 3
 4
 5
 
 | meta: {title: "首页",
 svgIcon: "dashboard",
 affix: true
 }
 
 | 

全局样式
全局样式相关的的文件,全都在 @/src/styles 目录下:

- vxe-table.scss:这里可以写样式来覆盖 vxe-table 原本的样式。
- element-plus.scss:这里可以写样式来覆盖 element-plus 原本的样式。
- transition.scss: 这里可以写动画相关的样式。
- mixins.scss:这里可以写和 scss mixin相关的样式。
- variables.css:这里是本项目内置的一些比较重要的和布局、颜色相关的全局样式。
- index.scss:这里是所有样式的入口,也可以写样式来覆盖原生 html 的样式。
- theme:这里是多主题模式相关的样式文件,目前内置了黑暗模式、深蓝色模式。
简单修改一下 variables.css 的效果:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 
 | 
 :root {
 
 --v3-body-bg-color: #f2f3f5;
 
 --v3-header-height: calc(var(--v3-navigationbar-height) + var(--v3-tagsview-height));
 
 --v3-navigationbar-height: 50px;
 
 --v3-sidebar-width: 220px;
 --v3-sidebar-hide-width: 58px;
 --v3-sidebar-menu-item-height: 60px;
 --v3-sidebar-menu-tip-line-bg-color: var(--el-color-primary);
 --v3-sidebar-menu-bg-color: #001428;
 --v3-sidebar-menu-hover-bg-color: #ffffff10;
 --v3-sidebar-menu-text-color: #c0c4cc;
 --v3-sidebar-menu-active-text-color: #ffffff;
 
 --v3-sidebarlogo-bg-color: #001428;
 
 --v3-tagsview-height: 34px;
 --v3-tagsview-tag-text-color: #495060;
 --v3-tagsview-tag-active-text-color: #ffffff;
 --v3-tagsview-tag-bg-color: #ffffff;
 --v3-tagsview-tag-active-bg-color: var(--el-color-primary);
 --v3-tagsview-tag-border-radius: 2px;
 --v3-tagsview-tag-border-color: #d8dce5;
 --v3-tagsview-tag-active-border-color: var(--el-color-primary);
 --v3-tagsview-tag-active-before-color: #ffffff;
 --v3-tagsview-tag-icon-hover-bg-color: #00000030;
 --v3-tagsview-tag-icon-hover-color: #ffffff;
 
 --v3-rightpanel-button-bg-color: #001428;
 }
 
 | 
将上面的全局背景色灰白色 --v3-body-bg-color: #f2f3f5 改成黑色 #000000 后效果如下:

- 如果想知道某个样式是什么作用,可以直接看注释和命名,因为项目还是非常规范的。
- 也可以直接复制变量名在编辑器里搜索,就能查看到该变量在什么地方用到了。
参考资料
- 【V3 Admin Vite】教程四:平台配置(涉及布局、路由菜单、全局样式配置)