该项目是一个企业级低代码元数据平台,核心组件分布在以下包中:
| 组件 |
包路径 |
功能 |
| ObjectManager |
packages/plugin-designer/src/ObjectManager.tsx |
对象定义的 CRUD 管理 |
| FieldDesigner |
packages/plugin-designer/src/FieldDesigner.tsx |
字段的创建、编辑、删除 |
| ObjectManagerPage |
apps/console/src/pages/system/ObjectManagerPage.tsx |
系统管理页面(整合两者) |
| ModalForm |
packages/plugin-form/src/ModalForm.tsx |
弹窗表单(用于对象创建/编辑) |
| ObjectForm |
packages/plugin-form/src/ObjectForm.tsx |
对象数据表单 |
三、🔴 关键问题:修改仅保存到本地状态
这是最核心的问题。经过代码追踪,所有对象和字段的修改仅更新了组件的 local state,没有持久化到后端 API:
问题 1:ObjectManagerPage 的 handleObjectsChange 仅更新本地状态
const handleObjectsChange = useCallback((updated: ObjectDefinition[]) => {
setLocalObjects(updated); // ← 仅更新 local state
toast.success('Object definitions updated'); // ← 显示成功但实际未持久化
}, []);
问题 2:ObjectDetailView 的 handleFieldsChange 同样仅更新本地状态
const handleFieldsChange = useCallback((updated: DesignerFieldDefinition[]) => {
setLocalFields(updated); // ← 仅更新 local state
toast.success('Field configuration updated'); // ← 显示成功但实际未持久化
}, []);
问题 3:缺少后端 API 集成层
data-objectstack 包(ObjectStackAdapter)提供了完整的 CRUD 方法(create、update、delete),但元数据管理接口(对象定义和字段定义的 CRUD)尚未与后端连通。当前的数据流是:
MetadataProvider → 从 discovery/metadata API 读取 → 只读展示
ObjectManager/FieldDesigner → 本地修改 → toast 提示 → 刷新页面后丢失
四、🔧 需要修复的问题清单
| # |
问题 |
严重程度 |
位置 |
| 1 |
对象创建/修改不持久化到后端 |
🔴 Critical |
ObjectManagerPage.handleObjectsChange |
| 2 |
字段添加/修改不持久化到后端 |
🔴 Critical |
ObjectDetailView.handleFieldsChange |
| 3 |
缺少元数据管理 API 服务层 |
🔴 Critical |
data-objectstack 或新服务 |
| 4 |
toast 提示误导用户认为已保存 |
🟡 Major |
同上两处 |
| 5 |
页面刷新后所有修改丢失 |
🔴 Critical |
架构设计层 |
| 6 |
ObjectManager 的 onObjectsChange 没有 error handling |
🟡 Major |
ObjectManager.tsx |
五、修复方案
需要创建一个完整的元数据管理服务层,将 ObjectManagerPage 从纯本地状态驱动转为 API 驱动的持久化操作。
- 新建
MetadataService:封装对象和字段的 CRUD API 调用
- 重构
ObjectManagerPage:handleObjectsChange 和 handleFieldsChange 调用真实 API
- 添加加载/错误状态:在 API 操作期间显示加载指示器和错误处理
- 乐观更新模式:先更新 UI,API 失败时回滚
- 更新测试用例:覆盖 API 集成场景
该项目是一个企业级低代码元数据平台,核心组件分布在以下包中:
packages/plugin-designer/src/ObjectManager.tsxpackages/plugin-designer/src/FieldDesigner.tsxapps/console/src/pages/system/ObjectManagerPage.tsxpackages/plugin-form/src/ModalForm.tsxpackages/plugin-form/src/ObjectForm.tsx三、🔴 关键问题:修改仅保存到本地状态
这是最核心的问题。经过代码追踪,所有对象和字段的修改仅更新了组件的 local state,没有持久化到后端 API:
问题 1:ObjectManagerPage 的
handleObjectsChange仅更新本地状态问题 2:ObjectDetailView 的
handleFieldsChange同样仅更新本地状态问题 3:缺少后端 API 集成层
data-objectstack包(ObjectStackAdapter)提供了完整的 CRUD 方法(create、update、delete),但元数据管理接口(对象定义和字段定义的 CRUD)尚未与后端连通。当前的数据流是:四、🔧 需要修复的问题清单
ObjectManagerPage.handleObjectsChangeObjectDetailView.handleFieldsChangedata-objectstack或新服务onObjectsChange没有 error handlingObjectManager.tsx五、修复方案
需要创建一个完整的元数据管理服务层,将
ObjectManagerPage从纯本地状态驱动转为 API 驱动的持久化操作。MetadataService:封装对象和字段的 CRUD API 调用ObjectManagerPage:handleObjectsChange和handleFieldsChange调用真实 API