Files
yidaima/RuoYi-Vue/docs/superpowers/specs/2026-07-07-architecture-diagram-dsl-editor-design.md

97 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 系统架构图 DSL 编辑器设计
## 目标
将现有 `图表中心 > 系统架构图` 从简单横向节点图升级为截图风格的架构图编辑器。用户进入页面时,系统根据当前项目数据自动生成一份架构图 DSL 初稿;用户可编辑 DSL、生成预览、保存草稿并导出 SVG/PNG。
## 当前基础
- 前端已有 `easycode-web/src/views/DiagramCenterView.vue`,提供 ER 图、功能模块图、架构图、项目总览图和 AI 图表入口。
- 架构图当前由 `buildArchitectureGraph()` 生成通用节点图,缺少 DSL 编辑、分层架构布局和横切关注点侧栏。
- 图表保存已经通过 `saveProjectDiagram(projectId, payload)` 写入 `front_project_diagram``diagramType='architecture'` 可复用。
- 导出能力已有 SVG/PNG 浏览器端实现,可继续复用。
## DSL 语法
采用缩进文本 DSL贴近截图中的编辑体验
```text
用户层
学生
选课 / 查成绩
教师
课程管理 / 成绩录入
表现层 - Vue 3 前端
Vue 3
Composition API
Vue Router 路由
横切关注点
JWT 认证
登录签发 Token
```
规则:
- 顶格行为层名,可用 ` - ``—` 附加副标题。
- 缩进 2 个空格为组件标题。
- 缩进 4 个空格为组件说明,可多行。
- 层名为 `横切关注点` 时,不进入主纵向架构流,而是渲染到右侧关注点栏。
- 空行忽略;无法归类的行尽量按最近层/组件吸收,避免用户轻微格式错误导致整图不可用。
## 默认 DSL 生成
进入系统架构图时优先加载已保存的 `architecture` 草稿;若没有保存草稿,则根据当前项目数据生成默认 DSL
- 用户层:从 `appBlueprint.roles` 或项目菜单推断角色,缺省为“普通用户/管理员”。
- 表现层:使用 Vue 3、Element Plus、Axios补充前台/后台菜单数量。
- 接口层Spring MVC Controller、统一接口规范、统一响应封装。
- 业务逻辑层:从业务模块、菜单或数据库表提取服务组件,缺省提供用户服务、业务服务、文件服务。
- 持久层MyBatis、Mapper、分页和连接池。
- 数据层MySQL、本地文件系统展示表数量。
- 运行环境Windows/Mac、JDK 8+、Node.js 16+、Spring Boot、MySQL。
- 横切关注点JWT 认证、全局异常、接口规范、跨域配置。
## 交互设计
`activeDiagram === 'architecture'` 时显示专用编辑器:
- 顶部工具栏显示“系统架构图”、层数/组件数统计、黑白模式、保存、导出 SVG、导出 PNG。
- 左侧为 DSL 编辑区,提供“清空”“加载示例”“换一换”“生成预览”。
- 右侧为可滚动 SVG 预览,主架构层纵向排列,层之间用箭头连接;横切关注点在右侧独立粉色侧栏显示。
- 预览失败时保留编辑区,右侧显示可诊断的空态或错误提示。
- 保存时写入 `diagramJson`,结构包含 `dsl``graph``blackWhite`,后续重新进入页面可恢复。
## 渲染设计
新增前端工具模块负责纯函数处理:
- `buildDefaultArchitectureDsl(project, database, blueprint)`:生成默认 DSL。
- `parseArchitectureDsl(dsl)`:解析为 `{ layers, concerns, stats, errors }`
- `buildArchitectureDiagram(parsed, options)`:计算 SVG 坐标、画布尺寸、层/组件/箭头数据。
- `buildArchitectureExportSvg(diagram, options)`:输出可下载 SVG 字符串。
布局采用固定宽度、响应式外层滚动:
- 主层宽约 620px组件按每行 3 个排列。
- 横切关注点侧栏宽约 190px高度跟随主图。
- 根据组件数量自动增加每层高度。
- 黑白模式仅改变色彩,不改变 DSL、坐标或保存结构。
## 测试
新增 `easycode-web/src/utils/architectureDiagram.test.mjs`
- 默认 DSL 生成包含项目名、前端/后端/数据库核心层。
- DSL 解析能识别层、副标题、组件、说明和横切关注点。
- 布局统计能正确返回层数、组件数,画布尺寸随内容增加。
- 导出 SVG 包含层标题、组件标题和关注点内容。
- 保存恢复结构保持 DSL 和图数据字段稳定。
## 非目标
- 不接 AI 生成 DSL。
- 不做拖拽移动组件。
- 不做历史撤销/重做。
- 不新增后端接口或数据库字段。
- 不替换 ER 图、功能模块图、项目总览图的现有实现。