
admin / a123456 🔑nuct/
├── backend/ # 管理端后端 (NestJS,端口 7001)
├── backend-user/ # C 端用户接口 (NestJS,端口 8001)
├── frontend/ # 管理端前端 (Vue3,端口 8088)
└── README.md
| 层级 | 技术 |
|---|---|
| 后端 | NestJS、TypeScript、TypeORM、Redis、MySQL、JWT、Swagger、Bull |
| 前端 | Vue3、Vite5、Ant Design Vue4、TypeScript5、Pinia、UnoCSS |
┌─────────────────────────────────────────────────────────────────────────┐
│ 客户端层 │
├─────────────────────────────────────────────────────────────────────────┤
│ 管理端前端 (Vue3) :8088 │ C 端应用(可接入 H5/小程序/App) │
└──────────────┬─────────────────┴──────────────────┬────────────────────┘
│ │
▼ ▼
┌──────────────────────────────┐ ┌──────────────────────────────────────┐
│ backend (管理端 API) :7001 │ │ backend-user (C 端 API) :8001 │
│ - 平台管理、RBAC、租户管理 │ │ - 登录/注册、菜单、租户配置 │
│ - 系统配置、任务、网盘等 │ │ - 与 backend 共用 DB + Redis │
└──────────────┬───────────────┘ └──────────────────┬───────────────────┘
│ │
└──────────────────┬───────────────────┘
▼
┌──────────────────────────────────────┐
│ MySQL 8.x │ Redis │ OSS (可选) │
└──────────────────────────────────────┘
backend/| 层级 | 组件 | 说明 |
|---|---|---|
| HTTP | Fastify | 高性能 HTTP 适配器 |
| Auth | JWT + Passport | LocalStrategy、JwtStrategy,RSA 密码加密 |
| ORM | TypeORM | MySQL 持久化 |
| Cache | Redis | 会话、限流、Bull 队列 |
| Queue | Bull | 定时任务、异步任务 |
| Realtime | Socket.io + SSE | WebSocket 双网关、Server-Sent Events |
| Global | Throttler、CLS、EventEmitter | 限流、请求上下文、事件总线 |
模块结构:
| 模块 | 路由前缀 | 说明 |
|---|---|---|
| AuthModule | /auth, /account | 登录、注册、验证码、登出、改密 |
| TenantModule | /system/tenants | 租户管理 |
| SystemModule | /system | 用户、角色、菜单、部门、字典、参数、日志、任务、在线、服务监控 |
| ToolsModule | - | 上传、存储、邮件 |
| NetdiskModule | - | 网盘管理 |
| SseModule | /sse | SSE 推送 |
| HealthModule | /health | 健康检查 |
| TasksModule | - | Bull 定时任务 |
| SocketModule | - | WebSocket (AdminEventsGateway, WebEventsGateway) |
backend-user/C 端专用 API,与管理端分离部署,仅保留 C 端所需接口:
| 接口 | 需登录 | 说明 |
|---|---|---|
POST /auth/login | 否 | 登录(需传 domain、tenantId) |
POST /auth/register | 否 | 注册(需传 tenantId) |
GET /auth/captcha/img | 否 | 图形验证码 |
GET /user/tenant?domain=xxx | 否 | 按域名获取租户列表 |
POST /account/logout | 是 | 登出 |
PATCH /account/password | 是 | 修改密码 |
GET /user/menus?code=xxx | 是 | 按 Code 获取菜单树 |
GET /user/config/:key | 是 | 按 key 获取租户参数配置 |
frontend/| 层级 | 技术 | 说明 |
|---|---|---|
| 框架 | Vue 3 + Vite 5 | SPA |
| UI | Ant Design Vue 4 | 组件库 |
| 状态 | Pinia | 状态管理 |
| 路由 | Vue Router | 动态路由(由后端菜单生成) |
| 样式 | UnoCSS + Less | 原子化 + 变量 |
| i18n | vue-i18n | 多语言 |
backend、backend-user、frontend 独立构建| 概念 | 说明 |
|---|---|
| 租户表 | sys_tenant(name, code, domain, status) |
| 隔离方式 | 实体 tenant_id 字段,TenantInterceptor 自动过滤 |
| 域名匹配 | 同一域名可匹配多个租户,C 端登录需传 domain + tenantId |
| 租户参数 | sys_tenant_param_config 租户级配置 |
User ──► Role ──► Menu (Permission)
| 表 | 说明 |
|---|---|
| sys_user | 用户 |
| sys_role | 角色 |
| sys_menu | 菜单/权限(树形,type: 0=目录、1=菜单、2=按钮) |
| sys_user_roles | 用户-角色 多对多 |
| sys_role_menus | 角色-菜单 多对多 |
权限格式:module:resource:action,如 system:user:list、system:user:create
动作约定:list、read/info、create、update、delete
| 表名 | 说明 |
|---|---|
| sys_user | 用户 |
| sys_role | 角色 |
| sys_menu | 菜单/权限 |
| sys_dept | 部门(树形,mpath) |
| sys_dict_type / sys_dict_item | 字典类型/字典项 |
| sys_config | 系统参数 |
| sys_task / sys_task_log | 定时任务及日志 |
| sys_login_log | 登录日志 |
| user_access_tokens / user_refresh_tokens | JWT 令牌 |
| tool_storage | 文件存储 |
| 领域 | 模块 | 功能 |
|---|---|---|
| 认证 | Auth | 登录、注册、验证码、JWT、RSA 加密、邮件验证 |
| 租户 | Tenant | 租户 CRUD、域名配置、租户初始化 |
| 系统 | System | 用户、角色、菜单、部门、字典、参数、日志、任务、在线用户、服务监控 |
| 工具 | Tools | 文件上传、存储、邮件发送 |
| 网盘 | Netdisk | 网盘管理、概览 |
| 实时 | SSE / Socket | 服务端推送、WebSocket 双网关 |
| 任务 | Tasks | Bull 定时任务调度 |
code = 200error-code.constant.ts){ items, meta: { itemCount, totalItems, itemsPerPage, totalPages, currentPage } }cd backend
pnpm docker:up
# 或
docker compose --env-file .env --env-file .env.production up -d --no-build
启动后访问 Swagger:http://localhost:7001/api-docs/
停止容器:
cd backend
pnpm docker:down
git clone https://github.com/zeeklog/nuct
cd nuct
.env.example → .env,.env.development.example → .env.developmentpnpm install 时,各 workspace 的 postinstall 会在 backend 与 backend-user 下自动生成 RSA_PRIVATE_KEY/rsa-private.pem(若不存在)。也可手动:openssl genrsa -out RSA_PRIVATE_KEY/rsa-private.pem 2048。在 .env 中配置 RSA_PRIVATE_KEY_PATH=RSA_PRIVATE_KEY/rsa-private.pem。可选 — 使用 Docker 启动 MySQL/Redis:
cd backend
docker compose --env-file .env --env-file .env.development run -d --service-ports mysql
docker compose --env-file .env --env-file .env.development run -d --service-ports redis
pnpm install
pnpm migration:run # 在 backend 下执行
pnpm dev
| 目录 | 说明 | 端口 |
|---|---|---|
| backend/ | 管理端后端 (NestJS) | 7001 |
| backend-user/ | C 端用户接口 (NestJS) | 8001 |
| frontend/ | 管理端前端 (Vue3) | 8088 |
在项目根目录执行:
pnpm migration:run # 应用迁移
pnpm migration:generate # 生成迁移
pnpm migration:revert # 回滚
若实体或数据库配置有更新,请先在 backend 下执行
pnpm build再进行迁移。
项目已配置 .cursor/ 下的规则与技能,便于 AI 辅助开发。
| 文件 | 说明 | 作用范围 |
|---|---|---|
rules/00-project.mdc | 项目架构与整体规范 | 始终应用 |
rules/01-frontend-style.mdc | 前端 CSS 与命名规范 | 前端 |
rules/01-data-design.mdc | 数据库设计与 RBAC 权限模型 | 后端 |
rules/02-backend.mdc | NestJS 后端开发规范 | backend/**/*.ts |
rules/03-frontend.mdc | Vue3 前端开发规范 | frontend/**/*.{ts,vue} |
rules/04-backend-docs.mdc | 后端文档与 API 参考 | 后端 |
rules/tenant-init.mdc | 租户初始化逻辑 | tenant/**/*.ts |
| 技能 | 路径 | 用途 |
|---|---|---|
| nest-admin-backend | skills/nest-admin-backend/SKILL.md | 后端接口、控制器、Service、权限、数据库迁移 |
| nest-admin-crud | skills/nest-admin-crud/SKILL.md | 新增 CRUD 模块全流程(实体、DTO、Service、Controller、菜单、前端页面) |
| nest-admin-permission | skills/nest-admin-permission/SKILL.md | RBAC 权限、菜单、按钮权限、definePermission、sys_menu 配置 |
欢迎 Star 和 PR。
基于以下开源项目二次开发:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online