# Geeker-Admin
**Repository Path**: sachwei/Geeker-Admin
## Basic Information
- **Project Name**: Geeker-Admin
- **Description**: ✨✨✨ Geeker Admin,基于 Vue3.4、TypeScript、Vite5、Pinia、Element-Plus 开源的一套后台管理框架。
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://admin.spicyboy.cn
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1492
- **Created**: 2024-01-20
- **Last Updated**: 2025-12-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Geeker-Admin
## 📚 项目介绍
Geeker-Admin 是一款基于 **Vue 3.4**、**TypeScript**、**Vite 5**、**Pinia**、**Element Plus** 开发的企业级后台管理框架。采用最新的前端技术栈,为您提供高效的开发体验和强大的功能支持。
### ✨ 核心亮点
- 🚀 **最新技术栈**: Vue 3.4 + TypeScript + Vite 5 + Pinia + Element Plus
- 🛠️ **强大的 ProTable**: 基于 Element Plus 二次封装,支持配置化表格开发
- 🔐 **完善的权限系统**: 支持动态路由、按钮级别权限控制
- 🌍 **国际化支持**: 基于 vue-i18n,支持多语言切换
- 🎨 **主题系统**: 支持多主题、暗黑模式、布局切换
- 📱 **组件丰富**: 可复用组件、自定义指令、Hooks 封装
- 📝 **代码规范**: 集成 ESLint + Prettier + Stylelint + Husky
- 📊 **ECharts 集成**: 内置多种图表类型,支持数据可视化
### React 版本 🔥
- 有需要请加底部微信了解、购买
- Link:https://pro.spicyboy.cn
### 在线预览 👀
- Link:https://admin.spicyboy.cn
### 代码仓库 ⭐
- Gitee:https://gitee.com/HalseySpicy/Geeker-Admin
- GitHub:https://github.com/HalseySpicy/Geeker-Admin
### 项目文档 📚
- 项目更新日志:[CHANGELOG.md](./CHANGELOG.md)
- 项目文档地址:https://docs.spicyboy.cn
### 🏧 技本架构
#### 核心技本栈
| 技术 | 版本 | 描述 |
| ------------ | ---- | ----------------------------------- |
| Vue.js | 3.4+ | 渐进式 JavaScript 框架 |
| TypeScript | 5.3+ | JavaScript 的超集,提供静态类型检查 |
| Vite | 5.0+ | 新一代前端构建工具 |
| Pinia | 2.1+ | Vue.js 的直观状态管理库 |
| Element Plus | 2.5+ | Vue 3 组件库 |
| Vue Router | 4.2+ | Vue.js 官方路由管理器 |
#### 架构特色
```mermaid
graph TB
A[用户访问] --> B[Vue Router 路由器]
B --> C[权限守卫]
C --> D[Layout 布局组件]
D --> E[Page 页面组件]
E --> F[Business 业务组件]
F --> G[API 接口层]
H[Pinia 状态管理] --> E
I[全局组件] --> E
J[自定义指令] --> E
K[Hooks 封装] --> E
```
- **模块化设计**: 按功能模块划分目录结构,职责明确
- **组件化开发**: 高度可复用的组件库,提高开发效率
- **TypeScript 支持**: 全面的类型定义,提供更好的开发体验
- **状态管理**: 采用 Pinia 实现统一的状态管理,支持持久化
- **权限控制**: 支持动态路由和按钮级别权限控制
### 🔨 项目功能
- 使用 Vue3.4 + TypeScript 开发,单文件组件**<script setup>**
- 采用 Vite5 作为项目开发、打包工具(配置 gzip/brotli 打包、tsx 语法、跨域代理…)
- 使用 Pinia 替代 Vuex,轻量、简单、易用,集成 Pinia 持久化插件
- 使用 TypeScript 对 Axios 整个二次封装(请求拦截、取消、常用请求封装…)
- 基于 Element 二次封装 [ProTable](https://juejin.cn/post/7166068828202336263) 组件,表格页面全部为配置项 Columns
- 支持 Element 组件大小切换、多主题布局、暗黑模式、i18n 国际化
- 使用 VueRouter 配置动态路由权限拦截、路由懒加载,支持页面按钮权限控制
- 使用 KeepAlive 对页面进行缓存,支持多级嵌套路由缓存
- 常用自定义指令开发(权限、复制、水印、拖拽、节流、防抖、长按…)
- 使用 Prettier 统一格式化代码,集成 ESLint、Stylelint 代码校验规范
- 使用 husky、lint-staged、commitlint、czg、cz-git 规范提交信息
### 项目截图 📷
- 登录页:


- 首页:


- 表格页:


- 数据可视化

- 数据大屏:

### 📱 核心组件
#### ProTable 表格组件
**高级表格解决方案**,基于 Element Plus Table 二次封装,支持:
- 配置化列定义(Columns)
- 自动分页、排序、筛选
- 列展示/隐藏、宽度调整
- 多选操作、行内操作
- 自定义搜索表单
#### 上传组件集
提供多种上传场景的组件:
- **Img**: 单图上传组件
- **Imgs**: 多图上传组件
- **Files**: 文件上传组件
- **DocView**: 文档预览组件
- **PdfView**: PDF 预览组件
- **VideoView**: 视频播放组件
#### 选择器组件集
丰富的选择器组件,满足不同业务场景:
- **cascader-select**: 级联选择器
- **user-select**: 用户选择器
- **org-select**: 组织选择器
- **tag-select**: 标签选择器
- **common-select**: 通用选择器
#### ECharts 图表组件
内置丰富的图表类型:
- 柱状图、折线图、饼图
- 雷达图、水球图、地图
- 支持主题切换和响应式设计
### 📊 状态管理
采用 **Pinia** 作为状态管理工具,模块化管理应用状态:
- **user**: 用户信息和认证状态
- **auth**: 权限和菜单状态
- **global**: 全局配置(主题、语言、布局等)
- **tabs**: 标签页管理
- **keepAlive**: 页面缓存管理
- **data**: 全局数据管理
### 🛠️ 工具函数 & Hooks
提供丰富的工具函数和 Hooks 封装:
#### Hooks 封装
- **useTable**: 表格逻辑封装
- **useAuthButtons**: 按钮权限控制
- **useTheme**: 主题切换逻辑
- **useDownload**: 文件下载封装
- **useHandleData**: 数据处理封装
- **useSelection**: 表格多选逻辑
#### 工具函数
- **颜色处理**: 主题颜色计算和转换
- **字典工具**: 数据字典管理
- **文件操作**: 文件下载、上传工具
- **错误处理**: 全局错误捕获和处理
### 📝 开发规范
#### 代码规范
- **ESLint**: JavaScript/TypeScript 代码检查
- **Prettier**: 代码格式化工具
- **Stylelint**: CSS/SCSS 样式检查
- **EditorConfig**: 统一编辑器配置
#### Git 规范
- **Husky**: Git Hooks 管理
- **lint-staged**: 提交前代码检查
- **Commitlint**: 提交信息规范检查
- **cz-git**: 交互式提交工具
### 📚 文件资源目录
```text
Geeker-Admin
├─ .husky # husky 配置文件
├─ .vscode # VSCode 推荐配置
├─ build # Vite 配置项
├─ public # 静态资源文件(该文件夹不会被打包)
├─ src
│ ├─ api # API 接口管理
│ ├─ assets # 静态资源文件
│ ├─ components # 全局组件
│ ├─ config # 全局配置项
│ ├─ directives # 全局指令文件
│ ├─ enums # 项目常用枚举
│ ├─ hooks # 常用 Hooks 封装
│ ├─ languages # 语言国际化 i18n
│ ├─ layouts # 框架布局模块
│ ├─ routers # 路由管理
│ ├─ stores # pinia store
│ ├─ styles # 全局样式文件
│ ├─ typings # 全局 ts 声明
│ ├─ utils # 常用工具库
│ ├─ views # 项目所有页面
│ ├─ App.vue # 项目主组件
│ ├─ main.ts # 项目入口文件
│ └─ vite-env.d.ts # 指定 ts 识别 vue
├─ .editorconfig # 统一不同编辑器的编码风格
├─ .env # vite 常用配置
├─ .env.development # 开发环境配置
├─ .env.production # 生产环境配置
├─ .env.test # 测试环境配置
├─ .eslintignore # 忽略 Eslint 校验
├─ .eslintrc.cjs # Eslint 校验配置文件
├─ .gitignore # 忽略 git 提交
├─ .prettierignore # 忽略 Prettier 格式化
├─ .prettierrc.cjs # Prettier 格式化配置
├─ .stylelintignore # 忽略 stylelint 格式化
├─ .stylelintrc.cjs # stylelint 样式格式化配置
├─ CHANGELOG.md # 项目更新日志
├─ commitlint.config.cjs # git 提交规范配置
├─ index.html # 入口 html
├─ LICENSE # 开源协议文件
├─ lint-staged.config.cjs # lint-staged 配置文件
├─ package-lock.json # 依赖包包版本锁
├─ package.json # 依赖包管理
├─ postcss.config.cjs # postcss 配置
├─ README.md # README 介绍
├─ tsconfig.json # typescript 全局配置
└─ vite.config.ts # vite 全局配置文件
```
### 🚀 快速开始
#### 环境要求
在开始开发之前,请确保您的开发环境满足以下要求:
| 工具 | 版本要求 | 描述 |
| ------- | --------- | --------------------- |
| Node.js | >= 16.0.0 | JavaScript 运行时环境 |
| pnpm | 最新版本 | 推荐的包管理器 |
| Git | >= 2.0.0 | 版本控制工具 |
| VSCode | 最新版本 | 推荐的代码编辑器 |
#### 安装步骤
1. **克隆项目**
```bash
# 使用 Gitee(国内推荐)
git clone https://gitee.com/HalseySpicy/Geeker-Admin.git
# 或使用 GitHub
git clone https://github.com/HalseySpicy/Geeker-Admin.git
# 进入项目目录
cd Geeker-Admin
```
2. **安装依赖**
```bash
# 使用 pnpm(推荐)
pnpm install
# 或使用 npm
npm install
# 或使用 yarn
yarn install
```
3. **启动开发服务器**
```bash
# 启动开发环境
pnpm dev
# 或使用
pnpm serve
```
4. **浏览器访问**
打开浏览器访问: [http://localhost:3000](http://localhost:3000)
#### 构建命令
```bash
# 开发环境构建
pnpm build:dev
# 测试环境构建
pnpm build:test
# 生产环境构建
pnpm build:pro
# 预览构建结果
pnpm preview
```
#### 代码检查命令
```bash
# ESLint 检查代码
pnpm lint:eslint
# Prettier 格式化代码
pnpm lint:prettier
# Stylelint 检查样式
pnpm lint:stylelint
# 执行所有检查
pnpm lint:lint-staged
```
#### Git 提交
```bash
# 使用交互式提交(推荐)
pnpm commit
# 传统提交方式
git add .
git commit -m "feat: 添加新功能"
git push
```
### 💻 开发指南
#### 推荐的 VSCode 插件
在 `.vscode/extensions.json` 中推荐了以下插件:
- **Vue Language Features (Volar)**: Vue 3 语言支持
- **TypeScript Vue Plugin (Volar)**: Vue 中的 TypeScript 支持
- **ESLint**: 代码检查
- **Prettier**: 代码格式化
- **Stylelint**: 样式检查
- **Auto Rename Tag**: 自动重命名配对标签
- **Bracket Pair Colorizer**: 括号颜色区分
#### 环境变量配置
项目支持多环境配置,相关配置文件:
- `.env`: 公共配置
- `.env.development`: 开发环境配置
- `.env.test`: 测试环境配置
- `.env.production`: 生产环境配置
#### 部署指南
**Nginx 部署示例**:
```nginx
server {
listen 80;
server_name your-domain.com;
root /var/www/geeker-admin/dist;
index index.html;
# gzip 压缩
gzip on;
gzip_types text/css application/javascript application/json;
# 处理 Vue Router 的 history 模式
location / {
try_files $uri $uri/ /index.html;
}
# 静态资源缓存
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
```
**Docker 部署**:
```dockerfile
# Dockerfile
FROM nginx:alpine
COPY dist/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```
### 🌎 浏览器支持
- 本地开发推荐使用 Chrome 最新版浏览器 [Download](https://www.google.com/intl/zh-CN/chrome/)。
- 生产环境支持现代浏览器,不再支持 IE 浏览器,更多浏览器可以查看 [Can I Use Es Module](https://caniuse.com/?search=ESModule)。
|  |  |  |  |  |
| :---------------------------------------------: | :-----------------------------------------------: | :--------------------------------------------------: | :-------------------------------------------------: | :-------------------------------------------------: |
| not support | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
### 项目后台接口 🧩
项目后台接口完全采用 Mock 数据,感谢以下 Mock 平台支持:
- FastMock: https://www.fastmock.site
- EasyMock:https://mock.mengxuegu.com
### 微信交流群 👨👨👦👦
微信一群、二群、三群、四群已满,扫描二维码进入五群(支持知识付费)🤪
| 微信二维码 |
| :-----------------------------------------------------------------------------------: |
|
|
### 捐赠 🍵
如果你正在使用这个项目或者喜欢这个项目的,可以通过以下方式支持我:
- Star、Fork、Watch 一键三连 🚀
- 通过微信、支付宝一次性捐款 ❤
| 微信 | 支付宝 |
| :--------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------: |
|
|
|
### 🤝 贡献指南
欢迎大家参与 Geeker-Admin 的开发!如果您发现了 Bug 或有新的功能建议,请按照以下方式参与:
#### 提交 Issue
1. 在 [GitHub Issues](https://github.com/HalseySpicy/Geeker-Admin/issues) 或 [Gitee Issues](https://gitee.com/HalseySpicy/Geeker-Admin/issues) 提交问题
2. 使用清晰的标题和详细的描述
3. 提供重现步骤和环境信息
#### 提交 Pull Request
1. Fork 项目到您的 GitHub 账户
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
#### 开发规范
- 遵循项目的代码规范(ESLint + Prettier)
- 提交信息遵循 [Conventional Commits](https://conventionalcommits.org/) 规范
- 确保代码通过所有检查(`pnpm lint:lint-staged`)
### 📜 License
本项目基于 [MIT License](./LICENSE) 开源协议,您可以自由地使用、修改和分发。
### 🚀 相关项目
- [Vue.js](https://vuejs.org/) - 渐进式 JavaScript 框架
- [Element Plus](https://element-plus.org/) - Vue 3 组件库
- [Vite](https://vitejs.dev/) - 新一代前端构建工具
- [Pinia](https://pinia.vuejs.org/) - Vue 状态管理库
- [TypeScript](https://www.typescriptlang.org/) - JavaScript 的超集
---
如果这个项目对您有帮助,请给个 ⭐️ Star 支持一下!
Made with ❤️ by Geeker