vue-pure-admin?(opens new window)是一款開源完全免費且開箱即用的中后臺管理系統模版。完全采用?ECMAScript
?模塊(ESM
)規范來編寫和組織代碼,使用了最新的?Vue3
、Vite
、Element-Plus
、TypeScript
、Pinia
、Tailwindcss
?等主流技術開發
以下是vue-pure-admin的目錄結構:
├── .github # GitHub 配置文件
│ ├── ISSUE_TEMPLATE # 問題提交參考模板
│ ├── workflows git # 工作流
├── .husky # 代碼提交前校驗配置文件
├── .vscode # IDE 工具推薦配置文件
│ │ ├── extensions.json # 一鍵安裝平臺推薦的 vscode 插件
│ │ ├── settings.json # 設置擴展程序或 vscode 編輯器的一些屬性
│ │ ├── vue3.0.code-snippets # vue3.0 代碼片段
│ │ └── vue3.2.code-snippets # vue3.2 代碼片段
│ │ └── vue3.3.code-snippets # vue3.3 代碼片段
├── build # 構建工具
│ │ ├── cdn.ts # 打包時采用 cdn 模式
│ │ ├── compress.ts # 打包時啟用 gzip 壓縮或 brotli 壓縮
│ │ ├── info.ts # 輸出打包信息(大小、用時)
│ │ ├── optimize.ts # vite 依賴預構建配置項
│ │ ├── plugins.ts # vite 相關插件存放處
│ │ ├── utils.ts # 構建工具常用方法抽離
├── locales # 國際化文件存放處
│ │ ├── en.yaml # 英文配置
│ │ ├── zh-CN.yaml # 中文配置
├── mock # mock 模擬后臺數據
│ │ ├── asyncRoutes.ts # 模擬后臺返回動態路由
│ │ ├── ...
├── node_modules # 模塊依賴
├── public # 靜態資源
│ │ ├── audio # 音頻文件
│ │ ├── html # 靜態 iframe 頁面
│ │ ├── wasm # wasm 文件以及膠水代碼
│ │ ├── favicon.ico # favicon
│ │ ├── logo.svg # logo
│ │ ├── platform-config.json # 全局配置文件(打包后修改也可生效)
├── src
│ ├── api # 接口請求統一管理
│ ├── assets # 字體、圖片等靜態資源
│ ├── components # 自定義通用組件
│ │ ├── ReAnimateSelector # [animate.css](https://animate.style/) 選擇器組件
│ │ ├── ReAuth # 按鈕級別權限組件(根據路由meta中的auths字段進行判斷)
│ │ ├── ReBarcode # 條形碼組件
│ │ ├── ReCol # 封裝 element-plus 的 el-col 組件
│ │ ├── ReCountTo # 數字動畫組件
│ │ ├── ReCropper # 圖片裁剪組件
│ │ ├── ReCropperPreview # 圖片裁剪預覽組件
│ │ ├── ReDialog # 基于 element-plus 中 el-dialog 組件開發的函數式彈框
│ │ ├── ReFlicker # 圓點、方形閃爍動畫組件
│ │ ├── ReFlop # 時間翻牌組件
│ │ ├── ReFlowChart # LogicFlow 流程圖組件
│ │ ├── ReIcon # 圖標組件
│ │ ├── ReImageVerify # 圖形驗證碼組件
│ │ ├── ReMap # 高德地圖組件
│ │ ├── RePerms # 按鈕級別權限組件(根據登錄接口返回的permissions字段進行判斷)
│ │ ├── RePureTableBar # 配合 `@pureadmin/table` 實現快速便捷的表格操作 https://github.com/pure-admin/pure-admin-table */
│ │ ├── ReQrcode # 二維碼組件
│ │ ├── ReSeamlessScroll # 無縫滾動組件
│ │ ├── ReSegmented # 分段控制器組件
│ │ ├── ReSelector # 選擇器組件
│ │ ├── ReSplitPane # 切割面板組件
│ │ ├── ReText # 支持 Tooltip 提示的文本省略組件
│ │ ├── ReTreeLine # 樹形連接線組件(基于element-plus)
│ │ ├── ReTypeit # 打字機效果組件
│ │ ├── ReVxeTableBar # 配合 vxe-table 實現快速便捷的表格操作
│ ├── config # 獲取平臺動態全局配置
│ ├── directives # 自定義指令
│ │ ├── auth # 按鈕級別權限指令(根據路由meta中的auths字段進行判斷)
│ │ ├── copy # 文本復制指令(默認雙擊復制)
│ │ ├── longpress # 長按指令
│ │ ├── optimize # 防抖、節流指令
│ │ ├── perms # 按鈕級別權限指令(根據登錄接口返回的permissions字段進行判斷)
│ │ ├── ripple # 水波紋效果指令
│ ├── layout # 主要頁面布局
│ ├── plugins # 處理一些庫或插件,導出更方便的 api
│ ├── router # 路由配置
│ ├── store # pinia 狀態管理
│ ├── style # 全局樣式
│ │ ├── dark.scss # 暗黑模式樣式適配文件
│ │ ├── element-plus.scss # 全局覆蓋 element-plus 樣式文件
│ │ ├── reset.scss # 全局重置樣式文件
│ │ ├── sidebar.scss # layout 布局樣式文件
│ │ ├── tailwind.css # tailwindcss 自定義樣式配置文件
│ │ ├── ...
│ ├── utils # 全局工具方法
│ │ ├── http # 封裝 axios 文件
│ │ ├── localforage # 二次封裝 localforage (https://localforage.docschina.org/) 支持設置過期時間,提供完整的類型提示
│ │ ├── progress # 封裝 nprogress
│ │ └── auth.ts # 處理用戶信息和 token 相關
│ │ └── chinaArea.ts # 漢字轉區域碼
│ │ └── globalPolyfills.ts # 解決項目可能因為安裝某個依賴出現 `global is not defined` 報錯
│ │ └── message.ts # 消息提示函數
│ │ ├── mitt.ts # 觸發公共事件,類似 EventBus
│ │ ├── preventDefault.ts # 阻止鍵盤F12、瀏覽器默認右鍵菜單、頁面元素選中、圖片默認可拖動的方法
│ │ ├── print.ts # 打印函數
│ │ ├── propTypes.ts # 二次封裝 vue 的 propTypes
│ │ ├── responsive.ts # 全局響應式 storage 配置
│ │ ├── sso.ts # 前端單點登錄邏輯處理
│ │ ├── tree.ts # 樹結構相關處理函數
│ ├── views # 存放編寫業務代碼頁面
│ ├── App.vue # 入口頁面
│ ├── main.ts # 入口文件
├── types # 全局 TS 類型配置
│ │ ├── directives.d.ts # 全局自定義指令類型聲明
│ │ ├── global-components.d.ts # 自定義全局組件獲得 Volar 提示(自定義的全局組件需要在這里聲明下才能獲得 Volar 類型提示哦)
│ │ ├── global.d.ts # 全局類型聲明,無需引入直接在 `.vue` 、`.ts` 、`.tsx` 文件使用即可獲得類型提示
│ │ ├── index.d.ts # 此文件跟同級目錄的 global.d.ts 文件一樣也是全局類型聲明,只不過這里存放一些零散的全局類型,無需引入直接在 .vue 、.ts 、.tsx 文件使用即可獲得類型提示
│ │ ├── router.d.ts # 全局路由類型聲明
│ │ ├── shims-tsx.d.ts # 該文件是為了給 .tsx 文件提供類型支持,在編寫時能正確識別語法
│ │ └── shims-vue.d.ts # .vue、.scss 文件不是常規的文件類型,typescript 無法識別,所以我們需要通過下圖的代碼告訴 typescript 這些文件的類型,防止類型報錯
├── .browserslistrc # 配置目標瀏覽器的環境
├── .dockerignore # 排除不需要上傳到 docker 服務端的文件或目錄
├── .editorconfig # 編輯器讀取文件格式及樣式定義配置 https://editorconfig.org/
├── .env # 全局環境變量配置(當 .env 文件與 .env.development、.env.production、.env.staging 這三個文件之一存在相同的配置 key 時,.env 優先級更低)
├── .env.development # 開發環境變量配置
├── .env.production # 生產環境變量配置
├── .env.staging # 預發布環境變量配置
├── .gitattributes # 自定義指定文件屬性
├── .gitignore # git 提交忽略文件
├── .gitpod.yml # gitpod 部署配置
├── .lintstagedrc # lint-staged 配置
├── .markdownlint.json # markdown 格式檢查配置
├── .npmrc # npm 配置文件
├── .nvmrc # 用于指定在使用 Node Version Manager(NVM)時要使用的特定 Node.js 版本
├── .prettierignore # prettier 語法檢查忽略文件
├── .prettierrc.js # prettier 插件配置
├── .stylelintignore # stylelint 語法檢查忽略文件
├── CHANGELOG.en_US.md # 版本更新日志(英文版)
├── CHANGELOG.md # 版本更新日志(英文版)
├── CHANGELOG.zh_CN.md # 版本更新日志(中文版)
├── Dockerfile # 用來構建 docker 鏡像
├── LICENSE # 證書
├── README.en-US.md # README(英文版)
├── README.md # README
├── commitlint.config.js # git 提交前檢查配置
├── eslint.config.js # eslint 語法檢查配置
├── index.html # html 主入口
├── package.json # 依賴包管理以及命令配置
├── pnpm-lock.yaml # 依賴包版本鎖定文件
├── postcss.config.js # postcss 插件配置
├── stylelint.config.js # stylelint 配置
├── tailwind.config.ts # tailwindcss 配置
├── tsconfig.json # typescript 配置
└── vite.config.ts # vite 配置
該項目是一個基于 Vue 3 + Vite + Pinia + Element Plus 的中后臺管理系統,整體采用模塊化和響應式設計。下面詳細分析其運行機制,包括頁面引入和功能添加流程:
1. 項目啟動與主入口
主入口文件為?main.ts,主要流程如下:
- 創建 Vue 應用實例:createApp(App)
- 注冊自定義指令、全局組件(如圖標、權限按鈕等)
- 加載平臺配置:getPlatformConfig(app)
- 初始化 Pinia 狀態管理:setupStore(app)
- 注冊路由:app.use(router)
- 響應式本地存儲注入:
injectResponsiveStorage(app, config)
- 注冊動畫、Element Plus、表格等插件
- 掛載應用到 DOM:app.mount("#app")
2. 路由機制與頁面引入
路由相關核心文件:
- index.ts:路由實例創建、路由守衛、路由重置等
- utils.ts:動態路由、菜單生成、權限處理等
路由注冊流程
-
靜態路由:constantRoutes?定義基礎頁面(如登錄、404等)。
-
動態路由:通過接口獲取或本地緩存,調用?initRouter?方法動態注冊。
-
路由實例創建:createRouter,根據配置選擇 history/hash 模式。
-
頁面組件引入:利用 Vite 的?
import.meta.glob
?實現頁面自動按需加載,如:const modulesRoutes = import.meta.glob("/src/views/**/*.{vue,tsx}");
-
這樣只需在?views?下新建頁面文件,路由配置即可自動引入。
-
菜單渲染:菜單數據由路由結構生成,支持多級菜單、權限控制。
3. 狀態管理與響應式存儲
- 使用?Pinia?進行全局狀態管理,模塊化拆分(如 app、user、permission、multiTags 等)。
- 響應式本地存儲通過 responsive-storage 實現,配置項和部分狀態(如側邊欄、主題、標簽頁等)會持久化到 localStorage,頁面刷新后自動恢復。
4. 頁面布局與組件體系
- 主布局文件:src/layout/index.vue
- 主要區域:側邊欄(NavVertical/NavHorizontal/NavMix)、頂部導航(LayNavbar)、標簽頁(LayTag)、內容區(LayContent)、設置面板(LaySetting)等。
- 內容區通過?
<router-view>
?動態渲染頁面組件,并支持?keep-alive
?緩存和自定義過渡動畫。
5. 添加新頁面/功能流程
-
新建頁面組件
在?views?下新建頁面文件,如?src/views/demo/MyPage.vue
。 -
配置路由
在路由配置文件(如?src/router/modules/xxx.ts
?或動態路由接口)添加新頁面路由項,指定?path、component、meta?信息。 -
自動引入
頁面會被?import.meta.glob
?自動掃描,無需手動 import。 -
菜單顯示
配置?meta?信息(如?title
、icon
、roles
),菜單會自動渲染到側邊欄或頂部導航。 -
權限控制
通過?meta.roles?或 Pinia 權限模塊控制頁面訪問權限。 -
功能擴展
- 新功能建議以組件形式開發,放在?components?或對應業務模塊下。
- 狀態管理可在?modules?新建 Pinia store。
- 公共工具/方法可放在?utils。
6. 其他機制
- 主題與布局切換:通過響應式存儲和 Pinia 狀態,支持多種布局和主題風格切換。
- 標簽頁與多標簽緩存:標簽頁組件自動記錄訪問頁面,支持緩存和關閉操作。
- 權限與多角色支持:用戶登錄后根據角色動態生成可訪問菜單和路由。
相關核心文件索引
- 主入口:src/main.ts
- 路由注冊與動態路由:src/router/index.ts,?utils.ts
- 狀態管理:src/store/modules/app.ts 等
- 響應式存儲:src/utils/responsive.ts
- 布局與頁面容器:src/layout/index.vue
- 菜單與標簽頁:src/layout/components/lay-tag/index.vue,?NavVertical.vue