{"id":47903850,"url":"https://github.com/iwangbowen/zenith-admin","last_synced_at":"2026-06-07T03:04:42.479Z","repository":{"id":346514060,"uuid":"1188704055","full_name":"iwangbowen/zenith-admin","owner":"iwangbowen","description":"基于Hono v4 + React 19 + Semi Design v2 + Drizzle ORM的全栈后台管理系统，覆盖认证授权、组织架构、系统配置、通知公告、日志审计、在线会话、定时任务、文件管理与运行监控等后台场景。","archived":false,"fork":false,"pushed_at":"2026-06-07T00:25:25.000Z","size":7404,"stargazers_count":11,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-06-07T01:16:55.504Z","etag":null,"topics":["admin-dashboard","admin-template","drizzle-orm","hono","lucid-icons","lucide-react","mock-service-worker","openapi","postgresql","react","redis","redis-cache","redis-server","semi-design","swagger","swagger-ui","typescript","vitepress","wangeditor","zod-validation"],"latest_commit_sha":null,"homepage":"https://iwangbowen.github.io/zenith-admin/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iwangbowen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-22T13:22:40.000Z","updated_at":"2026-06-07T00:25:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iwangbowen/zenith-admin","commit_stats":null,"previous_names":["iwangbowen/zenith-admin"],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/iwangbowen/zenith-admin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iwangbowen%2Fzenith-admin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iwangbowen%2Fzenith-admin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iwangbowen%2Fzenith-admin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iwangbowen%2Fzenith-admin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iwangbowen","download_url":"https://codeload.github.com/iwangbowen/zenith-admin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iwangbowen%2Fzenith-admin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34006056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin-dashboard","admin-template","drizzle-orm","hono","lucid-icons","lucide-react","mock-service-worker","openapi","postgresql","react","redis","redis-cache","redis-server","semi-design","swagger","swagger-ui","typescript","vitepress","wangeditor","zod-validation"],"created_at":"2026-04-04T04:31:19.867Z","updated_at":"2026-06-07T03:04:42.474Z","avatar_url":"https://github.com/iwangbowen.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zenith Admin\n\n[![Version](https://img.shields.io/github/v/tag/iwangbowen/zenith-admin?label=version\u0026color=blue)](https://github.com/iwangbowen/zenith-admin/releases)\n[![Pages](https://github.com/iwangbowen/zenith-admin/actions/workflows/pages.yml/badge.svg)](https://github.com/iwangbowen/zenith-admin/actions/workflows/pages.yml)\n[![Release](https://github.com/iwangbowen/zenith-admin/actions/workflows/release.yml/badge.svg)](https://github.com/iwangbowen/zenith-admin/actions/workflows/release.yml)\n[![License](https://img.shields.io/github/license/iwangbowen/zenith-admin)](./LICENSE)\n\n基于 **Hono v4 + React 19 + Semi Design v2 + Drizzle ORM** 的全栈后台管理系统。涵盖认证授权、组织架构、权限控制、系统配置、通知公告、日志审计、在线会话、定时任务、文件管理、缓存管理、工作流引擎、AI 对话、运行监控等完整后台场景，并内置可选的**多租户（Multi-Tenant）**支持。\n\n项目采用 **npm monorepo** 结构：后端使用 Hono + PostgreSQL 提供 RESTful API，前端使用 React 19 + Vite + Semi Design v2 构建界面，`shared` 包统一维护前后端共享类型、常量与 Zod 校验 schema。\n\n---\n\n## 文档与演示\n\n| | 地址 |\n| --- | --- |\n| 文档站 | \u003chttps://iwangbowen.github.io/zenith-admin/\u003e |\n| 演示站 | \u003chttps://iwangbowen.github.io/zenith-admin/demo/\u003e（账号 `admin` / 密码 `123456`，无需后端） |\n\n---\n\n## 技术栈\n\n| 层级 | 技术 |\n| ---- | ---- |\n| 后端框架 | [Hono](https://hono.dev/) v4 + Node.js |\n| 前端框架 | [React](https://react.dev/) 19 + [Vite](https://vitejs.dev/) 6 |\n| UI 组件库 | [Semi Design](https://semi.design/) v2 |\n| 图标体系 | [lucide-react](https://lucide.dev/) |\n| 数据库 ORM | [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL |\n| 会话持久化 | [Redis](https://redis.io/)（ioredis） |\n| 前端路由 | [React Router](https://reactrouter.com/) v7 |\n| 参数验证 | [Zod](https://zod.dev/)（前后端共享） |\n| 认证方案 | JWT Bearer Token + Refresh Token 自动续期 |\n| 实时通信 | WebSocket |\n| 文件存储 | 本地存储 / 阿里云 OSS / 腾讯云 COS / S3 兼容存储 |\n| 包管理器 | npm（monorepo） |\n\n---\n\n## 功能模块\n\n### 认证与账户安全\n\n- **登录注册**：支持账号密码登录、图形验证码校验、注册开关全局控制\n- **OAuth 第三方登录**：支持 GitHub、钉钉、企业微信一键登录与账号绑定\n- **JWT 鉴权**：Access Token + Refresh Token 双 Token 机制，自动静默续期\n- **密码策略**：复杂度规则（最小长度、大写字母、特殊字符）+ 密码过期强制修改\n- **登录安全**：登录失败次数限制 + 账号自动锁定（基于 Redis 计数），管理员可解锁\n- **API Token**：个人 API Token 创建与管理，用于第三方接口调用鉴权\n\n### 权限与组织架构\n\n- **用户管理**：CRUD、启停用、角色/部门/岗位分配、批量操作、Excel 批量导入（含模板下载）、管理员重置密码\n- **角色管理**：CRUD、菜单权限树形分配\n- **菜单管理**：目录 / 菜单 / 按钮三级能力模型，树形维护，支持全部展开/折叠\n- **动态菜单路由**：前端根据用户角色自动注册可访问页面，实现路由级权限隔离\n- **按钮级权限**：基于 `usePermission` Hook 的细粒度前端编程式权限控制\n- **部门管理**：树形组织层级维护\n- **岗位管理**：岗位信息维护与用户关联\n\n### 系统配置与安全\n\n- **系统配置**：验证码开关、密码策略、注册控制、登录失败锁定等核心行为动态配置\n- **IP 访问控制**：白名单/黑名单双模式，支持 CIDR 网段，配置热更新缓存\n- **邮件配置**：SMTP 服务器配置（主机、端口、加密方式）+ 发送测试\n- **OAuth 配置**：第三方登录 Client ID/Secret 管理与开关控制\n- **数据字典**：字典类型与字典项统一管理，前后端共用\n\n### 通知与消息\n\n- **通知公告**：富文本（wangEditor）编辑、发布/草稿状态控制、已读记录管理、批量操作\n- **实时推送**：基于 WebSocket 的新通知实时推送，前端自动重连（指数退避）\n- **通知中心**：用户收件箱、支持全部标记已读\n- **消息中心聊天**：内置聊天页面，支持单聊/群聊、未读计数、会话置顶与收藏、消息搜索、WebSocket 实时收发\n- **消息模板**：邮件 / 短信 / 站内通知三类模板管理，支持变量占位符与启停控制\n\n### 日志与审计\n\n- **登录日志**：记录登录行为（IP、浏览器、地理位置、状态），支持全局与个人视图\n- **操作日志**：记录关键业务操作轨迹，支持变更前后字段 Diff 对比\n- **在线会话**：查看当前所有在线会话（Redis 持久化），支持强制下线并实时推送退出消息\n\n### 文件与存储\n\n- **文件管理**：文件上传、列表查询、下载、删除等基础能力\n- **多存储后端**：支持本地文件系统、阿里云 OSS、腾讯云 COS、S3 兼容存储\n- **默认存储切换**：通过存储配置页面一键切换当前默认存储策略\n\n### 任务与运行维护\n\n- **定时任务**：Cron 任务 CRUD、可视化 Cron 表达式构建器、手动立即执行、启停控制、执行历史日志\n- **数据库备份**：基于 pg_dump 的手动备份，支持下载与删除，可结合定时任务自动化\n- **缓存管理**：Redis 缓存可视化查看、按 Key 模式搜索、分类展示、支持单条/批量删除\n- **系统监控**：服务器实时状态（CPU、内存、Node.js 版本、运行时长等）\n- **健康检查**：`GET /api/health` 接口，用于 Docker / K8s 服务探活\n\n### 工作流引擎（实验性）\n\n- **流程定义**：工作流 CRUD、草稿/发布/禁用状态管理\n- **可视化设计器**：基于节点的流程图设计器，支持条件分支配置\n- **流程实例**：流程发起、运行状态跟踪、流程监控\n\n### AI 对话\n\n- **AI 聊天界面**：基于 Semi Design AIChatDialogue 组件的完整聊天界面\n- **多会话管理**：侧边栏会话列表，支持多轮对话切换与历史记录\n- **模型配置**：支持多语言切换（中文/英文/日文）与响应风格配置\n\n### 个人中心\n\n- **基本信息**：修改头像、昵称、手机、邮箱等个人资料\n- **修改密码**：验证旧密码后更新\n- **关联账号**：查看已绑定的第三方 OAuth 账号，支持解绑\n- **API Token**：个人 Token 自助管理\n- **登录记录** / **操作记录**：查看本账号历史行为日志\n\n### 多租户（可选）\n\n- **租户管理**：CRUD、状态管理、有效期控制、最大用户数限制，仅平台超管可操作\n- **数据隔离**：开启后各业务表自动按 `tenant_id` 隔离，删除租户时级联清理\n- **视角切换**：平台超管可在顶栏一键切换至任意租户视角进行排查\n- **单租户兼容**：默认关闭，关闭时与普通单实例部署完全兼容\n\n\u003e 通过 `MULTI_TENANT_MODE=true`（后端）+ `VITE_MULTI_TENANT_MODE=true`（前端）开启，详见[多租户指南](https://iwangbowen.github.io/zenith-admin/backend/multi-tenant)。\n\n### 基础数据\n\n- **行政区划**：国家级 → 省 → 市 → 区 → 街道 五级查询，`RegionSelect` 组件支持级联懒加载\n- **仪表盘**：用户总数、在线人数、今日登录/操作次数统计卡片 + 通知公告摘要\n\n### 开发工具\n\n- **Swagger UI**：内置 `/api/docs` 在线接口文档，支持 Bearer Token 授权调试\n- **OpenAPI JSON**：`/api/openapi.json` 可直接导入 Postman / Apifox\n- **Demo 模式**：`VITE_DEMO_MODE=true` 开启 MSW Mock，无需后端即可完整预览所有页面\n\n---\n\n## 原生 AI 友好\n\nZenith Admin 专为 AI 辅助开发场景设计，让 GitHub Copilot、Claude、Cursor 等工具在生成代码时能精准理解项目约定。\n\n| 文件 / 目录 | 用途 |\n| --- | --- |\n| [`AGENTS.md`](./AGENTS.md) | AI 工具的\"项目说明书\"，包含架构约定、常用命令与注意事项 |\n| [`.claude/skills/zenith/`](./.claude/skills/zenith/) | Zenith CRUD Skill：完整的模块开发工作流，一句话触发全流程自动化生成 |\n\n在支持 Skills 的 AI 工具中描述需求，即可自动完成 **Schema → 迁移 → 类型 → 路由 → 前端页面 → Mock 数据** 的端到端生成。详见文档站：[AI 辅助开发](https://iwangbowen.github.io/zenith-admin/ai/)。\n\n---\n\n## 快速开始\n\n**前置条件**：Node.js \u003e= 18、PostgreSQL、Redis\n\n### 1. 安装依赖\n\n```bash\nnpm install\n```\n\n### 2. 配置环境变量\n\n在 `packages/server/` 目录下创建 `.env` 文件（参考 `packages/server/.env.example`），最小配置如下：\n\n```env\nDATABASE_URL=postgresql://postgres:postgres@localhost:5432/zenith_admin\nJWT_SECRET=your-secret-key\nREDIS_URL=redis://127.0.0.1:6379\n```\n\n前端默认请求 `http://localhost:3300`，如需修改，在 `packages/web/` 下创建 `.env` 并设置 `VITE_API_BASE_URL`。\n\n### 3. 初始化数据库\n\n```bash\nnpm run db:migrate   # 执行数据库迁移\nnpm run db:seed      # 填充初始数据（创建默认 admin 账号）\n```\n\n### 4. 启动开发服务器\n\n```bash\nnpm run dev            # 同时启动前端 + 后端（推荐）\n\nnpm run dev:server     # 仅启动后端\nnpm run dev:web        # 仅启动前端\n```\n\n默认账号：`admin` / 密码：`123456`\n\n### 5. 生产构建\n\n```bash\nnpm run build          # 顺序构建：shared → server → web\n```\n\n构建产物：后端 `packages/server/dist/`，前端 `packages/web/dist/`。\n\n\u003e 完整部署说明（Docker、Nginx 反代等）参见文档站：[快速开始](https://iwangbowen.github.io/zenith-admin/guide/getting-started)。\n\n---\n\n## License\n\n本项目采用 [MIT License](./LICENSE)。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiwangbowen%2Fzenith-admin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiwangbowen%2Fzenith-admin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiwangbowen%2Fzenith-admin/lists"}