a365c8be10e99f8d6a518be9cddb25cdd36cffdc
按用户反馈调整: 1. 路由前缀改成 /api/carlog/* (不再是 /api/vehicles 等) - DEV-PLAN.md Task 2.2 mount 全部加前缀 - 新增 Task 2.3.5: 前端 carlogApi helper - ARCHITECTURE.md 架构图 + 6.1/6.2 代码结构更新 - README.md 同步 2. 删除 W3+ 健身子系统计划 (用户还没决定下一子系统) - ARCHITECTURE.md W3+ 章节改成 "暂不规划" - README.md 实施路线只保留当前阶段 - DEV-PLAN.md "不做的事" 显式列出来 3. 加 Mavis review checklist (6.2/6.3/6.4) - 10 项检查清单 (DB/后端/前端/API baseURL/E2E/数据完整性) - 10 个常见坑 (JSON parse / TINYINT boolean / mount 顺序 ...) - review 通过标准
i — 个人生活操作系统
一个单 Vue + 单 Express + 单 MySQL 的生活操作系统平台,按子系统分代码目录和 API 路径,永远单用户。
第一个子系统是 CarLog(洗车管理系统),将来可能加:健身、阅读、健康等(用户还没决定下一子系统,本阶段不做)。
架构核心
┌────────────────────────────────────────────────────────┐
│ Vue SPA (一个壳子) │
│ │
│ ┌──────────────────────────────────────────────────────┐│
│ │ 总设置 / 子系统管理 / Dashboard (平台层) ││
│ └──────────────────────────────────────────────────────┘│
│ │
│ ┌──────────────────────────────────────────────────────┐│
│ │ 🚗 CarLog | 未来子系统 ││
│ └──────────────────────────────────────────────────────┘│
│ │
└────────────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ Express (一个进程) │
│ ├── /api/platform/* (总设置 / 子系统管理 / Dashboard) │
│ ├── /api/carlog/* (CarLog 子系统, 全部带前缀) │
│ └── /api/{future}/* (将来加的子系统) │
└────────────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ MySQL @ 162.14.110.130:33306 / carlog │
│ │
│ 平台表 (无前缀): │
│ subsystems / platform_settings │
│ │
│ 子系统表 (有前缀): │
│ carlog_vehicles / carlog_wash_records / ... │
│ │
│ (将来加): │
│ fitness_workouts / fitness_plans / ... │
│ reading_books / reading_notes / ... │
└────────────────────────────────────────────────────────┘
物理隔离靠什么
| 维度 | 做法 |
|---|---|
| 数据 | 表前缀 {subsystem}_*(同一 DB 内;CarLog 还没加前缀,留给将来加第二个子系统时) |
| 路由 | 子系统自己的路径空间(/api/carlog/*) |
| 代码 | 子系统独立目录(server/src/subsystems/{name}/、client/src/views/subsystems/{name}/) |
| 设置 | 每个子系统有自己的 settings schema(JSON Schema,存 platform_settings 表,key 前缀 {name}.*) |
| 菜单 | 每个子系统在 subsystems 表注册,平台层根据 category 分组渲染左侧导航 |
没有 JWT / SSO / iframe / 6 端点协议 / 独立 DB — 那些都是过度设计。
实施路线
当前阶段(W1 + W2 一并做)
server/migrations/019_platform.sql(subsystems + platform_settings 表 + seed CarLog)server/src/routes/platform/{subsystems,settings,dashboard}.js- CarLog 代码移到
server/src/subsystems/carlog/(13 个路由文件) - CarLog 路由全部 mount 到
/api/carlog/*(不再是/api/vehicles) - CarLog 前端 view 移到
client/src/views/subsystems/carlog/ - 前端 API 改用
carlogApihelper(自动加/api/carlog/前缀) client/src/views/Platform/{GlobalSettings,SubsystemSettings,Subsystems}.vueclient/src/stores/platform.js+AppLayout.vue元数据驱动菜单- 测试(12-20 个平台测试)+ 手动 E2E 验证
暂不做(用户没决定)
- ❌ 加第二个子系统(健身 / 阅读 / 任何)
- ❌ CarLog 表前缀迁移(
carlog_*) - ❌ 跨子系统 dashboard widget
- ❌ 多用户 / RBAC / 多租户
路线原则
- 永远单用户:不要 RBAC / 多租户 / 权限 scope
- 一个进程一个 SPA:不分部署不分 iframe
- 元数据驱动 UI:subsystem 的 settings_schema / nav_items 走 JSON,不硬编码
- 物理目录隔离:subsystem 代码独立目录,加新子系统不会乱碰现有代码
- 永远向后兼容:CarLog 的现有功能不破
详细见 docs/ARCHITECTURE.md 和 docs/DEV-PLAN.md。
Git 仓库
- 仓库:https://gitea.img2img.com/wsh5485/i.git
- 平台:Gitea
- 推送:osxkeychain 自动记住 token
- 推送:osxkeychain 自动记住 token
Description
Languages
JavaScript
52.8%
Vue
46.2%
CSS
0.7%
HTML
0.3%