金山工时填报助手
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_70e829ac/zcjsywdgstb。
技能介绍
它解决什么问题
很多团队把工时填报放在金山文档的轻维表/多维表格里,但表单里有两个自动化的"硬骨头":
- 关联记录字段:填报人、填报项目的选项弹窗不是常规 DOM 列表,而是
Canvas虚拟表格,el.click()、选择器点击全部无效,必须拿到画布坐标模拟真实鼠标事件。 - React 受控文本域:工作内容描述框由 React 接管,直接
el.value=...会被框架忽略,写入后必须派发原生事件才生效。
结果是:哪怕用户只说一句"帮我填今天的工时,填报人是赵杰,项目是 ZC 数智董事会平台建设",传统脚本也会卡在弹窗点不动、输入框不更新这两处。本技能把这类重复填报收敛成一条指令。
核心能力与执行流程
技能只接收 5 个显式输入:填报人、日期、计划文档地址、填报项目、填报入口(可留空走默认表单直链)。其余字段按默认配置区处理,日期/工作类型/工作地点/工时优先信任表单预填值,只在缺失时才写入。执行分六步:
- 前置检查并打开表单:依赖
web-access提供的 CDP Proxy(localhost:3456)在自建后台 tab 操作,不触碰用户原有页面。 - 生成工作内容:通过
kdocs连接器(MCP)读取计划文档,按data.content.range_data.detail.rangeData聚合行数据,提取项目当前阶段、阶段内关键模块与里程碑,再结合填报人角色(默认项目经理视角)生成 3–6 条贴合计划原文的实施事项。 - 识别表单结构:确认日期框、关联记录、文本域、工时数字框的顺序与类型。
- 填写关联记录:这是难点。在
/eval中用getBoundingClientRect()取.db-records-selector弹窗里 canvas 的坐标,首行 y 约等于弹窗顶部 +55px,行高约 28px,派发mousedown/mouseup/click序列;点击后立即/screenshot肉眼校正,偏一行就增减 28px 重试。搜索过滤命中后通常一次成功。 - 写入 React 受控输入:文本域和数字框都走原生 setter(
Object.getOwnPropertyDescriptor取 value descriptor),再派发input/change事件,绕开框架拦截。 - 截图核对与提交:填完截图交用户确认,默认不提交,只有收到明确指令才执行最后一步,并在结束后关闭自建 tab。
适用边界与注意点
- 表单必须由「关联记录」字段驱动,且弹窗内是 Canvas 虚拟表格;如果目标表是普通下拉列表,该技能的坐标点击逻辑没有用武之地。
- 工作内容生成依赖计划文档的结构和原文,脚本不会编造计划之外的功能模块;计划文档长期不变时生成结果也稳定。
- 浏览器自动化存在账号风控风险,运行环境需已完成
web-access的依赖检查。 - 提交前必须人工确认截图,涉及个人工时数据时不要改成自动提交。
使用场景
- 在金山文档轻维表工时表单中填报当日工时,需自动选择填报人和项目,并生成工作内容
- 表单弹窗为Canvas虚拟表格导致普通点击无效,需要按坐标模拟鼠标事件选中关联记录
- 工作内容文本域是React受控组件,需要通过原生setter写入值并派发事件才能生效
- 用户只给一句话指令(填报人、日期、计划文档、项目),其余字段自动推断或使用默认值
适合人员
- 需要定期在金山文档填报工时的项目经理或研发人员,希望用一句话完成填报
- 维护金山文档轻维表工时表单的团队管理员,需要自动化处理Canvas虚拟表格和React受控输入
- 使用web-access和kdocs连接器的开发者,需要示例如何通过CDP Proxy和MCP读取计划文档生成内容