跳转到内容

模板约定

脚手架的核心是 templates/ 目录:其中的文件就是用户最终拿到的文件。修改模板等同于修改生成出来的项目。

不同技术栈的目录组织刻意不做统一,而是各自遵循该语言的社区惯例:

模板 组织方式
backend-python/ 领域模块化:app/core/(基础设施)+ 每个业务域一个包(auth/、user/、role/、permission/、menu/ …),包内含 models.py / schemas.py / crud.py / router.py
backend-java/ 按层:controller/、service/、repository/、entity/、dto/,另有 common/、config/、security/
frontend-react/ 与 frontend-vue/ 按功能:页面在 pages/settings/<Domain>/,接口按域拆分在 api/,类型按域拆分在 types/
  • 前端与后端 UI 文案统一使用中文。
  • 接口响应固定为 { code: 0, message: "success", data },错误使用 code: -1。
  • TS/JS 变量用 camelCase,组件用 PascalCase。
  • Python 的 Pydantic schema 字段用 camelCase(如 roleId),ORM 字段用 snake_case(如 role_id)。
  • Python 的 ApiResponse / PaginatedData 位于 app/core/schemas.py。
  • 权限码目录是唯一来源:Python app/core/permissions_catalog.py,Java config/PermissionCatalog.java。
  • 菜单展示与鉴权分离:permissions 只负责授权,menu_groups / menu_items 负责分组、路由、图标与顺序。
  • 菜单权限必须通过菜单管理创建;内置菜单不可删除,自定义菜单删除时要同步清理角色授权。
  • 数据导出包使用 manifest.json + schema.sql + checksums.sha256 + data/*.jsonl,只支持同后端、同版本恢复;app_state 不入包。
  • 前端 HTTP 层是轻量的 fetch 封装(api/client.ts),不要引入 axios。
  • fetch 封装需要显式支持二进制下载、FormData 上传和自定义状态头,不能把所有响应都按 JSON 固定解析。