Stories

Detail Return Return

robot-admin 一個現代化的基於業務場景的中後台解決方案 - Stories Detail


我做了個 Vue3 的中後台框架,想和你聊聊背後的故事

不是技術博客,只是一個前端開發者的自白

開篇

你好,我是 CHENY。一個有點代碼潔癖的前端開發者。

今天想和你聊聊我最近做的一個開源項目 —— Robot Admin。不聊技術有多牛,不聊架構有多先進,就想和你説説,為什麼要做這個項目,以及它能幫你解決什麼問題。

為什麼又是一個後台框架?

是的,我知道。GitHub 上的後台框架已經夠多了。

但團隊每次接手新項目時,我還是會犯愁。用 vue-element-admin?功能是全,但好多東西用不上,而且技術棧有點老了。用 Ant Design Pro?是 React 的,團隊都是 Vue 技術棧。當然還有很多社區其他非常優秀的開源項目如 Vben,Geeker,Soybean 等等,都是精品後台,作者也很棒,項目很火,太多了不一一贅述,和平和尊敬。但因顆粒度掌控度和團隊個性契合度都不是那麼融合,最後擔心團隊變成了各種 CV 大法,使用不精細,無法卡控能效,無法提升技術變現的業務專注度,以及部分成員的心智負擔問題等,就擼一個吧,並不是非要重複造輪子。

包括早期搭建的一套框架也垂垂老矣不甚滿意,基於對 vitebun 的喜愛,乾脆重新搞一個?時間啊...

更讓人頭疼的是,每個項目都在重複同樣的工作:

  • 配置路由、配置權限、寫登錄頁
  • 封裝 axios、處理 token、寫攔截器
  • 找圖表庫、找編輯器、找各種組件
  • 調試打包配置、優化首屏加載
  • 啊大海啊,你全是水,你的沉澱在哪裏,團隊沉澱在哪裏...

我想,是不是可以花點時間,結合精益化的管理訴求,期望逐步能效賦能的角度上,做一個框架,搭一個引子,把這些重複的工作都做好,讓大家可以專注於業務開發?

Robot Admin 是什麼?

簡單來説,它是一個基於 Vue 3.5 + TypeScript + Naive UI 的中後台解決方案。

但我更願意把它描述為:一個讓你可以在 30 秒內啓動項目,10 分鐘內完成基礎功能的開發工具

技術選型:每一個選擇都有理由

讓我展開説説為什麼選擇這些技術棧:

核心框架層:

  • Vue 3.5.13 - 不是 3.0,不是 3.2,是最新的 3.5。每個小版本都有性能提升
  • TypeScript 5.8 - 類型體操?不,是為了寫代碼時的智能提示,為了重構時的信心
  • Naive UI 2.41 - 看過它的 Select 組件嗎?那個虛擬列表,1萬條數據照樣絲滑
  • UnoCSS 66.0 - 原子化 CSS,打包後只有用到的樣式,體積極小

構建工具層:

  • Vite 6.2.1 - 不是 webpack,因為我們要的是毫秒級熱更新
  • Bun 1.x - npm install 要 45 秒?Bun 只要 2 秒,不是吹的

狀態管理層:

  • Pinia 3.0.1 - Vuex 的官方繼任者,API 更簡潔,TypeScript 支持更好
  • Vue Router 4.5 - 配合權限系統,實現真正的動態路由
  • VueUse 13.1 - 63 個組合式函數,不用重複造輪子

可視化層:

  • ECharts 5.6 - 國產之光,功能強大,文檔友好
  • AntV X6 2.18 - 流程圖引擎,我們用它做工作流設計器

30 秒啓動是怎麼做到的?

# 傳統方式
npm install  # 喝杯咖啡,刷會兒抖音...(45.6秒)
npm run dev  # 繼續等...(還要10秒)

# Robot Admin (使用 Bun)
bun install  # 2.3 秒搞定!
bun dev      # 瞬間啓動(不到1秒)

這不是理論數據,是我在 16GB 內存的普通筆記本上測試的真實結果。

10 分鐘完成基礎功能?

舉個例子,產品説:"做個用户管理頁面,要有增刪改查,要有權限控制。"

以前你可能需要:

  1. 寫表格組件(30分鐘)
  2. 寫表單彈窗(30分鐘)
  3. 寫搜索功能(20分鐘)
  4. 處理權限邏輯(20分鐘)
  5. 調整樣式(你懂的,可能一下午)

現在呢?

<template>
  <div>
    <!-- 搜索區域 -->
    <c-search v-model="searchParams" :schema="searchSchema" />
    
    <!-- 數據表格 -->
    <c-table 
      :columns="columns" 
      :data="tableData"
      :loading="loading"
      @add="handleAdd"
      @edit="handleEdit"
      @delete="handleDelete"
    />
    
    <!-- 表單彈窗 -->
    <c-form-modal
      v-model:visible="formVisible"
      :schema="formSchema"
      :data="currentRow"
      @submit="handleSubmit"
    />
  </div>
</template>

<script setup>
// 10 分鐘,真的夠了
// 因為增刪改查的邏輯,我們都封裝好了
const { tableData, loading, refresh } = useTable(api.getUserList)
const { formVisible, currentRow, handleSubmit } = useForm(api.saveUser, refresh)
</script>

那些用心的細節

1. 不僅僅是組件,更是解決方案

我們提供了 30+ 個演示頁面,每一個都是從實際項目中提煉出來的:

  • 圖標組件 - 不只是展示圖標,還包括圖標選擇器、動態加載、自定義圖標
  • 地區聯動 - 省市區三級聯動,數據實時更新,支持回顯,還有街道數據
  • 表單佈局 - 8 種佈局模式,響應式自適應,支持動態表單
  • 富文本編輯器 - 集成了圖片上傳、視頻插入、表格編輯、自定義工具欄
  • 權限管理 - RBAC 模型,精確到按鈕級別,支持數據權限

每個 demo 都可以直接複製到你的項目中使用。代碼都在那裏,沒有魔法。

2. 那些提升幸福感的自定義指令

<!-- 再也不用手寫防抖了 -->
<input v-model="keyword" v-debounce:300="search" />

<!-- 一鍵實現複製功能 -->
<button v-copy="text">複製</button>

<!-- 優雅的權限控制 -->
<button v-permission="['admin', 'editor']">刪除</button>

<!-- 防止機密信息截圖 -->
<div v-watermark="'機密文件'">
  重要內容
</div>

<!-- 還有拖拽、長按、節流 -->
<div v-draggable="handleDrag">拖我</div>
<button v-longpress="showMenu">長按顯示菜單</button>
<button v-throttle:1000="submit">提交(1秒內只能點一次)</button>

這些看起來很簡單對吧?但就是這些小細節,能讓你的開發效率提升一大截。

3. 美觀,真的很重要

我選擇了 Naive UI,不僅因為它性能好,更因為它真的很好看。

你看過 Naive UI 的按鈕動效嗎?那個微妙的波紋效果,那個恰到好處的陰影變化... 這些細節會讓你的產品看起來很高級。

配合 UnoCSS 的原子化樣式:

<div class="flex items-center gap-4 p-6 rounded-xl shadow-lg hover:shadow-xl transition-all">
  <!-- 幾個類名,搞定一個漂亮的卡片 -->
</div>

而且 UnoCSS 有完整的 VS Code 插件支持,輸入類名時有智能提示,再也不用記那些類名了。

性能?當然在乎

我們做了很多優化:

  • 首屏加載 < 800ms(gzip 後不到 200KB)
  • 熱更新 < 100ms(真的是毫秒級)
  • 打包體積 < 2MB(包含所有依賴)
  • 虛擬列表 - 10萬條數據照樣流暢滾動

但説實話,作為開發者,我更在乎的是開發時的體驗。那種改完代碼立刻看到效果的感覺,那種不用等待編譯的流暢感,這才是我追求的。

具體的優化措施

// 1. 路由懶加載 + 預加載
{
  path: '/dashboard',
  component: () => import('./views/dashboard/index.vue'),
  meta: { preload: true } // 鼠標懸停時預加載
}

// 2. 組件按需引入(自動的)
// 不需要手動 import,unplugin-vue-components 會自動處理

// 3. 圖片懶加載
<img v-lazy="imageSrc" />

// 4. 虛擬滾動
<c-virtual-table :data="largeDataset" :height="600" />

關於權限,我們是認真的

很多項目的權限都是做做樣子,Robot Admin 的權限是真的可以用到生產環境:

// 路由權限 - 自動過濾無權限路由
const routes = await permissionStore.generateRoutes()

// 菜單權限 - 動態生成菜單
const menus = computed(() => permissionStore.menus)

// 按鈕權限 - 精確控制
<button v-if="hasPermission('user:create')">新建</button>

// API權限 - 請求自動校驗
api.createUser() // 自動檢查權限,無權限直接攔截

// 數據權限 - 行級數據過濾
const tableData = computed(() => {
  return data.filter(item => hasDataPermission(item))
})

最重要的是,這些都是配置化的,不需要你寫一堆 if-else。

完整的生態支持

看看我們集成了多少優秀的工具:

開發工具鏈:

  • ESLint 9.21 + Prettier 3.5 - 代碼規範自動化
  • Husky 7.0 + Commitizen - Git 提交規範化
  • Vitest 3.0 - 單元測試,速度比 Jest 快 10 倍
  • TypeScript 5.8 - 完整的類型支持

業務組件庫:

  • WangEditor 4.7 - 輕量級富文本編輯器
  • @kangc/v-md-editor 2.3 - Markdown 編輯器
  • Driver.js 1.3 - 新手引導
  • vue-draggable-plus 0.6 - 拖拽排序
  • @fullcalendar/vue3 6.1 - 完整的日曆組件
  • xlsx 0.18 - Excel 導入導出

可視化方案:

  • ECharts 5.6 - 數據可視化
  • @antv/x6 2.18 - 流程圖
  • @vue-flow/core 1.45 - 流程編輯器
  • @splinetool/runtime 1.9 - 3D 場景

一些真實的使用場景

場景1:緊急項目,明天要演示

# 10分鐘搭建起來
git clone https://github.com/ChenyCHENYU/Robot_Admin.git
cd robot_admin
bun install && bun dev

# 改個 LOGO,調整下主題色
# 把演示數據換成真實數據
# 搞定,可以演示了

場景2:從老項目遷移

我們保持了很多熟悉的 API 設計:

// 如果你用過 element-admin,這些代碼看起來會很熟悉
this.$router.push('/dashboard')
this.$message.success('操作成功')
this.$confirm('確定刪除嗎?')

// 但底層都用最新的技術重寫了
// 比如 $message 其實是:
const message = useMessage() // 組合式 API

場景3:團隊協作開發

// 完整的 TypeScript 支持
interface User {
  id: number
  name: string
  role: Role
  department: Department
  permissions: Permission[]
}

// 寫代碼時有完整的類型提示
const user: User = await api.getUser(id)
user.name // <- 這裏會有自動補全
user.permissions // <- 知道這是 Permission 數組

場景4:複雜的業務需求

比如一個工作流設計器:

<template>
  <c-flow-designer
    v-model="flowData"
    :nodes="nodeTypes"
    :validators="validators"
    @save="handleSave"
  />
</template>

<script setup>
// 是的,一個組件搞定
// 支持拖拽、連線、驗證、導出
</script>

項目架構:清晰且可擴展

Robot_Admin/
├── src/
│   ├── api/              # 接口層,統一管理
│   ├── components/       # 組件庫
│   │   ├── global/       # 全局組件(30+ 核心組件)
│   │   └── local/        # 頁面級組件
│   ├── views/            # 頁面視圖
│   │   ├── dashboard/    # 數據看板
│   │   ├── demo/         # 30+ 演示頁面
│   │   └── sys-manage/   # 系統管理
│   ├── stores/           # Pinia 狀態管理
│   ├── composables/      # 組合式函數
│   ├── hooks/            # 自定義 Hooks
│   ├── directives/       # 自定義指令(7個)
│   ├── router/           # 路由配置
│   ├── utils/            # 工具函數
│   └── types/            # TypeScript 類型

每個目錄都有明確的職責,新人上手也能快速理解項目結構。

未來的計劃

Robot Admin 還在成長,我有一些計劃:

近期(已在進行):

  • 完善文檔站點 - 每個組件都有詳細的 API 文檔
  • 增加更多業務組件 - 地圖組件、視頻播放器、PDF 預覽
  • 優化移動端體驗 - 響應式優化,手勢支持

中期規劃:

  • 支持微前端架構 - 可以接入老項目
  • 插件化系統 - 按需加載功能模塊
  • 可視化頁面搭建 - 拖拽生成頁面

長期願景:

  • 全棧解決方案(集成 NestJS)
  • 跨端支持(Electron 桌面應用)
  • AI 輔助開發 - 自然語言生成代碼

架構演進路線:

  • 當前:Monomer(單體應用)
  • 接下來:Monorepo(單倉多包)
  • 計劃中:MicroApp(微前端)
  • 最終:NestJS(全棧方案)

但這些都不是最重要的。最重要的是,我希望 Robot Admin 能真正幫到你,讓你可以:

  • 少加班,多陪家人
  • 少寫重複代碼,多做有創造性的工作
  • 讓開發變成一件愉快的事
  • 有那麼一點點代碼潔癖,對編寫的代碼有掌控欲

寫在最後

我是 CHENY,一個普通的前端開發者,也是一個有點理想主義的人。

做這個項目的初衷很簡單:讓厭倦了重複工作的團隊和夥伴,想要更好的開發體驗,花更多的時間在業務場景和技術精度上。我相信還有很多人和我一樣。

Robot Admin 不是完美的,它還有很多需要改進的地方。但我會持續維護它,因為我自己的項目也在用它,我們團隊的項目也在用它。

目前的數據:

  • GitHub Stars:9+(雖然不多,但每一個都很珍貴)
  • Forks:11+(有人 fork 説明真的有用)
  • 技術棧:50+ 精選依賴,每一個都經過考量

如果你:

  • 正在尋找一個現代化的 Vue3 中後台方案
  • 希望有更好的開發體驗
  • 不想重複造輪子
  • 認同我的理念
  • 也有一點代碼潔癖

那麼,不妨試試 Robot Admin。

項目地址: https://github.com/ChenyCHENYU/Robot_Admin\
在線演示: https://www.robotadmin.cn\
文檔地址: https://www.tzagileteam.com

如果覺得還不錯,給個 Star 鼓勵一下?

如果遇到問題,直接提 Issue,我看到都會回覆。

如果有好的想法,歡迎 PR,一起讓它變得更好。


最後的最後

謝謝你看到這裏。

做開源不易,但能幫到別人的感覺真的很好。

希望 Robot Admin 能為你的開發工作帶來一點點便利。

哪怕只是讓你早下班一個小時,我覺得就值了。

記住:好的工具不僅要功能強大,更要讓開發者用得愉快。

祝好。

CHENY\
2025.07


#Vue3 #中後台 #開源項目 #前端開發 #TypeScript #Bun #NaiveUI

Add a new Comments

Some HTML is okay.