# vue3-admin **Repository Path**: lixuanye/vue3-admin ## Basic Information - **Project Name**: vue3-admin - **Description**: vue3+vite+typescript+vuex+vue_router+elementPlus 前端学习搭建后台管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-23 - **Last Updated**: 2026-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 后台管理页面制作学习过程: # 工程基础配置: vue3+ts+vite 课程地址:https://www.bilibili.com/video/BV1SP4y187r2 一.新建工程 npm init vite@latest --使用vite构建 npm inti vue@latest --使用vue构建 二.安装vue-router 1.npm install vue-router@4 2.src新建目录router,新建index.ts ~~~typescript import { createRouter,createWebHistory,RouteRecordRaw } from 'vue-router' import Layout from '../components/HelloWorld.vue' //路由列表 const routes:Array = [ { path:'/', name:'home', component:Layout } ] //创建路由 const router = createRouter({ history:createWebHistory(), routes }) //暴露属性 export default router ~~~ 3.在main.ts中使用路由 ~~~typescript import { createApp } from 'vue' import './style.css' import App from './App.vue' //新增路由 import router from './router' //新增.use(router) createApp(App).use(router).mount('#app') ~~~ 三.安装vuex “全局模式保存变量等” 1.安装 ```typescript npm install vuex@next --save ``` 2.src下新建目录store,新建index.ts ~~~typescript // store.ts import { InjectionKey } from 'vue' import { createStore, useStore as baseUseStore, Store } from 'vuex' export interface State { count: number } export const key: InjectionKey> = Symbol() export const store = createStore({ state: { count: 0 } }) // 定义自己的 `useStore` 组合式函数 export function useStore () { return baseUseStore(key) } ~~~ 3.main.ts使用vuex ~~~typescript import { createApp } from 'vue' import './style.css' import App from './App.vue' // 新增路由 import router from './router' // 新增vuex import { store,key } from './store' // 新增.use(router) createApp(App).use(router).use(store,key).mount('#app') ~~~ 4.题外话:tsconfig.json 里配置 ~~~typescript // ts排除文件node_modules "exclude": ["node_modules"] ~~~ 四.安装ESlint 代码检查工具 ~~~typescript npm install -save-dev eslint eslint-plugin-vue ~~~ 五.安装sass ~~~ty npm install -D sass sass-loader ~~~ # 准备阶段: ## 1.安装ElementPlus ~~~typescript npm i element-plus --save ~~~ ## 2.引入-按需引入,先安装两款插件 ~~~typescript npm install -D unplugin-vue-components unplugin-auto-import ~~~ vite.config.ts 导入配置 ~~~typescript // vite.config.ts import { defineConfig } from 'vite' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' export default defineConfig({ // ... plugins: [ // ... AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ], }) ~~~ # 布局阶段: ## 前提:.vue文件基础模板: ~~~html ~~~ ## 1.开始布局后台管理系统界面 src创建Layout目录,创建index.vue文件 ~~~html ~~~ 记得项目入口index.html设置00 ~~~css ~~~ ## 2.Layout目录入口 继续创建menu,header,main,footer 组件文件夹,分离制作侧边栏菜单: ### 2.1 menu制作 ~~~typescript // AsideMenuBar.vue 侧边管理菜单栏父组件 ~~~ 考虑到获取的菜单内容也是从后端传入,单独将菜单内容也组件分离 父组件引入 新建MenuItem.vue,子组件使用 ~~~typescript definProps('menuList') ~~~ ~~~typescript // 静态模板,之后需要修改成动态获取 ~~~ 修改成动态获取菜单: ~~~html ~~~ 菜单logo页面制作 ~~~html ~~~ 然后在菜单主入口引入logo ~~~html ~~~ 菜单收缩展开功能制作 新建一个vue编写动态图标: ~~~html // 模板和css部分 ~~~ status 默认值为false我们此处选择使用vuex设置为全局模式,在store/index.ts中操作 ~~~tsx // 官方模板 // store.ts import { InjectionKey } from 'vue' import { createStore, useStore as baseUseStore, Store } from 'vuex' export interface myState { collapse: boolean } export const key: InjectionKey> = Symbol() export const store = createStore({ state: { collapse:false }, mutations:{ setCollapse:(state:myState,collapse:boolean)=>{ state.collapse = collapse; } }, getters:{ getCount(state:myState){ return state.count; }, getCollapse:(state:myState)=>{ return state.collapse; } } }) // 定义自己的 useStore 组合式函数,外部使用时直接import { useStore } from '../store' export function useStore () { return baseUseStore(key) } ~~~ vuex解析: ~~~typescript //定义一个接口 collapse设置属性为boolean export interface myState { collapse: boolean } ~~~ ~~~typescript //默认写法不能少,是自己的接口名 export const key: InjectionKey> = Symbol() ~~~ ~~~typescript // 创建方法 设置state为 false export const store = createStore({ state: { collapse:false }, // 提交事务方法,修改状态的核心代码,更新当前状态 mutations:{ setCollapse:(state:myState,collapse:boolean)=>{ state.collapse = collapse; } }, // 使用get方法获取当前变量最新状态 getters:{ getCollapse:(state:myState)=>{ return state.collapse; } } }) ~~~ 公共部分完成后继续 图标的ts编写 ~~~typescript ~~~ 最后修改菜单主入口js函数代码 ~~~typescript