背景(来源:调度员 2026-09-04 用销售经理账号在最新 main 上的填报走查;维护者拍板立单)
一张 3 行填报单从登录到提交实测 11 次点击、5 次输入、3 次跳页,其中真正填数只有 3 击,其余 8 击是导航与确认。三条路径实测:
路径
结果
① 填报单 → 打开本部门单 → 「相关」页签的填报明细
死路:明细列表只显示指标方向、计分方式、来源下达等配置列,没有目标、权重、实际值、得分,也不能行内改
② 同上,行菜单「编辑」弹表单
报错「您没有权限保存这条记录」:表单把只读的得分字段一并提交,被字段权限拒绝(平台问题 objectstack-ai/objectstack#15259 );接口只发实际值是成功的
③ 菜单「填报明细」→ 行内编辑 → 全部保存 → 回「填报单」→ 行菜单「提交填报」
通,11 击
目标:填报人打开自己那张填报单,在一屏内填完、看分、提交;把 3 行单的点击数压到 7 击以内、跳页 1 次;堵住两条死路。
范围(全部是视图/应用元数据改动,不碰计分与状态机)
填报单表单嵌可编辑明细网格 (核心):利用平台表单的 subforms(主从子表,@objectstack/spec FormViewSchema.subforms:子对象 kpi_entry_line,外键 sheet,列只放 指标名称、计量单位、目标值、权重(%)、实际值、完成率(%)、得分率(%)、最终得分、备注,其中仅 实际值、备注 可编辑,其余列只读)。开工第一步先做可行性验证 :以部门填报人员账号在主从表单里改一格实际值并保存,确认 (a) 不会因表单提交只读字段撞上 [repo:objectui] Record edit form posts every displayed field, so a user with field-level editable:false on any form field gets 403 「您没有权限保存这条记录」 even when editing only an allowed field — inline grid sends the dirty cell and succeeds objectstack#15259 的 403,(b) 保存后 entry-line.hook 仍逐行触发即时算分,(c) 不允许在子表里新增/删除明细行(明细只由发布生成)。任一条不成立即停手,把现象与平台能力缺口写进「需拍板事项」,改走备选方案 B(见下)。
备选 B(子表不可行时):在填报单详情「相关」页签的填报明细列表上配置列(指标名称、目标值、权重、实际值、完成率、得分率、最终得分)并开行内编辑(若平台相关列表支持 inlineEdit),做不到再如实记录。
工作台改成待办入口 :src/pages/index.ts 的 kpi_home 页增加「我的填报单」区块(平台页面组件能力允许时:按当前用户可见的填报单列表,或至少一个跳到「填报单」列表「填报中」页签的按钮),把说明文字收成一行。若页面组件不支持按用户过滤的记录列表,退为按钮 + 一句话,如实记录。
填报明细列表瘦身 :src/views/index.ts 的 EntryLineViews.list 与 unfilled 列改为 指标名称、计量单位、目标值、权重(%)、实际值、完成率(%)、得分率(%)、最终得分、已调整、备注;所属填报单、指标方向、计分方式、调整类型、调整后得分从列表列移除(记录页仍可见)。
堵死路 :填报单详情「相关」页签的填报明细列表列按第 3 条同样配置;填报明细的编辑表单(EntryLineViews.formViews.form)去掉「计分」分区里的只读字段(完成率、得分率、指标得分、调整后得分、已调整、调整类型、最终得分、最近调整),只留 实际值、备注 可编辑,其余业务字段标 readonly;部门填报人员权限集中 kpi_entry_line.allowCreate 改为 false(明细只由发布生成;导入路径保留)。
文案 :填报明细编辑表单与网格保存的拒绝提示沿用 hook 三段式;不处理 KpiError: 前缀(平台 toast 拼接,已上报)。
不做
不改 src/lib/scoring.ts、src/hooks/sheet.hook.ts、src/hooks/entry-line.hook.ts 的规则;不新建自定义页面(kind: 'react'/'html');不改流程按钮;不改手册。
方案分级与放行(调度员)
改已有视图与权限集一处(allowCreate)= 中风险。放行方向 = 上述范围;开发子 agent 开工前在本单评论输出「需求理解 + 子表可行性验证结果 + 每处视图改动的前后对照」,验证通过即开工;验证不通过按备选 B 走并写进需拍板事项。方案要点、符合度清单、测试报告一律挂本单评论。
验收标准
部门填报人员(软件档案的 sales.manager@kpi.demo 或 rd.engineer@kpi.demo )从登录到提交一张 3 行填报单:≤ 7 次点击、≤ 1 次页面跳转 (登录后从工作台入口进入本部门填报单,在同一页面填 3 格、保存、提交、确认),测试报告逐步列出点击数。
保存后 3 行的完成率、得分率、最终得分即时出现在同一页面,数值与 src/lib/scoring.ts 口径一致(与直接走填报明细列表路径的结果相同)。
填报单详情「相关」页签的填报明细列表能看到目标、权重、实际值、得分;填报明细编辑表单对填报人员保存不再报权限错误(只提交实际值/备注)。
填报人员在填报明细列表与子表里都看不到「新建」;已提交/已归档的单在新入口改数仍被 hook 拦下(拦截提示截图)。
管理员、人力审核在填报单表单里的原有字段与动作不受影响;scripts/software-flow.mjs 54/54、scripts/e2e-flow.mjs 全 PASS;pnpm verify 绿(含 i18n 门禁,新增 label 须 pnpm i18n:extract 重新生成)。
测试报告(前后点击数对照 + 岗位账号截图)与需求符合度清单挂本单评论,截图走 acceptance-evidence 40 位 SHA 图链。
测试计划草稿
T1 子表可行性(改一格保存 200、即时算分、无新增/删除入口) | T2 工作台入口 → 本部门填报单 1 跳 | T3 3 行填完保存出分 | T4 提交 + 确认,状态推进 | T5 全程点击计数 ≤ 7 | T6 相关页签列 & 编辑表单不再 403 | T7 已提交/已归档改数被拦 | T8 管理员/人力审核表单不受影响 | T9 两脚本全 PASS + verify
依赖与风险
依赖:无(基线 main f20269f )。
风险:平台主从子表可能同样把只读列一并提交(#15259 同源)→ 已设可行性验证与备选 B;页面组件可能不支持按用户过滤的记录列表 → 退为按钮入口。
背景(来源:调度员 2026-09-04 用销售经理账号在最新 main 上的填报走查;维护者拍板立单)
一张 3 行填报单从登录到提交实测 11 次点击、5 次输入、3 次跳页,其中真正填数只有 3 击,其余 8 击是导航与确认。三条路径实测:
目标:填报人打开自己那张填报单,在一屏内填完、看分、提交;把 3 行单的点击数压到 7 击以内、跳页 1 次;堵住两条死路。
范围(全部是视图/应用元数据改动,不碰计分与状态机)
subforms(主从子表,@objectstack/specFormViewSchema.subforms:子对象kpi_entry_line,外键sheet,列只放 指标名称、计量单位、目标值、权重(%)、实际值、完成率(%)、得分率(%)、最终得分、备注,其中仅 实际值、备注 可编辑,其余列只读)。开工第一步先做可行性验证:以部门填报人员账号在主从表单里改一格实际值并保存,确认 (a) 不会因表单提交只读字段撞上 [repo:objectui] Record edit form posts every displayed field, so a user with field-leveleditable:falseon any form field gets 403 「您没有权限保存这条记录」 even when editing only an allowed field — inline grid sends the dirty cell and succeeds objectstack#15259 的 403,(b) 保存后entry-line.hook仍逐行触发即时算分,(c) 不允许在子表里新增/删除明细行(明细只由发布生成)。任一条不成立即停手,把现象与平台能力缺口写进「需拍板事项」,改走备选方案 B(见下)。inlineEdit),做不到再如实记录。src/pages/index.ts的kpi_home页增加「我的填报单」区块(平台页面组件能力允许时:按当前用户可见的填报单列表,或至少一个跳到「填报单」列表「填报中」页签的按钮),把说明文字收成一行。若页面组件不支持按用户过滤的记录列表,退为按钮 + 一句话,如实记录。src/views/index.ts的EntryLineViews.list与unfilled列改为 指标名称、计量单位、目标值、权重(%)、实际值、完成率(%)、得分率(%)、最终得分、已调整、备注;所属填报单、指标方向、计分方式、调整类型、调整后得分从列表列移除(记录页仍可见)。EntryLineViews.formViews.form)去掉「计分」分区里的只读字段(完成率、得分率、指标得分、调整后得分、已调整、调整类型、最终得分、最近调整),只留 实际值、备注 可编辑,其余业务字段标readonly;部门填报人员权限集中kpi_entry_line.allowCreate改为 false(明细只由发布生成;导入路径保留)。KpiError:前缀(平台 toast 拼接,已上报)。不做
不改
src/lib/scoring.ts、src/hooks/sheet.hook.ts、src/hooks/entry-line.hook.ts的规则;不新建自定义页面(kind: 'react'/'html');不改流程按钮;不改手册。方案分级与放行(调度员)
改已有视图与权限集一处(allowCreate)= 中风险。放行方向 = 上述范围;开发子 agent 开工前在本单评论输出「需求理解 + 子表可行性验证结果 + 每处视图改动的前后对照」,验证通过即开工;验证不通过按备选 B 走并写进需拍板事项。方案要点、符合度清单、测试报告一律挂本单评论。
验收标准
src/lib/scoring.ts口径一致(与直接走填报明细列表路径的结果相同)。scripts/software-flow.mjs54/54、scripts/e2e-flow.mjs全 PASS;pnpm verify绿(含 i18n 门禁,新增 label 须pnpm i18n:extract重新生成)。acceptance-evidence40 位 SHA 图链。测试计划草稿
T1 子表可行性(改一格保存 200、即时算分、无新增/删除入口) | T2 工作台入口 → 本部门填报单 1 跳 | T3 3 行填完保存出分 | T4 提交 + 确认,状态推进 | T5 全程点击计数 ≤ 7 | T6 相关页签列 & 编辑表单不再 403 | T7 已提交/已归档改数被拦 | T8 管理员/人力审核表单不受影响 | T9 两脚本全 PASS + verify
依赖与风险