Skip to content

填报体验优化:填报单一屏填数出分提交(主从子表)、工作台待办入口、明细列表瘦身、堵住相关页签与编辑表单两条死路 #34

Description

@baozhoutao

背景(来源:调度员 2026-09-04 用销售经理账号在最新 main 上的填报走查;维护者拍板立单)

一张 3 行填报单从登录到提交实测 11 次点击、5 次输入、3 次跳页,其中真正填数只有 3 击,其余 8 击是导航与确认。三条路径实测:

路径 结果
① 填报单 → 打开本部门单 → 「相关」页签的填报明细 死路:明细列表只显示指标方向、计分方式、来源下达等配置列,没有目标、权重、实际值、得分,也不能行内改
② 同上,行菜单「编辑」弹表单 报错「您没有权限保存这条记录」:表单把只读的得分字段一并提交,被字段权限拒绝(平台问题 objectstack-ai/objectstack#15259);接口只发实际值是成功的
③ 菜单「填报明细」→ 行内编辑 → 全部保存 → 回「填报单」→ 行菜单「提交填报」 通,11 击

目标:填报人打开自己那张填报单,在一屏内填完、看分、提交;把 3 行单的点击数压到 7 击以内、跳页 1 次;堵住两条死路。

范围(全部是视图/应用元数据改动,不碰计分与状态机)

  1. 填报单表单嵌可编辑明细网格(核心):利用平台表单的 subforms(主从子表,@objectstack/spec FormViewSchema.subforms:子对象 kpi_entry_line,外键 sheet,列只放 指标名称、计量单位、目标值、权重(%)、实际值、完成率(%)、得分率(%)、最终得分、备注,其中仅 实际值、备注 可编辑,其余列只读)。开工第一步先做可行性验证:以部门填报人员账号在主从表单里改一格实际值并保存,确认 (a) 不会因表单提交只读字段撞上 #15259 的 403,(b) 保存后 entry-line.hook 仍逐行触发即时算分,(c) 不允许在子表里新增/删除明细行(明细只由发布生成)。任一条不成立即停手,把现象与平台能力缺口写进「需拍板事项」,改走备选方案 B(见下)。
    • 备选 B(子表不可行时):在填报单详情「相关」页签的填报明细列表上配置列(指标名称、目标值、权重、实际值、完成率、得分率、最终得分)并开行内编辑(若平台相关列表支持 inlineEdit),做不到再如实记录。
  2. 工作台改成待办入口:src/pages/index.tskpi_home 页增加「我的填报单」区块(平台页面组件能力允许时:按当前用户可见的填报单列表,或至少一个跳到「填报单」列表「填报中」页签的按钮),把说明文字收成一行。若页面组件不支持按用户过滤的记录列表,退为按钮 + 一句话,如实记录。
  3. 填报明细列表瘦身:src/views/index.tsEntryLineViews.listunfilled 列改为 指标名称、计量单位、目标值、权重(%)、实际值、完成率(%)、得分率(%)、最终得分、已调整、备注;所属填报单、指标方向、计分方式、调整类型、调整后得分从列表列移除(记录页仍可见)。
  4. 堵死路:填报单详情「相关」页签的填报明细列表列按第 3 条同样配置;填报明细的编辑表单(EntryLineViews.formViews.form)去掉「计分」分区里的只读字段(完成率、得分率、指标得分、调整后得分、已调整、调整类型、最终得分、最近调整),只留 实际值、备注 可编辑,其余业务字段标 readonly;部门填报人员权限集中 kpi_entry_line.allowCreate 改为 false(明细只由发布生成;导入路径保留)。
  5. 文案:填报明细编辑表单与网格保存的拒绝提示沿用 hook 三段式;不处理 KpiError: 前缀(平台 toast 拼接,已上报)。

不做

不改 src/lib/scoring.tssrc/hooks/sheet.hook.tssrc/hooks/entry-line.hook.ts 的规则;不新建自定义页面(kind: 'react'/'html');不改流程按钮;不改手册。

方案分级与放行(调度员)

改已有视图与权限集一处(allowCreate)= 中风险。放行方向 = 上述范围;开发子 agent 开工前在本单评论输出「需求理解 + 子表可行性验证结果 + 每处视图改动的前后对照」,验证通过即开工;验证不通过按备选 B 走并写进需拍板事项。方案要点、符合度清单、测试报告一律挂本单评论。

验收标准

  1. 部门填报人员(软件档案的 sales.manager@kpi.demord.engineer@kpi.demo)从登录到提交一张 3 行填报单:≤ 7 次点击、≤ 1 次页面跳转(登录后从工作台入口进入本部门填报单,在同一页面填 3 格、保存、提交、确认),测试报告逐步列出点击数。
  2. 保存后 3 行的完成率、得分率、最终得分即时出现在同一页面,数值与 src/lib/scoring.ts 口径一致(与直接走填报明细列表路径的结果相同)。
  3. 填报单详情「相关」页签的填报明细列表能看到目标、权重、实际值、得分;填报明细编辑表单对填报人员保存不再报权限错误(只提交实际值/备注)。
  4. 填报人员在填报明细列表与子表里都看不到「新建」;已提交/已归档的单在新入口改数仍被 hook 拦下(拦截提示截图)。
  5. 管理员、人力审核在填报单表单里的原有字段与动作不受影响;scripts/software-flow.mjs 54/54、scripts/e2e-flow.mjs 全 PASS;pnpm verify 绿(含 i18n 门禁,新增 label 须 pnpm i18n:extract 重新生成)。
  6. 测试报告(前后点击数对照 + 岗位账号截图)与需求符合度清单挂本单评论,截图走 acceptance-evidence 40 位 SHA 图链。

测试计划草稿

T1 子表可行性(改一格保存 200、即时算分、无新增/删除入口) | T2 工作台入口 → 本部门填报单 1 跳 | T3 3 行填完保存出分 | T4 提交 + 确认,状态推进 | T5 全程点击计数 ≤ 7 | T6 相关页签列 & 编辑表单不再 403 | T7 已提交/已归档改数被拦 | T8 管理员/人力审核表单不受影响 | T9 两脚本全 PASS + verify

依赖与风险

  • 依赖:无(基线 main f20269f)。
  • 风险:平台主从子表可能同样把只读列一并提交(#15259 同源)→ 已设可行性验证与备选 B;页面组件可能不支持按用户过滤的记录列表 → 退为按钮入口。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions