基于 Vue 3 + TypeScript + Element Plus 的用户权限管理系统,实现了完整的 RBAC(基于角色的访问控制)权限模型。系统提供用户管理、角色管理、资源管理等核心功能,支持细粒度的权限控制。
- 项目地址: watermelon-vue
- 系统截图: 查看系统截图
- 项目地址: watermelon
- 问题反馈: 提交 Issue
- 用户管理:创建、编辑、删除用户,修改用户密码
- 角色管理:定义用户角色,配置角色权限
- 资源管理:管理系统资源,支持 Excel 导入导出
- 资源关联管理:配置资源之间的关联关系
- JWT Token 认证,自动刷新机制
- 路由级权限控制
- 按钮级权限控制(通过自定义指令)
- 403/404 错误页面
- 响应式设计
- Element Plus 组件库,界面美观
- 路由懒加载
- Vue 3 - 渐进式 JavaScript 框架
- TypeScript - 类型安全的 JavaScript 超集
- Vite - 快速的前端构建工具
- Element Plus - Vue 3 组件库
- @element-plus/icons-vue - Element Plus 图标
- Pinia - Vue 3 官方推荐的状态管理库
- Vue Router 4 - Vue 3 官方路由管理器
- ESLint - 代码质量检查
- Prettier - 代码格式化
- Vue DevTools - Vue 开发者工具
src/
├── api/ # API 接口
│ ├── admin/ # 管理员相关接口
│ │ ├── resource.ts # 资源管理
│ │ ├── resourceRelation.ts # 资源关联
│ │ ├── role.ts # 角色管理
│ │ └── user.ts # 用户管理
│ └── auth.ts # 认证接口
├── components/ # 公共组件
│ ├── admin/ # 管理后台组件
│ ├── common/ # 通用组件
│ └── icons/ # 图标组件
├── composables/ # 组合式函数
│ ├── useApi.ts # API 调用封装
│ ├── useHttp.ts # HTTP 请求封装
│ └── usePassword.ts # 密码处理
├── constants/ # 常量定义
│ ├── localStorageKey.ts # 本地存储键名
│ └── permissionCode.ts # 权限代码定义
├── directives/ # 自定义指令
│ ├── index.ts # 指令注册
│ └── permission.ts # 权限控制指令
├── layouts/ # 布局组件
│ └── AdminLayout.vue # 管理后台布局
├── router/ # 路由配置
│ └── index.ts # 路由定义和权限守卫
├── services/ # 业务服务
│ └── auth.ts # 认证服务
├── stores/ # 状态管理
│ ├── userInfo.ts # 用户信息状态
│ └── userToken.ts # 用户Token状态
├── types/ # TypeScript 类型定义
├── views/ # 页面组件
│ ├── admin/ # 管理后台页面
│ ├── 403.vue # 权限不足页面
│ ├── 404.vue # 页面不存在
│ └── LoginView.vue # 登录页面
└── main.ts # 应用入口
- Node.js >= 20.19.0 或 >= 22.12.0
- pnpm(推荐)或 npm
pnpm installpnpm dev应用将在 http://localhost:3000 启动
pnpm build开发服务器默认运行在端口 3000,并配置了 API 代理:
// vite.config.ts
server: {
port: 3000,
host: '0.0.0.0',
proxy: {
'/api': {
target: 'http://127.0.0.1:8080',
changeOrigin: true,
secure: false,
},
},
}在项目根目录创建 .env.local 文件配置环境变量:
# API 基础地址
VITE_API_BASE_URL=http://127.0.0.1:8080
# 其他配置...本系统采用 RBAC(基于角色的访问控制)模型:
- 用户(User):系统的操作主体
- 角色(Role):权限的集合
- 资源(Resource):可访问的系统资源(页面、按钮等)
- 权限(Permission):对资源的操作权限
- 页面权限:控制用户可以访问哪些页面
- 按钮权限:控制用户可以看到和操作哪些按钮
在路由配置中通过 meta.permission 字段配置页面权限:
{
path: 'users',
name: 'admin-users',
component: UserManagement,
meta: { permission: PAGE_PERMISSIONS.ADMIN_USER_PAGE },
}使用 v-permission 指令控制按钮显示:
<el-button v-permission="BUTTON_PERMISSIONS.ADMIN_USER_ADD_BUTTON">
添加用户
</el-button>- 使用 TypeScript 进行类型检查
- 遵循 ESLint 配置的代码规范
- 使用 Prettier 进行代码格式化
- 使用 Vue 3 Composition API
- 优先使用
<script setup>语法 - 合理使用 TypeScript 类型定义
- 使用 Pinia 进行状态管理
- 按功能模块划分 Store
- 避免在组件中直接操作状态
本项目采用 MIT 许可证,详情请查看 LICENSE 文件。
如有问题或建议,请通过以下方式联系:
- 问题反馈: 提交 Issue




