关联:cloud#1955(AI build 第一版上线)· 不阻塞发版,但第一版每个用户都会看到这块面板
现象
Studio「界面」页(/_console/studio/<app>/interfaces?surface=dashboard:<name>)右侧的属性面板,
复用的是 views/metadata-admin/SchemaForm + widgets.tsx。那套表单是给管理员改元数据做的,
现在摆在了 AI build 第一版的 maker 面前——开发者气味整片渗出来。
在一个 AI 搭出来的「客户管理仪表盘」上实测到四类,全部在当前 pin
(81a2eb1fbe37)的源码里复核过:
1. 机器名 chip 的 tooltip 是硬编码英文
packages/app-shell/src/views/metadata-admin/SchemaForm.tsx:1408
<code className="ml-2 text-[10px] font-mono text-muted-foreground/70" title="Machine name">
{name}
</code>
全中文界面里,columns / gap / refreshInterval / header 四个 chip 的
tooltip 都是没过 t() 的英文。更根本的问题是:maker 需不需要看到机器名。
在 metadata-admin 里需要,在 AI build 的界面面板里大概率不需要。
2. 数组表格的表头直接漏出原始 key
「页眉 → 操作按钮」的表头是 label / actionUrl / actionType / icon。
packages/app-shell/src/views/metadata-admin/widgets.tsx:870
{(itemProps[c]?.title as string) ?? c}
渲染器的兜底本身是对的——真正的缺口在上游:框架的
packages/platform-objects/src/apps/translations/zh-CN.metadata-forms.generated.ts
里,dashboard.fields 只有 header 一条(「页眉」),
header.actions[].label/actionUrl/actionType/icon 在译文目录里根本没有条目——
嵌套的 item 属性没有本地化通道。
⚠️ 这一条的落点很可能在 objectstack(生成器 + 目录),不在本仓。
先判断落点再动手:如果结论是上游,开一张 objectstack 卡把它带过去,
本卡只保留渲染侧该做的部分(比如兜底时至少走一次 t())。
判断的依据请写在卡上——我更想要你的判断,而不是照我说的做。
3. 有默认值的数字框显示为空白
列数 / 间距 / 自动刷新 三个框的 value 实测全是 "",而帮助文字写着
「栅格列数(默认 12)」「0 表示不自动刷新」——生效值只存在于说明文字里,
框里什么都不显示。
widgets.tsx:1008 的 number 分支:
<Input type="number" value={value == null ? '' : String(value)} … />
既不拿 schema.default 当 placeholder,也不吃 schema 的 min / max / step
(所以能填出负数列)。这不是仪表盘特有的,任何有 default 的 schema 数字字段都这样。
建议:schema.default 灰显成 placeholder(空 = 用默认,而不是空 = 未知),
并把 minimum / maximum / multipleOf 透到 input 上。
「自动刷新」再往前一步会更好——秒数输入框对这个语义过度暴露,
下拉(关闭 / 30 秒 / 1 分钟 / 5 分钟)更贴近用户要表达的东西;
如果你认为这一步超出本卡范围,说出来,别硬塞。
4. 同一面板里还有一批没翻译的串
widgets.tsx 里至少:"Tab label"(1906)、"Select…"(2525)、
"+ Add filter field…"(1877)、"+ Add action button…" / "All actions added" /
"Bind a source object to pick actions"(2043)、"#RRGGBB"(2330)。
把这一片扫干净,别只修我点名的这几行——以 widgets.tsx + SchemaForm.tsx
两个文件为范围做一次完整清扫,扫完报一下总数。
为什么打成一张卡
四条是同一个病因:metadata-admin 的开发者表单被直接摆到了 maker 面前。
分成四张卡会让每一条都像小修补,合在一起才看得出该做的是一次「去开发者化」。
验收
在本地 prod-like 栈上用 AI 搭一个带仪表盘的应用,打开界面属性面板:
- 界面里不出现未翻译的英文串(含 tooltip 与表头);
- 有 default 的数字字段,空框里灰显它的默认值;
- 数组表格的列名是人话(或已按上游卡带走,并在本卡写明结论)。
截图附卡。
证据限度
现象来自一台本地栈最后一帧的 DOM,该栈已退出。
上面每一条的代码位置都是在当前 pin 81a2eb1fbe37 的源码里重新读过的,
不依赖那一帧;只有下面这组版面数字取自那一帧、需要在活栈上复量:
1512 视口下 main 596 → 预览框 528 → 卡片 376 → 图 326。
Generated by Claude Code
关联:cloud#1955(AI build 第一版上线)· 不阻塞发版,但第一版每个用户都会看到这块面板
现象
Studio「界面」页(
/_console/studio/<app>/interfaces?surface=dashboard:<name>)右侧的属性面板,复用的是
views/metadata-admin/SchemaForm+widgets.tsx。那套表单是给管理员改元数据做的,现在摆在了 AI build 第一版的 maker 面前——开发者气味整片渗出来。
在一个 AI 搭出来的「客户管理仪表盘」上实测到四类,全部在当前 pin
(
81a2eb1fbe37)的源码里复核过:1. 机器名 chip 的 tooltip 是硬编码英文
packages/app-shell/src/views/metadata-admin/SchemaForm.tsx:1408全中文界面里,
columns/gap/refreshInterval/header四个 chip 的tooltip 都是没过
t()的英文。更根本的问题是:maker 需不需要看到机器名。在 metadata-admin 里需要,在 AI build 的界面面板里大概率不需要。
2. 数组表格的表头直接漏出原始 key
「页眉 → 操作按钮」的表头是
label/actionUrl/actionType/icon。packages/app-shell/src/views/metadata-admin/widgets.tsx:870渲染器的兜底本身是对的——真正的缺口在上游:框架的
packages/platform-objects/src/apps/translations/zh-CN.metadata-forms.generated.ts里,
dashboard.fields只有header一条(「页眉」),header.actions[].label/actionUrl/actionType/icon在译文目录里根本没有条目——嵌套的 item 属性没有本地化通道。
先判断落点再动手:如果结论是上游,开一张 objectstack 卡把它带过去,
本卡只保留渲染侧该做的部分(比如兜底时至少走一次
t())。判断的依据请写在卡上——我更想要你的判断,而不是照我说的做。
3. 有默认值的数字框显示为空白
列数/间距/自动刷新三个框的value实测全是"",而帮助文字写着「栅格列数(默认 12)」「0 表示不自动刷新」——生效值只存在于说明文字里,
框里什么都不显示。
widgets.tsx:1008的 number 分支:既不拿
schema.default当 placeholder,也不吃 schema 的min/max/step(所以能填出负数列)。这不是仪表盘特有的,任何有 default 的 schema 数字字段都这样。
建议:
schema.default灰显成 placeholder(空 = 用默认,而不是空 = 未知),并把
minimum/maximum/multipleOf透到 input 上。「自动刷新」再往前一步会更好——秒数输入框对这个语义过度暴露,
下拉(关闭 / 30 秒 / 1 分钟 / 5 分钟)更贴近用户要表达的东西;
如果你认为这一步超出本卡范围,说出来,别硬塞。
4. 同一面板里还有一批没翻译的串
widgets.tsx里至少:"Tab label"(1906)、"Select…"(2525)、"+ Add filter field…"(1877)、"+ Add action button…"/"All actions added"/"Bind a source object to pick actions"(2043)、"#RRGGBB"(2330)。把这一片扫干净,别只修我点名的这几行——以
widgets.tsx+SchemaForm.tsx两个文件为范围做一次完整清扫,扫完报一下总数。
为什么打成一张卡
四条是同一个病因:metadata-admin 的开发者表单被直接摆到了 maker 面前。
分成四张卡会让每一条都像小修补,合在一起才看得出该做的是一次「去开发者化」。
验收
在本地 prod-like 栈上用 AI 搭一个带仪表盘的应用,打开界面属性面板:
截图附卡。
证据限度
现象来自一台本地栈最后一帧的 DOM,该栈已退出。
上面每一条的代码位置都是在当前 pin
81a2eb1fbe37的源码里重新读过的,不依赖那一帧;只有下面这组版面数字取自那一帧、需要在活栈上复量:
1512 视口下
main596 → 预览框 528 → 卡片 376 → 图 326。Generated by Claude Code