一個生產級的全端管理系統開源專案,從零到一的實戰分享
這是一個基於 NestJS + Vue3 + Prisma + PostgreSQL 構建的全端管理系統,不是簡單的 CRUD,而是一個生產級別的解決方案。它包含了多租戶架構、RBAC 權限管理、請求加密、完整的日誌監控等企業級特性。
🌟 GitHub 開源地址:github.com/linlingqin7…
🎮 線上體驗地址:www.linlingqin.top/
📖 專案文檔地址:專案文檔
體驗帳號:demo / demo123 (租戶 000000)
完整權限帳號:admin / admin123 (租戶 000000)

支持帳號密碼登入、驗證碼驗證、記住密碼

系統概覽、快捷入口、數據統計、圖表展示

使用者列表、角色分配、部門選擇、狀態管理

角色權限配置、菜單權限樹、數據權限範圍

菜單樹形結構、路由配置、圖標選擇、權限標識

組織架構樹、部門人員、數據權限

崗位配置、崗位排序、狀態管理

數據字典維護、字典項配置

系統參數、動態配置、參數分類

公告發布、通知管理、類型分類

多租戶列表、套餐配置、租戶狀態

Cron 任務配置、執行日誌、任務管理

伺服器狀態、CPU/記憶體使用率、磁碟信息

Redis 快取信息、命令統計、鍵值管理

即時在線使用者、會話管理、強制下線

操作記錄、請求參數、響應結果、異常捕獲

登入歷史、IP 地址、瀏覽器信息、登入狀態

快取鍵管理、過期時間、快取清理

多主題切換、深色模式、主題色配置、佈局模式
這是本專案的一大亮點。實現了完整的租戶數據隔離:
// 所有資料庫查詢自動按租戶過濾
const users = await prisma.sysUser.findMany({
where: { name: 'John' }
// tenantId 會自動注入,無需手動添加
});
// 跳過租戶過濾(特殊場景)
@IgnoreTenant()
async getAllTenants() {
return await this.prisma.tenant.findMany();
}
技術實現:
適用場景:
不只是簡單的角色權限,而是多層級、細粒度的權限控制:
@Controller('users')
export class UserController {
// 需要特定權限才能訪問
@RequirePermission('system:user:add')
@Post()
create(@Body() dto: CreateUserDto) {
return this.userService.create(dto);
}
// 需要特定角色
@RequireRole('admin')
@Delete(':id')
remove(@Param('id') id: string) {
return this.userService.remove(id);
}
}
權限層級:
前端權限控制:
<template>
<!-- 按鈕級權限 -->
<n-button v-if="hasPermission('system:user:add')">
添加使用者
</n-button>
</template>
敏感資料傳輸採用 AES + RSA 混合加密:
加密流程:
{encryptedKey, encryptedData} + header x-encrypted: true// 後端自動解密
@Post('login')
async login(@Body() dto: LoginDto) {
// dto 已自動解密,直接使用
return this.authService.login(dto);
}
// 跳過解密(非敏感介面)
@SkipDecrypt()
@Get('captcha')
async getCaptcha() {
return this.captchaService.generate();
}
優勢:
基於 Pino 實現的高性能結構化日誌:
// 自動記錄操作日誌
@Operlog({
businessType: BusinessTypeEnum.UPDATE,
title: '修改使用者'
})
@Put(':id')
async update(@Param('id') id: string, @Body() dto: UpdateUserDto) {
return this.userService.update(id, dto);
}
監控能力:
/api/metrics 端點日誌輸出示例:
{
"level": "info",
"time": "2025-12-22T10:30:00.000Z",
"requestId": "a1b2c3d4",
"tenantId": "000001",
"username": "admin",
"method": "POST",
"url": "/api/system/user",
"statusCode": 200,
"duration": 45
}
專為產品演示設計的只讀帳戶機制:
// Demo 帳戶攔截器
@UseInterceptors(DemoInterceptor)
@Controller('users')
export class UserController {
@Post() // Demo 帳戶會被自動攔截
create(@Body() dto: CreateUserDto) {
return this.userService.create(dto);
}
@Get() // 查詢操作不受影響
findAll() {
return this.userService.findAll();
}
}
特性:
前後端完整的 i18n 方案:
// 後端
throw new ApiException(ErrorEnum.USER_NOT_FOUND);
// 自動返回對應語言的錯誤信息
// 前端
const { t } = useI18n();
console.log(t('system.user.name')); // 根據語言返回對應文本
支持中文、英文,可輕鬆擴展其他語言。
| 技術 | 版本 | 核心應用場景 | 技術亮點 |
|---|---|---|---|
| NestJS | 10.x | 企業級框架,構建可擴展的服務端應用 | • 依賴注入<br>• 模組化設計<br>• 裝飾器語法<br>• 內建 TypeScript |
| Prisma | 5.x | 類型安全的資料庫 ORM | • 自動生成類型<br>• 資料庫遷移<br>• 強大的查詢構建器<br>• 多資料庫支持 |
| PostgreSQL | 14+ | 主資料庫,儲存核心業務資料 | • ACID 事務<br>• JSON 支持<br>• 豐富的資料類型<br>• 強大的查詢優化 |
| Redis | 7+ | 快取、Session、分佈式鎖 | • 高性能快取<br>• 資料過期策略<br>• 發佈訂閱<br>• 分佈式鎖 |
| JWT | - | 無狀態身份認證 | • Token 認證<br>• Refresh Token<br>• 跨域認證<br>• 行動端友好 |
| Passport | - | 認證中介 | • 策略模式<br>• 多種認證方式<br>• 易於擴展 |
| Pino | - | 高性能結構化日誌 | • JSON 日誌<br>• 低開銷<br>• 日誌輪轉<br>• 多傳輸通道 |
| Swagger | - | API 文檔自動生成 | • 互動式文檔<br>• 自動類型推導<br>• 在線測試 |
| Terminus | - | 健康檢查與監控 | • K8s 探針<br>• 資料庫檢查<br>• 記憶體監控<br>• 自訂檢查 |
| class-validator | - | 資料驗證 | • 裝飾器驗證<br>• 自訂規則<br>• 嵌套驗證 |
| class-transformer | - | 資料轉換 | • DTO 轉換<br>• 類型映射<br>• 資料脫敏 |
| @nestjs/schedule | - | 定時任務調度 | • Cron 表達式<br>• 間隔任務<br>• 超時控制 |
| nestjs-cls | - | 請求上下文管理 | • 請求追蹤<br>• 使用者上下文<br>• 租戶上下文 |
| 技術 | 版本 | 核心應用場景 | 技術亮點 |
|---|---|---|---|
| Vue 3 | 3.5+ | 漸進式前端框架 | • Composition API<br>• 響應式系統<br>• 虛擬 DOM<br>• 組件化開發 |
| Vite | 7+ | 新一代建構工具 | • 極速冷啟動<br>• HMR 熱更新<br>• 按需編譯<br>• Rollup 打包 |
| Naive UI | 最新 | 企業級組件庫 | • Vue 3 組合式 API<br>• TypeScript 支持<br>• 主題定製<br>• 200+ 組件 |
| UnoCSS | 最新 | 即時原子化 CSS 引擎 | • 零運行時<br>• 高性能<br>• 預設系統<br>• 按需生成 |
| Pinia | 最新 | 下一代狀態管理 | • 輕量級<br>• TypeScript 支持<br>• 模組化<br>• DevTools 支持 |
| Vue Router | 4+ | 官方路由管理 | • 動態路由<br>• 路由守衛<br>• 懶加載<br>• 嵌套路由 |
| Axios | 最新 | HTTP 請求庫 | • Promise API<br>• 攔截器<br>• 請求取消<br>• 自動轉換 |
| TypeScript | 5.x | 類型安全的 JavaScript | • 靜態類型檢查<br>• IDE 智能提示<br>• 重構支持<br>• 介面定義 |
| VueUse | 最新 | Vue 組合式函數集合 | • 常用 Hooks<br>• 響應式工具<br>• 瀏覽器 API 封裝 |
| Elegant Router | 最新 | 基於檔案的路由系統 | • 自動生成路由<br>• 約定式路由<br>• 類型安全 |
| ECharts | 5+ | 數據可視化圖表 | • 豐富的圖表類型<br>• 響應式設計<br>• 主題定製 |
| CryptoJS | - | 加密算法庫 | • AES 加密<br>• RSA 加密<br>• MD5/SHA 哈希 |
┌─────────────────────────────────┐
│ 使用者/客戶端層 │
│ ┌──────────┐ ┌─────────────┐ │
│ │ 瀏覽器 │ │ 行動端App │ │
│ └──────────┘ └─────────────┘ │
└──────────────┬──────────────────┘
│ HTTPS
┌──────────────▼──────────────────┐
│ CDN / Nginx 網關 │
│ • 靜態資源快取 │
│ • 反向代理 │
│ • 負載均衡 │
│ • SSL 證書 │
└──────────────┬──────────────────┘
│
┌──────────────────────┴──────────────────────┐
│ │
┌───────────────▼────────────────┐ ┌───────────────────▼──────────┐
│ 前端應用 (Vue3) │ │ 後端應用 (NestJS) │
│ │ │ │
│ ┌──────────────────────────┐ │ │ ┌────────────────────────┐ │
│ │ UI 層 (Naive UI) │ │ │ │ 控制器層 (Controllers)│ │
│ │ • 組件庫 │ │ │ │ • 路由定義 │ │
│ │ • 主題定製 │ │ │ │ • 請求驗證 │ │
│ │ • 響應式佈局 │ │ │ │ • 參數轉換 │ │
│ └──────────────────────────┘ │ │ └────────────────────────┘ │
│ │ │ │ │
│ ┌──────────────────────────┐ │ │ ┌───────────▼─────────────┐ │
│ │ 狀態層 (Pinia Store) │ │ │ │ 守衛層 (Guards) │ │
│ │ • 全局狀態 │ │ │ │ 1. TenantGuard │ │
│ │ • 使用者信息 │ │ │ │ 2. AuthGuard │ │
│ │ • 權限數據 │ │ │ │ 3. RolesGuard │ │
│ └──────────────────────────┘ │ │ │ 4. PermissionGuard │ │
│ │ │ └───────────┬─────────────┘ │
│ ┌──────────────────────────┐ │ │ │ │
│ │ 路由層 (Vue Router) │ │ │ ┌───────────▼─────────────┐ │
│ │ • 動態路由 │ │ │ │ 攔截器層 (Interceptors)│ │
│ │ • 路由守衛 │ │ │ │ 1. DecryptInterceptor │ │
│ │ • 懶加載 │ │ │ │ 2. DemoInterceptor │ │
│ └──────────────────────────┘ │ │ │ 3. TransformInter... │ │
│ │ │ │ 4. LoggingInterceptor │ │
│ ┌──────────────────────────┐ │ │ └───────────┬─────────────┘ │
│ │ 請求層 (Axios) │ │ │ │ │
│ │ • 請求攔截 │◄─┼───────┼──────────────┤ │
│ │ • 響應攔截 │ │ │ ┌───────────▼─────────────┐ │
│ │ • 錯誤處理 │ │ │ │ 业务層 (Services) │ │
│ │ • 請求加密 │ │ │ │ • 系統管理 Service │ │
│ └──────────────────────────┘ │ │ │ • 權限管理 Service │ │
│ │ │ │ • 監控管理 Service │ │
└─────────────────────────────────┘ │ │ • 租戶管理 Service │ │
│ └───────────┬─────────────┘ │
│ │ │
│ ┌───────────▼─────────────┐ │
│ │ 資料訪問層 (Prisma) │ │
│ │ • Schema 定義 │ │
│ │ • 類型生成 │ │
│ │ • 查詢構建器 │ │
│ │ • 租戶擴展 │ │
│ └───────────┬─────────────┘ │
└──────────────┼────────────────┘
│
┌────────────────────────────────┼────────────────┐
│ │ │
┌───────────▼──────────┐ ┌──────────▼──────────┐ │
│ PostgreSQL 資料庫 │ │ Redis 快取 │ │
│ • 主資料儲存 │ │ • 會話儲存 │ │
│ • 事務支持 │ │ • 資料快取 │ │
│ • 索引優化 │ │ • 分佈式鎖 │ │
└───────────────────────┘ └─────────────────────┘ │
│
┌──────────────────────────────────────────────────────────┐ │
│ 外部服務集成 │ │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────┐ │ │
│ │ OSS 對象儲存│ │ 郵件服務 │ │ 短信服務 │ │ │
│ │ • 阿里雲 │ │ • SMTP │ │ • 阿里雲 │ │ │
│ │ • 七牛雲 │ │ • SendGrid │ │ • 騰訊雲 │ │ │
│ │ • MinIO │ └──────────────┘ └────────────────┘ │ │
│ └─────────────┘ │ │
│ ┌──────────────────────────────────────────────────────┐│ │
│ │ 監控與日誌 ││ │
│ │ • Prometheus (指標採集) ││ │
│ │ • Grafana (可視化) ││ │
│ │ • Pino Logger (日誌) ││ │
│ │ • Terminus (健康檢查) ││ │
│ └──────────────────────────────────────────────────────┘│ │
└──────────────────────────────────────────────────────────┘ │
│
┌──────────────────────────────────────────────────┘
│ 部署環境 (可選)
│ ┌──────────────────────────────┐
│ │ Docker 容器化 │
│ │ • 應用容器 │
│ │ • 資料庫容器 │
│ │ • Redis 容器 │
│ └──────────────────────────────┘
│ ┌──────────────────────────────┐
│ │ Kubernetes 編排 │
│ │ • Pod 管理 │
│ │ • Service 暴露 │
---
原文出處:https://juejin.cn/post/7586663700901298185