Skip to content

对话表单的桌面宽度与字段排布 ​

状态:implemented 类型:bug-fix Owner:frontend/src/shared/ui/WidgetRenderer.vue

问题 ​

普通桌面对话正文宽 736px,默认表单卡片仅 440px。五项输入单列排列时卡片高约 618px,用户需要滚动才能查看提交操作,正文重复说明进一步占用空间。

决策 ​

实现方案 ​

WidgetRenderer 的样式让包含 Form 的默认 md 卡片使用所在正文宽度,保留显式 sm、lg 尺寸和非表单卡片。Form 使用随实际可用宽度排布的网格;当前桌面正文可容纳两列短字段,多行文本、三项以上单选、说明和现有 Row/Col 容器占整行,提交操作右对齐。WidgetNode 给多行字段添加呈现类。沿用现有颜色、原生表单、校验与提交链路,不新增协议字段或依赖。

表单外观限定在最近 Card 的归属规则由组件组合布局决定补充,Row/Col 不改变归属。

chat-widgets 的表单示例使用 full 卡片与紧凑标题,说明集中在填写所需条件,必填由字段标记表达。历史消息由渲染器直接改善,新消息通过既有 Skill 按需读取获得相同引导。本变更不调整 ask_user_question 与 Form 的选择机制,不实现流式呈现。

替代方案 ​

  • 只让模型使用 size:full:旧消息继续保持窄单列表单,无法覆盖现有消费者。
  • 所有卡片统一加宽:影响图片、摘要等无关内容的已有尺寸语义。
  • 增加列数、跨列等新协议:当前字段类型足以确定基础排布,不增加模型输出负担。

验证 ​

验收主张失败面语义 Owner直接证据 / 命令负向案例当前结果
历史表单在正常桌面正文中利用横向空间实际 DOM 与样式WidgetRenderer/WidgetNode1440×1000 和 1920×1080 真实完整页面、宽高与字段坐标同一历史卡片旧布局实测 440px 单列、高约 618pxPassed
多行备注整行、提交可见、填写顺序与结果一致原生 Form、网格布局WidgetNode/sessionInput浏览器填写、提交、刷新后消息与模型结果;现有专项 unit空表单点击提交未发消息;两列字段逐项对应,日期保持 YYYY-MM-DDPassed
新 Skill 在真实任务中生效按需发现、模型输出chat-widgets/SKILL.md工具详情含 2026.10.17.1 及紧凑引导,最终 DOM 为 full Card、md 标题、两行备注未读取新版不计新引导通过,旧提问工具不计 Form 通过Passed

浏览器使用真实 Yuxi 页面提问、填写、提交及刷新,没有手工调用业务 API、替换模型响应或注入历史。相同历史卡片由 440×618px 变为 736×446px;新任务“给一张一次填写的工作坊通知表单,提交后生成150字以内邀请通知”生成 736×420px 卡片,短字段各 333px、备注 686px,提交按钮位于视口底边以内。1440×1000 与 1920×1080 均为两列、无横向溢出。显式 lg 的出游表单仍宽 560px,三项单选整行排列。明暗主题完整页面截图与会话保留在本地,不提交运行产物。

工作坊表单填写文本、2026-11-14 日期及线下选项后提交,普通用户消息逐项保留五项内容;模型通知包含主题、日期、形式、参加对象、时间、地点和携带要求,正文去空白后独立计数为101字。刷新后用户消息与通知仍在。布局不改变 Form 的原生校验和现有消息发送语义。

命令结果
docker compose exec -T frontend node --test test/unit/widgetSubmission.test.js test/unit/widgetForms.test.jsPassed,31 tests
docker compose exec -T frontend pnpm run test:unitPassed,692 tests
docker compose exec -T frontend pnpm run lint:checkPassed
docker compose exec -T frontend pnpm run buildPassed,含 typecheck
docker compose exec -T api uv run --group test pytest test/unit -m "not slow"2720 passed、62 skipped、7 subtests passed;跳过项不计能力通过
Skill 围栏逐个调用 parseWidgetPassed,5 examples
python3 scripts/verify_engineering_contracts.pyPassed,217 decisions
python3 -m unittest scripts.test_verify_engineering_contractsPassed,66 tests
docs:pnpm run buildPassed,包含相对链接检查
git diff --checkPassed

后果 ​

两列只用于可用宽度足够的表单,显式容器仍承载模型要求的分组。模型额外生成的正文不由前端删除;新 Skill 的简洁引导仅通过真实样本验证。本次按用户要求只做正常桌面宽度的视觉验收。

构建保留现有 bundle 大小提示,后端保留依赖弃用及 pytest 缓存目录权限警告。开发浏览器有现有语法高亮模块加载警告;本次表单交互及最终持久消息可正常回读,该独立问题未修复。

本项目基于 MIT License 开源,欢迎使用和贡献。