一套底座,装出第 N 个管理系统
后台做多了会发现:每个项目都在重复写同一批和业务无关的东西。IMS 就是把这些重复的部分一次性做进底座。
每开一个后台,登录与权限再写一遍
登录页、令牌刷新、路由守卫、角色分配——这些和业务无关,却占掉每个项目开头一大块时间。
权限散在四个地方,改一处要动四处
菜单写一遍、路由写一遍、按钮上再判一次、接口里还要校验一次,版本一多就对不上。
现场没有外网,界面却要去公网取资源
内网或离线环境交付时,字体、图标、CDN 依赖会一个个变成现场问题。
客户已有业务系统,只缺一个管理界面
业务逻辑都在老系统里,没必要为了一个后台把整套重写一遍。
IMS 的取向是「能力等于所挂载插件之和」——插件越积越多,能力越强,而壳尽量保持小。 加一个能力,就是清单里多注册一个插件。
装一个系统,就是挂一份插件清单
插件是唯一的技术概念:一个能力就是一个插件包,前端路由与菜单、后端接口与建表都写在包里,清单里显式注册即可——不扫描 node_modules。
插件清单 plugins: [ … ]
基座
起手模板(壳 + 通用能力)
第 N 个管理系统
同一套基座,换一份插件清单就是另一个系统;不需要的能力把插件摘掉即可
界面预览
登录页和管理后台壳都在同一套基座里。应用名、主题色、Logo 三级回落,私有化现场改品牌不用重新构建。

技术架构
两张图分别是整体的分层与一次请求的路径。图比较密,点开可以放大看。
总体架构
生态层(框架仓 → 分发 → 下游应用仓)与运行时层(装配面 → 能力面 / 请求面 → 服务端 → 数据层),以及上游优先的演进循环。
运行时分层
一次装配、一次请求分别经过哪几层:客户端与宿主装配 → 能力面 / 请求面 → Nitro 运行时与 API → 数据层 → 发布。
核心能力
下面这些能力在框架里都有对应实现;插件体系仍在持续演进,新提案按版本滚动进来。
插件化装配
一个能力就是一个插件包:前端的路由、菜单、权限码与后端的声明、建表都写在包里,清单里显式注册即可。不扫描 node_modules,带依赖校验与命名冲突检测。
权限一处声明
权限节点的真值写在代码里,菜单、路由、按钮和接口都只是引用它,数据库只是幂等副本。调整权限后短缓存内生效,不需要等用户重新登录。
管理后台壳
侧边栏折叠、多标签页、明暗主题与多套预设配色、偏好设置、中英双语——新系统直接继承,不从零搭一遍。
双模式与多方言数据层
同一套代码:mock 模式走内存数据,零配置就能跑起来看界面;real 模式走 Drizzle。一份 schema 生成 SQLite / MySQL / PostgreSQL / Cloudflare D1。
表单工作流
模板 → 拖拽设计器 → 运行时渲染 → 提交落库,是一条完整闭环。采集类需求不用再单独开发一遍,模板带版本与草稿/发布状态。
对外对接与实时通道
第三方接口按「通道」声明式接入,由宿主统一注入凭据;也可以把既有系统的接口当主 API 接进来。往来消息支持 SSE 与 WebSocket。
适合什么,边界在哪
管理系统的需求差别很大,先把边界对齐比做完再返工省事。
适合
- 一套机制要连续交付多个管理后台的团队,第二个系统开始省时间
- 已有业务系统、只需要补一个管理界面的项目
- 要私有化、内网或离线环境交付的客户
- 需要按钮级与接口级用同一套权限定义的组织
当前不做
- 需要审批流或工作流引擎的:框架里没有 BPM,表单工作流是「设计 → 渲染 → 提交」这条链路
- 要国产数据库适配或等保测评材料的:数据层目前是 SQLite / MySQL / PostgreSQL / Cloudflare D1 四种方言
- 要多租户 SaaS 与在线计费的:目前是每个项目独立部署,租户与计费面不在框架里
技术栈
全栈 TypeScript,前端与后端一套语言、一套类型。
- 前端
- Vue 3 + TypeScript + Vite,配套自研组件库
- 服务端
- Nitro + Drizzle ORM,接口与建表由构建期生成,不手写
- 数据
- SQLite / MySQL / PostgreSQL / Cloudflare D1
- 部署
- 自托管 node-server,或 Cloudflare Workers
- 认证
- JWT 双令牌(access / refresh)+ 路由守卫 + 401 静默刷新
- 离线
- 图标构建期本地注册,运行时零公网请求;品牌色与名称运行时改,不重新构建
框架的变化来自真实项目:交付里踩到的坑回流进底座,带着回归测试再发版,而不是先设计一套完整的框架再去猜需求。
