Skip to Content

网格视图

网格视图是Entity Engine中专门用于展示列表数据的视图类型,适合处理大量数据的浏览、搜索、排序和批量操作。无论是用户管理、订单列表还是产品目录,网格视图都能提供高效的数据管理体验。

创建网格视图

创建网格视图时,您需要指定要显示的列、配置分页、排序和筛选功能。网格视图支持多种显示模式,包括简单列表、分组显示和可展开行等。

基础列表配置

await engine.metaRegistry.updateOrRegisterView({ modelName: 'User', name: 'UserGridView', title: '用户列表', type: 'GridView', config: { columns: ['avatar', 'name', 'email', 'department', 'status', 'createdAt'], pageSize: 20, sortable: true, searchable: true, filterable: true, actions: ['view', 'edit', 'delete'] } });

高级网格功能

对于复杂的业务场景,网格视图提供了大量高级功能,包括行操作、批量操作、过滤器、排序和导出等。这些功能让用户能够高效地管理大量数据。

await engine.metaRegistry.updateOrRegisterView({ modelName: 'Order', name: 'OrderGridView', title: '订单管理', type: 'GridView', config: { columns: ['orderNumber', 'customer', 'items', 'totalAmount', 'status', 'createdAt'], pageSize: 50, sortable: true, searchable: true, selectable: true, multiSelect: true, actions: [ { name: 'view', title: '查看', icon: 'eye', type: 'link' }, { name: 'edit', title: '编辑', icon: 'edit', condition: 'status == "draft"' }, { name: 'cancel', title: '取消', icon: 'close', variant: 'danger', condition: 'status in ["pending", "confirmed"]' } ], bulkActions: [ { name: 'export', title: '批量导出', icon: 'download' }, { name: 'updateStatus', title: '批量更新状态', icon: 'edit', requiresSelection: true } ], filters: [ { field: 'status', type: 'select', options: ['draft', 'pending', 'confirmed', 'shipped', 'completed', 'cancelled'] }, { field: 'createdAt', type: 'dateRange' }, { field: 'totalAmount', type: 'numberRange' } ], defaultSort: { field: 'createdAt', direction: 'desc' } } });

网格视图类型

分组显示

当需要按照某些字段对数据进行分组显示时,可以使用分组网格。这种显示方式特别适合销售报表、部门统计等场景。

await engine.metaRegistry.updateOrRegisterView({ modelName: 'Sale', name: 'SalesGroupedView', title: '销售分组视图', type: 'GridView', config: { columns: ['product', 'quantity', 'unitPrice', 'amount', 'saleDate'], pageSize: 100, groupBy: [ { field: 'department', title: '部门', expanded: true, showSummary: true }, { field: 'salesperson', title: '销售员', expanded: false, showSummary: true } ], aggregates: [ { field: 'quantity', type: 'sum', title: '总数量' }, { field: 'amount', type: 'sum', title: '总金额' }, { field: 'amount', type: 'avg', title: '平均金额' } ], summary: { position: 'bottom', showTotals: true }, exportOptions: { formats: ['excel'], includeGroups: true, includeSummary: true } } });

可展开行网格

对于具有主从关系的数据,可以使用可展开行网格。用户点击主记录时,可以展开显示相关的子记录。这种方式非常适合订单详情、文件目录等场景。

await engine.metaRegistry.updateOrRegisterView({ modelName: 'Order', name: 'OrderExpandableView', title: '订单主从视图', type: 'GridView', config: { columns: ['orderNumber', 'customer', 'itemCount', 'totalAmount', 'status', 'createdAt'], expandable: true, expandOnClick: true, expandedContent: { type: 'nested-grid', modelName: 'OrderItem', relationField: 'orderId', columns: ['product', 'quantity', 'unitPrice', 'discount', 'subtotal'], showSummary: true } } });

高性能网格

对于需要处理大量数据的场景,Entity Engine 提供了虚拟滚动功能。这种技术只渲染可见区域的数据,大幅提升性能和响应速度。

await engine.metaRegistry.updateOrRegisterView({ modelName: 'Transaction', name: 'TransactionVirtualView', title: '交易记录大量数据', type: 'GridView', config: { columns: ['id', 'type', 'account', 'amount', 'balance', 'timestamp'], performance: { virtualScroll: true, rowHeight: 48, bufferSize: 50, pageSize: 1000, serverSidePaging: true }, features: { sortable: true, filterable: true, searchable: false, selectable: false }, optimizations: { lazyLoading: true, memoizeRows: true, debounceResize: 300 } } });

网格高级功能

自定义单元格渲染

对于复杂的数据展示需求,您可以使用自定义组件来渲染单元格内容。这种方式特别适合显示图表、进度条、复杂状态等内容。

await engine.metaRegistry.updateOrRegisterView({ modelName: 'Product', name: 'ProductCustomView', title: '产品自定义网格', type: 'GridView', config: { columns: ['image', 'name', 'inventory', 'pricing', 'sales', 'status'], rowHeight: 120, pageSize: 25, customWidgets: { image: { widget: 'product-image', props: { size: 64, zoomable: true } }, name: { widget: 'product-info-cell', props: { showSku: true, showCategory: true, linkTo: '/products/{id}' } }, inventory: { widget: 'inventory-indicator', props: { showWarnings: true, lowStockThreshold: 10 } }, sales: { widget: 'sales-chart-cell', props: { chartType: 'sparkline', period: '30d', showTrend: true }, lazy: true } } } });

网格事件处理

网格视图支持多种事件处理,包括行点击、双击、选择变化、排序和筛选等。通过事件处理器,您可以实现复杂的交互逻辑。

await engine.metaRegistry.updateOrRegisterView({ modelName: 'Order', name: 'OrderEventView', title: '订单事件网格', type: 'GridView', config: { columns: ['orderNumber', 'customer', 'totalAmount', 'status'], events: { onRowClick: 'handleRowClick', onRowDoubleClick: 'handleRowDoubleClick', onSelectionChange: 'handleSelectionChange' }, eventHandlers: { handleRowClick: (row, event, context) => { if (event.ctrlKey) { window.open(`/orders/${row.id}`, '_blank'); } else { context.toggleRowSelection(row.id); } }, handleRowDoubleClick: (row, event, context) => { context.openEditDialog(row.id); }, handleSelectionChange: (selectedRows, context) => { const totalAmount = selectedRows.reduce((sum, row) => sum + row.totalAmount, 0); context.updateSelectionSummary({ count: selectedRows.length, totalAmount }); } } } });

网格性能优化

对于大量数据的处理,Entity Engine 提供了多种性能优化手段。合理使用这些优化选项可以显著提升网格的响应速度和用户体验。

性能优化配置

await engine.metaRegistry.updateOrRegisterView({ modelName: 'LargeDataset', name: 'HighPerformanceView', title: '高性能网格', type: 'GridView', config: { columns: ['id', 'name', 'value', 'timestamp'], performance: { virtualScroll: true, rowHeight: 40, bufferSize: 20, pageSize: 500, serverSide: true }, optimizations: { lazyLoading: true, memoizeRows: true, debounceFilter: 500, debounceSearch: 300, cacheData: true, preloadPages: 2 }, features: { selectable: false, expandable: false, dragAndDrop: false }, loading: { showSkeleton: true, skeletonRows: 10 } } });

数据导出功能

网格视图支持多种格式的数据导出,包括 Excel、CSV、PDF 和 JSON 等。您可以根据不同的业务需求配置适合的导出选项。

await engine.metaRegistry.updateOrRegisterView({ modelName: 'Report', name: 'ExportableView', title: '可导出网格', type: 'GridView', config: { columns: ['name', 'value', 'category', 'date'], export: { formats: [ { type: 'excel', title: '导出 Excel', filename: 'report_{date}.xlsx', includeFilters: true, maxRows: 10000 }, { type: 'csv', title: '导出 CSV', filename: 'report_{date}.csv', encoding: 'utf-8' }, { type: 'pdf', title: '导出 PDF', filename: 'report_{date}.pdf', orientation: 'landscape' } ], permissions: { roles: ['admin', 'analyst'], maxRows: 50000 } } } });

最佳实践

网格设计原则

在设计网格视图时,建议遵循以下原则:

  • 信息层次:将最重要的信息放在最左侧,按重要性递减排列
  • 适度分页:根据数据量和用户习惯设置合理的页面大小
  • 智能过滤:提供常用的预设过滤条件,方便用户快速筛选
  • 操作便利:将常用操作放在显眼位置,危险操作需要确认
  • 性能优先:对于大数据量场景,优先考虑性能而非功能丰富性

常见使用场景

网格视图适用于以下业务场景:

  • 用户管理:用户列表、角色管理、权限设置
  • 内容管理:文章列表、产品目录、媒体文件管理
  • 交易管理:订单列表、支付记录、退款申请
  • 系统管理:日志查看、配置管理、数据备份
  • 报表分析:数据报表、统计分析、财务报表

下一步

了解网格视图后,继续学习:

Last updated on