# ZeroAdmin **Repository Path**: Z568_568/ZeroAdmin ## Basic Information - **Project Name**: ZeroAdmin - **Description**: 基于 React 19 + Vite 8 + shadcn/ui 的现代化后台管理模板,内置 RBAC、多标签、多布局与主题系统,对移动端完全自适应,适合快速二开。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: https://zero.zhouyi.run - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-16 - **Last Updated**: 2026-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: React, React19, TypeScript, tailwindcss, shadcn-ui ## README # ZeroAdmin > 开箱即用的现代化 React 管理后台模板 — 权限、布局、主题、图表、上传、富文本,一应俱全,对移动端完全自适应。 > > A ready-to-use modern React admin template — RBAC, layouts, themes, charts, uploads, and rich text, fully responsive on mobile. 基于 **React 19 + Vite 8 + TypeScript + Tailwind CSS 4 + shadcn/ui + Zustand** 构建,面向快速二开与企业中后台场景,桌面端与移动端均可流畅使用。 Built with **React 19 + Vite 8 + TypeScript + Tailwind CSS 4 + shadcn/ui + Zustand**, designed for rapid secondary development and enterprise mid/back-office scenarios. Smooth experience on both desktop and mobile. **在线预览 / Demo:** [https://zero.zhouyi.run/](https://zero.zhouyi.run/) **源码仓库 / Repo:** [Gitee · ZeroAdmin](https://gitee.com/Z568_568/ZeroAdmin) --- ## 预览截图 ### 首页 · 公告弹窗 ![首页与公告](./docs/dashboard.png) ### 数据分析 ![数据分析](./docs/analytics.png) ### 用户管理 ![用户管理](./docs/users.png) ### 权限管理 ![权限管理](./docs/permissions.png) ### 系统设置 ![系统设置](./docs/settings.png) --- ## 目录 - [预览截图](#预览截图) - [特性](#特性) - [技术栈](#技术栈) - [快速开始](#快速开始) - [演示账号](#演示账号) - [功能一览](#功能一览) - [目录结构](#目录结构) - [架构说明](#架构说明) - [HTTP 请求封装(axios)](#http-请求封装axios) - [文件上传组件](#文件上传组件) - [富文本组件](#富文本组件) - [如何新增页面](#如何新增页面) - [权限体系](#权限体系) - [规范约定](#规范约定) - [本地持久化与退出登录](#本地持久化与退出登录) - [常用脚本](#常用脚本) - [License](#license) --- ## 特性 - **移动端适配**:对移动端完全自适应,侧栏 Sheet、响应式布局与触控友好交互 - **完整 RBAC**:菜单 / 路由 / 按钮三级权限,多级权限树,角色分配 - **四种布局**:图标轨、展开面板、顶栏命令、居中岛屿,可随时切换 - **多标签页**:切换、关闭、刷新、关闭左/右/其他/全部,支持右键菜单 - **主题系统**:10 种主题色 + 浅色 / 深色 / 跟随系统 - **数据看板**:ECharts 多图类型(折线、柱状、堆叠、饼图等) - **系统管理**:用户、角色、权限、操作日志、系统设置 - **工程能力**:axios 封装、文件上传、TipTap 富文本、Hash 路由静态部署 - **开箱即用**:登录鉴权、公告弹窗、页面水印、403 / 404 页 --- ## 技术栈 | 类别 | 选型 | |-----|--------------------------------| | 框架 | React 19、React Router 7(Hash 模式) | | 构建 | Vite 8、TypeScript | | 样式 | Tailwind CSS 4、`@/` 路径别名 | | 组件 | shadcn/ui(Radix 原语) | | 状态 | Zustand(部分 `persist`) | | 图表 | ECharts 6 | | 请求 | axios(`src/api` 统一封装) | | 富文本 | TipTap(`RichTextEditor`) | | 主题 | next-themes(浅色 / 深色 / 跟随系统) | | 图标 | lucide-react | | 校验 | oxlint | | 环境 | Node 22 | --- ## 快速开始 环境要求:**Node.js 22+**(见 `.nvmrc`)。 ```bash nvm use npm install npm run dev ``` 浏览器访问终端提示的本地地址(默认 `http://localhost:5173`)。 生产环境在线地址:[https://zero.zhouyi.run/](https://zero.zhouyi.run/) ```bash npm run build # 类型检查 + 生产构建 npm run preview # 预览构建产物 npm run lint # oxlint ``` --- ## 演示账号 密码均为 `123456`。 | 账号 | 角色 | 说明 | |------|------|------| | `admin` | 超级管理员 | 通配权限 `*`,可访问全部功能 | | `operator` | 运营 | 业务相关权限(用户 / 部分系统页) | | `guest` | 访客 | 只读类权限 | 退出登录会清理会话相关缓存,重新登录固定进入 **首页** `/dashboard`。 --- ## 功能一览 ### 布局与交互 - 后台壳层:外框画布 + 最左侧品牌脊 + 侧栏 / 顶栏 - **四种布局**:`rail` / `panel` / `top` / `island`(系统设置中切换) - **多标签页**:切换、关闭、刷新、关闭左/右/其他/全部;标签右键菜单 - **面包屑**、移动端侧栏 Sheet - **页面水印**(系统设置开关) - **全局通知公告弹窗**(登录后自动弹出未读;顶栏铃铛可再次打开) ### 主题 - 主题色:mono / slate / blue / cyan / green / amber / orange / rose / violet / fuchsia - 外观:浅色 / 深色 / 跟随系统 - 配置入口:**系统管理 → 系统设置** ### 权限(RBAC) - 权限管理:多级目录树(如 系统管理 → 用户管理 → 增删改查) - 角色管理:勾选权限树分配 - 菜单按权限过滤;路由无权限跳转 `/403` - 按钮级:`PermissionGate` / `usePermission` - 超管权限码:`*` ### 业务演示页 | 页面 | 路径 | 说明 | |------|------|------| | 登录 | `/login` | 独立全屏,不套后台布局 | | 首页 | `/dashboard` | KPI、趋势图、快捷入口、日志/待办/公告 | | 数据分析 | `/analytics` | 多类型 ECharts | | 用户管理 | `/system/users` | 筛选、排序、列显隐、分页;**新增/编辑/详情为弹窗** | | 角色管理 | `/system/roles` | 角色 CRUD + 权限树 | | 权限管理 | `/system/permissions` | 多级权限目录 CRUD | | 操作日志 | `/system/logs` | 筛选、分页、单删/批量删除 | | 系统设置 | `/system/settings` | 布局 / 主题色 / 外观 / 水印 | | 个人中心 | `/profile` | 资料、富文本简介、权限摘要 | | 403 | `/403` | 无权限(布局内) | | 404 | `/404` 与 `*` | 独立全屏,风格对齐登录页 | --- ## 目录结构 ```text src/ ├── App.tsx # ThemeProvider + 路由入口 ├── main.tsx ├── index.css # 主题变量、布局动画、编辑器样式 ├── config/ # 静态配置(菜单、权限码、主题、路由元信息) ├── router/index.tsx # 路由表(HashRouter) ├── stores/ # Zustand 状态 ├── pages/ # 页面 ├── api/ # axios 封装与接口模块 │ ├── request.ts # get/post/put/del/upload │ ├── modules/ # 按业务拆分 │ └── examples.usage.tsx # 使用示例(参考用) ├── components/ │ ├── layout/ # 后台布局、标签栏、公告、水印 │ ├── auth/ # PermissionGate、PermissionTree │ ├── charts/ # EChart 封装 │ ├── editor/ # TipTap 富文本 │ ├── upload/ # 公共上传 FileUpload │ └── ui/ # shadcn 基础组件 ├── hooks/ └── lib/ ``` 路径别名:`@/` → `src/`。 环境变量见 `.env.example`:`VITE_API_BASE_URL`、`VITE_API_TIMEOUT`。 --- ## 架构说明 ```text ┌─────────────┐ │ /login │ 独立页 │ /404 │ └─────────────┘ │ 登录后 ────────────────────▼──────────────────── ┌────────────────────────┐ │ AdminLayout │ │ 鉴权 + 路由权限守卫 │ │ 侧栏 / 顶栏 / 标签栏 │ │ 公告弹窗 / 水印 │ └───────────┬────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ 业务页面 系统管理 个人中心 ``` **分层约定** 1. **config**:无副作用的常量与树配置 2. **stores**:业务状态与本地演示数据 3. **pages**:页面编排 4. **components**:可复用 UI 5. **api / hooks / lib**:请求与横切能力 当前为 **纯前端演示模板**(无真实后端)。对接接口时:在 `src/api/modules` 写接口方法,在 `stores` 或页面中调用。 --- ## HTTP 请求封装(axios) ```ts import { get, post, put, del, upload } from '@/api' const list = await get('/system/users', { page: 1, pageSize: 10 }) const user = await post('/system/users', { name: '张三' }) await put(`/system/users/${user.id}`, { name: '李四' }) await del(`/system/users/${user.id}`) const { url } = await upload(file, { onProgress: (p) => console.log(p) }) ``` 能力概要:自动注入 Bearer Token、统一解包 `{ code, data }`、`401` 自动登出、支持上传进度。 模块化示例见 `src/api/modules/user.ts`,完整示例见 `src/api/examples.usage.tsx`。 --- ## 文件上传组件 ```tsx import { FileUpload, type UploadFileItem } from '@/components/upload' { const result = await upload(file, { onProgress }) return result.url }} /> ``` 支持拖拽、进度、数量/大小限制;默认走 `api.upload`,无后端时可降级本地预览。 --- ## 富文本组件 ```tsx import { RichTextEditor } from '@/components/editor' (await upload(file)).url} /> ``` 基于 TipTap:标题、加粗/斜体、列表、对齐、链接、代码块、图片;支持粘贴 / 拖拽插图。 --- ## 如何新增页面 以「订单管理」`/system/orders` 为例: 1. 在 `src/config/permissions.ts` 增加权限码与种子节点、`ROUTE_PERMISSIONS` 2. 在 `src/config/menus.ts` 增加菜单项 3. 编写 `src/pages/system/orders.tsx` 4. 在 `src/router/index.tsx` 注册路由 5. 按钮级权限用 `PermissionGate` / `usePermission` 6. 在角色管理中勾选新权限(超管 `*` 自动拥有) 列表可参考 `users.tsx`;表单/详情优先用 **Dialog**。 --- ## 权限体系 | 层级 | 实现 | |------|------| | 菜单 | `filterMenusByPermissions` | | 路由 | `AdminLayout` 内守卫,失败 → `/403` | | 按钮 | `PermissionGate`、`usePermission()` | | 数据 | permissions 树 → roles 持有权限码 → auth 登录解析 | 权限码建议:`module:resource:action`,如 `system:users:create`。 --- ## 规范约定 ### 路由 - 使用 **Hash 模式**(`HashRouter`),地址形如 `/#/dashboard`,静态托管刷新不会 404 - 业务内跳转仍用 `/dashboard` 等路径 ### 代码 - 路径别名统一 `@/` - 重要业务逻辑加中文注释 - 异步操作使用 try/catch,对用户提示友好文案 - CRUD 优先弹窗,减少标签污染 --- ## 本地持久化与退出登录 | Key | 内容 | |-----|------| | `zero-admin-auth` | 登录态 | | `zero-admin-tabs` | 标签页 | | `zero-admin-announcements` | 公告已读 | | `zero-admin-layout-v2` | 布局与主题 | | `zero-admin-roles` / `permissions` / `logs` | 角色 / 权限 / 日志 | 退出登录会重置上述会话缓存并跳转 `/login`。 --- ## 常用脚本 ```bash npm run dev # 开发 npm run build # tsc -b && vite build npm run preview # 预览生产包 npm run lint # oxlint ``` --- ## License [MIT](./LICENSE) © ZeroAdmin 欢迎 Star / Fork / PR。Issue 可在 [Gitee 仓库](https://gitee.com/Z568_568/ZeroAdmin) 提交。