Skip to content

对象管理和字段管理界面优化 #1175

@hotlong

Description

@hotlong

该项目是一个企业级低代码元数据平台,核心组件分布在以下包中:

组件 包路径 功能
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 方法(createupdatedelete),但元数据管理接口(对象定义和字段定义的 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 驱动的持久化操作。

  1. 新建 MetadataService:封装对象和字段的 CRUD API 调用
  2. 重构 ObjectManagerPagehandleObjectsChangehandleFieldsChange 调用真实 API
  3. 添加加载/错误状态:在 API 操作期间显示加载指示器和错误处理
  4. 乐观更新模式:先更新 UI,API 失败时回滚
  5. 更新测试用例:覆盖 API 集成场景

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions