# vue3test **Repository Path**: Tomcheung/vue3test ## Basic Information - **Project Name**: vue3test - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-13 - **Last Updated**: 2026-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 企业级 Web 后台管理系统
![Vue](https://img.shields.io/badge/Vue-3.5.32-4FC08D?logo=vue.js) ![Vite](https://img.shields.io/badge/Vite-8.0.8-646CFF?logo=vite) ![TypeScript](https://img.shields.io/badge/TypeScript-6.0.0-3178C6?logo=typescript) ![Pinia](https://img.shields.io/badge/Pinia-3.0.4-yellow?logo=pinia) ![License](https://img.shields.io/badge/License-MIT-green) **基于 Vue 3 + Vite + TypeScript 的企业级后台管理系统解决方案** [快速开始](#-快速开始) • [技术栈](#-技术栈) • [项目结构](#-项目结构) • [开发指南](#-开发指南) • [部署说明](#-部署说明)
--- ## 📋 目录 - [项目简介](#-项目简介) - [功能特性](#-功能特性) - [技术栈](#-技术栈) - [快速开始](#-快速开始) - [项目结构](#-项目结构) - [开发指南](#-开发指南) - [环境准备](#环境准备) - [安装依赖](#安装依赖) - [开发模式](#开发模式) - [生产构建](#生产构建) - [核心功能模块](#-核心功能模块) - [认证与权限](#认证与权限) - [布局系统](#布局系统) - [用户管理](#用户管理) - [角色权限](#角色权限) - [菜单管理](#菜单管理) - [仪表盘](#仪表盘) - [系统日志](#系统日志) - [通用组件库](#-通用组件库) - [Hooks 工具集](#-hooks-工具集) - [代码规范](#-代码规范) - [测试](#-测试) - [部署说明](#-部署说明) - [常见问题](#-常见问题) - [贡献指南](#-贡献指南) - [更新日志](#-更新日志) - [许可证](#-许可证) --- ## 🎯 项目简介 这是一个基于 **Vue 3 + Vite + TypeScript** 技术栈构建的企业级后台管理系统模板。项目采用现代化的前端技术栈,提供了完整的后台管理系统解决方案,包括: - ✅ 完善的认证与权限控制系统 - ✅ 灵活的动态路由与菜单管理 - ✅ 响应式布局设计,支持多端适配 - ✅ 丰富的通用业务组件 - ✅ 标准化的 CRUD 开发模式 - ✅ 完整的 TypeScript 类型支持 - ✅ 规范的代码风格与工程化配置 本项目适合作为企业内部管理系统、数据管理平台、运营后台等场景的基础框架,帮助开发者快速搭建高质量的管理系统。 --- ## ✨ 功能特性 ### 核心功能 - 🔐 **认证授权** - 用户登录/登出 - Token 自动刷新 - 记住我功能 - 验证码支持 - 🛡️ **权限控制** - 基于角色的访问控制 (RBAC) - 动态路由加载 - 按钮级别权限控制 - 菜单权限过滤 - 🎨 **主题系统** - 亮色/暗色主题切换 - 自定义主题色 - 多种布局模式 - 主题配置持久化 - 🌍 **国际化** - 中英文双语支持 - 动态语言切换 - 语言偏好持久化 - 📊 **数据可视化** - ECharts 图表集成 - 数据统计卡片 - 实时数据更新 - 📝 **表单处理** - 高级搜索表单 - 表单验证 - 文件上传 - 富文本编辑器 - 📋 **表格功能** - 分页/排序/筛选 - 列配置 - 批量操作 - Excel 导出 - 🔔 **消息通知** - 系统通知 - 消息中心 - 实时推送(可扩展) ### 工程化特性 - ⚡️ **快速开发** - Vite 极速启动 - HMR 热更新 - TypeScript 智能提示 - 🧪 **测试覆盖** - Vitest 单元测试 - Playwright E2E 测试 - 测试覆盖率报告 - 📦 **构建优化** - 代码分割 - 按需加载 - Gzip 压缩 - CDN 支持 - 🔍 **代码质量** - ESLint 代码检查 - Prettier 代码格式化 - Husky Git 钩子 - Commit 规范 - 📊 **监控埋点** - 错误捕获与上报 - 用户行为追踪 - 性能监控 --- ## 🛠️ 技术栈 ### 核心框架 | 技术 | 版本 | 说明 | |------|------|------| | [Vue 3](https://vuejs.org/) | 3.5.32 | 渐进式 JavaScript 框架 | | [Vite](https://vitejs.dev/) | 8.0.8 | 下一代前端构建工具 | | [TypeScript](https://www.typescriptlang.org/) | 6.0.0 | JavaScript 的超集 | | [Vue Router](https://router.vuejs.org/) | 5.0.4 | Vue.js 官方路由管理器 | | [Pinia](https://pinia.vuejs.org/) | 3.0.4 | Vue 状态管理库 | ### UI 组件库(待选型) > 以下方案二选一: **方案 A: Element Plus** - [Element Plus](https://element-plus.org/) - 基于 Vue 3 的组件库 - 优点:生态成熟、文档完善、社区活跃 **方案 B: Ant Design Vue** - [Ant Design Vue](https://antdv.com/) - Ant Design 的 Vue 实现 - 优点:设计规范、组件丰富、企业级体验 ### HTTP 客户端 - [Axios](https://axios-http.com/) - 基于 Promise 的 HTTP 客户端 ### 样式方案 - SCSS - CSS 预处理器 - CSS Modules - 模块化 CSS - PostCSS - CSS 后处理器 ### 工具库 - [Day.js](https://day.js.org/) - 轻量级日期处理库 - [Lodash-es](https://lodash.com/) - JavaScript 实用工具库 - [ECharts](https://echarts.apache.org/) - 数据可视化图表库 ### 代码质量 - [ESLint](https://eslint.org/) - 代码检查工具 - [Prettier](https://prettier.io/) - 代码格式化工具 - [Oxlint](https://oxc.rs/) - 高性能 linter - [Husky](https://typicode.github.io/husky/) - Git hooks 工具 - [lint-staged](https://github.com/okonet/lint-staged) - 暂存文件 lint 工具 ### 测试框架 - [Vitest](https://vitest.dev/) - 下一代单元测试框架 - [Playwright](https://playwright.dev/) - 端到端测试框架 - [@vue/test-utils](https://test-utils.vuejs.org/) - Vue 组件测试工具 ### 其他 - [vue-i18n](https://vue-i18n.intlify.dev/) - 国际化插件 - [vite-plugin-vue-devtools](https://devtools.vuejs.org/) - Vue DevTools 插件 --- ## 🚀 快速开始 ### 环境准备 确保你的开发环境满足以下要求: - **Node.js**: `^20.19.0` 或 `>=22.12.0` - **npm**: `>=10.0.0` 或使用 `pnpm` / `yarn` - **Git**: 最新版本 检查 Node.js 版本: ```bash node -v npm -v ``` ### 安装依赖 ```bash # 克隆项目 git clone cd vue_vite_test # 安装依赖 npm install # 或使用 pnpm pnpm install # 或使用 yarn yarn install ``` ### 开发模式 ```bash # 启动开发服务器 npm run dev # 访问 http://localhost:5173 ``` 开发服务器启动后,你可以在浏览器中访问 `http://localhost:5173` 查看应用。 ### 生产构建 ```bash # 类型检查 npm run type-check # 构建生产版本 npm run build # 预览生产构建 npm run preview ``` 构建产物将输出到 `dist/` 目录。 ### 其他命令 ```bash # 运行单元测试 npm run test:unit # 运行 E2E 测试 npm run test:e2e # 代码检查与修复 npm run lint # 代码格式化 npm run format ``` --- ## 📁 项目结构 ``` vue_vite_test/ ├── public/ # 静态资源目录 │ └── favicon.ico ├── src/ │ ├── api/ # API 接口管理 │ │ ├── index.ts # API 统一导出 │ │ └── modules/ # 模块化 API │ │ ├── auth.ts # 认证相关接口 │ │ ├── user.ts # 用户管理接口 │ │ ├── role.ts # 角色管理接口 │ │ └── menu.ts # 菜单管理接口 │ ├── assets/ # 静态资源 │ │ ├── images/ # 图片资源 │ │ ├── styles/ # 全局样式 │ │ │ ├── variables.scss # SCSS 变量 │ │ │ ├── mixins.scss # SCSS 混入 │ │ │ ├── reset.css # 样式重置 │ │ │ └── themes/ # 主题文件 │ │ │ ├── light.scss │ │ │ └── dark.scss │ │ └── icons/ # SVG 图标 │ ├── components/ # 公共组件 │ │ ├── SvgIcon/ # SVG 图标组件 │ │ ├── SearchForm/ # 搜索表单组件 │ │ ├── ProTable/ # 高级表格组件 │ │ ├── UploadFile/ # 文件上传组件 │ │ ├── IconPicker/ # 图标选择器 │ │ └── ... # 其他通用组件 │ ├── composables/ # 组合式函数 │ │ └── useXxx.ts # 自定义 hooks │ ├── directives/ # 自定义指令 │ │ └── permission.ts # 权限指令 │ ├── hooks/ # 业务 Hooks │ │ ├── useTable.ts # 表格逻辑封装 │ │ ├── useForm.ts # 表单逻辑封装 │ │ ├── useAuth.ts # 权限判断 │ │ ├── useTheme.ts # 主题切换 │ │ └── ... │ ├── layout/ # 布局组件 │ │ ├── index.vue # 布局容器 │ │ └── components/ │ │ ├── Sidebar.vue # 侧边栏 │ │ ├── Navbar.vue # 顶部导航 │ │ ├── TagsView.vue # 标签页 │ │ ├── AppMain.vue # 主内容区 │ │ └── Breadcrumb.vue # 面包屑 │ ├── locales/ # 国际化配置 │ │ ├── index.ts # i18n 配置 │ │ ├── zh-CN.ts # 中文语言包 │ │ └── en-US.ts # 英文语言包 │ ├── router/ # 路由配置 │ │ ├── index.ts # 路由实例 │ │ ├── guards.ts # 路由守卫 │ │ └── routes/ │ │ ├── constant.ts # 常量路由 │ │ └── dynamic.ts # 动态路由 │ ├── stores/ # Pinia 状态管理 │ │ ├── auth.ts # 认证状态 │ │ ├── user.ts # 用户信息 │ │ ├── permission.ts # 权限状态 │ │ ├── menu.ts # 菜单状态 │ │ ├── theme.ts # 主题状态 │ │ └── tagsView.ts # 标签页状态 │ ├── utils/ # 工具函数 │ │ ├── request.ts # Axios 封装 │ │ ├── interceptors.ts # 请求拦截器 │ │ ├── format.ts # 格式化工具 │ │ ├── storage.ts # 存储工具 │ │ ├── validate.ts # 验证工具 │ │ ├── common.ts # 通用工具 │ │ ├── permission.ts # 权限工具 │ │ ├── monitor.ts # 错误监控 │ │ └── tracker.ts # 行为埋点 │ ├── views/ # 页面视图 │ │ ├── LoginView.vue # 登录页面 │ │ ├── Dashboard/ # 仪表盘 │ │ │ ├── index.vue │ │ │ └── components/ │ │ ├── User/ # 用户管理 │ │ │ ├── index.vue │ │ │ └── components/ │ │ ├── Role/ # 角色管理 │ │ │ ├── index.vue │ │ │ └── components/ │ │ ├── Menu/ # 菜单管理 │ │ │ ├── index.vue │ │ │ └── components/ │ │ ├── Log/ # 系统日志 │ │ │ ├── LoginLog.vue │ │ │ └── OperationLog.vue │ │ ├── ProfileView.vue # 个人中心 │ │ └── ErrorPage/ # 错误页面 │ │ ├── 403.vue │ │ └── 404.vue │ ├── App.vue # 根组件 │ └── main.ts # 入口文件 ├── tests/ # 测试文件 │ ├── unit/ # 单元测试 │ └── e2e/ # E2E 测试 ├── .env.development # 开发环境变量 ├── .env.production # 生产环境变量 ├── .env.staging # 测试环境变量(可选) ├── .eslintrc.cjs # ESLint 配置 ├── .prettierrc # Prettier 配置 ├── tsconfig.json # TypeScript 配置 ├── vite.config.ts # Vite 配置 ├── package.json # 项目依赖 ├── README.md # 项目说明 └── CHANGELOG.md # 更新日志 ``` --- ## 📖 开发指南 ### 环境准备 #### 1. 安装 Node.js 推荐通过 [nvm](https://github.com/nvm-sh/nvm) 管理 Node.js 版本: ```bash # 安装 nvm # macOS/Linux curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # Windows # 下载 nvm-windows: https://github.com/coreybutler/nvm-windows/releases # 安装指定版本 nvm install 20 nvm use 20 ``` #### 2. 配置镜像源(可选) 如果网络较慢,可以配置 npm 镜像源: ```bash # 使用淘宝镜像 npm config set registry https://registry.npmmirror.com # 或使用 pnpm pnpm config set registry https://registry.npmmirror.com ``` ### 安装依赖 ```bash # 使用 npm npm install # 使用 pnpm(推荐) pnpm install # 使用 yarn yarn install ``` ### 开发模式 ```bash # 启动开发服务器 npm run dev ``` 开发服务器特性: - ⚡️ 极速冷启动(< 1s) - 🔥 即时热更新(HMR) - 📦 按需编译 - 🗺️ Source Map 支持 ### 环境变量 项目支持多环境配置,通过 `.env` 文件管理: **.env.development** ```env VITE_APP_TITLE=后台管理系统 VITE_APP_BASE_API=/api VITE_APP_PORT=5173 ``` **.env.production** ```env VITE_APP_TITLE=后台管理系统 VITE_APP_BASE_API=/prod-api VITE_APP_BASE_URL=https://api.example.com ``` 在代码中使用: ```typescript // 访问环境变量 const title = import.meta.env.VITE_APP_TITLE const apiUrl = import.meta.env.VITE_APP_BASE_API ``` ### API 代理配置 开发环境下配置 API 代理,解决跨域问题: **vite.config.ts** ```typescript export default defineConfig({ server: { proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } }) ``` ### 生产构建 ```bash # 构建生产版本 npm run build # 预览构建结果 npm run preview ``` 构建优化: - 📦 代码分割(Code Splitting) - 🗜️ Tree Shaking - 🖼️ 图片压缩 - 📝 CSS 压缩 - 🔢 文件名哈希 --- ## 🎯 核心功能模块 ### 认证与权限 #### 登录流程 ```typescript // 1. 用户输入账号密码 // 2. 调用登录接口 const { token } = await authApi.login({ username, password }) // 3. 存储 token useAuthStore().setToken(token) // 4. 获取用户信息 const userInfo = await userApi.getInfo() useUserStore().setUserInfo(userInfo) // 5. 生成动态路由 const routes = await generateRoutes(userInfo.roles) router.addRoute(routes) // 6. 跳转到首页 router.push('/') ``` #### Token 管理 - **Access Token**: 短期有效,用于接口认证 - **Refresh Token**: 长期有效,用于刷新 Access Token - **自动刷新**: Access Token 过期前自动刷新 - **无感刷新**: 刷新期间请求队列等待 #### 权限控制 **路由级别权限** ```typescript // 路由配置中添加 meta 信息 { path: '/user', component: () => import('@/views/User/index.vue'), meta: { title: '用户管理', roles: ['admin', 'editor'] // 允许访问的角色 } } ``` **按钮级别权限** ```vue ``` --- ### 布局系统 #### 布局结构 ``` ┌─────────────────────────────────────┐ │ Navbar (顶部导航) │ ├──────────┬──────────────────────────┤ │ │ │ │ Sidebar │ TagsView (标签页) │ │ (侧边栏) ├──────────────────────────┤ │ │ │ │ │ AppMain (主内容区) │ │ │ │ │ │ │ └──────────┴──────────────────────────┘ ``` #### 布局模式 支持多种布局模式: - **左侧菜单模式**(默认) - **顶部菜单模式** - **混合菜单模式** #### 响应式设计 - 🖥️ Desktop: ≥ 1024px - 📱 Tablet: 768px - 1023px - 📱 Mobile: < 768px --- ### 用户管理 #### 功能清单 - ✅ 用户列表展示(分页、排序、筛选) - ✅ 用户搜索(用户名、手机号、邮箱) - ✅ 新增用户 - ✅ 编辑用户信息 - ✅ 删除用户(单条/批量) - ✅ 用户详情查看 - ✅ 启用/禁用用户 - ✅ 重置密码 - ✅ 分配角色 - ✅ 导出 Excel #### 标准 CRUD 示例 ```vue ``` --- ### 角色权限 #### RBAC 模型 ``` 用户 (User) ←→ 角色 (Role) ←→ 权限 (Permission) ``` - **用户**: 系统使用者 - **角色**: 权限集合(如:管理员、编辑、访客) - **权限**: 具体操作权限(如:用户管理、文章发布) #### 权限粒度 - **菜单权限**: 控制菜单显示/隐藏 - **页面权限**: 控制页面访问 - **按钮权限**: 控制按钮显示/隐藏 - **数据权限**: 控制数据范围(本部门、全部等) --- ### 菜单管理 #### 菜单类型 - **目录**: 一级菜单,不可点击 - **菜单**: 可点击的菜单项 - **按钮**: 页面内的操作按钮 #### 菜单配置 ```typescript interface MenuItem { id: number parentId: number name: string path: string component?: string icon?: string type: 'directory' | 'menu' | 'button' permission?: string sort: number visible: boolean children?: MenuItem[] } ``` --- ### 仪表盘 #### 数据展示 - 📊 统计卡片(总用户数、订单数、销售额等) - 📈 趋势图表(折线图、柱状图) - 🥧 占比分析(饼图、环形图) - 📋 最近活动列表 #### 实时更新 支持 WebSocket 或定时轮询实现数据实时更新。 --- ### 系统日志 #### 日志类型 - **登录日志**: 记录用户登录行为 - **操作日志**: 记录用户操作行为 - **异常日志**: 记录系统异常 #### 日志字段 ```typescript interface OperationLog { id: number userId: number username: string module: string // 模块名称 action: string // 操作类型 method: string // 请求方法 url: string // 请求地址 params: string // 请求参数 result: string // 返回结果 ip: string // IP 地址 location: string // 地理位置 browser: string // 浏览器 os: string // 操作系统 status: number // 状态码 errorMsg?: string // 错误信息 createTime: string // 创建时间 } ``` --- ## 🧩 通用组件库 ### 组件清单 | 组件名 | 说明 | 示例 | |--------|------|------| | SvgIcon | SVG 图标组件 | `` | | SearchForm | 搜索表单 | 自动生成搜索表单 | | ProTable | 高级表格 | 内置分页、排序、筛选 | | UploadFile | 文件上传 | 支持图片、文件上传 | | IconPicker | 图标选择器 | 可视化选择图标 | | TreeSelect | 树形选择器 | 树形数据选择 | | RichTextEditor | 富文本编辑器 | 富文本内容编辑 | | ImagePreview | 图片预览 | 点击图片放大预览 | ### 使用示例 #### SvgIcon ```vue ``` #### SearchForm ```vue ``` #### ProTable ```vue ``` --- ## 🪝 Hooks 工具集 ### 可用 Hooks | Hook | 说明 | 用途 | |------|------|------| | useTable | 表格逻辑封装 | 简化表格开发 | | useForm | 表单逻辑封装 | 简化表单开发 | | useDialog | 对话框管理 | 统一管理对话框状态 | | useAuth | 权限判断 | 检查用户权限 | | useTheme | 主题切换 | 切换亮色/暗色主题 | | useFullscreen | 全屏控制 | 元素全屏显示 | | useClipboard | 剪贴板操作 | 复制文本到剪贴板 | | useDownload | 文件下载 | 下载文件 | ### 使用示例 #### useTable ```typescript import { useTable } from '@/hooks/useTable' import { userApi } from '@/api/modules/user' const { tableData, loading, pagination, searchParams, handleSearch, handleReset, refresh } = useTable({ api: userApi.getList, defaultParams: { pageNum: 1, pageSize: 10 }, onSuccess: (data) => { console.log('数据加载成功', data) }, onError: (error) => { console.error('数据加载失败', error) } }) ``` #### useAuth ```typescript import { useAuth } from '@/hooks/useAuth' const { hasPermission, hasRole, isAdmin } = useAuth() // 检查是否有某个权限 if (hasPermission('user:add')) { // 显示新增按钮 } // 检查是否有某个角色 if (hasRole('admin')) { // 显示管理员专属功能 } // 检查是否是管理员 if (isAdmin()) { // 管理员操作 } ``` --- ## 📏 代码规范 ### ESLint 配置 项目使用 ESLint 进行代码质量检查: ```bash # 检查代码 npm run lint # 自动修复 npm run lint:fix ``` ### Prettier 配置 代码格式化配置: **.prettierrc** ```json { "semi": false, "singleQuote": true, "tabWidth": 2, "trailingComma": "none", "printWidth": 100 } ``` ```bash # 格式化代码 npm run format ``` ### Git Commit 规范 遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范: ```bash # 提交格式 (): # 示例 feat(user): 添加用户管理功能 fix(auth): 修复登录 token 刷新问题 docs(readme): 更新项目文档 style(ui): 调整按钮样式 refactor(api): 重构 API 模块 test(user): 添加用户管理单元测试 chore(deps): 升级依赖包版本 ``` **Type 类型:** - `feat`: 新功能 - `fix`: 修复 bug - `docs`: 文档变更 - `style`: 代码格式(不影响功能) - `refactor`: 重构 - `test`: 测试相关 - `chore`: 构建过程或辅助工具变动 - `perf`: 性能优化 - `ci`: CI/CD 配置变更 ### TypeScript 规范 - 严格模式:启用 `strict: true` - 禁止使用 `any` 类型 - 所有函数必须标注返回值类型 - 接口命名以 `I` 开头(可选) - 类型定义放在 `types/` 目录 --- ## 🧪 测试 ### 单元测试 使用 Vitest 进行单元测试: ```bash # 运行所有测试 npm run test:unit # 运行指定文件的测试 npm run test:unit -- src/utils/format.test.ts # 监听模式 npm run test:unit -- --watch # 生成覆盖率报告 npm run test:unit -- --coverage ``` **测试文件示例:** ```typescript // src/utils/format.test.ts import { describe, it, expect } from 'vitest' import { formatDate } from './format' describe('formatDate', () => { it('应该正确格式化日期', () => { const date = new Date('2024-01-01') expect(formatDate(date)).toBe('2024-01-01') }) it('应该支持自定义格式', () => { const date = new Date('2024-01-01') expect(formatDate(date, 'YYYY/MM/DD')).toBe('2024/01/01') }) }) ``` ### E2E 测试 使用 Playwright 进行端到端测试: ```bash # 运行 E2E 测试 npm run test:e2e # 以 UI 模式运行 npm run test:e2e -- --ui # 指定浏览器 npm run test:e2e -- --project=chromium ``` **测试文件示例:** ```typescript // e2e/vue.spec.ts import { test, expect } from '@playwright/test' test('用户应该能够登录', async ({ page }) => { await page.goto('/login') // 填写登录表单 await page.fill('input[name="username"]', 'admin') await page.fill('input[name="password"]', '123456') // 点击登录按钮 await page.click('button[type="submit"]') // 等待跳转 await page.waitForURL('/') // 验证是否登录成功 await expect(page).toHaveURL('/') }) ``` --- ## 📦 部署说明 ### 构建生产版本 ```bash # 构建 npm run build # 产物位于 dist/ 目录 ``` ### Nginx 配置 **nginx.conf** ```nginx server { listen 80; server_name your-domain.com; root /usr/share/nginx/html; index index.html; # gzip 压缩 gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml; # 前端路由 history 模式 location / { try_files $uri $uri/ /index.html; } # API 代理 location /api/ { proxy_pass http://backend-server:3000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 静态资源缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } } ``` ### Docker 部署 **Dockerfile** ```dockerfile # 构建阶段 FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # 生产阶段 FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` **docker-compose.yml** ```yaml version: '3.8' services: web: build: . ports: - "80:80" restart: always networks: - app-network networks: app-network: driver: bridge ``` ```bash # 构建并运行 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down ``` ### 环境变量配置 根据不同环境创建对应的 `.env` 文件: **.env.production** ```env VITE_APP_TITLE=后台管理系统 VITE_APP_BASE_API=/api VITE_APP_BASE_URL=https://api.example.com ``` --- ## ❓ 常见问题 ### Q1: 如何修改端口号? **A:** 在 `vite.config.ts` 中配置: ```typescript export default defineConfig({ server: { port: 3000, open: true } }) ``` 或在 `.env.development` 中设置: ```env VITE_APP_PORT=3000 ``` ### Q2: 如何解决跨域问题? **A:** 开发环境使用代理,生产环境配置 Nginx 反向代理。 ### Q3: 如何添加新页面? **A:** 1. 在 `src/views/` 创建页面组件 2. 在 `src/router/routes/constant.ts` 添加路由配置 3. 在菜单管理中配置菜单项 ### Q4: 如何自定义主题色? **A:** 修改 `src/assets/styles/variables.scss` 中的变量值。 ### Q5: 如何添加新的 API 接口? **A:** 1. 在 `src/api/modules/` 创建对应的 API 文件 2. 使用 `request` 工具发送请求 3. 在组件中调用 API ### Q6: 如何实现权限控制? **A:** 1. 在路由配置中添加 `meta.roles` 2. 使用 `v-permission` 指令控制按钮权限 3. 使用 `useAuth` Hook 进行权限判断 ### Q7: 如何优化首屏加载速度? **A:** 1. 路由懒加载 2. 组件异步加载 3. 开启 Gzip 压缩 4. 使用 CDN 加载第三方库 5. 图片懒加载和压缩 ### Q8: 如何进行国际化? **A:** 1. 在 `src/locales/` 添加语言包 2. 使用 `$t()` 函数翻译文本 3. 通过 `useI18n()` 切换语言 --- ## 🤝 贡献指南 欢迎贡献代码!请遵循以下步骤: 1. **Fork** 本仓库 2. **创建分支**: `git checkout -b feature/your-feature` 3. **提交更改**: `git commit -m 'feat: add some feature'` 4. **推送分支**: `git push origin feature/your-feature` 5. **提交 Pull Request** ### 开发规范 - 遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范 - 编写清晰的注释 - 添加必要的测试用例 - 确保代码通过 ESLint 检查 - 更新相关文档 --- ## 📝 更新日志 详见 [CHANGELOG.md](./CHANGELOG.md) --- ## 📄 许可证 本项目采用 [MIT](./LICENSE) 许可证。 --- ## 👥 联系方式 - 📧 Email: your-email@example.com - 💬 Issues: [GitHub Issues](https://github.com/your-repo/issues) - 📖 文档: [在线文档](https://your-docs-site.com) --- ## 🙏 致谢 感谢以下开源项目: - [Vue.js](https://vuejs.org/) - [Vite](https://vitejs.dev/) - [TypeScript](https://www.typescriptlang.org/) - [Pinia](https://pinia.vuejs.org/) - [Element Plus](https://element-plus.org/) - [ECharts](https://echarts.apache.org/) ---
**Made with ❤️ by Your Team** [⬆ 回到顶部](#企业级-web-后台管理系统)