实体视图
为您的数据模型创建用户界面,控制数据的显示和交互方式。通过视图配置,您可以为同一个模型创建不同的界面,满足编辑、列表、查看等不同场景的需求。
Entity Engine 支持表单视图(用于单条记录编辑)和网格视图(用于数据列表展示)。系统会根据您的视图配置自动生成对应的用户界面。
创建表单视图
为用户数据创建一个编辑表单,指定要显示的字段和布局:
import { getEntityEngine } from './lib/entity-engine';
const engine = await getEntityEngine();
// 创建用户表单视图
const userFormView = {
name: 'user_form',
title: '用户信息',
modelName: 'User', // 关联到用户模型
viewType: 'form', // 表单类型
items: [
{
name: 'name',
title: '姓名'
},
{
name: 'email',
title: '邮箱地址'
},
{
name: 'age',
title: '年龄'
}
]
};
创建表单视图后,系统会根据模型的字段类型自动选择合适的输入组件,并应用相应的验证规则。
创建网格视图
为用户数据创建一个列表视图,显示多条记录并支持搜索和筛选:
// 创建用户列表视图
const userGridView = {
name: 'user_grid',
title: '用户列表',
modelName: 'User', // 关联到用户模型
viewType: 'grid', // 网格类型
items: [
{
name: 'name',
title: '姓名',
width: 150 // 设置列宽度
},
{
name: 'email',
title: '邮箱地址',
width: 200
},
{
name: 'age',
title: '年龄',
width: 100
},
{
name: 'createdAt',
title: '注册时间',
width: 150
}
]
};
网格视图会自动支持分页、排序和基于字段类型的筛选功能。用户可以点击列标题进行排序,使用筛选框进行数据筛选。
注册和使用视图
将创建的视图注册到 Entity Engine 中,然后在应用中使用:
// 注册表单视图
await engine.metaRegistry.updateOrRegisterView(userFormView);
// 注册网格视图
await engine.metaRegistry.updateOrRegisterView(userGridView);
// 在组件中使用表单视图
function UserEditPage({ userId }) {
return (
<EntityView
modelName="User"
viewName="user_form" // 使用注册的表单视图
mode="edit"
objectId={userId}
/>
);
}
// 在组件中使用网格视图
function UserListPage() {
return (
<EntityView
modelName="User"
viewName="user_grid" // 使用注册的网格视图
mode="list"
/>
);
}
注册后,Entity Engine 会根据视图配置自动生成对应的用户界面,包括字段验证、数据绑定和交互逻辑。
表单布局控制
控制表单中字段的布局和显示方式:
// 创建产品表单视图,控制字段布局
const productFormView = {
name: 'product_form',
title: '产品信息',
modelName: 'Product',
viewType: 'form',
items: [
{
name: 'name',
title: '产品名称',
spanCols: 8 // 占用8列,与后面字段在同一行
},
{
name: 'price',
title: '价格',
spanCols: 4 // 占用4列,与上面字段在同一行
},
{
name: 'description',
title: '产品描述',
spanCols: 12, // 占用全部12列,单独一行
widget: 'textarea' // 指定使用多行文本输入框
},
{
name: 'category',
title: '产品分类',
spanCols: 6
},
{
name: 'status',
title: '产品状态',
spanCols: 6
}
]
};
// 注册并使用产品表单视图
await engine.metaRegistry.updateOrRegisterView(productFormView);
通过 spanCols
属性控制字段占用的列数(总共12列),实现灵活的布局设计。
动态显示控制
根据其他字段的值动态控制字段的显示和必填状态:
// 创建具有条件显示的用户表单
const conditionalUserForm = {
name: 'conditional_user_form',
title: '用户注册表单',
modelName: 'User',
viewType: 'form',
items: [
{
name: 'userType',
title: '用户类型' // 选择用户类型:个人或企业
},
{
name: 'name',
title: '姓名',
showWhen: "userType === 'personal'" // 只在个人用户时显示
},
{
name: 'companyName',
title: '公司名称',
showWhen: "userType === 'business'", // 只在企业用户时显示
requiredWhen: "userType === 'business'" // 企业用户必填
},
{
name: 'idNumber',
title: '身份证号',
showWhen: "userType === 'personal'",
requiredWhen: "userType === 'personal'"
},
{
name: 'email',
title: '邮箱地址', // 所有类型都显示
isRequired: true
}
]
};
支持的条件控制属性:
showWhen
- 显示条件hiddenWhen
- 隐藏条件requiredWhen
- 动态必填条件readOnlyWhen
- 动态只读条件
网格视图高亮功能
为网格视图添加条件高亮,帮助用户快速识别重要信息:
// 创建带有高亮功能的产品列表
const productGridWithHighlight = {
name: 'product_grid_highlight',
title: '产品列表',
modelName: 'Product',
viewType: 'grid',
items: [
{ name: 'name', title: '产品名称', width: 200 },
{ name: 'price', title: '价格', width: 120 },
{ name: 'stock', title: '库存', width: 100 },
{ name: 'status', title: '状态', width: 100 }
],
// 定义高亮规则
hilites: [
{
when: "status === 'discontinued'",
color: '#ef4444' // 停产产品显示红色
},
{
when: "stock < 10",
color: '#f59e0b' // 低库存产品显示橙色
},
{
when: "price > 1000",
color: '#10b981' // 高价产品显示绿色
}
]
};
// 注册高亮视图
await engine.metaRegistry.updateOrRegisterView(productGridWithHighlight);
高亮规则会自动应用到每一行数据,帮助用户快速识别不同状态的记录。例如,停产产品会以红色背景显示,低库存产品会以橙色背景显示。
多种视图模式
同一个视图可以在不同模式下使用,提供不同的交互体验:
// 创建新用户(创建模式)
function CreateUserPage() {
return (
<EntityView
modelName="User"
viewName="user_form"
mode="create" // 创建模式,显示空表单
/>
);
}
// 编辑用户(编辑模式)
function EditUserPage({ userId }) {
return (
<EntityView
modelName="User"
viewName="user_form"
mode="edit" // 编辑模式,加载现有数据
objectId={userId}
/>
);
}
// 查看用户(只读模式)
function ViewUserPage({ userId }) {
return (
<EntityView
modelName="User"
viewName="user_form"
mode="view" // 查看模式,所有字段只读
objectId={userId}
/>
);
}
// 用户列表(列表模式)
function UserListPage() {
return (
<EntityView
modelName="User"
viewName="user_grid"
mode="list" // 列表模式,显示所有记录
/>
);
}
不同模式下,Entity Engine 会自动调整用户界面的行为,如是否显示保存按钮、字段是否可编辑等。
视图组合使用
为同一个模型创建多个视图,满足不同场景需求:
// 简化的创建表单
const userCreateForm = {
name: 'user_create_simple',
title: '快速创建用户',
modelName: 'User',
viewType: 'form',
items: [
{ name: 'name', title: '姓名' },
{ name: 'email', title: '邮箱地址' }
]
};
// 详细的编辑表单
const userDetailForm = {
name: 'user_detail_form',
title: '用户详细信息',
modelName: 'User',
viewType: 'form',
items: [
{ name: 'name', title: '姓名', spanCols: 6 },
{ name: 'email', title: '邮箱地址', spanCols: 6 },
{ name: 'phone', title: '电话号码', spanCols: 6 },
{ name: 'age', title: '年龄', spanCols: 6 },
{ name: 'address', title: '联系地址', spanCols: 12, widget: 'textarea' },
{ name: 'bio', title: '个人简介', spanCols: 12, widget: 'textarea' }
]
};
// 管理员列表视图
const userAdminGrid = {
name: 'user_admin_grid',
title: '用户管理',
modelName: 'User',
viewType: 'grid',
items: [
{ name: 'name', title: '姓名', width: 150 },
{ name: 'email', title: '邮箱', width: 200 },
{ name: 'phone', title: '电话', width: 130 },
{ name: 'status', title: '状态', width: 100 },
{ name: 'createdAt', title: '注册时间', width: 150 }
],
hilites: [
{ when: "status === 'inactive'", color: '#ef4444' }
]
};
// 注册所有视图
await engine.metaRegistry.updateOrRegisterView(userCreateForm);
await engine.metaRegistry.updateOrRegisterView(userDetailForm);
await engine.metaRegistry.updateOrRegisterView(userAdminGrid);
这样您就有了三个不同的视图:简化创建表单、详细编辑表单和管理员列表,每个都针对特定的使用场景优化。
最佳实践
视图设计原则
针对用户任务:为不同的用户任务创建不同的视图。创建时只显示必要字段,编辑时显示详细信息。
合理布局:相关字段组合在一起,使用合适的列宽和间距,保持视觉上的整齐。
清晰标识:使用有意义的视图名称和标题,让用户能够快速理解当前界面的作用。
性能考虑
字段数量:网格视图中不要显示过多字段,优先显示用户最关心的信息。
条件表达式:保持条件显示和高亮规则的简单,避免复杂的计算。
// ✅ 推荐:简单条件
showWhen: "status === 'active'"
// ❌ 避免:复杂计算
showWhen: "calculateComplexBusinessLogic(status, type, date) > threshold"
现在您已经掌握了如何创建和使用实体视图。接下来可以学习如何使用模块系统来组织和管理这些视图。