====== nop-chaos:前端架构 ====== nop-chaos 是 Nop 平台的 Vue3 前端项目,基于 AMIS 框架。后端项目为 nop-entropy(Java)。 前端采用**模型驱动**的架构:后端 Excel 模型直接映射为前端页面,定制通过 Delta 层完成。 ===== 前端技术栈 ===== ^ 技术 ^ 用途 ^ | Vue 3 | 基础框架 | | AMIS | 默认页面渲染引擎(百度开源) | | TypeScript | 开发语言 | | Vite | 构建工具 | AMIS 是一个**JSON 驱动的页面渲染框架**——页面结构用 JSON 描述,不需要手写 HTML 模板。这意味着 Nop 平台的后端可以直接生成 JSON 页面定义,前端只需渲染。 ===== 页面自动生成 ===== 从 Excel 模型到页面的流程: Excel 数据模型 │ ├─→ orm.xml(实体定义) │ │ │ └─→ xview.xml(页面模型) │ │ │ └─→ JSON 页面定义 → AMIS 渲染 每个实体自动生成三个标准页面: * **列表页** — 分页表格,支持搜索、排序、批量操作 * **编辑页** — 表单,支持新增和修改 * **详情页** — 只读展示 这些页面的布局、字段顺序、校验规则全部从 xmeta 元数据推导,无需手写 HTML。 ===== 定制页面 ===== 和后端一样,前端页面也采用 Delta 定制机制。 自动生成的页面定义放在 `_gen/` 目录下。要定制页面,在 `src/` 目录下创建同名 JSON 文件: src/ main/ resources/ _v1/ ← 定制层 nop/ auth/ pages/ NopAuthUser/ NopAuthUser.view.xml ← 覆盖自动生成的页面定义 在定制文件中,可以: * **调整表单布局** — 修改字段顺序、分组 * **添加自定义组件** — 引入 AMIS 扩展组件 * **替换整个页面** — 用 AMIS JSON 完全重写 ===== 页面模型(xview.xml) ===== xview.xml 是页面的抽象描述,它不关心具体用哪个前端框架渲染。
运行期,框架将 xview.xml 转换为 AMIS JSON 供浏览器渲染。如果将来到其他前端框架,只需替换转换器。 ===== AMIS JSON 示例 ===== 后端生成的最终 AMIS JSON 长这样: { "type": "page", "body": { "type": "form", "title": "编辑文章", "api": "/r/ArticleBizModel__save", "body": [ { "type": "input-text", "name": "title", "label": "文章标题", "required": true }, { "type": "input-text", "name": "author", "label": "作者" }, { "type": "editor", "name": "content", "label": "内容" } ] } } AMIS 的 api 字段自动指向后端的 REST 端点 `/r/ArticleBizModel__save`,表单提交时自动调用。 ===== 前端目录结构 ===== nop-chaos/ packages/ nop-core/ ← 核心运行时 nop-amis-editor/ ← AMIS 可视化编辑器 nop-web-site/ ← 主页面框架 build/ dist/ ← 构建产物,被 nop-web 模块打包为 Java jar src/ pages/ ← 手工编写的页面 components/ ← 自定义组件 前端的构建产物被包装为 Java 模块(nop-web-site、nop-web-amis-editor),在开发中不需要单独编译前端。 ===== 自定义组件 ===== 如果 AMIS 内置组件不够用,可以注册自定义 Vue3 组件: // 注册一个 AMIS 组件 import { registerAMISRenderer } from 'nop-core'; registerAMISRenderer({ type: 'my-chart', component: { props: ['data'], template: '
自定义图表
' } });
然后在 AMIS JSON 中直接使用: { "type": "my-chart", "data": "${chartData}" } ===== 总结 ===== Nop 前端的特点: * **模型驱动** — 页面从 xview.xml 自动生成,不需要手写 HTML * **JSON 描述** — AMIS 引擎的 JSON 页面定义易于后端生成和 Delta 定制 * **Delta 定制** — 与后端一致的定制机制,不修改基础页面 * **框架无关** — xview.xml 抽象层使得未来可以切换到其他前端框架 ===== 进一步阅读 ===== * [[https://gitee.com/canonical-entropy/nop-chaos|nop-chaos 前端项目]] * [[https://baidu.github.io/amis/|AMIS 官方文档]] * [[.:graphql_rest_guide|GraphQL 和 REST API]]