-
Notifications
You must be signed in to change notification settings - Fork 2
Dashboard 页面无服务端数据时仍显示硬编码数据,导致诊断与体验问题 #1151
Copy link
Copy link
Labels
bugSomething isn't workingSomething isn't working
Description
问题综述
在 objectui demo CRM Dashboard 页面,虽然接口 /api/v1/analytics/query 返回 Cube name is required 等报错,页面依然可以正常显示所有图表和指标。
实际现象:
- Dashboard 的 KPI/metric 小部件(如总收入、活跃商机等)即使接口报错,依然始终显示静态硬编码的数值。
- 其他图表、数据透视等小部件若获取不到数据,也不会显示明显的失败状态。
- 这种设计掩盖了真实的数据异常/后端不可用,影响问题定位与用户信任。
接口返回:
{
"name": "Error",
"message": "Cube name is required",
...
"stack": "Error: Cube name is required ..."
}技术原因分析
- 静态数据兜底:
- 例如
examples/crm/src/dashboards/crm.dashboard.ts的 KPI widget/options.value 字段均为硬编码演示数据,未设计接口失败处理。
- 例如
- Widget 渲染逻辑:
packages/plugin-dashboard/src/DashboardRenderer.tsx及相关 MetricWidget 组件,会优先展示静态 value,而不会降级为异常提示。ObjectChart、ObjectDataTable等组件虽有 loading/error/fallback,但未区分"无数据"与"接口调用报错"。
- aggregate/analytics API 错误处理:
- 低代码数据抽象层如
ObjectStackAdapter.aggregate()、前端的 provider: 'object' 方案,遇到 API 400/500/参数缺失时,会降级为空数据/本地聚合,页面不报错也无告警。
- 低代码数据抽象层如
平台长期合理改进建议
为保证平台健壮性与透明性,建议如下:
- Dashboard 各类 Widget 必须区分并处理接口失败、无数据、以及本地静态数据三种状态:
- 当 analytics/query API 失败时(如缺少 cubeName/后端 500),页面要有统一样式的"数据异常"显示(如红色提示或卡片内错误 Toast),引导用户/开发者排查。
- Widget 配置支持正式/演示/降级多模式:
- 静态 value 只用于 DEMO mode 或缺省场景,正式环境应严格依赖服务端数据。
- 设计统一的 fallback 策略,通过环境变量/配置区分正式线上与演示模式渲染。
- 低代码平台核心适配器、数据源、分析 API 清晰暴露后端错误并向 UI 传递:
- ObjectStackAdapter、ObjectChart、ObjectDataTable、MetricWidget、PivotTable 等组件遇到 analytics/query 错误时,要抛出平台定义的错误状态,透传到页面。
- 组件库要给出 default error UI/slot,供二次定制。
- 设计开箱即用的统一监控与异常上报机制:
- Dashboard 页面所有数据异常需自动采集(如 Sentry/自研),可用于持续监控服务健康和用户体验。
- 补全测试覆盖:
- 针对 analytics/query 出错、无 cubeName、静态数据降级等场景,补充 e2e/UI 测试。
影响与价值
- 提升用户/开发定位线上问题的效率,让平台更透明可靠。
- 为平台 SaaS 化/多租户落地提供标准化的数据异常容错能力。
- 支持多环境(开发/演示/生产)场景自动降级和告警需求。
综上,建议:Dashboard 与分析相关组件必须完成"无数据""API失败""演示数据"三态分离和错误显式暴露的能力改造。
Reactions are currently unavailable
Metadata
Metadata
Labels
bugSomething isn't workingSomething isn't working