架构设计
采用"内核布局 + 全局共享模块 + 独立应用外壳"的模块化系统。超级管理员通过配置组合模块生成独立应用,每个应用拥有专属侧边栏与布局,确保不污染原版代码,支持平滑升级与渐进式扩展。
存储方案
所有动态配置与映射统一使用 SQLite(~/.hermes/project/apps.db),包含三个表:apps(应用列表)、app_modules(应用-模块关联)、modules(模块注册表)。JSON 仅用于极静态配置,动态数据与高频读写场景彻底迁移至 SQLite。
模块发现机制
禁止文件系统自动扫描。开发者完成模块后需在注册表中手动添加元数据(ID、名称、图标、组件路径),系统方可识别并渲染。模块纯内容化——模块组件不渲染侧边栏,仅负责业务视图;侧边栏由应用层 AppLayout.vue 统一接管。
目录结构
packages/client/src/project/
├── modules/ ← 全局共享模块(纯视图)
│ └── registry.ts ← ★ 模块注册表(必须在此注册新模块)
├── layouts/ ← 应用布局模板
├── apps/ ← 独立应用外壳
│ └── daily/ ← 示例应用
│ ├── index.vue ← 入口文件
│ └── AppLayout.vue ← 布局+侧边栏
开发规范
1. 模块开发格式:在 modules/ 下创建组件,然后在 registry.ts 中注册
2. 应用配置:应用数据存在 ~/.hermes/project/apps.db
3. 模块业务数据各自独立:~/.hermes/modules/data/<模块名>/xxx.db
4. 严格隔离核心代码:仅修改 router/index.ts、App.vue、登录逻辑及新增架构文件
访问地址
- 示例应用:http://192.168.1.8:8648/#/app/daily
- 管理后台:http://192.168.1.8:8648/#/admin
这个方案的核心就是:模块和应用的映射关系存在 SQLite 里,前端通过 API 动态读取配置来渲染侧边栏和内容区。