Showcase 全链路 UX 测试(浏览器实测)
测试方法:全新克隆构建 framework + vendored console(.objectui-sha = 7782698),objectstack dev --ui --seed-admin 启动 examples/app-showcase,Playwright 驱动 Chromium 以 admin 登录,从 /_console/apps/com.example.showcase/page/showcase_start_here 进入,逐一点击遍历全部 42 个导航项,并深度测试向导创建、记录 CRUD、主从联动、抽屉编辑、审批操作;全程收集 console 错误与网络失败,所有写库操作均通过 API 查库核实。
总体结论:骨架扎实——42 个页面全部可达、无白屏或崩溃;必填校验、Lookup、抽屉编辑、toast 等基础交互正常;向导与"新建任务"端到端写库成功。但存在 2 个真 Bug、1 个误导性交互、以及一批影响第一印象的细节问题,合并记录如下。
A. Bug(按严重度)
A1. 导航标签被 i18n 对象标签覆盖(影响面最大)
应用配置里明确写的 label: 'Projects'/'Tasks'/'Accounts'/'Settings'(examples/app-showcase/src/apps/index.ts)在侧边栏全部显示为单数 Project / Task / Account / Setting;只有恰好与对象标签一致的 "Business Units"、"Field Zoo" 幸免。
根因(objectui,pinned SHA 7782698):UnifiedSidebar 把导航项自己的 label 仅作为 fallback 传入 useObjectLabel().objectLabel,而 showcase 翻译包定义了 objects.showcase_project.label: 'Project'(src/translations/index.ts),i18n 翻译永远赢。
修复方向:导航项显式 label 应优先于对象标签;对象类导航兜底时应取 pluralLabel 而非 label。
A2. CRM Workbench 统计卡恒为 0
page/showcase_crm_workbench:表格显示 5 条项目(2 个 Active),顶部 TOTAL PROJECTS / ACTIVE 恒为 0,选中记录后也不变(EDITING 卡正常更新)。React 页的 rollup 计数查询与列表数据源脱节,需排查 useAdapter 计数查询的响应解析。
A3. Approvals 头部 "Mark Done" 无记录上下文仍可点击且谎报成功
page/showcase_review_queue:按钮可见性表达式 ${!record.done} 求值失败(console 警告 record is not defined)后按钮照常渲染;点击后弹出绿色 "Task marked done." 成功 toast,但查库确认没有任何记录被修改——no-op 被报告为成功,比报错更糟。记录级 action 出现在列表页头时应禁用或隐藏;表达式求值失败不应默认放行。
A4. REST API fields 参数不健壮
GET /api/v1/data/showcase_task?fields=name → {"error":"query.fields.map is not a function"}。内部实现细节泄漏给调用方;应做字符串→数组归一化,或返回清晰的 400。
A5. 每次页面导航都请求 2 次 GET /api/v1/ai/agents 并 404
整个会话累计数十次无效请求刷屏 console。AI 功能未启用时客户端应探测一次并缓存,或服务端返回空列表。
B. 误导性/危险交互
- 向导提交后停在原地:
page/showcase_new_project_wizard 第 3 步点 "Create" 后只弹 "Created" toast,表单停留在填好的第 3 步——再点一次即重复创建。应跳转到新记录,或重置并给 "再建一个 / 查看项目" 出口。
- 记录详情页把开始日期渲染成 "Overdue 6d":任务详情 Schedule 区 START DATE 套用了逾期相对时间格式化器;"开始日期在 6 天前" ≠ "逾期 6 天",语义错误。
C. 离线/受限网络健壮性(代理环境实测踩中,全部无降级提示)
- Work Map 底图 style 取自
demotiles.maplibre.org → 整张地图灰底,只剩浮空图钉;
- 任务 Cover 种子数据用
picsum.photos → All Views / Task Gallery 满屏裂图;
- console bundle 内置 Sentry 上报持续失败重试。
建议:种子数据改本地占位图;地图加载失败显示明确降级态;OSS 开发模式默认关闭遥测。
D. 视觉打磨
- Command Center(大屏):三个 mini 图表被挤到 ~130px 宽,x 轴标签几乎全丢(只剩 1 个);图例/轴直接显示原始字段名
task_count 与原始值 Green/Red/Yellow;1440px 下内容只占左侧 60%,与"大屏"定位不符。
- 仪表盘计数类 y 轴出现 0.8 / 2.3 非整数刻度;状态柱状图 5 个状态因标签抽稀只显示 3 个。
- 任务列表 Progress 列 "100" 被裁成 "10"(列宽不足);"0%" 带百分号、其余裸数字,格式不一致。
- 看板卡片裸数字(12/16/40)无标签,猜不出是估时。
- CRM Workbench 详情面板标签值挤在一起("Budget Remaining90000"、"Tasks5"),日期输入被截断("06/05/202")。
E. 其他观察
- 登录时
GET /api/v1/auth/organization/list 被 abort,[AuthProvider] Failed to load organizations 警告。
- 组件注册表大量 bare-name fallback 覆盖警告(
field:time / field:address / view:calendar / view:timeline / plugin-charts:chart),每页刷屏。
亮点(保持)
Start Here 教学落地页信息架构出色(两轴模型 + 决策树 + 各 kind 直达示例);记录详情页状态管道、"Show 2 empty fields" 折叠、Task Desk 抽屉编辑、必填校验均达到成熟产品水准;冷启动 <10s、40 插件加载迅速。
测试环境:Linux 容器,Chromium headless 1440×900,端口 :3777(与 :3000 同一构建,仅隔离换端口);A1 属 objectui 仓库,A2–A5 属本仓/showcase。
Showcase 全链路 UX 测试(浏览器实测)
测试方法:全新克隆构建 framework + vendored console(
.objectui-sha=7782698),objectstack dev --ui --seed-admin启动examples/app-showcase,Playwright 驱动 Chromium 以 admin 登录,从/_console/apps/com.example.showcase/page/showcase_start_here进入,逐一点击遍历全部 42 个导航项,并深度测试向导创建、记录 CRUD、主从联动、抽屉编辑、审批操作;全程收集 console 错误与网络失败,所有写库操作均通过 API 查库核实。总体结论:骨架扎实——42 个页面全部可达、无白屏或崩溃;必填校验、Lookup、抽屉编辑、toast 等基础交互正常;向导与"新建任务"端到端写库成功。但存在 2 个真 Bug、1 个误导性交互、以及一批影响第一印象的细节问题,合并记录如下。
A. Bug(按严重度)
A1. 导航标签被 i18n 对象标签覆盖(影响面最大)
应用配置里明确写的
label: 'Projects'/'Tasks'/'Accounts'/'Settings'(examples/app-showcase/src/apps/index.ts)在侧边栏全部显示为单数 Project / Task / Account / Setting;只有恰好与对象标签一致的 "Business Units"、"Field Zoo" 幸免。根因(objectui,pinned SHA
7782698):UnifiedSidebar把导航项自己的 label 仅作为 fallback 传入useObjectLabel().objectLabel,而 showcase 翻译包定义了objects.showcase_project.label: 'Project'(src/translations/index.ts),i18n 翻译永远赢。修复方向:导航项显式
label应优先于对象标签;对象类导航兜底时应取pluralLabel而非label。A2. CRM Workbench 统计卡恒为 0
page/showcase_crm_workbench:表格显示 5 条项目(2 个 Active),顶部 TOTAL PROJECTS / ACTIVE 恒为 0,选中记录后也不变(EDITING 卡正常更新)。React 页的 rollup 计数查询与列表数据源脱节,需排查useAdapter计数查询的响应解析。A3. Approvals 头部 "Mark Done" 无记录上下文仍可点击且谎报成功
page/showcase_review_queue:按钮可见性表达式${!record.done}求值失败(console 警告record is not defined)后按钮照常渲染;点击后弹出绿色 "Task marked done." 成功 toast,但查库确认没有任何记录被修改——no-op 被报告为成功,比报错更糟。记录级 action 出现在列表页头时应禁用或隐藏;表达式求值失败不应默认放行。A4. REST API
fields参数不健壮GET /api/v1/data/showcase_task?fields=name→{"error":"query.fields.map is not a function"}。内部实现细节泄漏给调用方;应做字符串→数组归一化,或返回清晰的 400。A5. 每次页面导航都请求 2 次
GET /api/v1/ai/agents并 404整个会话累计数十次无效请求刷屏 console。AI 功能未启用时客户端应探测一次并缓存,或服务端返回空列表。
B. 误导性/危险交互
page/showcase_new_project_wizard第 3 步点 "Create" 后只弹 "Created" toast,表单停留在填好的第 3 步——再点一次即重复创建。应跳转到新记录,或重置并给 "再建一个 / 查看项目" 出口。C. 离线/受限网络健壮性(代理环境实测踩中,全部无降级提示)
demotiles.maplibre.org→ 整张地图灰底,只剩浮空图钉;picsum.photos→ All Views / Task Gallery 满屏裂图;建议:种子数据改本地占位图;地图加载失败显示明确降级态;OSS 开发模式默认关闭遥测。
D. 视觉打磨
task_count与原始值 Green/Red/Yellow;1440px 下内容只占左侧 60%,与"大屏"定位不符。E. 其他观察
GET /api/v1/auth/organization/list被 abort,[AuthProvider] Failed to load organizations警告。field:time/field:address/view:calendar/view:timeline/plugin-charts:chart),每页刷屏。亮点(保持)
Start Here 教学落地页信息架构出色(两轴模型 + 决策树 + 各 kind 直达示例);记录详情页状态管道、"Show 2 empty fields" 折叠、Task Desk 抽屉编辑、必填校验均达到成熟产品水准;冷启动 <10s、40 插件加载迅速。
测试环境:Linux 容器,Chromium headless 1440×900,端口 :3777(与 :3000 同一构建,仅隔离换端口);A1 属 objectui 仓库,A2–A5 属本仓/showcase。