-
Notifications
You must be signed in to change notification settings - Fork 2
对象管理和字段管理界面优化 #1175
Copy link
Copy link
Closed
Description
该项目是一个企业级低代码元数据平台,核心组件分布在以下包中:
| 组件 | 包路径 | 功能 |
|---|---|---|
| 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 集成场景
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels