commit 9b26161bcf8f294e6f1828414de1a2546a4ccf3b Author: Michelle Zan Date: Thu Sep 3 15:35:23 2026 +0800 first commit diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..4c03d14 Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e9d6903 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# TwoJob-Orig + +HR SaaS research demo — screenshots, downloads, scripts and database artifacts. diff --git a/db/_test_one.out b/db/_test_one.out new file mode 100644 index 0000000..39ef96d --- /dev/null +++ b/db/_test_one.out @@ -0,0 +1,29 @@ +18:47:57 [1/1] 02_人事 / 人事报表 +18:48:02 发现 图标下载=25 文字入口=0 +18:48:11 OK xlsx (101172 bytes) -> downloads/02_人事/在职员工花名册-20260717184803.xlsx +18:48:20 OK xlsx (100945 bytes) -> downloads/02_人事/在职员工花名册(2)-20260717184814.xlsx +18:48:31 OK xlsx (100942 bytes) -> downloads/02_人事/在职员工花名册(1)-20260717184823.xlsx +18:48:37 OK xlsx (24950 bytes) -> downloads/02_人事/员工通讯录-20260717184834.xlsx +18:48:44 OK xlsx (11361 bytes) -> downloads/02_人事/员工劳动合同签订情况-20260717184840.xlsx +18:48:51 OK xlsx (30280 bytes) -> downloads/02_人事/员工工作年限信息表-20260717184848.xlsx +18:48:59 OK xlsx (19310 bytes) -> downloads/02_人事/员工住址信息表-20260717184855.xlsx +18:49:05 OK xlsx (18782 bytes) -> downloads/02_人事/员工生日信息表-20260717184901.xlsx +18:49:12 OK xlsx (4396 bytes) -> downloads/02_人事/离职员工信息表-20260717184908.xlsx +18:49:19 OK xlsx (10581 bytes) -> downloads/02_人事/测试账号_123-20260717184915.xlsx +18:49:28 OK xlsx (100924 bytes) -> downloads/02_人事/在职员工花名册-20260717184922.xlsx +18:49:34 OK xlsx (24946 bytes) -> downloads/02_人事/员工通讯录-20260717184931.xlsx +18:49:42 OK xlsx (5778 bytes) -> downloads/02_人事/测试账号_月度人员进出一览表_20260717184938.xlsx +18:49:48 OK xlsx (10636 bytes) -> downloads/02_人事/各部门人事档案统计-20260717184946.xlsx +18:49:56 OK xlsx (7093 bytes) -> downloads/02_人事/测试账号_月度人员进出明细表_20260717184952.xlsx +18:50:02 OK xlsx (5778 bytes) -> downloads/02_人事/测试账号_月度人员进出一览表_20260717184959.xlsx +18:50:09 OK xlsx (37342 bytes) -> downloads/02_人事/员工学历统计表-20260717185006.xlsx +18:50:16 OK xlsx (37407 bytes) -> downloads/02_人事/员工年龄段统计表-20260717185013.xlsx +18:50:23 OK xlsx (6778 bytes) -> downloads/02_人事/员工入离职情况统计表-20260717185020.xlsx +18:50:52 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:51:21 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:51:49 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:51:57 OK xlsx (25676 bytes) -> downloads/02_人事/测试账号企业-各部门离职情况表.xlsx +18:52:03 OK xlsx (10917 bytes) -> downloads/02_人事/待入职人员流失率统计表-20260717185201.xlsx +18:52:32 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:53:01 [btn=生成excel] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:53:03 单页测试产出: 21 个文件, SAVED=21 diff --git a/db/collect_fields.log b/db/collect_fields.log new file mode 100644 index 0000000..9cf7e2d --- /dev/null +++ b/db/collect_fields.log @@ -0,0 +1,429 @@ +23:35:59 === 全站字段采集, 共 172 个叶子页 === +23:35:59 [1/172] 工作台 / 工作台首页 +23:36:08 更多菜单项: 6 个 -> 切换小日历、快捷入口设置、调整排序、隐藏卡片、去设置、提醒规则设置 +23:36:08 无字段入口(可能非表格页) +23:36:12 [2/172] 人事 / 员工管理 / 员工花名册 +23:36:22 更多菜单项: 7 个 -> 导出、自定义导出、设置花名册字段、员工成长对比、批量删除员工、花名册备份、回收站 +23:36:24 字段: 81 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、入职日期、证件类型、证件号码、手机号码 +23:36:30 [3/172] 人事 / 员工管理 / 员工档案库 +23:36:40 更多菜单项: 6 个 -> 导出档案概况、导出档案附件、完善档案设置、1完善档案记录、导入导出记录、统计设置 +23:36:40 字段: 4 个 (来源=visible_cols) -> 姓名、工号、部门、岗位 +23:36:54 [4/172] 人事 / 员工管理 / 统计分析 +23:37:09 无字段入口(可能非表格页) +23:37:13 [5/172] 人事 / 员工管理 / 人事报表 +23:37:23 更多菜单项: 4 个 -> 预览、订阅、编辑、移除 +23:37:23 无字段入口(可能非表格页) +23:37:29 [6/172] 人事 / 员工管理 / 万能人事表格 +23:37:39 更多菜单项: 3 个 -> 设置、删除、编辑 +23:37:39 无字段入口(可能非表格页) +23:37:47 [7/172] 人事 / 员工管理 / 人事动态 +23:38:02 无字段入口(可能非表格页) +23:38:10 [8/172] 人事 / 员工关系 / 入职管理 +23:38:21 更多菜单项: 3 个 -> 设置入职登记、1入职登记表填写记录、实名认证与核验记录 +23:38:23 字段: 34 个 (来源=custom_columns) -> 姓名、入职部门、入职岗位、预计入职日期、手机号码、个人邮箱、入职登记、背景调查、人才测评、添加人 +23:38:28 [9/172] 人事 / 员工关系 / 转正管理 +23:38:47 字段: 35 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、入职日期、试用期、转正日期、司龄 +23:39:05 [10/172] 人事 / 员工关系 / 离职管理 +23:39:14 更多菜单项: 4 个 -> 办理离职、批量办理离职、放弃离职、调整离职信息 +23:39:16 字段: 42 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、员工状态、入职日期、司龄、离职日期 +23:39:23 [11/172] 人事 / 员工关系 / 人事异动 +23:39:33 更多菜单项: 2 个 -> 批量导入、批量导入转全职 +23:39:35 字段: 55 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、异动类型、异动原因、异动日期、异动详情 +23:39:38 [12/172] 人事 / 员工关系 / 关怀通知 +23:39:48 更多菜单项: 3 个 -> 停用、删除、编辑 +23:39:48 无字段入口(可能非表格页) +23:40:01 [13/172] 人事 / 员工关系 / 合同管理 +23:40:11 更多菜单项: 4 个 -> 批量导入新增、批量导入更新、解除、终止 +23:40:11 字段: 22 个 (来源=visible_cols) -> 工号、部门、岗位、入职日期、工作性质、员工状态、合同公司、工作地点、合同编号、合同类型 +23:40:25 [14/172] 人事 / 员工关系 / 沟通记录 +23:40:43 字段: 28 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、员工状态、沟通类型、沟通日期、沟通负责人 +23:40:47 [15/172] 人事 / 员工关系 / 任职记录 +23:40:57 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:40:59 字段: 46 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、任职开始日期、任职结束日期、曾任职部门、曾汇报上级 +23:41:15 [16/172] 人事 / 员工关系 / 培训经历 +23:41:25 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:41:27 字段: 44 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、培训名称、培训开始时间、培训结束时间、培训时间 +23:41:31 [17/172] 人事 / 员工关系 / 奖惩记录 +23:41:40 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:41:42 字段: 48 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、奖励/惩罚、奖惩类别、奖惩日期、奖惩内容 +23:41:47 [18/172] 人事 / 员工关系 / 考察期管理 +23:41:57 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:41:59 字段: 29 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、考察开始日期、考察结束日期、考察内容、考察结果、考察备注 +23:42:06 [19/172] 人事 / 员工关系 / 实习生管理 +23:42:16 更多菜单项: 2 个 -> 批量导入更新、批量转全职 +23:42:18 字段: 30 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、年龄、入职日期、实习期、实习到期日、实习内容 +23:42:22 [20/172] 组织 / 组织架构 / 组织管理 +23:42:33 更多菜单项: 12 个 -> 隐藏组织类型、隐藏员工数、隐藏全职员工、隐藏非全职员工、隐藏人员编制、隐藏缺编/超编、隐藏负责人、隐藏分管领导 +23:42:33 无字段入口(可能非表格页) +23:42:47 [21/172] 组织 / 组织架构 / 架构图 +23:42:57 更多菜单项: 6 个 -> 显示部门负责人、显示岗位、显示人数、隐藏人数为0的组织、设置管理机构、下载组织架构 +23:42:57 无字段入口(可能非表格页) +23:43:00 [22/172] 组织 / 组织架构 / 工作地点 +23:43:17 字段: 6 个 (来源=visible_cols) -> 工作地点名称、所在城市、所属区域、详细地址、邮政编码、在职员工数 +23:43:23 [23/172] 组织 / 岗位管理 / 岗位管理 +23:43:33 更多菜单项: 10 个 -> 批量新增、批量修改、批量停用、批量删除、调整排序、历史岗位、导入岗位编制、导出岗位编制表 +23:43:33 字段: 9 个 (来源=visible_cols) -> 在职人数、全职人数、人员编制、岗位编码、所属组织、岗位类别、职级、职等、岗位名称 +23:43:37 [24/172] 组织 / 岗位管理 / 职务管理 +23:43:46 更多菜单项: 2 个 -> 调整排序、批量删除 +23:43:46 字段: 5 个 (来源=visible_cols) -> 职务名称、在职人数、全职人数、职务编码、职务说明 +23:43:53 [25/172] 组织 / 岗位管理 / 员工标签 +23:44:09 字段: 2 个 (来源=visible_cols) -> 员工标签、在职员工数 +23:44:15 [26/172] 组织 / 岗位管理 / 职级管理 +23:44:24 更多菜单项: 2 个 -> 导出职级明细表、导出职级体系地图 +23:44:24 字段: 3 个 (来源=visible_cols) -> 职级通道名称、职级分组、职级数 +23:44:31 [27/172] 组织 / 岗位管理 / 组织报表 +23:44:46 无字段入口(可能非表格页) +23:44:53 [28/172] 招聘 / 常规 / 概览 +23:45:08 无字段入口(可能非表格页) +23:45:11 [29/172] 招聘 / 候选人 / 招聘中 +23:45:21 更多菜单项: 10 个 -> 导入简历、手动添加、Excel导入、简历助手、全部轮次、第1轮、第2轮、第3轮 +23:45:21 无字段入口(可能非表格页) +23:45:28 [30/172] 招聘 / 候选人 / 已入职 +23:45:38 更多菜单项: 4 个 -> 导入简历、手动添加、Excel导入、简历助手 +23:45:38 无字段入口(可能非表格页) +23:45:47 [31/172] 招聘 / 候选人 / 已淘汰 +23:45:57 更多菜单项: 4 个 -> 导入简历、手动添加、Excel导入、简历助手 +23:45:57 无字段入口(可能非表格页) +23:46:09 [32/172] 招聘 / 候选人 / 招聘职位 +23:46:18 更多菜单项: 6 个 -> 手动创建、Excel批量导入、按启动日期倒序、按截止日期倒序、复制、停止招聘 +23:46:19 无字段入口(可能非表格页) +23:46:32 [33/172] 招聘 / 候选人 / 招聘门户 +23:46:42 更多菜单项: 2 个 -> 停用、操作记录 +23:46:42 无字段入口(可能非表格页) +23:46:48 [34/172] 招聘 / 候选人 / 面试日程 +23:47:03 字段: 7 个 (来源=visible_cols) -> 13周一、14周二、15周三、16周四、17周五、18周六、19周日 +23:47:09 [35/172] 招聘 / 候选人 / 人才库 +23:47:20 更多菜单项: 4 个 -> 导入简历、手动添加、Excel导入、简历助手 +23:47:20 无字段入口(可能非表格页) +23:47:30 [36/172] 招聘 / 统计分析 / 招聘报表 +23:47:45 无字段入口(可能非表格页) +23:47:50 [37/172] 招聘 / 统计分析 / 招聘分析 +23:48:00 更多菜单项: 2 个 -> 下载图片、导出数据 +23:48:00 无字段入口(可能非表格页) +23:48:04 [38/172] 招聘 / 设置 / 招聘团队 +23:48:13 更多菜单项: 1 个 -> 移除 +23:48:13 字段: 5 个 (来源=visible_cols) -> 姓名、手机号码、邮箱、绑定微信、参与招聘职位 +23:48:29 [39/172] 招聘 / 设置 / 招聘工具 +23:48:44 无字段入口(可能非表格页) +23:48:48 [40/172] 招聘 / 设置 / 招聘渠道 +23:48:58 更多菜单项: 1 个 -> 禁用 +23:48:58 字段: 2 个 (来源=visible_cols) -> 招聘渠道名称、备注 +23:49:02 [41/172] 招聘 / 设置 / 模板设置 +23:49:17 无字段入口(可能非表格页) +23:49:31 [42/172] 招聘 / 设置 / 更多设置 +23:49:43 更多菜单项: 1 个 -> 删除 +23:49:43 字段: 12 个 (来源=visible_cols) -> 行业、企业规模、企业简介、企业地址、企业福利特色、企业logo、企业照片、联系人、联系电话、联系邮箱 +23:49:47 [43/172] 考勤假期 / 考勤统计 / 每日考勤 +23:50:04 字段: 16 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、考勤编号、工作性质、员工状态、入职日期、离职日期 +23:50:10 [44/172] 考勤假期 / 考勤统计 / 月考勤表 +23:50:19 更多菜单项: 6 个 -> 新建下月考勤、添加考勤人员、删除月考勤表、导入历史考勤、导入考勤数据、导入钉钉考勤结果 +23:50:21 字段: 16 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、考勤编号、工作性质、员工状态、入职日期、离职日期 +23:50:27 [45/172] 考勤假期 / 考勤统计 / 明细记录 +23:50:37 更多菜单项: 3 个 -> 单个添加、批量导入、删除全部打卡数据 +23:50:37 无字段入口(可能非表格页) +23:50:45 [46/172] 考勤假期 / 考勤统计 / 考勤报表 +23:51:01 无字段入口(可能非表格页) +23:51:06 [47/172] 考勤假期 / 考勤统计 / 字段管理 +23:51:23 字段: 11 个 (来源=custom_columns) -> 字段名称、字段分组、状态、字段类型、数据类型、舍入规则、展示小数位数、日期格式、汇总方式、计算公式 +23:51:35 [48/172] 考勤假期 / 考勤统计 / 考勤确认 +23:51:50 无字段入口(可能非表格页) +23:51:54 [49/172] 考勤假期 / 考勤管理 / 考勤分组 +23:52:05 更多菜单项: 2 个 -> 复制、删除 +23:52:05 字段: 9 个 (来源=visible_cols) -> 考勤组类型、出勤日、出勤时间、核算规则、负责人、适用范围、最后更新时间、最后更新人、考勤组名称 +23:52:09 [50/172] 考勤假期 / 考勤管理 / 排班管理 +23:52:24 字段: 5 个 (来源=visible_cols) -> 姓名、岗位、排/休天数、工号、部门 +23:52:31 [51/172] 考勤假期 / 考勤管理 / 考勤规则 +23:52:46 字段: 5 个 (来源=visible_cols) -> 迟到、早退、缺卡、旷工、规则名称 +23:52:55 [52/172] 考勤假期 / 考勤管理 / 打卡方式 +23:53:10 字段: 4 个 (来源=visible_cols) -> 打卡地址、具体地址、可打卡范围、关联考勤组数 +23:53:25 [53/172] 考勤假期 / 考勤管理 / 考勤设置 +23:53:40 无字段入口(可能非表格页) +23:53:45 [54/172] 考勤假期 / 假期管理 / 休假一览 +23:54:00 无字段入口(可能非表格页) +23:54:07 [55/172] 考勤假期 / 假期管理 / 手动调整 +23:54:17 更多菜单项: 4 个 -> 单个发放、单个扣减、批量发放、批量扣减 +23:54:19 字段: 15 个 (来源=custom_columns) -> 姓名、工号、部门、岗位、考勤编号、工作性质、工作状态、入职日期、试用期、转正日期 +23:54:24 [56/172] 考勤假期 / 假期管理 / 假期余额 +23:54:34 更多菜单项: 2 个 -> 导出余额、导出余额变更记录 +23:54:36 字段: 15 个 (来源=custom_columns) -> 姓名、工号、部门、岗位、考勤编号、工作性质、工作状态、入职日期、试用期、转正日期 +23:54:41 [57/172] 考勤假期 / 假期管理 / 假期方案 +23:54:51 更多菜单项: 2 个 -> 复制、删除 +23:54:51 字段: 8 个 (来源=visible_cols) -> 假期类型、请假规则、发放规则、扣减规则、适用范围、方案负责人、方案创建人、方案名称 +23:54:59 [58/172] 考勤假期 / 假期管理 / 假期设置 +23:55:08 更多菜单项: 2 个 -> 设置、删除 +23:55:08 无字段入口(可能非表格页) +23:55:17 [59/172] 薪酬 / 薪酬管理 / 月工资表 +23:55:27 更多菜单项: 2 个 -> 导入历史工资、删除 +23:55:27 无字段入口(可能非表格页) +23:55:42 [60/172] 薪酬 / 薪酬管理 / 工资发放 +23:55:57 无字段入口(可能非表格页) +23:56:01 [61/172] 薪酬 / 薪酬管理 / 员工薪资 +23:56:10 更多菜单项: 4 个 -> 导入定薪、导入调薪、设置定薪模板、查看离职员工 +23:56:10 无字段入口(可能非表格页) +23:56:23 [62/172] 薪酬 / 薪酬管理 / 薪酬报表 +23:56:38 无字段入口(可能非表格页) +23:56:44 [63/172] 薪酬 / 薪酬管理 / 薪酬分析 +23:56:54 更多菜单项: 2 个 -> 下载图片、导出数据表 +23:56:54 无字段入口(可能非表格页) +23:56:59 [64/172] 薪酬 / 薪酬管理 / 计薪规则 +23:57:10 更多菜单项: 2 个 -> 复制、删除 +23:57:10 字段: 6 个 (来源=visible_cols) -> 工资表模板、月计薪时长、计薪公式、计薪规则、适用范围、薪资组名称 +23:57:18 [65/172] 薪酬 / 薪酬管理 / 薪酬设置 +23:57:28 更多菜单项: 3 个 -> 预览、复制、删除 +23:57:28 字段: 8 个 (来源=visible_cols) -> 模板名称、工资项、适用薪资组、备注、姓名、工号、部门、岗位 +23:57:31 [66/172] 薪酬 / 薪酬管理 / 年终奖计算 +23:57:46 无字段入口(可能非表格页) +23:57:55 [67/172] 薪酬 / 薪酬管理 / 发送工资条 +23:58:10 字段: 6 个 (来源=visible_cols) -> 所属月份、总人数、已发放、操作人、操作时间、工资表名称 +23:58:18 [68/172] 审批 / 常规 / 审批表单 +23:58:28 更多菜单项: 2 个 -> 停用、复制 +23:58:28 无字段入口(可能非表格页) +23:58:32 [69/172] 审批 / 常规 / 审批模板库 +23:58:48 字段: 2 个 (来源=visible_cols) -> 审批模板名称、模板说明 +23:58:53 [70/172] 审批 / 常规 / 审批代理 +23:59:09 字段: 6 个 (来源=visible_cols) -> 被代理人、代理人、代理时间、代理审批类型、员工端代理人处理记录、更新记录 +23:59:13 [71/172] 审批 / 常规 / 审批记录 +23:59:23 更多菜单项: 5 个 -> 导出审批记录详情、批量下载、批量下载审批附件、批量删除、操作记录 +23:59:23 字段: 11 个 (来源=visible_cols) -> 标题、所在部门、发起人、发起时间、摘要、审批类型、审批状态、当前审批人、历史审批人、最近处理时间 +23:59:35 [72/172] 审批 / 常规 / 审批交接 +23:59:50 字段: 5 个 (来源=visible_cols) -> 异常审批人、异常类型、未处理审批记录数量、审批类型、审批单 +23:59:57 [73/172] 审批 / 常规 / 操作记录 +00:00:12 字段: 5 个 (来源=visible_cols) -> 操作时间、用户IP、操作人、操作类型、操作内容 +00:00:28 [74/172] 培训学习 / 线下培训 / 培训计划 +00:00:38 更多菜单项: 4 个 -> 导入培训计划、导出培训计划信息、复制计划、删除计划 +00:00:38 无字段入口(可能非表格页) +00:00:42 [75/172] 培训学习 / 线下培训 / 开课日程 +00:00:57 字段: 8 个 (来源=visible_cols) -> 课程开始时间、课程结束时间、课程名称、培训计划、培训计划状态、讲师、课时、地点 +00:01:04 [76/172] 培训学习 / 线下培训 / 培训记录 +00:01:13 更多菜单项: 2 个 -> 导出员工培训记录、批量删除 +00:01:13 字段: 14 个 (来源=visible_cols) -> 工号、所属组织、岗位、员工状态、培训课程、培训计划、培训计划类型、课程开始时间、课程结束时间、课时 +00:01:21 [77/172] 培训学习 / 线上学习 / 课程库 +00:01:32 更多菜单项: 4 个 -> 批量新增、批量管理、课程申请单8、课程分发记录 +00:01:32 无字段入口(可能非表格页) +00:01:40 [78/172] 培训学习 / 线上学习 / 学习计划 +00:01:55 无字段入口(可能非表格页) +00:01:59 [79/172] 培训学习 / 线上学习 / 在线直播 +00:02:09 更多菜单项: 1 个 -> 结束计划 +00:02:09 无字段入口(可能非表格页) +00:02:12 [80/172] 培训学习 / 线上学习 / 学习进度 +00:02:28 字段: 15 个 (来源=visible_cols) -> 计划名称、课程编号、课程名称、资源形式、学习状态、学习开始时间、课程学习进度、有效学习时长、应打卡次数、完成打卡次数 +00:02:35 [81/172] 培训学习 / 线上学习 / 学习记录 +00:02:50 字段: 22 个 (来源=visible_cols) -> 工号、所属组织、岗位、计划名称、课程编号、课程名称、讲师、资源形式、学习状态、学习开始时间 +00:02:58 [82/172] 培训学习 / 考试练习 / 题库管理 +00:03:13 字段: 5 个 (来源=visible_cols) -> 题目、所属分类、题型、创建人、创建时间 +00:03:16 [83/172] 培训学习 / 考试练习 / 试卷管理 +00:03:32 无字段入口(可能非表格页) +00:03:35 [84/172] 培训学习 / 考试练习 / 考试安排 +00:03:50 字段: 10 个 (来源=visible_cols) -> 考试类型、关联类型、关联计划名称、课程名称、考试时间、应考人数、实考人数、未考试人数、待批阅人数、考试名称 +00:04:05 [85/172] 培训学习 / 考试练习 / 考试记录 +00:04:20 字段: 11 个 (来源=visible_cols) -> 工号、岗位、考试名称、考试类型、关联计划名称、关联课程名称、答题得分、答题时长、考试结果、考试时间 +00:04:25 [86/172] 培训学习 / 培训设置 / 讲师设置 +00:04:35 更多菜单项: 4 个 -> 批量修改、批量删除、讲师授课记录、导出内部讲师 +00:04:35 字段: 9 个 (来源=visible_cols) -> 工号、所属组织、专/兼职、手机号码、擅长课程、是否开启试卷批阅权限、是否启用、点赞、讲师姓名 +00:04:41 [87/172] 培训学习 / 培训设置 / 团队设置 +00:04:51 更多菜单项: 2 个 -> 批量移除、导出团队学员 +00:04:51 字段: 6 个 (来源=visible_cols) -> 工号、所属组织、岗位、工作性质、入职日期、姓名 +00:04:58 [88/172] 培训学习 / 培训设置 / 自定义设置 +00:05:13 无字段入口(可能非表格页) +00:05:30 [89/172] 绩效 / 常规 / 概览 +00:05:40 更多菜单项: 3 个 -> 绩效考核、试用期考核、晋升考核 +00:05:40 字段: 6 个 (来源=visible_cols) -> 部门、考核状态、待处理人、评分、等级、姓名 +00:05:48 [90/172] 绩效 / 考核管理 / 绩效考核 +00:05:58 更多菜单项: 9 个 -> 计划详情、查看设置、考核结果、成果概况、绩效面谈、复制、保存为模板、操作记录 +00:05:58 字段: 9 个 (来源=visible_cols) -> 考核团队、考核人数、完成人数、确认人数、已面谈人数、考核周期类型、考核周期、考核说明、考核计划名称 +00:06:05 [91/172] 绩效 / 考核管理 / 历史绩效考核 +00:06:15 更多菜单项: 5 个 -> 查看设置、查看结果概况、查看绩效面谈、复制、删除 +00:06:15 字段: 8 个 (来源=visible_cols) -> 考核团队、考核人数、已面谈人数、考核周期类型、考核周期、来源、考核计划说明、考核计划名称 +00:06:22 [92/172] 绩效 / 考核管理 / 试用期考核 +00:06:32 更多菜单项: 5 个 -> 发起绩效面谈、下载为PDF、导入考核参考数据、查看设置、删除 +00:06:32 字段: 11 个 (来源=visible_cols) -> 部门、岗位、员工状态、入职时间、考核名称、考核周期、考核状态、待处理人、面谈次数、考核评分 +00:06:37 [93/172] 绩效 / 考核管理 / 晋升考核 +00:06:52 字段: 11 个 (来源=visible_cols) -> 部门、岗位、员工状态、入职时间、考核名称、考核周期、考核状态、待处理人、面谈次数、考核评分 +00:07:02 [94/172] 绩效 / 考核管理 / 考核组管理 +00:07:17 字段: 5 个 (来源=visible_cols) -> 周期类型、考核周期、操作人、操作时间、考核组名称 +00:07:21 [95/172] 绩效 / 考核结果 / 员工绩效档案 +00:07:36 字段: 10 个 (来源=visible_cols) -> 工号、部门、岗位、手机号、员工状态、最近考核计划、最近绩效评分、最近绩效等级、考核次数、姓名 +00:07:43 [96/172] 绩效 / 考核结果 / 绩效考核记录 +00:07:58 字段: 12 个 (来源=visible_cols) -> 工号、部门、岗位、员工状态、考核计划、考核状态、待处理人、评分、等级、结果确认状态 +00:08:06 [97/172] 绩效 / 考核结果 / 绩效面谈记录 +00:08:16 更多菜单项: 2 个 -> 编辑、删除 +00:08:16 字段: 10 个 (来源=visible_cols) -> 工号、部门、岗位、员工状态、手机号、所属考核计划、面谈人、面谈时间、面谈状态、姓名 +00:08:20 [98/172] 绩效 / 考核设置 / 指标库 +00:08:30 更多菜单项: 5 个 -> 导入指标、导出指标、复制指标、移动指标、删除指标 +00:08:30 字段: 9 个 (来源=visible_cols) -> 指标类型、指标说明、考核标准、评分上限、权重、评分方式、指标名称、数据来源(单位)、指标评分 +00:08:35 [99/172] 绩效 / 考核设置 / 考核模板库 +00:08:44 更多菜单项: 3 个 -> 预览、复制考核模板、删除 +00:08:44 无字段入口(可能非表格页) +00:08:49 [100/172] 绩效 / 考核设置 / 考核团队 +00:08:58 更多菜单项: 2 个 -> 操作记录、删除考核团队 +00:08:58 无字段入口(可能非表格页) +00:09:04 [101/172] 绩效 / 考核设置 / 自定义设置 +00:09:19 字段: 2 个 (来源=visible_cols) -> 考核周期类型、默认计薪月份 +00:09:29 [102/172] 绩效 / 考核设置 / 操作记录 +00:09:44 字段: 4 个 (来源=visible_cols) -> 操作时间、用户IP、操作人、操作内容 +00:09:52 [103/172] 社保公积金 / 常规 / 参保账单 +00:10:02 更多菜单项: 4 个 -> 导入历史参保记录、修改名称、复制、删除 +00:10:02 无字段入口(可能非表格页) +00:10:08 [104/172] 社保公积金 / 常规 / 账单核对 +00:10:23 无字段入口(可能非表格页) +00:10:28 [105/172] 社保公积金 / 常规 / 参保档案 +00:10:38 更多菜单项: 7 个 -> 批量停保、批量补差、已停保人员参保档案、按参保月份倒序、停保、补差、补缴 +00:10:40 字段: 12 个 (来源=visible_cols) -> 工号、试用期、证件类型、证件号码、参保方案、社保参保城市、参保类型、起始参保月份、最新参保月份、社保基数 +00:10:46 [106/172] 社保公积金 / 常规 / 社保报表 +00:11:01 无字段入口(可能非表格页) +00:11:17 [107/172] 社保公积金 / 常规 / 社保分析 +00:11:33 无字段入口(可能非表格页) +00:11:38 [108/172] 社保公积金 / 常规 / 参保规则 +00:11:48 更多菜单项: 5 个 -> 社保统一设置、批量修改参保方案、按创建时间倒序、复制、删除 +00:11:48 字段: 9 个 (来源=visible_cols) -> 社保参保城市、参保类型、使用人数、设置方式、个人社保、企业社保、个人公积金、企业公积金、方案名称 +00:11:52 [109/172] 行政管理 / 常规 / 企业公告 +00:12:02 更多菜单项: 3 个 -> 查阅情况、置顶、下线 +00:12:02 字段: 10 个 (来源=visible_cols) -> 状态、附件下载状态、发布范围、接收人、已读、已签收、创建/更新时间、发布时间、下线时间、标题 +00:12:09 [110/172] 行政管理 / 常规 / 企业制度 +00:12:18 更多菜单项: 6 个 -> 批量移动、批量发布、批量下线、查阅情况、置顶、下线 +00:12:18 字段: 10 个 (来源=visible_cols) -> 状态、附件下载状态、发布范围、接收人、已读、已签收、创建/更新时间、发布时间、下线时间、标题 +00:12:23 [111/172] 行政管理 / 常规 / 新闻动态 +00:12:33 更多菜单项: 2 个 -> 编辑、下线 +00:12:33 字段: 7 个 (来源=visible_cols) -> 状态、阅读数、点赞数、创建/更新时间、发布时间、下线时间、标题 +00:12:44 [112/172] 行政管理 / 常规 / 开具证明 +00:12:59 字段: 7 个 (来源=visible_cols) -> 姓名、部门、岗位、申请时间、申请证明类型、申请理由、操作记录 +00:13:15 [113/172] 行政管理 / 会议室预定 / 会议预定记录 +00:13:30 字段: 7 个 (来源=visible_cols) -> 会议室、会议时间、时长(分钟)、会议状态、预定人、预定人部门、会议名称 +00:13:37 [114/172] 行政管理 / 会议室预定 / 会议室管理 +00:13:47 更多菜单项: 3 个 -> 暂停预定、修改、删除 +00:13:47 无字段入口(可能非表格页) +00:13:51 [115/172] 行政管理 / 会议室预定 / 会议操作记录 +00:14:06 字段: 3 个 (来源=visible_cols) -> 操作时间、操作人、操作内容 +00:14:11 [116/172] 行政管理 / 问卷调查 / 问卷管理 +00:14:21 更多菜单项: 3 个 -> 删除问卷、复制问卷、预览问卷 +00:14:21 无字段入口(可能非表格页) +00:14:27 [117/172] 行政管理 / 问卷调查 / 问卷模板库 +00:14:43 无字段入口(可能非表格页) +00:14:59 [118/172] 行政管理 / 问卷调查 / 问卷操作记录 +00:15:14 字段: 3 个 (来源=visible_cols) -> 操作时间、操作人、操作内容 +00:15:20 [119/172] 电子合同 / 常规 / 概览 +00:15:30 更多菜单项: 1 个 -> 设置常用模板 +00:15:30 无字段入口(可能非表格页) +00:15:36 [120/172] 电子合同 / 合同签署 / 签署中 +00:15:46 更多菜单项: 4 个 -> 批量发送签署通知、打包下载记录、批量发送记录、员工实名认证记录 +00:15:46 字段: 5 个 (来源=visible_cols) -> 合同名称、合同编号、合同类型、签署方式、签署状态 +00:15:52 [121/172] 电子合同 / 合同签署 / 已签署 +00:16:02 更多菜单项: 3 个 -> 打包下载记录、批量发送记录、员工实名认证记录 +00:16:02 字段: 5 个 (来源=visible_cols) -> 合同名称、合同编号、合同类型、签署方式、签署状态 +00:16:09 [122/172] 电子合同 / 合同签署 / 已作废 +00:16:19 更多菜单项: 3 个 -> 打包下载记录、批量发送记录、员工实名认证记录 +00:16:19 字段: 5 个 (来源=visible_cols) -> 合同名称、合同编号、合同类型、签署方式、签署状态 +00:16:27 [123/172] 电子合同 / 合同签署 / 合同档案库 +00:16:42 无字段入口(可能非表格页) +00:16:46 [124/172] 电子合同 / 设置 / 企业印章 +00:16:56 更多菜单项: 2 个 -> 编辑、删除 +00:16:56 无字段入口(可能非表格页) +00:17:12 [125/172] 电子合同 / 设置 / 合同模板 +00:17:22 更多菜单项: 3 个 -> 单个发起、批量发起、删除 +00:17:22 无字段入口(可能非表格页) +00:17:28 [126/172] 电子合同 / 设置 / 合同包 +00:17:43 字段: 3 个 (来源=visible_cols) -> 合同包名称、备注、合同模板 +00:18:01 [127/172] 背景调查 / 背景调查服务 +00:18:16 无字段入口(可能非表格页) +00:18:31 [128/172] 人才测评 / 人才测评服务 +00:18:46 无字段入口(可能非表格页) +00:18:52 [129/172] 员工福利 / 常规 / 员工福利概况 +00:19:07 无字段入口(可能非表格页) +00:19:13 [130/172] 员工福利 / 常规 / 员工积分管理 +00:19:28 字段: 7 个 (来源=visible_cols) -> 姓名、员工状态、手机号、工号、部门、岗位、累计发放积分 +00:19:32 [131/172] 员工福利 / 常规 / 商品专区管理 +00:19:47 字段: 4 个 (来源=visible_cols) -> 专区名称、商品数量、兑换开始时间、兑换结束时间 +00:19:53 [132/172] 员工福利 / 常规 / 平安好医生 +00:20:09 字段: 9 个 (来源=visible_cols) -> 姓名、工号、员工状态、部门、岗位、手机号、累计发放总份数、累计发放体检宝员工版份数、累计发放体检宝高管版份数 +00:20:25 [133/172] 人事仪表盘 / 常规 / 我的仪表盘 +00:20:40 无字段入口(可能非表格页) +00:20:48 [134/172] 人事仪表盘 / 常规 / 报告老板 +00:21:03 无字段入口(可能非表格页) +00:21:07 [135/172] 第三方对接 / 常规 / 企业微信 +00:21:23 无字段入口(可能非表格页) +00:21:29 [136/172] 第三方对接 / 常规 / 钉钉 +00:21:44 无字段入口(可能非表格页) +00:21:53 [137/172] 第三方对接 / 常规 / 飞书 +00:22:09 无字段入口(可能非表格页) +00:22:26 [138/172] 第三方对接 / 常规 / 携程商旅 +00:22:41 无字段入口(可能非表格页) +00:22:57 [139/172] 第三方对接 / 常规 / 操作记录 +00:23:12 无字段入口(可能非表格页) +00:23:20 [140/172] 培训商城 / 培训商城(外部课程采购) +00:23:25 无字段入口(可能非表格页) +00:23:36 [141/172] 短信发送 / 常规 / 短信发送 +00:23:51 无字段入口(可能非表格页) +00:23:58 [142/172] 短信发送 / 常规 / 发送记录 +00:24:14 字段: 5 个 (来源=visible_cols) -> 短信模板、发送人、发送条数、创建时间、发送详情 +00:24:24 [143/172] 电子工资条 / 常规 / 发送工资条 +00:24:39 字段: 6 个 (来源=visible_cols) -> 所属月份、总人数、已发放、操作人、操作时间、工资表名称 +00:24:46 [144/172] 电子工资条 / 常规 / 发放记录 +00:24:56 更多菜单项: 3 个 -> 原始工资表、查看发放记录、删除发放记录 +00:24:56 无字段入口(可能非表格页) +00:25:02 [145/172] 电子工资条 / 常规 / 反馈记录 +00:25:17 字段: 8 个 (来源=visible_cols) -> 部门、岗位、月份、工资表名称、最新反馈内容、处理状态、最新反馈时间、姓名 +00:25:25 [146/172] 电子工资条 / 常规 / 统计分析 +00:25:40 无字段入口(可能非表格页) +00:25:46 [147/172] 电子工资条 / 常规 / 操作记录 +00:26:01 字段: 3 个 (来源=visible_cols) -> 操作时间、IP、操作记录 +00:26:09 [148/172] 智能薪酬 / 常规 / 概览 +00:26:19 更多菜单项: 1 个 -> 管理 +00:26:19 无字段入口(可能非表格页) +00:26:31 [149/172] 智能薪酬 / 常规 / 薪酬核算 +00:26:41 更多菜单项: 3 个 -> 创建全新工资表、从以往核算方案创建、从工资表模板创建 +00:26:41 字段: 3 个 (来源=visible_cols) -> 姓名、工号、部门 +00:26:44 [150/172] 智能薪酬 / 数据采集 / 员工考勤 +00:26:54 更多菜单项: 2 个 -> 自定义考勤字段、锁定每日考勤 +00:26:56 字段: 4 个 (来源=visible_cols) -> 姓名、工号、部门、岗位 +00:27:01 [151/172] 智能薪酬 / 数据采集 / 业务提报 +00:27:11 更多菜单项: 4 个 -> 查看设置、停用方案、编辑方案、复制方案 +00:27:13 字段: 9 个 (来源=visible_cols) -> 提报类型、方案状态、提报管理员、最近提报时间、创建时间、创建人、业务提报说明、业务提报审批、业务提报方案 +00:27:18 [152/172] 智能薪酬 / 薪酬数据 / 薪酬档案 +00:27:29 更多菜单项: 6 个 -> 导入停薪记录、导入报税信息、调薪、修改发薪组织、查看报税信息、查看调薪记录 +00:27:31 字段: 13 个 (来源=visible_cols) -> 工号、部门、证件类型、证件号码、岗位、职级、发薪组织、入职日期、纳税单位、是否发薪 +00:27:48 [153/172] 智能薪酬 / 薪酬数据 / 减除费用确认 +00:28:03 字段: 8 个 (来源=visible_cols) -> 工号、部门、计税年份、纳税单位、证件类型、证件号码、是否直接按照全年6万元扣除、姓名 +00:28:09 [154/172] 智能薪酬 / 薪酬数据 / 税前扣除 +00:28:19 更多菜单项: 3 个 -> 使用上月税前扣除、使用其他月份数据、导入新的税前扣除 +00:28:21 无字段入口(可能非表格页) +00:28:28 [155/172] 智能薪酬 / 薪酬数据 / 个税记录 +00:28:45 字段: 55 个 (来源=visible_cols) -> 岗位、工作性质、工作状态、证件类型、证件号码、纳税单位、税款所属期起、税款所属期止、所得项目、本期收入 +00:28:49 [156/172] 智能薪酬 / 薪酬数据 / 成本明细 +00:28:59 更多菜单项: 2 个 -> 查看薪酬预算、成本分摊设置 +00:29:01 字段: 14 个 (来源=visible_cols) -> 人数、人力成本、应发工资、实发工资、绩效奖金、业绩提成、加班工资、固定工资、企业社保、企业公积金 +00:29:08 [157/172] 智能薪酬 / 报表中心 / 薪酬报表 +00:29:24 无字段入口(可能非表格页) +00:29:35 [158/172] 智能薪酬 / 报表中心 / 薪酬分析 +00:29:45 更多菜单项: 2 个 -> 编辑图表、移除图表 +00:29:45 无字段入口(可能非表格页) +00:29:51 [159/172] 智能薪酬 / 薪酬设置 / 薪酬结构 +00:30:01 更多菜单项: 2 个 -> 单个新增、批量导入 +00:30:03 字段: 15 个 (来源=visible_cols) -> 项目分组、状态、取值方式、取值来源、数据类型、展示小数位数、日期格式、个税项目、公式、公式说明 +00:30:17 [160/172] 智能薪酬 / 薪酬设置 / 基础设置 +00:30:32 无字段入口(可能非表格页) +00:30:39 [161/172] 智能薪酬 / 薪酬设置 / 成本设置 +00:30:49 更多菜单项: 5 个 -> 导入成本中心、导出、排序、停用、删除 +00:30:51 无字段入口(可能非表格页) +00:30:57 [162/172] 智能薪酬 / 薪酬设置 / 操作记录 +00:31:12 字段: 5 个 (来源=visible_cols) -> 操作时间、用户IP、操作人、所属模块、操作内容 +00:31:18 [163/172] 个税对接 / 常规 / 人员信息报送 +00:31:34 无字段入口(可能非表格页) +00:31:41 [164/172] 个税对接 / 常规 / 个税申报 +00:31:56 无字段入口(可能非表格页) +00:32:01 [165/172] 个税对接 / 常规 / 纳税单位管理 +00:32:16 无字段入口(可能非表格页) +00:32:22 [166/172] 个税对接 / 常规 / 操作记录 +00:32:37 无字段入口(可能非表格页) +00:32:53 [167/172] AI员工助手 / 常规 / AI员工助手 +00:33:09 无字段入口(可能非表格页) +00:33:14 [168/172] AI员工助手 / 常规 / 知识库管理 +00:33:31 字段: 5 个 (来源=visible_cols) -> 可见范围、备注、更新人、更新时间、知识库名称 +00:33:34 [169/172] AI员工助手 / 常规 / 员工助手设置 +00:33:50 无字段入口(可能非表格页) +00:33:59 [170/172] AI员工助手 / 数据统计 / 总体使用情况 +00:34:14 字段: 5 个 (来源=visible_cols) -> 知识库名称、命中次数、姓名、部门、提问次数 +00:34:20 [171/172] AI员工助手 / 数据统计 / 操作记录 +00:34:35 字段: 4 个 (来源=visible_cols) -> 操作时间、用户IP、更新人、操作内容 +00:34:51 [172/172] 应用管理 / 应用管理 +00:34:56 无字段入口(可能非表格页) +00:35:00 === DONE 累计字段=1167 === diff --git a/db/collect_run.out b/db/collect_run.out new file mode 100644 index 0000000..9cf7e2d --- /dev/null +++ b/db/collect_run.out @@ -0,0 +1,429 @@ +23:35:59 === 全站字段采集, 共 172 个叶子页 === +23:35:59 [1/172] 工作台 / 工作台首页 +23:36:08 更多菜单项: 6 个 -> 切换小日历、快捷入口设置、调整排序、隐藏卡片、去设置、提醒规则设置 +23:36:08 无字段入口(可能非表格页) +23:36:12 [2/172] 人事 / 员工管理 / 员工花名册 +23:36:22 更多菜单项: 7 个 -> 导出、自定义导出、设置花名册字段、员工成长对比、批量删除员工、花名册备份、回收站 +23:36:24 字段: 81 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、入职日期、证件类型、证件号码、手机号码 +23:36:30 [3/172] 人事 / 员工管理 / 员工档案库 +23:36:40 更多菜单项: 6 个 -> 导出档案概况、导出档案附件、完善档案设置、1完善档案记录、导入导出记录、统计设置 +23:36:40 字段: 4 个 (来源=visible_cols) -> 姓名、工号、部门、岗位 +23:36:54 [4/172] 人事 / 员工管理 / 统计分析 +23:37:09 无字段入口(可能非表格页) +23:37:13 [5/172] 人事 / 员工管理 / 人事报表 +23:37:23 更多菜单项: 4 个 -> 预览、订阅、编辑、移除 +23:37:23 无字段入口(可能非表格页) +23:37:29 [6/172] 人事 / 员工管理 / 万能人事表格 +23:37:39 更多菜单项: 3 个 -> 设置、删除、编辑 +23:37:39 无字段入口(可能非表格页) +23:37:47 [7/172] 人事 / 员工管理 / 人事动态 +23:38:02 无字段入口(可能非表格页) +23:38:10 [8/172] 人事 / 员工关系 / 入职管理 +23:38:21 更多菜单项: 3 个 -> 设置入职登记、1入职登记表填写记录、实名认证与核验记录 +23:38:23 字段: 34 个 (来源=custom_columns) -> 姓名、入职部门、入职岗位、预计入职日期、手机号码、个人邮箱、入职登记、背景调查、人才测评、添加人 +23:38:28 [9/172] 人事 / 员工关系 / 转正管理 +23:38:47 字段: 35 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、入职日期、试用期、转正日期、司龄 +23:39:05 [10/172] 人事 / 员工关系 / 离职管理 +23:39:14 更多菜单项: 4 个 -> 办理离职、批量办理离职、放弃离职、调整离职信息 +23:39:16 字段: 42 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、员工状态、入职日期、司龄、离职日期 +23:39:23 [11/172] 人事 / 员工关系 / 人事异动 +23:39:33 更多菜单项: 2 个 -> 批量导入、批量导入转全职 +23:39:35 字段: 55 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、异动类型、异动原因、异动日期、异动详情 +23:39:38 [12/172] 人事 / 员工关系 / 关怀通知 +23:39:48 更多菜单项: 3 个 -> 停用、删除、编辑 +23:39:48 无字段入口(可能非表格页) +23:40:01 [13/172] 人事 / 员工关系 / 合同管理 +23:40:11 更多菜单项: 4 个 -> 批量导入新增、批量导入更新、解除、终止 +23:40:11 字段: 22 个 (来源=visible_cols) -> 工号、部门、岗位、入职日期、工作性质、员工状态、合同公司、工作地点、合同编号、合同类型 +23:40:25 [14/172] 人事 / 员工关系 / 沟通记录 +23:40:43 字段: 28 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、员工状态、沟通类型、沟通日期、沟通负责人 +23:40:47 [15/172] 人事 / 员工关系 / 任职记录 +23:40:57 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:40:59 字段: 46 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、任职开始日期、任职结束日期、曾任职部门、曾汇报上级 +23:41:15 [16/172] 人事 / 员工关系 / 培训经历 +23:41:25 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:41:27 字段: 44 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、培训名称、培训开始时间、培训结束时间、培训时间 +23:41:31 [17/172] 人事 / 员工关系 / 奖惩记录 +23:41:40 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:41:42 字段: 48 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、工作性质、奖励/惩罚、奖惩类别、奖惩日期、奖惩内容 +23:41:47 [18/172] 人事 / 员工关系 / 考察期管理 +23:41:57 更多菜单项: 2 个 -> 批量导入新增、批量导入更新 +23:41:59 字段: 29 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、考察开始日期、考察结束日期、考察内容、考察结果、考察备注 +23:42:06 [19/172] 人事 / 员工关系 / 实习生管理 +23:42:16 更多菜单项: 2 个 -> 批量导入更新、批量转全职 +23:42:18 字段: 30 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、年龄、入职日期、实习期、实习到期日、实习内容 +23:42:22 [20/172] 组织 / 组织架构 / 组织管理 +23:42:33 更多菜单项: 12 个 -> 隐藏组织类型、隐藏员工数、隐藏全职员工、隐藏非全职员工、隐藏人员编制、隐藏缺编/超编、隐藏负责人、隐藏分管领导 +23:42:33 无字段入口(可能非表格页) +23:42:47 [21/172] 组织 / 组织架构 / 架构图 +23:42:57 更多菜单项: 6 个 -> 显示部门负责人、显示岗位、显示人数、隐藏人数为0的组织、设置管理机构、下载组织架构 +23:42:57 无字段入口(可能非表格页) +23:43:00 [22/172] 组织 / 组织架构 / 工作地点 +23:43:17 字段: 6 个 (来源=visible_cols) -> 工作地点名称、所在城市、所属区域、详细地址、邮政编码、在职员工数 +23:43:23 [23/172] 组织 / 岗位管理 / 岗位管理 +23:43:33 更多菜单项: 10 个 -> 批量新增、批量修改、批量停用、批量删除、调整排序、历史岗位、导入岗位编制、导出岗位编制表 +23:43:33 字段: 9 个 (来源=visible_cols) -> 在职人数、全职人数、人员编制、岗位编码、所属组织、岗位类别、职级、职等、岗位名称 +23:43:37 [24/172] 组织 / 岗位管理 / 职务管理 +23:43:46 更多菜单项: 2 个 -> 调整排序、批量删除 +23:43:46 字段: 5 个 (来源=visible_cols) -> 职务名称、在职人数、全职人数、职务编码、职务说明 +23:43:53 [25/172] 组织 / 岗位管理 / 员工标签 +23:44:09 字段: 2 个 (来源=visible_cols) -> 员工标签、在职员工数 +23:44:15 [26/172] 组织 / 岗位管理 / 职级管理 +23:44:24 更多菜单项: 2 个 -> 导出职级明细表、导出职级体系地图 +23:44:24 字段: 3 个 (来源=visible_cols) -> 职级通道名称、职级分组、职级数 +23:44:31 [27/172] 组织 / 岗位管理 / 组织报表 +23:44:46 无字段入口(可能非表格页) +23:44:53 [28/172] 招聘 / 常规 / 概览 +23:45:08 无字段入口(可能非表格页) +23:45:11 [29/172] 招聘 / 候选人 / 招聘中 +23:45:21 更多菜单项: 10 个 -> 导入简历、手动添加、Excel导入、简历助手、全部轮次、第1轮、第2轮、第3轮 +23:45:21 无字段入口(可能非表格页) +23:45:28 [30/172] 招聘 / 候选人 / 已入职 +23:45:38 更多菜单项: 4 个 -> 导入简历、手动添加、Excel导入、简历助手 +23:45:38 无字段入口(可能非表格页) +23:45:47 [31/172] 招聘 / 候选人 / 已淘汰 +23:45:57 更多菜单项: 4 个 -> 导入简历、手动添加、Excel导入、简历助手 +23:45:57 无字段入口(可能非表格页) +23:46:09 [32/172] 招聘 / 候选人 / 招聘职位 +23:46:18 更多菜单项: 6 个 -> 手动创建、Excel批量导入、按启动日期倒序、按截止日期倒序、复制、停止招聘 +23:46:19 无字段入口(可能非表格页) +23:46:32 [33/172] 招聘 / 候选人 / 招聘门户 +23:46:42 更多菜单项: 2 个 -> 停用、操作记录 +23:46:42 无字段入口(可能非表格页) +23:46:48 [34/172] 招聘 / 候选人 / 面试日程 +23:47:03 字段: 7 个 (来源=visible_cols) -> 13周一、14周二、15周三、16周四、17周五、18周六、19周日 +23:47:09 [35/172] 招聘 / 候选人 / 人才库 +23:47:20 更多菜单项: 4 个 -> 导入简历、手动添加、Excel导入、简历助手 +23:47:20 无字段入口(可能非表格页) +23:47:30 [36/172] 招聘 / 统计分析 / 招聘报表 +23:47:45 无字段入口(可能非表格页) +23:47:50 [37/172] 招聘 / 统计分析 / 招聘分析 +23:48:00 更多菜单项: 2 个 -> 下载图片、导出数据 +23:48:00 无字段入口(可能非表格页) +23:48:04 [38/172] 招聘 / 设置 / 招聘团队 +23:48:13 更多菜单项: 1 个 -> 移除 +23:48:13 字段: 5 个 (来源=visible_cols) -> 姓名、手机号码、邮箱、绑定微信、参与招聘职位 +23:48:29 [39/172] 招聘 / 设置 / 招聘工具 +23:48:44 无字段入口(可能非表格页) +23:48:48 [40/172] 招聘 / 设置 / 招聘渠道 +23:48:58 更多菜单项: 1 个 -> 禁用 +23:48:58 字段: 2 个 (来源=visible_cols) -> 招聘渠道名称、备注 +23:49:02 [41/172] 招聘 / 设置 / 模板设置 +23:49:17 无字段入口(可能非表格页) +23:49:31 [42/172] 招聘 / 设置 / 更多设置 +23:49:43 更多菜单项: 1 个 -> 删除 +23:49:43 字段: 12 个 (来源=visible_cols) -> 行业、企业规模、企业简介、企业地址、企业福利特色、企业logo、企业照片、联系人、联系电话、联系邮箱 +23:49:47 [43/172] 考勤假期 / 考勤统计 / 每日考勤 +23:50:04 字段: 16 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、考勤编号、工作性质、员工状态、入职日期、离职日期 +23:50:10 [44/172] 考勤假期 / 考勤统计 / 月考勤表 +23:50:19 更多菜单项: 6 个 -> 新建下月考勤、添加考勤人员、删除月考勤表、导入历史考勤、导入考勤数据、导入钉钉考勤结果 +23:50:21 字段: 16 个 (来源=custom_columns) -> 头像、姓名、工号、部门、岗位、考勤编号、工作性质、员工状态、入职日期、离职日期 +23:50:27 [45/172] 考勤假期 / 考勤统计 / 明细记录 +23:50:37 更多菜单项: 3 个 -> 单个添加、批量导入、删除全部打卡数据 +23:50:37 无字段入口(可能非表格页) +23:50:45 [46/172] 考勤假期 / 考勤统计 / 考勤报表 +23:51:01 无字段入口(可能非表格页) +23:51:06 [47/172] 考勤假期 / 考勤统计 / 字段管理 +23:51:23 字段: 11 个 (来源=custom_columns) -> 字段名称、字段分组、状态、字段类型、数据类型、舍入规则、展示小数位数、日期格式、汇总方式、计算公式 +23:51:35 [48/172] 考勤假期 / 考勤统计 / 考勤确认 +23:51:50 无字段入口(可能非表格页) +23:51:54 [49/172] 考勤假期 / 考勤管理 / 考勤分组 +23:52:05 更多菜单项: 2 个 -> 复制、删除 +23:52:05 字段: 9 个 (来源=visible_cols) -> 考勤组类型、出勤日、出勤时间、核算规则、负责人、适用范围、最后更新时间、最后更新人、考勤组名称 +23:52:09 [50/172] 考勤假期 / 考勤管理 / 排班管理 +23:52:24 字段: 5 个 (来源=visible_cols) -> 姓名、岗位、排/休天数、工号、部门 +23:52:31 [51/172] 考勤假期 / 考勤管理 / 考勤规则 +23:52:46 字段: 5 个 (来源=visible_cols) -> 迟到、早退、缺卡、旷工、规则名称 +23:52:55 [52/172] 考勤假期 / 考勤管理 / 打卡方式 +23:53:10 字段: 4 个 (来源=visible_cols) -> 打卡地址、具体地址、可打卡范围、关联考勤组数 +23:53:25 [53/172] 考勤假期 / 考勤管理 / 考勤设置 +23:53:40 无字段入口(可能非表格页) +23:53:45 [54/172] 考勤假期 / 假期管理 / 休假一览 +23:54:00 无字段入口(可能非表格页) +23:54:07 [55/172] 考勤假期 / 假期管理 / 手动调整 +23:54:17 更多菜单项: 4 个 -> 单个发放、单个扣减、批量发放、批量扣减 +23:54:19 字段: 15 个 (来源=custom_columns) -> 姓名、工号、部门、岗位、考勤编号、工作性质、工作状态、入职日期、试用期、转正日期 +23:54:24 [56/172] 考勤假期 / 假期管理 / 假期余额 +23:54:34 更多菜单项: 2 个 -> 导出余额、导出余额变更记录 +23:54:36 字段: 15 个 (来源=custom_columns) -> 姓名、工号、部门、岗位、考勤编号、工作性质、工作状态、入职日期、试用期、转正日期 +23:54:41 [57/172] 考勤假期 / 假期管理 / 假期方案 +23:54:51 更多菜单项: 2 个 -> 复制、删除 +23:54:51 字段: 8 个 (来源=visible_cols) -> 假期类型、请假规则、发放规则、扣减规则、适用范围、方案负责人、方案创建人、方案名称 +23:54:59 [58/172] 考勤假期 / 假期管理 / 假期设置 +23:55:08 更多菜单项: 2 个 -> 设置、删除 +23:55:08 无字段入口(可能非表格页) +23:55:17 [59/172] 薪酬 / 薪酬管理 / 月工资表 +23:55:27 更多菜单项: 2 个 -> 导入历史工资、删除 +23:55:27 无字段入口(可能非表格页) +23:55:42 [60/172] 薪酬 / 薪酬管理 / 工资发放 +23:55:57 无字段入口(可能非表格页) +23:56:01 [61/172] 薪酬 / 薪酬管理 / 员工薪资 +23:56:10 更多菜单项: 4 个 -> 导入定薪、导入调薪、设置定薪模板、查看离职员工 +23:56:10 无字段入口(可能非表格页) +23:56:23 [62/172] 薪酬 / 薪酬管理 / 薪酬报表 +23:56:38 无字段入口(可能非表格页) +23:56:44 [63/172] 薪酬 / 薪酬管理 / 薪酬分析 +23:56:54 更多菜单项: 2 个 -> 下载图片、导出数据表 +23:56:54 无字段入口(可能非表格页) +23:56:59 [64/172] 薪酬 / 薪酬管理 / 计薪规则 +23:57:10 更多菜单项: 2 个 -> 复制、删除 +23:57:10 字段: 6 个 (来源=visible_cols) -> 工资表模板、月计薪时长、计薪公式、计薪规则、适用范围、薪资组名称 +23:57:18 [65/172] 薪酬 / 薪酬管理 / 薪酬设置 +23:57:28 更多菜单项: 3 个 -> 预览、复制、删除 +23:57:28 字段: 8 个 (来源=visible_cols) -> 模板名称、工资项、适用薪资组、备注、姓名、工号、部门、岗位 +23:57:31 [66/172] 薪酬 / 薪酬管理 / 年终奖计算 +23:57:46 无字段入口(可能非表格页) +23:57:55 [67/172] 薪酬 / 薪酬管理 / 发送工资条 +23:58:10 字段: 6 个 (来源=visible_cols) -> 所属月份、总人数、已发放、操作人、操作时间、工资表名称 +23:58:18 [68/172] 审批 / 常规 / 审批表单 +23:58:28 更多菜单项: 2 个 -> 停用、复制 +23:58:28 无字段入口(可能非表格页) +23:58:32 [69/172] 审批 / 常规 / 审批模板库 +23:58:48 字段: 2 个 (来源=visible_cols) -> 审批模板名称、模板说明 +23:58:53 [70/172] 审批 / 常规 / 审批代理 +23:59:09 字段: 6 个 (来源=visible_cols) -> 被代理人、代理人、代理时间、代理审批类型、员工端代理人处理记录、更新记录 +23:59:13 [71/172] 审批 / 常规 / 审批记录 +23:59:23 更多菜单项: 5 个 -> 导出审批记录详情、批量下载、批量下载审批附件、批量删除、操作记录 +23:59:23 字段: 11 个 (来源=visible_cols) -> 标题、所在部门、发起人、发起时间、摘要、审批类型、审批状态、当前审批人、历史审批人、最近处理时间 +23:59:35 [72/172] 审批 / 常规 / 审批交接 +23:59:50 字段: 5 个 (来源=visible_cols) -> 异常审批人、异常类型、未处理审批记录数量、审批类型、审批单 +23:59:57 [73/172] 审批 / 常规 / 操作记录 +00:00:12 字段: 5 个 (来源=visible_cols) -> 操作时间、用户IP、操作人、操作类型、操作内容 +00:00:28 [74/172] 培训学习 / 线下培训 / 培训计划 +00:00:38 更多菜单项: 4 个 -> 导入培训计划、导出培训计划信息、复制计划、删除计划 +00:00:38 无字段入口(可能非表格页) +00:00:42 [75/172] 培训学习 / 线下培训 / 开课日程 +00:00:57 字段: 8 个 (来源=visible_cols) -> 课程开始时间、课程结束时间、课程名称、培训计划、培训计划状态、讲师、课时、地点 +00:01:04 [76/172] 培训学习 / 线下培训 / 培训记录 +00:01:13 更多菜单项: 2 个 -> 导出员工培训记录、批量删除 +00:01:13 字段: 14 个 (来源=visible_cols) -> 工号、所属组织、岗位、员工状态、培训课程、培训计划、培训计划类型、课程开始时间、课程结束时间、课时 +00:01:21 [77/172] 培训学习 / 线上学习 / 课程库 +00:01:32 更多菜单项: 4 个 -> 批量新增、批量管理、课程申请单8、课程分发记录 +00:01:32 无字段入口(可能非表格页) +00:01:40 [78/172] 培训学习 / 线上学习 / 学习计划 +00:01:55 无字段入口(可能非表格页) +00:01:59 [79/172] 培训学习 / 线上学习 / 在线直播 +00:02:09 更多菜单项: 1 个 -> 结束计划 +00:02:09 无字段入口(可能非表格页) +00:02:12 [80/172] 培训学习 / 线上学习 / 学习进度 +00:02:28 字段: 15 个 (来源=visible_cols) -> 计划名称、课程编号、课程名称、资源形式、学习状态、学习开始时间、课程学习进度、有效学习时长、应打卡次数、完成打卡次数 +00:02:35 [81/172] 培训学习 / 线上学习 / 学习记录 +00:02:50 字段: 22 个 (来源=visible_cols) -> 工号、所属组织、岗位、计划名称、课程编号、课程名称、讲师、资源形式、学习状态、学习开始时间 +00:02:58 [82/172] 培训学习 / 考试练习 / 题库管理 +00:03:13 字段: 5 个 (来源=visible_cols) -> 题目、所属分类、题型、创建人、创建时间 +00:03:16 [83/172] 培训学习 / 考试练习 / 试卷管理 +00:03:32 无字段入口(可能非表格页) +00:03:35 [84/172] 培训学习 / 考试练习 / 考试安排 +00:03:50 字段: 10 个 (来源=visible_cols) -> 考试类型、关联类型、关联计划名称、课程名称、考试时间、应考人数、实考人数、未考试人数、待批阅人数、考试名称 +00:04:05 [85/172] 培训学习 / 考试练习 / 考试记录 +00:04:20 字段: 11 个 (来源=visible_cols) -> 工号、岗位、考试名称、考试类型、关联计划名称、关联课程名称、答题得分、答题时长、考试结果、考试时间 +00:04:25 [86/172] 培训学习 / 培训设置 / 讲师设置 +00:04:35 更多菜单项: 4 个 -> 批量修改、批量删除、讲师授课记录、导出内部讲师 +00:04:35 字段: 9 个 (来源=visible_cols) -> 工号、所属组织、专/兼职、手机号码、擅长课程、是否开启试卷批阅权限、是否启用、点赞、讲师姓名 +00:04:41 [87/172] 培训学习 / 培训设置 / 团队设置 +00:04:51 更多菜单项: 2 个 -> 批量移除、导出团队学员 +00:04:51 字段: 6 个 (来源=visible_cols) -> 工号、所属组织、岗位、工作性质、入职日期、姓名 +00:04:58 [88/172] 培训学习 / 培训设置 / 自定义设置 +00:05:13 无字段入口(可能非表格页) +00:05:30 [89/172] 绩效 / 常规 / 概览 +00:05:40 更多菜单项: 3 个 -> 绩效考核、试用期考核、晋升考核 +00:05:40 字段: 6 个 (来源=visible_cols) -> 部门、考核状态、待处理人、评分、等级、姓名 +00:05:48 [90/172] 绩效 / 考核管理 / 绩效考核 +00:05:58 更多菜单项: 9 个 -> 计划详情、查看设置、考核结果、成果概况、绩效面谈、复制、保存为模板、操作记录 +00:05:58 字段: 9 个 (来源=visible_cols) -> 考核团队、考核人数、完成人数、确认人数、已面谈人数、考核周期类型、考核周期、考核说明、考核计划名称 +00:06:05 [91/172] 绩效 / 考核管理 / 历史绩效考核 +00:06:15 更多菜单项: 5 个 -> 查看设置、查看结果概况、查看绩效面谈、复制、删除 +00:06:15 字段: 8 个 (来源=visible_cols) -> 考核团队、考核人数、已面谈人数、考核周期类型、考核周期、来源、考核计划说明、考核计划名称 +00:06:22 [92/172] 绩效 / 考核管理 / 试用期考核 +00:06:32 更多菜单项: 5 个 -> 发起绩效面谈、下载为PDF、导入考核参考数据、查看设置、删除 +00:06:32 字段: 11 个 (来源=visible_cols) -> 部门、岗位、员工状态、入职时间、考核名称、考核周期、考核状态、待处理人、面谈次数、考核评分 +00:06:37 [93/172] 绩效 / 考核管理 / 晋升考核 +00:06:52 字段: 11 个 (来源=visible_cols) -> 部门、岗位、员工状态、入职时间、考核名称、考核周期、考核状态、待处理人、面谈次数、考核评分 +00:07:02 [94/172] 绩效 / 考核管理 / 考核组管理 +00:07:17 字段: 5 个 (来源=visible_cols) -> 周期类型、考核周期、操作人、操作时间、考核组名称 +00:07:21 [95/172] 绩效 / 考核结果 / 员工绩效档案 +00:07:36 字段: 10 个 (来源=visible_cols) -> 工号、部门、岗位、手机号、员工状态、最近考核计划、最近绩效评分、最近绩效等级、考核次数、姓名 +00:07:43 [96/172] 绩效 / 考核结果 / 绩效考核记录 +00:07:58 字段: 12 个 (来源=visible_cols) -> 工号、部门、岗位、员工状态、考核计划、考核状态、待处理人、评分、等级、结果确认状态 +00:08:06 [97/172] 绩效 / 考核结果 / 绩效面谈记录 +00:08:16 更多菜单项: 2 个 -> 编辑、删除 +00:08:16 字段: 10 个 (来源=visible_cols) -> 工号、部门、岗位、员工状态、手机号、所属考核计划、面谈人、面谈时间、面谈状态、姓名 +00:08:20 [98/172] 绩效 / 考核设置 / 指标库 +00:08:30 更多菜单项: 5 个 -> 导入指标、导出指标、复制指标、移动指标、删除指标 +00:08:30 字段: 9 个 (来源=visible_cols) -> 指标类型、指标说明、考核标准、评分上限、权重、评分方式、指标名称、数据来源(单位)、指标评分 +00:08:35 [99/172] 绩效 / 考核设置 / 考核模板库 +00:08:44 更多菜单项: 3 个 -> 预览、复制考核模板、删除 +00:08:44 无字段入口(可能非表格页) +00:08:49 [100/172] 绩效 / 考核设置 / 考核团队 +00:08:58 更多菜单项: 2 个 -> 操作记录、删除考核团队 +00:08:58 无字段入口(可能非表格页) +00:09:04 [101/172] 绩效 / 考核设置 / 自定义设置 +00:09:19 字段: 2 个 (来源=visible_cols) -> 考核周期类型、默认计薪月份 +00:09:29 [102/172] 绩效 / 考核设置 / 操作记录 +00:09:44 字段: 4 个 (来源=visible_cols) -> 操作时间、用户IP、操作人、操作内容 +00:09:52 [103/172] 社保公积金 / 常规 / 参保账单 +00:10:02 更多菜单项: 4 个 -> 导入历史参保记录、修改名称、复制、删除 +00:10:02 无字段入口(可能非表格页) +00:10:08 [104/172] 社保公积金 / 常规 / 账单核对 +00:10:23 无字段入口(可能非表格页) +00:10:28 [105/172] 社保公积金 / 常规 / 参保档案 +00:10:38 更多菜单项: 7 个 -> 批量停保、批量补差、已停保人员参保档案、按参保月份倒序、停保、补差、补缴 +00:10:40 字段: 12 个 (来源=visible_cols) -> 工号、试用期、证件类型、证件号码、参保方案、社保参保城市、参保类型、起始参保月份、最新参保月份、社保基数 +00:10:46 [106/172] 社保公积金 / 常规 / 社保报表 +00:11:01 无字段入口(可能非表格页) +00:11:17 [107/172] 社保公积金 / 常规 / 社保分析 +00:11:33 无字段入口(可能非表格页) +00:11:38 [108/172] 社保公积金 / 常规 / 参保规则 +00:11:48 更多菜单项: 5 个 -> 社保统一设置、批量修改参保方案、按创建时间倒序、复制、删除 +00:11:48 字段: 9 个 (来源=visible_cols) -> 社保参保城市、参保类型、使用人数、设置方式、个人社保、企业社保、个人公积金、企业公积金、方案名称 +00:11:52 [109/172] 行政管理 / 常规 / 企业公告 +00:12:02 更多菜单项: 3 个 -> 查阅情况、置顶、下线 +00:12:02 字段: 10 个 (来源=visible_cols) -> 状态、附件下载状态、发布范围、接收人、已读、已签收、创建/更新时间、发布时间、下线时间、标题 +00:12:09 [110/172] 行政管理 / 常规 / 企业制度 +00:12:18 更多菜单项: 6 个 -> 批量移动、批量发布、批量下线、查阅情况、置顶、下线 +00:12:18 字段: 10 个 (来源=visible_cols) -> 状态、附件下载状态、发布范围、接收人、已读、已签收、创建/更新时间、发布时间、下线时间、标题 +00:12:23 [111/172] 行政管理 / 常规 / 新闻动态 +00:12:33 更多菜单项: 2 个 -> 编辑、下线 +00:12:33 字段: 7 个 (来源=visible_cols) -> 状态、阅读数、点赞数、创建/更新时间、发布时间、下线时间、标题 +00:12:44 [112/172] 行政管理 / 常规 / 开具证明 +00:12:59 字段: 7 个 (来源=visible_cols) -> 姓名、部门、岗位、申请时间、申请证明类型、申请理由、操作记录 +00:13:15 [113/172] 行政管理 / 会议室预定 / 会议预定记录 +00:13:30 字段: 7 个 (来源=visible_cols) -> 会议室、会议时间、时长(分钟)、会议状态、预定人、预定人部门、会议名称 +00:13:37 [114/172] 行政管理 / 会议室预定 / 会议室管理 +00:13:47 更多菜单项: 3 个 -> 暂停预定、修改、删除 +00:13:47 无字段入口(可能非表格页) +00:13:51 [115/172] 行政管理 / 会议室预定 / 会议操作记录 +00:14:06 字段: 3 个 (来源=visible_cols) -> 操作时间、操作人、操作内容 +00:14:11 [116/172] 行政管理 / 问卷调查 / 问卷管理 +00:14:21 更多菜单项: 3 个 -> 删除问卷、复制问卷、预览问卷 +00:14:21 无字段入口(可能非表格页) +00:14:27 [117/172] 行政管理 / 问卷调查 / 问卷模板库 +00:14:43 无字段入口(可能非表格页) +00:14:59 [118/172] 行政管理 / 问卷调查 / 问卷操作记录 +00:15:14 字段: 3 个 (来源=visible_cols) -> 操作时间、操作人、操作内容 +00:15:20 [119/172] 电子合同 / 常规 / 概览 +00:15:30 更多菜单项: 1 个 -> 设置常用模板 +00:15:30 无字段入口(可能非表格页) +00:15:36 [120/172] 电子合同 / 合同签署 / 签署中 +00:15:46 更多菜单项: 4 个 -> 批量发送签署通知、打包下载记录、批量发送记录、员工实名认证记录 +00:15:46 字段: 5 个 (来源=visible_cols) -> 合同名称、合同编号、合同类型、签署方式、签署状态 +00:15:52 [121/172] 电子合同 / 合同签署 / 已签署 +00:16:02 更多菜单项: 3 个 -> 打包下载记录、批量发送记录、员工实名认证记录 +00:16:02 字段: 5 个 (来源=visible_cols) -> 合同名称、合同编号、合同类型、签署方式、签署状态 +00:16:09 [122/172] 电子合同 / 合同签署 / 已作废 +00:16:19 更多菜单项: 3 个 -> 打包下载记录、批量发送记录、员工实名认证记录 +00:16:19 字段: 5 个 (来源=visible_cols) -> 合同名称、合同编号、合同类型、签署方式、签署状态 +00:16:27 [123/172] 电子合同 / 合同签署 / 合同档案库 +00:16:42 无字段入口(可能非表格页) +00:16:46 [124/172] 电子合同 / 设置 / 企业印章 +00:16:56 更多菜单项: 2 个 -> 编辑、删除 +00:16:56 无字段入口(可能非表格页) +00:17:12 [125/172] 电子合同 / 设置 / 合同模板 +00:17:22 更多菜单项: 3 个 -> 单个发起、批量发起、删除 +00:17:22 无字段入口(可能非表格页) +00:17:28 [126/172] 电子合同 / 设置 / 合同包 +00:17:43 字段: 3 个 (来源=visible_cols) -> 合同包名称、备注、合同模板 +00:18:01 [127/172] 背景调查 / 背景调查服务 +00:18:16 无字段入口(可能非表格页) +00:18:31 [128/172] 人才测评 / 人才测评服务 +00:18:46 无字段入口(可能非表格页) +00:18:52 [129/172] 员工福利 / 常规 / 员工福利概况 +00:19:07 无字段入口(可能非表格页) +00:19:13 [130/172] 员工福利 / 常规 / 员工积分管理 +00:19:28 字段: 7 个 (来源=visible_cols) -> 姓名、员工状态、手机号、工号、部门、岗位、累计发放积分 +00:19:32 [131/172] 员工福利 / 常规 / 商品专区管理 +00:19:47 字段: 4 个 (来源=visible_cols) -> 专区名称、商品数量、兑换开始时间、兑换结束时间 +00:19:53 [132/172] 员工福利 / 常规 / 平安好医生 +00:20:09 字段: 9 个 (来源=visible_cols) -> 姓名、工号、员工状态、部门、岗位、手机号、累计发放总份数、累计发放体检宝员工版份数、累计发放体检宝高管版份数 +00:20:25 [133/172] 人事仪表盘 / 常规 / 我的仪表盘 +00:20:40 无字段入口(可能非表格页) +00:20:48 [134/172] 人事仪表盘 / 常规 / 报告老板 +00:21:03 无字段入口(可能非表格页) +00:21:07 [135/172] 第三方对接 / 常规 / 企业微信 +00:21:23 无字段入口(可能非表格页) +00:21:29 [136/172] 第三方对接 / 常规 / 钉钉 +00:21:44 无字段入口(可能非表格页) +00:21:53 [137/172] 第三方对接 / 常规 / 飞书 +00:22:09 无字段入口(可能非表格页) +00:22:26 [138/172] 第三方对接 / 常规 / 携程商旅 +00:22:41 无字段入口(可能非表格页) +00:22:57 [139/172] 第三方对接 / 常规 / 操作记录 +00:23:12 无字段入口(可能非表格页) +00:23:20 [140/172] 培训商城 / 培训商城(外部课程采购) +00:23:25 无字段入口(可能非表格页) +00:23:36 [141/172] 短信发送 / 常规 / 短信发送 +00:23:51 无字段入口(可能非表格页) +00:23:58 [142/172] 短信发送 / 常规 / 发送记录 +00:24:14 字段: 5 个 (来源=visible_cols) -> 短信模板、发送人、发送条数、创建时间、发送详情 +00:24:24 [143/172] 电子工资条 / 常规 / 发送工资条 +00:24:39 字段: 6 个 (来源=visible_cols) -> 所属月份、总人数、已发放、操作人、操作时间、工资表名称 +00:24:46 [144/172] 电子工资条 / 常规 / 发放记录 +00:24:56 更多菜单项: 3 个 -> 原始工资表、查看发放记录、删除发放记录 +00:24:56 无字段入口(可能非表格页) +00:25:02 [145/172] 电子工资条 / 常规 / 反馈记录 +00:25:17 字段: 8 个 (来源=visible_cols) -> 部门、岗位、月份、工资表名称、最新反馈内容、处理状态、最新反馈时间、姓名 +00:25:25 [146/172] 电子工资条 / 常规 / 统计分析 +00:25:40 无字段入口(可能非表格页) +00:25:46 [147/172] 电子工资条 / 常规 / 操作记录 +00:26:01 字段: 3 个 (来源=visible_cols) -> 操作时间、IP、操作记录 +00:26:09 [148/172] 智能薪酬 / 常规 / 概览 +00:26:19 更多菜单项: 1 个 -> 管理 +00:26:19 无字段入口(可能非表格页) +00:26:31 [149/172] 智能薪酬 / 常规 / 薪酬核算 +00:26:41 更多菜单项: 3 个 -> 创建全新工资表、从以往核算方案创建、从工资表模板创建 +00:26:41 字段: 3 个 (来源=visible_cols) -> 姓名、工号、部门 +00:26:44 [150/172] 智能薪酬 / 数据采集 / 员工考勤 +00:26:54 更多菜单项: 2 个 -> 自定义考勤字段、锁定每日考勤 +00:26:56 字段: 4 个 (来源=visible_cols) -> 姓名、工号、部门、岗位 +00:27:01 [151/172] 智能薪酬 / 数据采集 / 业务提报 +00:27:11 更多菜单项: 4 个 -> 查看设置、停用方案、编辑方案、复制方案 +00:27:13 字段: 9 个 (来源=visible_cols) -> 提报类型、方案状态、提报管理员、最近提报时间、创建时间、创建人、业务提报说明、业务提报审批、业务提报方案 +00:27:18 [152/172] 智能薪酬 / 薪酬数据 / 薪酬档案 +00:27:29 更多菜单项: 6 个 -> 导入停薪记录、导入报税信息、调薪、修改发薪组织、查看报税信息、查看调薪记录 +00:27:31 字段: 13 个 (来源=visible_cols) -> 工号、部门、证件类型、证件号码、岗位、职级、发薪组织、入职日期、纳税单位、是否发薪 +00:27:48 [153/172] 智能薪酬 / 薪酬数据 / 减除费用确认 +00:28:03 字段: 8 个 (来源=visible_cols) -> 工号、部门、计税年份、纳税单位、证件类型、证件号码、是否直接按照全年6万元扣除、姓名 +00:28:09 [154/172] 智能薪酬 / 薪酬数据 / 税前扣除 +00:28:19 更多菜单项: 3 个 -> 使用上月税前扣除、使用其他月份数据、导入新的税前扣除 +00:28:21 无字段入口(可能非表格页) +00:28:28 [155/172] 智能薪酬 / 薪酬数据 / 个税记录 +00:28:45 字段: 55 个 (来源=visible_cols) -> 岗位、工作性质、工作状态、证件类型、证件号码、纳税单位、税款所属期起、税款所属期止、所得项目、本期收入 +00:28:49 [156/172] 智能薪酬 / 薪酬数据 / 成本明细 +00:28:59 更多菜单项: 2 个 -> 查看薪酬预算、成本分摊设置 +00:29:01 字段: 14 个 (来源=visible_cols) -> 人数、人力成本、应发工资、实发工资、绩效奖金、业绩提成、加班工资、固定工资、企业社保、企业公积金 +00:29:08 [157/172] 智能薪酬 / 报表中心 / 薪酬报表 +00:29:24 无字段入口(可能非表格页) +00:29:35 [158/172] 智能薪酬 / 报表中心 / 薪酬分析 +00:29:45 更多菜单项: 2 个 -> 编辑图表、移除图表 +00:29:45 无字段入口(可能非表格页) +00:29:51 [159/172] 智能薪酬 / 薪酬设置 / 薪酬结构 +00:30:01 更多菜单项: 2 个 -> 单个新增、批量导入 +00:30:03 字段: 15 个 (来源=visible_cols) -> 项目分组、状态、取值方式、取值来源、数据类型、展示小数位数、日期格式、个税项目、公式、公式说明 +00:30:17 [160/172] 智能薪酬 / 薪酬设置 / 基础设置 +00:30:32 无字段入口(可能非表格页) +00:30:39 [161/172] 智能薪酬 / 薪酬设置 / 成本设置 +00:30:49 更多菜单项: 5 个 -> 导入成本中心、导出、排序、停用、删除 +00:30:51 无字段入口(可能非表格页) +00:30:57 [162/172] 智能薪酬 / 薪酬设置 / 操作记录 +00:31:12 字段: 5 个 (来源=visible_cols) -> 操作时间、用户IP、操作人、所属模块、操作内容 +00:31:18 [163/172] 个税对接 / 常规 / 人员信息报送 +00:31:34 无字段入口(可能非表格页) +00:31:41 [164/172] 个税对接 / 常规 / 个税申报 +00:31:56 无字段入口(可能非表格页) +00:32:01 [165/172] 个税对接 / 常规 / 纳税单位管理 +00:32:16 无字段入口(可能非表格页) +00:32:22 [166/172] 个税对接 / 常规 / 操作记录 +00:32:37 无字段入口(可能非表格页) +00:32:53 [167/172] AI员工助手 / 常规 / AI员工助手 +00:33:09 无字段入口(可能非表格页) +00:33:14 [168/172] AI员工助手 / 常规 / 知识库管理 +00:33:31 字段: 5 个 (来源=visible_cols) -> 可见范围、备注、更新人、更新时间、知识库名称 +00:33:34 [169/172] AI员工助手 / 常规 / 员工助手设置 +00:33:50 无字段入口(可能非表格页) +00:33:59 [170/172] AI员工助手 / 数据统计 / 总体使用情况 +00:34:14 字段: 5 个 (来源=visible_cols) -> 知识库名称、命中次数、姓名、部门、提问次数 +00:34:20 [171/172] AI员工助手 / 数据统计 / 操作记录 +00:34:35 字段: 4 个 (来源=visible_cols) -> 操作时间、用户IP、更新人、操作内容 +00:34:51 [172/172] 应用管理 / 应用管理 +00:34:56 无字段入口(可能非表格页) +00:35:00 === DONE 累计字段=1167 === diff --git a/db/crawl_progress.log b/db/crawl_progress.log new file mode 100644 index 0000000..e17b6f9 --- /dev/null +++ b/db/crawl_progress.log @@ -0,0 +1,346 @@ +16:34:30 === crawl start, total=172, start_index=0 === +16:34:30 [1/172] wait 14.0s -> AI员工助手 / 常规 / AI员工助手 +16:34:48 OK AI员工助手 -> screenshots/23_AI员工助手/常规/01_AI员工助手.jpg +16:34:48 [2/172] wait 10.6s -> AI员工助手 / 常规 / 员工助手设置 +16:35:04 OK 员工助手设置 -> screenshots/23_AI员工助手/常规/03_员工助手设置.jpg +16:35:04 [3/172] wait 11.0s -> AI员工助手 / 常规 / 知识库管理 +16:35:19 OK 知识库管理 -> screenshots/23_AI员工助手/常规/02_知识库管理.jpg +16:35:19 [4/172] wait 14.2s -> AI员工助手 / 数据统计 / 总体使用情况 +16:35:38 OK 总体使用情况 -> screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg +16:35:38 [5/172] wait 10.7s -> AI员工助手 / 数据统计 / 操作记录 +16:35:53 OK 操作记录 -> screenshots/23_AI员工助手/数据统计/02_操作记录.jpg +16:35:53 [6/172] wait 5.2s -> 个税对接 / 常规 / 个税申报 +16:36:02 OK 个税申报 -> screenshots/22_个税对接/常规/02_个税申报.jpg +16:36:02 [7/172] wait 5.8s -> 个税对接 / 常规 / 人员信息报送 +16:36:12 OK 人员信息报送 -> screenshots/22_个税对接/常规/01_人员信息报送.jpg +16:36:12 [8/172] wait 9.0s -> 个税对接 / 常规 / 操作记录 +16:36:26 OK 操作记录 -> screenshots/22_个税对接/常规/04_操作记录.jpg +16:36:26 [9/172] wait 7.1s -> 个税对接 / 常规 / 纳税单位管理 +16:36:37 OK 纳税单位管理 -> screenshots/22_个税对接/常规/03_纳税单位管理.jpg +16:36:37 [10/172] wait 10.7s -> 人事 / 员工关系 / 人事异动 +16:36:52 OK 人事异动 -> screenshots/02_人事/员工关系/04_人事异动.jpg +16:36:52 [11/172] wait 5.3s -> 人事 / 员工关系 / 任职记录 +16:37:02 OK 任职记录 -> screenshots/02_人事/员工关系/08_任职记录.jpg +16:37:02 [12/172] wait 11.8s -> 人事 / 员工关系 / 入职管理 +16:37:18 OK 入职管理 -> screenshots/02_人事/员工关系/01_入职管理.jpg +16:37:18 [13/172] wait 11.5s -> 人事 / 员工关系 / 关怀通知 +16:37:34 OK 关怀通知 -> screenshots/02_人事/员工关系/05_关怀通知.jpg +16:37:34 [14/172] wait 14.8s -> 人事 / 员工关系 / 合同管理 +16:37:53 OK 合同管理 -> screenshots/02_人事/员工关系/06_合同管理.jpg +16:37:53 [15/172] wait 10.9s -> 人事 / 员工关系 / 培训经历 +16:38:09 OK 培训经历 -> screenshots/02_人事/员工关系/09_培训经历.jpg +16:38:09 [16/172] wait 14.5s -> 人事 / 员工关系 / 奖惩记录 +16:38:28 OK 奖惩记录 -> screenshots/02_人事/员工关系/10_奖惩记录.jpg +16:38:28 [17/172] wait 10.8s -> 人事 / 员工关系 / 实习生管理 +16:38:43 OK 实习生管理 -> screenshots/02_人事/员工关系/12_实习生管理.jpg +16:38:43 [18/172] wait 11.7s -> 人事 / 员工关系 / 沟通记录 +16:39:00 OK 沟通记录 -> screenshots/02_人事/员工关系/07_沟通记录.jpg +16:39:00 [19/172] wait 9.6s -> 人事 / 员工关系 / 离职管理 +16:39:15 OK 离职管理 -> screenshots/02_人事/员工关系/03_离职管理.jpg +16:39:15 [20/172] wait 12.5s -> 人事 / 员工关系 / 考察期管理 +16:39:32 OK 考察期管理 -> screenshots/02_人事/员工关系/11_考察期管理.jpg +16:39:32 [21/172] wait 6.4s -> 人事 / 员工关系 / 转正管理 +16:39:42 OK 转正管理 -> screenshots/02_人事/员工关系/02_转正管理.jpg +16:39:42 [22/172] wait 12.0s -> 人事 / 员工管理 / 万能人事表格 +16:40:00 OK 万能人事表格 -> screenshots/02_人事/员工管理/05_万能人事表格.jpg +16:40:00 [23/172] wait 10.7s -> 人事 / 员工管理 / 人事动态 +16:40:15 OK 人事动态 -> screenshots/02_人事/员工管理/06_人事动态.jpg +16:40:15 [24/172] wait 6.6s -> 人事 / 员工管理 / 人事报表 +16:40:26 OK 人事报表 -> screenshots/02_人事/员工管理/04_人事报表.jpg +16:40:26 [25/172] wait 8.2s -> 人事 / 员工管理 / 员工档案库 +16:40:39 OK 员工档案库 -> screenshots/02_人事/员工管理/02_员工档案库.jpg +16:40:39 [26/172] wait 8.6s -> 人事 / 员工管理 / 员工花名册 +16:40:53 OK 员工花名册 -> screenshots/02_人事/员工管理/01_员工花名册.jpg +16:40:53 [27/172] wait 13.0s -> 人事 / 员工管理 / 统计分析 +16:41:18 OK 统计分析 -> screenshots/02_人事/员工管理/03_统计分析.jpg +16:41:18 [28/172] wait 14.6s -> 人事仪表盘 / 常规 / 我的仪表盘 +16:41:37 OK 我的仪表盘 -> screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg +16:41:37 [29/172] wait 9.3s -> 人事仪表盘 / 常规 / 报告老板 +16:41:54 OK 报告老板 -> screenshots/16_人事仪表盘/常规/02_报告老板.jpg +16:41:54 [30/172] wait 8.9s -> 人才测评 / 人才测评服务 +16:42:07 OK 人才测评服务 -> screenshots/14_人才测评/人才测评服务.jpg +16:42:07 [31/172] wait 5.7s -> 员工福利 / 常规 / 员工福利概况 +16:42:17 OK 员工福利概况 -> screenshots/15_员工福利/常规/01_员工福利概况.jpg +16:42:17 [32/172] wait 12.8s -> 员工福利 / 常规 / 员工积分管理 +16:42:33 OK 员工积分管理 -> screenshots/15_员工福利/常规/02_员工积分管理.jpg +16:42:33 [33/172] wait 9.8s -> 员工福利 / 常规 / 商品专区管理 +16:42:47 OK 商品专区管理 -> screenshots/15_员工福利/常规/03_商品专区管理.jpg +16:42:47 [34/172] wait 8.3s -> 员工福利 / 常规 / 平安好医生 +16:43:00 OK 平安好医生 -> screenshots/15_员工福利/常规/04_平安好医生.jpg +16:43:00 [35/172] wait 14.5s -> 培训商城 / 培训商城(外部课程采购) +16:43:18 OK 培训商城(外部课程采购) -> screenshots/18_培训商城/培训商城(外部课程采购).jpg +16:43:18 [36/172] wait 9.6s -> 培训学习 / 培训设置 / 团队设置 +16:43:32 OK 团队设置 -> screenshots/08_培训学习/培训设置/02_团队设置.jpg +16:43:32 [37/172] wait 10.8s -> 培训学习 / 培训设置 / 自定义设置 +16:43:48 OK 自定义设置 -> screenshots/08_培训学习/培训设置/03_自定义设置.jpg +16:43:48 [38/172] wait 8.0s -> 培训学习 / 培训设置 / 讲师设置 +16:44:00 OK 讲师设置 -> screenshots/08_培训学习/培训设置/01_讲师设置.jpg +16:44:00 [39/172] wait 5.5s -> 培训学习 / 线上学习 / 在线直播 +16:44:10 OK 在线直播 -> screenshots/08_培训学习/线上学习/03_在线直播.jpg +16:44:10 [40/172] wait 10.5s -> 培训学习 / 线上学习 / 学习计划 +16:44:25 OK 学习计划 -> screenshots/08_培训学习/线上学习/02_学习计划.jpg +16:44:25 [41/172] wait 5.3s -> 培训学习 / 线上学习 / 学习记录 +16:44:35 OK 学习记录 -> screenshots/08_培训学习/线上学习/05_学习记录.jpg +16:44:35 [42/172] wait 6.0s -> 培训学习 / 线上学习 / 学习进度 +16:44:45 OK 学习进度 -> screenshots/08_培训学习/线上学习/04_学习进度.jpg +16:44:45 [43/172] wait 5.4s -> 培训学习 / 线上学习 / 课程库 +16:44:56 OK 课程库 -> screenshots/08_培训学习/线上学习/01_课程库.jpg +16:44:56 [44/172] wait 9.6s -> 培训学习 / 线下培训 / 培训计划 +16:45:10 OK 培训计划 -> screenshots/08_培训学习/线下培训/01_培训计划.jpg +16:45:10 [45/172] wait 12.7s -> 培训学习 / 线下培训 / 培训记录 +16:45:27 OK 培训记录 -> screenshots/08_培训学习/线下培训/03_培训记录.jpg +16:45:27 [46/172] wait 12.7s -> 培训学习 / 线下培训 / 开课日程 +16:45:44 OK 开课日程 -> screenshots/08_培训学习/线下培训/02_开课日程.jpg +16:45:44 [47/172] wait 10.5s -> 培训学习 / 考试练习 / 考试安排 +16:45:59 OK 考试安排 -> screenshots/08_培训学习/考试练习/03_考试安排.jpg +16:45:59 [48/172] wait 7.6s -> 培训学习 / 考试练习 / 考试记录 +16:46:11 OK 考试记录 -> screenshots/08_培训学习/考试练习/04_考试记录.jpg +16:46:11 [49/172] wait 12.7s -> 培训学习 / 考试练习 / 试卷管理 +16:46:28 OK 试卷管理 -> screenshots/08_培训学习/考试练习/02_试卷管理.jpg +16:46:28 [50/172] wait 14.9s -> 培训学习 / 考试练习 / 题库管理 +16:46:47 OK 题库管理 -> screenshots/08_培训学习/考试练习/01_题库管理.jpg +16:46:47 [51/172] wait 8.1s -> 审批 / 常规 / 审批交接 +16:46:59 OK 审批交接 -> screenshots/07_审批/常规/05_审批交接.jpg +16:46:59 [52/172] wait 7.1s -> 审批 / 常规 / 审批代理 +16:47:11 OK 审批代理 -> screenshots/07_审批/常规/03_审批代理.jpg +16:47:11 [53/172] wait 9.7s -> 审批 / 常规 / 审批模板库 +16:47:27 OK 审批模板库 -> screenshots/07_审批/常规/02_审批模板库.jpg +16:47:27 [54/172] wait 6.5s -> 审批 / 常规 / 审批表单 +16:47:40 OK 审批表单 -> screenshots/07_审批/常规/01_审批表单.jpg +16:47:40 [55/172] wait 9.0s -> 审批 / 常规 / 审批记录 +16:47:54 OK 审批记录 -> screenshots/07_审批/常规/04_审批记录.jpg +16:47:54 [56/172] wait 7.6s -> 审批 / 常规 / 操作记录 +16:48:05 OK 操作记录 -> screenshots/07_审批/常规/06_操作记录.jpg +16:48:05 [57/172] wait 12.4s -> 工作台 / 工作台首页 +16:48:23 OK 工作台首页 -> screenshots/01_工作台/工作台首页.jpg +16:48:23 [58/172] wait 7.9s -> 应用管理 / 应用管理 +16:48:36 OK 应用管理 -> screenshots/24_应用管理/应用管理.jpg +16:48:36 [59/172] wait 10.3s -> 招聘 / 候选人 / 人才库 +16:48:55 OK 人才库 -> screenshots/04_招聘/候选人/07_人才库.jpg +16:48:55 [60/172] wait 13.9s -> 招聘 / 候选人 / 已入职 +16:49:14 OK 已入职 -> screenshots/04_招聘/候选人/02_已入职.jpg +16:49:14 [61/172] wait 7.9s -> 招聘 / 候选人 / 已淘汰 +16:49:27 OK 已淘汰 -> screenshots/04_招聘/候选人/03_已淘汰.jpg +16:49:27 [62/172] wait 6.4s -> 招聘 / 候选人 / 招聘中 +16:49:39 OK 招聘中 -> screenshots/04_招聘/候选人/01_招聘中.jpg +16:49:39 [63/172] wait 10.0s -> 招聘 / 候选人 / 招聘职位 +16:49:54 OK 招聘职位 -> screenshots/04_招聘/候选人/04_招聘职位.jpg +16:49:54 [64/172] wait 6.7s -> 招聘 / 候选人 / 招聘门户 +16:50:06 OK 招聘门户 -> screenshots/04_招聘/候选人/05_招聘门户.jpg +16:50:06 [65/172] wait 8.9s -> 招聘 / 候选人 / 面试日程 +16:50:20 OK 面试日程 -> screenshots/04_招聘/候选人/06_面试日程.jpg +16:50:20 [66/172] wait 9.9s -> 招聘 / 常规 / 概览 +16:50:35 OK 概览 -> screenshots/04_招聘/常规/01_概览.jpg +16:50:35 [67/172] wait 5.2s -> 招聘 / 统计分析 / 招聘分析 +16:50:46 OK 招聘分析 -> screenshots/04_招聘/统计分析/02_招聘分析.jpg +16:50:46 [68/172] wait 13.6s -> 招聘 / 统计分析 / 招聘报表 +16:51:05 OK 招聘报表 -> screenshots/04_招聘/统计分析/01_招聘报表.jpg +16:51:05 [69/172] wait 13.9s -> 招聘 / 设置 / 招聘团队 +16:51:23 OK 招聘团队 -> screenshots/04_招聘/设置/01_招聘团队.jpg +16:51:23 [70/172] wait 13.7s -> 招聘 / 设置 / 招聘工具 +16:51:43 OK 招聘工具 -> screenshots/04_招聘/设置/02_招聘工具.jpg +16:51:43 [71/172] wait 6.7s -> 招聘 / 设置 / 招聘渠道 +16:51:54 OK 招聘渠道 -> screenshots/04_招聘/设置/03_招聘渠道.jpg +16:51:54 [72/172] wait 5.8s -> 招聘 / 设置 / 更多设置 +16:52:06 OK 更多设置 -> screenshots/04_招聘/设置/05_更多设置.jpg +16:52:06 [73/172] wait 8.2s -> 招聘 / 设置 / 模板设置 +16:52:18 OK 模板设置 -> screenshots/04_招聘/设置/04_模板设置.jpg +16:52:18 [74/172] wait 13.2s -> 智能薪酬 / 常规 / 概览 +16:52:36 OK 概览 -> screenshots/21_智能薪酬/常规/01_概览.jpg +16:52:36 [75/172] wait 6.3s -> 智能薪酬 / 常规 / 薪酬核算 +16:52:46 OK 薪酬核算 -> screenshots/21_智能薪酬/常规/02_薪酬核算.jpg +16:52:46 [76/172] wait 6.8s -> 智能薪酬 / 报表中心 / 薪酬分析 +16:52:57 OK 薪酬分析 -> screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg +16:52:57 [77/172] wait 13.8s -> 智能薪酬 / 报表中心 / 薪酬报表 +16:53:16 OK 薪酬报表 -> screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg +16:53:16 [78/172] wait 6.5s -> 智能薪酬 / 数据采集 / 业务提报 +16:53:27 OK 业务提报 -> screenshots/21_智能薪酬/数据采集/02_业务提报.jpg +16:53:27 [79/172] wait 11.2s -> 智能薪酬 / 数据采集 / 员工考勤 +16:53:43 OK 员工考勤 -> screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg +16:53:43 [80/172] wait 5.2s -> 智能薪酬 / 薪酬数据 / 个税记录 +16:53:52 OK 个税记录 -> screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg +16:53:52 [81/172] wait 9.1s -> 智能薪酬 / 薪酬数据 / 减除费用确认 +16:54:06 OK 减除费用确认 -> screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg +16:54:06 [82/172] wait 10.6s -> 智能薪酬 / 薪酬数据 / 成本明细 +16:54:20 OK 成本明细 -> screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg +16:54:20 [83/172] wait 6.6s -> 智能薪酬 / 薪酬数据 / 税前扣除 +16:54:31 OK 税前扣除 -> screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg +16:54:31 [84/172] wait 9.3s -> 智能薪酬 / 薪酬数据 / 薪酬档案 +16:54:45 OK 薪酬档案 -> screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg +16:54:45 [85/172] wait 5.9s -> 智能薪酬 / 薪酬设置 / 基础设置 +16:54:55 OK 基础设置 -> screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg +16:54:55 [86/172] wait 7.8s -> 智能薪酬 / 薪酬设置 / 成本设置 +16:55:07 OK 成本设置 -> screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg +16:55:07 [87/172] wait 8.0s -> 智能薪酬 / 薪酬设置 / 操作记录 +16:55:19 OK 操作记录 -> screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg +16:55:19 [88/172] wait 5.3s -> 智能薪酬 / 薪酬设置 / 薪酬结构 +16:55:29 OK 薪酬结构 -> screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg +16:55:29 [89/172] wait 5.6s -> 电子合同 / 合同签署 / 合同档案库 +16:55:40 OK 合同档案库 -> screenshots/12_电子合同/合同签署/04_合同档案库.jpg +16:55:40 [90/172] wait 9.0s -> 电子合同 / 合同签署 / 已作废 +16:55:54 OK 已作废 -> screenshots/12_电子合同/合同签署/03_已作废.jpg +16:55:54 [91/172] wait 11.0s -> 电子合同 / 合同签署 / 已签署 +16:56:09 OK 已签署 -> screenshots/12_电子合同/合同签署/02_已签署.jpg +16:56:09 [92/172] wait 13.6s -> 电子合同 / 合同签署 / 签署中 +16:56:27 OK 签署中 -> screenshots/12_电子合同/合同签署/01_签署中.jpg +16:56:27 [93/172] wait 7.3s -> 电子合同 / 常规 / 概览 +16:56:39 OK 概览 -> screenshots/12_电子合同/常规/01_概览.jpg +16:56:39 [94/172] wait 11.2s -> 电子合同 / 设置 / 企业印章 +16:56:54 OK 企业印章 -> screenshots/12_电子合同/设置/01_企业印章.jpg +16:56:54 [95/172] wait 13.4s -> 电子合同 / 设置 / 合同包 +16:57:13 OK 合同包 -> screenshots/12_电子合同/设置/03_合同包.jpg +16:57:13 [96/172] wait 13.5s -> 电子合同 / 设置 / 合同模板 +16:57:32 OK 合同模板 -> screenshots/12_电子合同/设置/02_合同模板.jpg +16:57:32 [97/172] wait 8.4s -> 电子工资条 / 常规 / 反馈记录 +16:57:46 OK 反馈记录 -> screenshots/20_电子工资条/常规/03_反馈记录.jpg +16:57:46 [98/172] wait 8.1s -> 电子工资条 / 常规 / 发放记录 +16:58:01 OK 发放记录 -> screenshots/20_电子工资条/常规/02_发放记录.jpg +16:58:01 [99/172] wait 6.7s -> 电子工资条 / 常规 / 发送工资条 +16:58:12 OK 发送工资条 -> screenshots/20_电子工资条/常规/01_发送工资条.jpg +16:58:12 [100/172] wait 8.6s -> 电子工资条 / 常规 / 操作记录 +16:58:26 OK 操作记录 -> screenshots/20_电子工资条/常规/05_操作记录.jpg +16:58:26 [101/172] wait 8.4s -> 电子工资条 / 常规 / 统计分析 +16:58:40 OK 统计分析 -> screenshots/20_电子工资条/常规/04_统计分析.jpg +16:58:40 [102/172] wait 11.0s -> 短信发送 / 常规 / 发送记录 +16:58:57 OK 发送记录 -> screenshots/19_短信发送/常规/02_发送记录.jpg +16:58:57 [103/172] wait 9.4s -> 短信发送 / 常规 / 短信发送 +16:59:11 OK 短信发送 -> screenshots/19_短信发送/常规/01_短信发送.jpg +16:59:11 [104/172] wait 12.7s -> 社保公积金 / 常规 / 参保档案 +16:59:28 OK 参保档案 -> screenshots/10_社保公积金/常规/03_参保档案.jpg +16:59:28 [105/172] wait 6.7s -> 社保公积金 / 常规 / 参保规则 +16:59:40 OK 参保规则 -> screenshots/10_社保公积金/常规/06_参保规则.jpg +16:59:40 [106/172] wait 6.2s -> 社保公积金 / 常规 / 参保账单 +16:59:51 OK 参保账单 -> screenshots/10_社保公积金/常规/01_参保账单.jpg +16:59:51 [107/172] wait 5.9s -> 社保公积金 / 常规 / 社保分析 +17:00:01 OK 社保分析 -> screenshots/10_社保公积金/常规/05_社保分析.jpg +17:00:01 [108/172] wait 5.9s -> 社保公积金 / 常规 / 社保报表 +17:00:11 OK 社保报表 -> screenshots/10_社保公积金/常规/04_社保报表.jpg +17:00:11 [109/172] wait 10.9s -> 社保公积金 / 常规 / 账单核对 +17:00:27 OK 账单核对 -> screenshots/10_社保公积金/常规/02_账单核对.jpg +17:00:27 [110/172] wait 8.1s -> 第三方对接 / 常规 / 企业微信 +17:00:40 OK 企业微信 -> screenshots/17_第三方对接/常规/01_企业微信.jpg +17:00:40 [111/172] wait 12.3s -> 第三方对接 / 常规 / 携程商旅 +17:00:57 OK 携程商旅 -> screenshots/17_第三方对接/常规/04_携程商旅.jpg +17:00:57 [112/172] wait 13.4s -> 第三方对接 / 常规 / 操作记录 +17:01:14 OK 操作记录 -> screenshots/17_第三方对接/常规/05_操作记录.jpg +17:01:14 [113/172] wait 11.4s -> 第三方对接 / 常规 / 钉钉 +17:01:30 OK 钉钉 -> screenshots/17_第三方对接/常规/02_钉钉.jpg +17:01:30 [114/172] wait 11.8s -> 第三方对接 / 常规 / 飞书 +17:01:47 OK 飞书 -> screenshots/17_第三方对接/常规/03_飞书.jpg +17:01:47 [115/172] wait 10.7s -> 组织 / 岗位管理 / 员工标签 +17:02:02 OK 员工标签 -> screenshots/03_组织/岗位管理/03_员工标签.jpg +17:02:02 [116/172] wait 7.2s -> 组织 / 岗位管理 / 岗位管理 +17:02:13 OK 岗位管理 -> screenshots/03_组织/岗位管理/01_岗位管理.jpg +17:02:13 [117/172] wait 12.8s -> 组织 / 岗位管理 / 组织报表 +17:02:30 OK 组织报表 -> screenshots/03_组织/岗位管理/05_组织报表.jpg +17:02:30 [118/172] wait 6.4s -> 组织 / 岗位管理 / 职务管理 +17:02:40 OK 职务管理 -> screenshots/03_组织/岗位管理/02_职务管理.jpg +17:02:40 [119/172] wait 14.3s -> 组织 / 岗位管理 / 职级管理 +17:02:59 OK 职级管理 -> screenshots/03_组织/岗位管理/04_职级管理.jpg +17:02:59 [120/172] wait 10.5s -> 组织 / 组织架构 / 工作地点 +17:03:13 OK 工作地点 -> screenshots/03_组织/组织架构/03_工作地点.jpg +17:03:13 [121/172] wait 14.8s -> 组织 / 组织架构 / 架构图 +17:03:32 OK 架构图 -> screenshots/03_组织/组织架构/02_架构图.jpg +17:03:32 [122/172] wait 11.8s -> 组织 / 组织架构 / 组织管理 +17:03:50 OK 组织管理 -> screenshots/03_组织/组织架构/01_组织管理.jpg +17:03:50 [123/172] wait 12.6s -> 绩效 / 常规 / 概览 +17:04:07 OK 概览 -> screenshots/09_绩效/常规/01_概览.jpg +17:04:07 [124/172] wait 6.1s -> 绩效 / 考核管理 / 历史绩效考核 +17:04:17 OK 历史绩效考核 -> screenshots/09_绩效/考核管理/02_历史绩效考核.jpg +17:04:17 [125/172] wait 7.7s -> 绩效 / 考核管理 / 晋升考核 +17:04:29 OK 晋升考核 -> screenshots/09_绩效/考核管理/04_晋升考核.jpg +17:04:29 [126/172] wait 11.2s -> 绩效 / 考核管理 / 绩效考核 +17:04:45 OK 绩效考核 -> screenshots/09_绩效/考核管理/01_绩效考核.jpg +17:04:45 [127/172] wait 8.4s -> 绩效 / 考核管理 / 考核组管理 +17:04:59 OK 考核组管理 -> screenshots/09_绩效/考核管理/05_考核组管理.jpg +17:04:59 [128/172] wait 9.0s -> 绩效 / 考核管理 / 试用期考核 +17:05:12 OK 试用期考核 -> screenshots/09_绩效/考核管理/03_试用期考核.jpg +17:05:12 [129/172] wait 11.7s -> 绩效 / 考核结果 / 员工绩效档案 +17:05:29 OK 员工绩效档案 -> screenshots/09_绩效/考核结果/01_员工绩效档案.jpg +17:05:29 [130/172] wait 14.5s -> 绩效 / 考核结果 / 绩效考核记录 +17:05:48 OK 绩效考核记录 -> screenshots/09_绩效/考核结果/02_绩效考核记录.jpg +17:05:48 [131/172] wait 9.0s -> 绩效 / 考核结果 / 绩效面谈记录 +17:06:02 OK 绩效面谈记录 -> screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg +17:06:02 [132/172] wait 8.8s -> 绩效 / 考核设置 / 指标库 +17:06:15 OK 指标库 -> screenshots/09_绩效/考核设置/01_指标库.jpg +17:06:15 [133/172] wait 8.0s -> 绩效 / 考核设置 / 操作记录 +17:06:27 OK 操作记录 -> screenshots/09_绩效/考核设置/05_操作记录.jpg +17:06:27 [134/172] wait 9.7s -> 绩效 / 考核设置 / 考核团队 +17:06:42 OK 考核团队 -> screenshots/09_绩效/考核设置/03_考核团队.jpg +17:06:42 [135/172] wait 6.7s -> 绩效 / 考核设置 / 考核模板库 +17:06:57 OK 考核模板库 -> screenshots/09_绩效/考核设置/02_考核模板库.jpg +17:06:57 [136/172] wait 7.1s -> 绩效 / 考核设置 / 自定义设置 +17:07:09 OK 自定义设置 -> screenshots/09_绩效/考核设置/04_自定义设置.jpg +17:07:09 [137/172] wait 13.3s -> 考勤假期 / 假期管理 / 休假一览 +17:07:27 OK 休假一览 -> screenshots/05_考勤假期/假期管理/01_休假一览.jpg +17:07:27 [138/172] wait 13.2s -> 考勤假期 / 假期管理 / 假期余额 +17:07:45 OK 假期余额 -> screenshots/05_考勤假期/假期管理/03_假期余额.jpg +17:07:45 [139/172] wait 6.3s -> 考勤假期 / 假期管理 / 假期方案 +17:07:56 OK 假期方案 -> screenshots/05_考勤假期/假期管理/04_假期方案.jpg +17:07:56 [140/172] wait 11.4s -> 考勤假期 / 假期管理 / 假期设置 +17:08:12 OK 假期设置 -> screenshots/05_考勤假期/假期管理/05_假期设置.jpg +17:08:12 [141/172] wait 10.9s -> 考勤假期 / 假期管理 / 手动调整 +17:08:27 OK 手动调整 -> screenshots/05_考勤假期/假期管理/02_手动调整.jpg +17:08:27 [142/172] wait 7.7s -> 考勤假期 / 考勤管理 / 打卡方式 +17:08:40 OK 打卡方式 -> screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg +17:08:40 [143/172] wait 7.7s -> 考勤假期 / 考勤管理 / 排班管理 +17:08:52 OK 排班管理 -> screenshots/05_考勤假期/考勤管理/02_排班管理.jpg +17:08:52 [144/172] wait 12.4s -> 考勤假期 / 考勤管理 / 考勤分组 +17:09:09 OK 考勤分组 -> screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg +17:09:09 [145/172] wait 10.1s -> 考勤假期 / 考勤管理 / 考勤规则 +17:09:24 OK 考勤规则 -> screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg +17:09:24 [146/172] wait 14.7s -> 考勤假期 / 考勤管理 / 考勤设置 +17:09:45 OK 考勤设置 -> screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg +17:09:45 [147/172] wait 11.8s -> 考勤假期 / 考勤统计 / 字段管理 +17:10:00 OK 字段管理 -> screenshots/05_考勤假期/考勤统计/05_字段管理.jpg +17:10:00 [148/172] wait 5.9s -> 考勤假期 / 考勤统计 / 明细记录 +17:10:11 OK 明细记录 -> screenshots/05_考勤假期/考勤统计/03_明细记录.jpg +17:10:11 [149/172] wait 14.2s -> 考勤假期 / 考勤统计 / 月考勤表 +17:10:31 OK 月考勤表 -> screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg +17:10:31 [150/172] wait 13.1s -> 考勤假期 / 考勤统计 / 每日考勤 +17:10:49 OK 每日考勤 -> screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg +17:10:49 [151/172] wait 11.3s -> 考勤假期 / 考勤统计 / 考勤报表 +17:11:05 OK 考勤报表 -> screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg +17:11:05 [152/172] wait 6.6s -> 考勤假期 / 考勤统计 / 考勤确认 +17:11:17 OK 考勤确认 -> screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg +17:11:17 [153/172] wait 8.9s -> 背景调查 / 背景调查服务 +17:11:31 OK 背景调查服务 -> screenshots/13_背景调查/背景调查服务.jpg +17:11:31 [154/172] wait 13.5s -> 薪酬 / 薪酬管理 / 发送工资条 +17:11:49 OK 发送工资条 -> screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg +17:11:49 [155/172] wait 6.9s -> 薪酬 / 薪酬管理 / 员工薪资 +17:12:01 OK 员工薪资 -> screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg +17:12:01 [156/172] wait 9.4s -> 薪酬 / 薪酬管理 / 工资发放 +17:12:15 OK 工资发放 -> screenshots/06_薪酬/薪酬管理/02_工资发放.jpg +17:12:15 [157/172] wait 13.5s -> 薪酬 / 薪酬管理 / 年终奖计算 +17:12:32 OK 年终奖计算 -> screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg +17:12:32 [158/172] wait 9.3s -> 薪酬 / 薪酬管理 / 月工资表 +17:12:48 OK 月工资表 -> screenshots/06_薪酬/薪酬管理/01_月工资表.jpg +17:12:48 [159/172] wait 11.1s -> 薪酬 / 薪酬管理 / 薪酬分析 +17:13:04 OK 薪酬分析 -> screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg +17:13:04 [160/172] wait 9.4s -> 薪酬 / 薪酬管理 / 薪酬报表 +17:13:18 OK 薪酬报表 -> screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg +17:13:18 [161/172] wait 6.5s -> 薪酬 / 薪酬管理 / 薪酬设置 +17:13:30 OK 薪酬设置 -> screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg +17:13:30 [162/172] wait 8.7s -> 薪酬 / 薪酬管理 / 计薪规则 +17:13:43 OK 计薪规则 -> screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg +17:13:43 [163/172] wait 9.4s -> 行政管理 / 会议室预定 / 会议室管理 +17:13:57 OK 会议室管理 -> screenshots/11_行政管理/会议室预定/02_会议室管理.jpg +17:13:57 [164/172] wait 7.2s -> 行政管理 / 会议室预定 / 会议操作记录 +17:14:08 OK 会议操作记录 -> screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg +17:14:08 [165/172] wait 11.0s -> 行政管理 / 会议室预定 / 会议预定记录 +17:14:23 OK 会议预定记录 -> screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg +17:14:23 [166/172] wait 14.5s -> 行政管理 / 常规 / 企业公告 +17:14:42 OK 企业公告 -> screenshots/11_行政管理/常规/01_企业公告.jpg +17:14:42 [167/172] wait 14.4s -> 行政管理 / 常规 / 企业制度 +17:15:01 OK 企业制度 -> screenshots/11_行政管理/常规/02_企业制度.jpg +17:15:01 [168/172] wait 7.3s -> 行政管理 / 常规 / 开具证明 +17:15:12 OK 开具证明 -> screenshots/11_行政管理/常规/04_开具证明.jpg +17:15:12 [169/172] wait 10.0s -> 行政管理 / 常规 / 新闻动态 +17:15:27 OK 新闻动态 -> screenshots/11_行政管理/常规/03_新闻动态.jpg +17:15:27 [170/172] wait 6.6s -> 行政管理 / 问卷调查 / 问卷操作记录 +17:15:38 OK 问卷操作记录 -> screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg +17:15:38 [171/172] wait 11.5s -> 行政管理 / 问卷调查 / 问卷模板库 +17:15:54 OK 问卷模板库 -> screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg +17:15:54 [172/172] wait 12.9s -> 行政管理 / 问卷调查 / 问卷管理 +17:16:11 OK 问卷管理 -> screenshots/11_行政管理/问卷调查/01_问卷管理.jpg +17:16:11 === DONE done=172 skipped=0 failed=0 total=172 === diff --git a/db/crawl_run.log b/db/crawl_run.log new file mode 100644 index 0000000..a3e0ebf --- /dev/null +++ b/db/crawl_run.log @@ -0,0 +1,518 @@ +16:34:30 === crawl start, total=172, start_index=0 === +16:34:30 [1/172] wait 14.0s -> AI员工助手 / 常规 / AI员工助手 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/常规/01_AI员工助手.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:34:48 OK AI员工助手 -> screenshots/23_AI员工助手/常规/01_AI员工助手.jpg +16:34:48 [2/172] wait 10.6s -> AI员工助手 / 常规 / 员工助手设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/常规/03_员工助手设置.jpg", "size": [2880, 3265], "tiles": 3, "docH": 1632, "winH": 756, "hdr": 48} +16:35:04 OK 员工助手设置 -> screenshots/23_AI员工助手/常规/03_员工助手设置.jpg +16:35:04 [3/172] wait 11.0s -> AI员工助手 / 常规 / 知识库管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/常规/02_知识库管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:35:19 OK 知识库管理 -> screenshots/23_AI员工助手/常规/02_知识库管理.jpg +16:35:19 [4/172] wait 14.2s -> AI员工助手 / 数据统计 / 总体使用情况 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg", "size": [2880, 2954], "tiles": 3, "docH": 1477, "winH": 756, "hdr": 48} +16:35:38 OK 总体使用情况 -> screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg +16:35:38 [5/172] wait 10.7s -> AI员工助手 / 数据统计 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/数据统计/02_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:35:53 OK 操作记录 -> screenshots/23_AI员工助手/数据统计/02_操作记录.jpg +16:35:53 [6/172] wait 5.2s -> 个税对接 / 常规 / 个税申报 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/02_个税申报.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:36:02 OK 个税申报 -> screenshots/22_个税对接/常规/02_个税申报.jpg +16:36:02 [7/172] wait 5.8s -> 个税对接 / 常规 / 人员信息报送 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/01_人员信息报送.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:36:12 OK 人员信息报送 -> screenshots/22_个税对接/常规/01_人员信息报送.jpg +16:36:12 [8/172] wait 9.0s -> 个税对接 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/04_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:36:26 OK 操作记录 -> screenshots/22_个税对接/常规/04_操作记录.jpg +16:36:26 [9/172] wait 7.1s -> 个税对接 / 常规 / 纳税单位管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/03_纳税单位管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:36:37 OK 纳税单位管理 -> screenshots/22_个税对接/常规/03_纳税单位管理.jpg +16:36:37 [10/172] wait 10.7s -> 人事 / 员工关系 / 人事异动 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/04_人事异动.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:36:52 OK 人事异动 -> screenshots/02_人事/员工关系/04_人事异动.jpg +16:36:52 [11/172] wait 5.3s -> 人事 / 员工关系 / 任职记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/08_任职记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:37:02 OK 任职记录 -> screenshots/02_人事/员工关系/08_任职记录.jpg +16:37:02 [12/172] wait 11.8s -> 人事 / 员工关系 / 入职管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/01_入职管理.jpg", "size": [2880, 1536], "tiles": 2, "docH": 768, "winH": 756, "hdr": 48} +16:37:18 OK 入职管理 -> screenshots/02_人事/员工关系/01_入职管理.jpg +16:37:18 [13/172] wait 11.5s -> 人事 / 员工关系 / 关怀通知 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/05_关怀通知.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:37:34 OK 关怀通知 -> screenshots/02_人事/员工关系/05_关怀通知.jpg +16:37:34 [14/172] wait 14.8s -> 人事 / 员工关系 / 合同管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/06_合同管理.jpg", "size": [2880, 1664], "tiles": 2, "docH": 832, "winH": 756, "hdr": 48} +16:37:53 OK 合同管理 -> screenshots/02_人事/员工关系/06_合同管理.jpg +16:37:53 [15/172] wait 10.9s -> 人事 / 员工关系 / 培训经历 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/09_培训经历.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:38:09 OK 培训经历 -> screenshots/02_人事/员工关系/09_培训经历.jpg +16:38:09 [16/172] wait 14.5s -> 人事 / 员工关系 / 奖惩记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/10_奖惩记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:38:28 OK 奖惩记录 -> screenshots/02_人事/员工关系/10_奖惩记录.jpg +16:38:28 [17/172] wait 10.8s -> 人事 / 员工关系 / 实习生管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/12_实习生管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:38:43 OK 实习生管理 -> screenshots/02_人事/员工关系/12_实习生管理.jpg +16:38:43 [18/172] wait 11.7s -> 人事 / 员工关系 / 沟通记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/07_沟通记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:39:00 OK 沟通记录 -> screenshots/02_人事/员工关系/07_沟通记录.jpg +16:39:00 [19/172] wait 9.6s -> 人事 / 员工关系 / 离职管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/03_离职管理.jpg", "size": [2880, 1536], "tiles": 2, "docH": 768, "winH": 756, "hdr": 48} +16:39:15 OK 离职管理 -> screenshots/02_人事/员工关系/03_离职管理.jpg +16:39:15 [20/172] wait 12.5s -> 人事 / 员工关系 / 考察期管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/11_考察期管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:39:32 OK 考察期管理 -> screenshots/02_人事/员工关系/11_考察期管理.jpg +16:39:32 [21/172] wait 6.4s -> 人事 / 员工关系 / 转正管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/02_转正管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:39:42 OK 转正管理 -> screenshots/02_人事/员工关系/02_转正管理.jpg +16:39:42 [22/172] wait 12.0s -> 人事 / 员工管理 / 万能人事表格 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/05_万能人事表格.jpg", "size": [2880, 3530], "tiles": 3, "docH": 1765, "winH": 756, "hdr": 48} +16:40:00 OK 万能人事表格 -> screenshots/02_人事/员工管理/05_万能人事表格.jpg +16:40:00 [23/172] wait 10.7s -> 人事 / 员工管理 / 人事动态 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/06_人事动态.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:40:15 OK 人事动态 -> screenshots/02_人事/员工管理/06_人事动态.jpg +16:40:15 [24/172] wait 6.6s -> 人事 / 员工管理 / 人事报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/04_人事报表.jpg", "size": [2880, 1840], "tiles": 2, "docH": 920, "winH": 756, "hdr": 48} +16:40:26 OK 人事报表 -> screenshots/02_人事/员工管理/04_人事报表.jpg +16:40:26 [25/172] wait 8.2s -> 人事 / 员工管理 / 员工档案库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/02_员工档案库.jpg", "size": [2880, 3100], "tiles": 3, "docH": 1550, "winH": 756, "hdr": 48} +16:40:39 OK 员工档案库 -> screenshots/02_人事/员工管理/02_员工档案库.jpg +16:40:39 [26/172] wait 8.6s -> 人事 / 员工管理 / 员工花名册 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/01_员工花名册.jpg", "size": [2880, 1702], "tiles": 2, "docH": 851, "winH": 756, "hdr": 48} +16:40:53 OK 员工花名册 -> screenshots/02_人事/员工管理/01_员工花名册.jpg +16:40:53 [27/172] wait 13.0s -> 人事 / 员工管理 / 统计分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/03_统计分析.jpg", "size": [2880, 23116], "tiles": 17, "docH": 2754, "winH": 756, "hdr": 48} +16:41:18 OK 统计分析 -> screenshots/02_人事/员工管理/03_统计分析.jpg +16:41:18 [28/172] wait 14.6s -> 人事仪表盘 / 常规 / 我的仪表盘 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg", "size": [2880, 3685], "tiles": 3, "docH": 1763, "winH": 756, "hdr": 48} +16:41:37 OK 我的仪表盘 -> screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg +16:41:37 [29/172] wait 9.3s -> 人事仪表盘 / 常规 / 报告老板 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/16_人事仪表盘/常规/02_报告老板.jpg", "size": [2880, 7994], "tiles": 6, "docH": 3997, "winH": 756, "hdr": 48} +16:41:54 OK 报告老板 -> screenshots/16_人事仪表盘/常规/02_报告老板.jpg +16:41:54 [30/172] wait 8.9s -> 人才测评 / 人才测评服务 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/14_人才测评/人才测评服务.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:42:07 OK 人才测评服务 -> screenshots/14_人才测评/人才测评服务.jpg +16:42:07 [31/172] wait 5.7s -> 员工福利 / 常规 / 员工福利概况 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/01_员工福利概况.jpg", "size": [2880, 1853], "tiles": 2, "docH": 927, "winH": 756, "hdr": 48} +16:42:17 OK 员工福利概况 -> screenshots/15_员工福利/常规/01_员工福利概况.jpg +16:42:17 [32/172] wait 12.8s -> 员工福利 / 常规 / 员工积分管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/02_员工积分管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:42:33 OK 员工积分管理 -> screenshots/15_员工福利/常规/02_员工积分管理.jpg +16:42:33 [33/172] wait 9.8s -> 员工福利 / 常规 / 商品专区管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/03_商品专区管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:42:47 OK 商品专区管理 -> screenshots/15_员工福利/常规/03_商品专区管理.jpg +16:42:47 [34/172] wait 8.3s -> 员工福利 / 常规 / 平安好医生 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/04_平安好医生.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:43:00 OK 平安好医生 -> screenshots/15_员工福利/常规/04_平安好医生.jpg +16:43:00 [35/172] wait 14.5s -> 培训商城 / 培训商城(外部课程采购) +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/18_培训商城/培训商城(外部课程采购).jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +16:43:18 OK 培训商城(外部课程采购) -> screenshots/18_培训商城/培训商城(外部课程采购).jpg +16:43:18 [36/172] wait 9.6s -> 培训学习 / 培训设置 / 团队设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/培训设置/02_团队设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:43:32 OK 团队设置 -> screenshots/08_培训学习/培训设置/02_团队设置.jpg +16:43:32 [37/172] wait 10.8s -> 培训学习 / 培训设置 / 自定义设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/培训设置/03_自定义设置.jpg", "size": [2880, 1960], "tiles": 2, "docH": 980, "winH": 756, "hdr": 48} +16:43:48 OK 自定义设置 -> screenshots/08_培训学习/培训设置/03_自定义设置.jpg +16:43:48 [38/172] wait 8.0s -> 培训学习 / 培训设置 / 讲师设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/培训设置/01_讲师设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:44:00 OK 讲师设置 -> screenshots/08_培训学习/培训设置/01_讲师设置.jpg +16:44:00 [39/172] wait 5.5s -> 培训学习 / 线上学习 / 在线直播 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/03_在线直播.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:44:10 OK 在线直播 -> screenshots/08_培训学习/线上学习/03_在线直播.jpg +16:44:10 [40/172] wait 10.5s -> 培训学习 / 线上学习 / 学习计划 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/02_学习计划.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:44:25 OK 学习计划 -> screenshots/08_培训学习/线上学习/02_学习计划.jpg +16:44:25 [41/172] wait 5.3s -> 培训学习 / 线上学习 / 学习记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/05_学习记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:44:35 OK 学习记录 -> screenshots/08_培训学习/线上学习/05_学习记录.jpg +16:44:35 [42/172] wait 6.0s -> 培训学习 / 线上学习 / 学习进度 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/04_学习进度.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:44:45 OK 学习进度 -> screenshots/08_培训学习/线上学习/04_学习进度.jpg +16:44:45 [43/172] wait 5.4s -> 培训学习 / 线上学习 / 课程库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/01_课程库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:44:56 OK 课程库 -> screenshots/08_培训学习/线上学习/01_课程库.jpg +16:44:56 [44/172] wait 9.6s -> 培训学习 / 线下培训 / 培训计划 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线下培训/01_培训计划.jpg", "size": [2880, 1875], "tiles": 2, "docH": 938, "winH": 756, "hdr": 48} +16:45:10 OK 培训计划 -> screenshots/08_培训学习/线下培训/01_培训计划.jpg +16:45:10 [45/172] wait 12.7s -> 培训学习 / 线下培训 / 培训记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线下培训/03_培训记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:45:27 OK 培训记录 -> screenshots/08_培训学习/线下培训/03_培训记录.jpg +16:45:27 [46/172] wait 12.7s -> 培训学习 / 线下培训 / 开课日程 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线下培训/02_开课日程.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:45:44 OK 开课日程 -> screenshots/08_培训学习/线下培训/02_开课日程.jpg +16:45:44 [47/172] wait 10.5s -> 培训学习 / 考试练习 / 考试安排 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/03_考试安排.jpg", "size": [2880, 1556], "tiles": 2, "docH": 778, "winH": 756, "hdr": 48} +16:45:59 OK 考试安排 -> screenshots/08_培训学习/考试练习/03_考试安排.jpg +16:45:59 [48/172] wait 7.6s -> 培训学习 / 考试练习 / 考试记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/04_考试记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:46:11 OK 考试记录 -> screenshots/08_培训学习/考试练习/04_考试记录.jpg +16:46:11 [49/172] wait 12.7s -> 培训学习 / 考试练习 / 试卷管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/02_试卷管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:46:28 OK 试卷管理 -> screenshots/08_培训学习/考试练习/02_试卷管理.jpg +16:46:28 [50/172] wait 14.9s -> 培训学习 / 考试练习 / 题库管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/01_题库管理.jpg", "size": [2880, 1580], "tiles": 2, "docH": 790, "winH": 756, "hdr": 48} +16:46:47 OK 题库管理 -> screenshots/08_培训学习/考试练习/01_题库管理.jpg +16:46:47 [51/172] wait 8.1s -> 审批 / 常规 / 审批交接 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/05_审批交接.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:46:59 OK 审批交接 -> screenshots/07_审批/常规/05_审批交接.jpg +16:46:59 [52/172] wait 7.1s -> 审批 / 常规 / 审批代理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/03_审批代理.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +16:47:11 OK 审批代理 -> screenshots/07_审批/常规/03_审批代理.jpg +16:47:11 [53/172] wait 9.7s -> 审批 / 常规 / 审批模板库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/02_审批模板库.jpg", "size": [2880, 4868], "tiles": 4, "docH": 2434, "winH": 756, "hdr": 48} +16:47:27 OK 审批模板库 -> screenshots/07_审批/常规/02_审批模板库.jpg +16:47:27 [54/172] wait 6.5s -> 审批 / 常规 / 审批表单 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/01_审批表单.jpg", "size": [2880, 10008], "tiles": 7, "docH": 4392, "winH": 756, "hdr": 48} +16:47:40 OK 审批表单 -> screenshots/07_审批/常规/01_审批表单.jpg +16:47:40 [55/172] wait 9.0s -> 审批 / 常规 / 审批记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/04_审批记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:47:54 OK 审批记录 -> screenshots/07_审批/常规/04_审批记录.jpg +16:47:54 [56/172] wait 7.6s -> 审批 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/06_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:48:05 OK 操作记录 -> screenshots/07_审批/常规/06_操作记录.jpg +16:48:05 [57/172] wait 12.4s -> 工作台 / 工作台首页 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/01_工作台/工作台首页.jpg", "size": [2880, 5250], "tiles": 4, "docH": 2625, "winH": 756, "hdr": 48} +16:48:23 OK 工作台首页 -> screenshots/01_工作台/工作台首页.jpg +16:48:23 [58/172] wait 7.9s -> 应用管理 / 应用管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/24_应用管理/应用管理.jpg", "size": [2880, 2168], "tiles": 2, "docH": 1084, "winH": 756, "hdr": 48} +16:48:36 OK 应用管理 -> screenshots/24_应用管理/应用管理.jpg +16:48:36 [59/172] wait 10.3s -> 招聘 / 候选人 / 人才库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/07_人才库.jpg", "size": [2880, 4144], "tiles": 3, "docH": 2072, "winH": 756, "hdr": 48} +16:48:55 OK 人才库 -> screenshots/04_招聘/候选人/07_人才库.jpg +16:48:55 [60/172] wait 13.9s -> 招聘 / 候选人 / 已入职 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/02_已入职.jpg", "size": [2880, 3539], "tiles": 3, "docH": 1769, "winH": 756, "hdr": 48} +16:49:14 OK 已入职 -> screenshots/04_招聘/候选人/02_已入职.jpg +16:49:14 [61/172] wait 7.9s -> 招聘 / 候选人 / 已淘汰 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/03_已淘汰.jpg", "size": [2880, 4341], "tiles": 3, "docH": 2170, "winH": 756, "hdr": 48} +16:49:27 OK 已淘汰 -> screenshots/04_招聘/候选人/03_已淘汰.jpg +16:49:27 [62/172] wait 6.4s -> 招聘 / 候选人 / 招聘中 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/01_招聘中.jpg", "size": [2880, 4605], "tiles": 4, "docH": 2303, "winH": 756, "hdr": 48} +16:49:39 OK 招聘中 -> screenshots/04_招聘/候选人/01_招聘中.jpg +16:49:39 [63/172] wait 10.0s -> 招聘 / 候选人 / 招聘职位 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/04_招聘职位.jpg", "size": [2880, 3666], "tiles": 3, "docH": 1833, "winH": 756, "hdr": 48} +16:49:54 OK 招聘职位 -> screenshots/04_招聘/候选人/04_招聘职位.jpg +16:49:54 [64/172] wait 6.7s -> 招聘 / 候选人 / 招聘门户 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/05_招聘门户.jpg", "size": [2880, 1624], "tiles": 2, "docH": 812, "winH": 756, "hdr": 48} +16:50:06 OK 招聘门户 -> screenshots/04_招聘/候选人/05_招聘门户.jpg +16:50:06 [65/172] wait 8.9s -> 招聘 / 候选人 / 面试日程 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/06_面试日程.jpg", "size": [2880, 1925], "tiles": 2, "docH": 962, "winH": 756, "hdr": 48} +16:50:20 OK 面试日程 -> screenshots/04_招聘/候选人/06_面试日程.jpg +16:50:20 [66/172] wait 9.9s -> 招聘 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/常规/01_概览.jpg", "size": [2880, 1752], "tiles": 2, "docH": 876, "winH": 756, "hdr": 48} +16:50:35 OK 概览 -> screenshots/04_招聘/常规/01_概览.jpg +16:50:35 [67/172] wait 5.2s -> 招聘 / 统计分析 / 招聘分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/统计分析/02_招聘分析.jpg", "size": [2880, 5221], "tiles": 4, "docH": 2611, "winH": 756, "hdr": 48} +16:50:46 OK 招聘分析 -> screenshots/04_招聘/统计分析/02_招聘分析.jpg +16:50:46 [68/172] wait 13.6s -> 招聘 / 统计分析 / 招聘报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/统计分析/01_招聘报表.jpg", "size": [2880, 1722], "tiles": 2, "docH": 861, "winH": 756, "hdr": 48} +16:51:05 OK 招聘报表 -> screenshots/04_招聘/统计分析/01_招聘报表.jpg +16:51:05 [69/172] wait 13.9s -> 招聘 / 设置 / 招聘团队 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/01_招聘团队.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:51:23 OK 招聘团队 -> screenshots/04_招聘/设置/01_招聘团队.jpg +16:51:23 [70/172] wait 13.7s -> 招聘 / 设置 / 招聘工具 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/02_招聘工具.jpg", "size": [2880, 4430], "tiles": 4, "docH": 2215, "winH": 756, "hdr": 48} +16:51:43 OK 招聘工具 -> screenshots/04_招聘/设置/02_招聘工具.jpg +16:51:43 [71/172] wait 6.7s -> 招聘 / 设置 / 招聘渠道 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/03_招聘渠道.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:51:54 OK 招聘渠道 -> screenshots/04_招聘/设置/03_招聘渠道.jpg +16:51:54 [72/172] wait 5.8s -> 招聘 / 设置 / 更多设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/05_更多设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:52:06 OK 更多设置 -> screenshots/04_招聘/设置/05_更多设置.jpg +16:52:06 [73/172] wait 8.2s -> 招聘 / 设置 / 模板设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/04_模板设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:52:18 OK 模板设置 -> screenshots/04_招聘/设置/04_模板设置.jpg +16:52:18 [74/172] wait 13.2s -> 智能薪酬 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/常规/01_概览.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:52:36 OK 概览 -> screenshots/21_智能薪酬/常规/01_概览.jpg +16:52:36 [75/172] wait 6.3s -> 智能薪酬 / 常规 / 薪酬核算 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/常规/02_薪酬核算.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:52:46 OK 薪酬核算 -> screenshots/21_智能薪酬/常规/02_薪酬核算.jpg +16:52:46 [76/172] wait 6.8s -> 智能薪酬 / 报表中心 / 薪酬分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:52:57 OK 薪酬分析 -> screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg +16:52:57 [77/172] wait 13.8s -> 智能薪酬 / 报表中心 / 薪酬报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg", "size": [2880, 1918], "tiles": 2, "docH": 959, "winH": 756, "hdr": 48} +16:53:16 OK 薪酬报表 -> screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg +16:53:16 [78/172] wait 6.5s -> 智能薪酬 / 数据采集 / 业务提报 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/数据采集/02_业务提报.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:53:27 OK 业务提报 -> screenshots/21_智能薪酬/数据采集/02_业务提报.jpg +16:53:27 [79/172] wait 11.2s -> 智能薪酬 / 数据采集 / 员工考勤 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg", "size": [2880, 1578], "tiles": 2, "docH": 789, "winH": 756, "hdr": 48} +16:53:43 OK 员工考勤 -> screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg +16:53:43 [80/172] wait 5.2s -> 智能薪酬 / 薪酬数据 / 个税记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:53:52 OK 个税记录 -> screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg +16:53:52 [81/172] wait 9.1s -> 智能薪酬 / 薪酬数据 / 减除费用确认 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:54:06 OK 减除费用确认 -> screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg +16:54:06 [82/172] wait 10.6s -> 智能薪酬 / 薪酬数据 / 成本明细 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:54:20 OK 成本明细 -> screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg +16:54:20 [83/172] wait 6.6s -> 智能薪酬 / 薪酬数据 / 税前扣除 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:54:31 OK 税前扣除 -> screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg +16:54:31 [84/172] wait 9.3s -> 智能薪酬 / 薪酬数据 / 薪酬档案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg", "size": [2880, 1608], "tiles": 2, "docH": 804, "winH": 756, "hdr": 48} +16:54:45 OK 薪酬档案 -> screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg +16:54:45 [85/172] wait 5.9s -> 智能薪酬 / 薪酬设置 / 基础设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:54:55 OK 基础设置 -> screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg +16:54:55 [86/172] wait 7.8s -> 智能薪酬 / 薪酬设置 / 成本设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:55:07 OK 成本设置 -> screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg +16:55:07 [87/172] wait 8.0s -> 智能薪酬 / 薪酬设置 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:55:19 OK 操作记录 -> screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg +16:55:19 [88/172] wait 5.3s -> 智能薪酬 / 薪酬设置 / 薪酬结构 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg", "size": [2880, 1624], "tiles": 2, "docH": 812, "winH": 756, "hdr": 48} +16:55:29 OK 薪酬结构 -> screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg +16:55:29 [89/172] wait 5.6s -> 电子合同 / 合同签署 / 合同档案库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/04_合同档案库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:55:40 OK 合同档案库 -> screenshots/12_电子合同/合同签署/04_合同档案库.jpg +16:55:40 [90/172] wait 9.0s -> 电子合同 / 合同签署 / 已作废 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/03_已作废.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:55:54 OK 已作废 -> screenshots/12_电子合同/合同签署/03_已作废.jpg +16:55:54 [91/172] wait 11.0s -> 电子合同 / 合同签署 / 已签署 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/02_已签署.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:56:09 OK 已签署 -> screenshots/12_电子合同/合同签署/02_已签署.jpg +16:56:09 [92/172] wait 13.6s -> 电子合同 / 合同签署 / 签署中 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/01_签署中.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:56:27 OK 签署中 -> screenshots/12_电子合同/合同签署/01_签署中.jpg +16:56:27 [93/172] wait 7.3s -> 电子合同 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/常规/01_概览.jpg", "size": [2880, 1616], "tiles": 2, "docH": 808, "winH": 756, "hdr": 48} +16:56:39 OK 概览 -> screenshots/12_电子合同/常规/01_概览.jpg +16:56:39 [94/172] wait 11.2s -> 电子合同 / 设置 / 企业印章 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/设置/01_企业印章.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:56:54 OK 企业印章 -> screenshots/12_电子合同/设置/01_企业印章.jpg +16:56:54 [95/172] wait 13.4s -> 电子合同 / 设置 / 合同包 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/设置/03_合同包.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +16:57:13 OK 合同包 -> screenshots/12_电子合同/设置/03_合同包.jpg +16:57:13 [96/172] wait 13.5s -> 电子合同 / 设置 / 合同模板 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/设置/02_合同模板.jpg", "size": [2880, 3048], "tiles": 3, "docH": 1524, "winH": 756, "hdr": 48} +16:57:32 OK 合同模板 -> screenshots/12_电子合同/设置/02_合同模板.jpg +16:57:32 [97/172] wait 8.4s -> 电子工资条 / 常规 / 反馈记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/03_反馈记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:57:46 OK 反馈记录 -> screenshots/20_电子工资条/常规/03_反馈记录.jpg +16:57:46 [98/172] wait 8.1s -> 电子工资条 / 常规 / 发放记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/02_发放记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:58:01 OK 发放记录 -> screenshots/20_电子工资条/常规/02_发放记录.jpg +16:58:01 [99/172] wait 6.7s -> 电子工资条 / 常规 / 发送工资条 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/01_发送工资条.jpg", "size": [2880, 1778], "tiles": 2, "docH": 889, "winH": 756, "hdr": 48} +16:58:12 OK 发送工资条 -> screenshots/20_电子工资条/常规/01_发送工资条.jpg +16:58:12 [100/172] wait 8.6s -> 电子工资条 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/05_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:58:26 OK 操作记录 -> screenshots/20_电子工资条/常规/05_操作记录.jpg +16:58:26 [101/172] wait 8.4s -> 电子工资条 / 常规 / 统计分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/04_统计分析.jpg", "size": [2880, 2208], "tiles": 2, "docH": 1104, "winH": 756, "hdr": 48} +16:58:40 OK 统计分析 -> screenshots/20_电子工资条/常规/04_统计分析.jpg +16:58:40 [102/172] wait 11.0s -> 短信发送 / 常规 / 发送记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/19_短信发送/常规/02_发送记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +16:58:57 OK 发送记录 -> screenshots/19_短信发送/常规/02_发送记录.jpg +16:58:57 [103/172] wait 9.4s -> 短信发送 / 常规 / 短信发送 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/19_短信发送/常规/01_短信发送.jpg", "size": [2880, 1690], "tiles": 2, "docH": 845, "winH": 756, "hdr": 48} +16:59:11 OK 短信发送 -> screenshots/19_短信发送/常规/01_短信发送.jpg +16:59:11 [104/172] wait 12.7s -> 社保公积金 / 常规 / 参保档案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/03_参保档案.jpg", "size": [2880, 1728], "tiles": 2, "docH": 864, "winH": 756, "hdr": 48} +16:59:28 OK 参保档案 -> screenshots/10_社保公积金/常规/03_参保档案.jpg +16:59:28 [105/172] wait 6.7s -> 社保公积金 / 常规 / 参保规则 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/06_参保规则.jpg", "size": [2880, 1840], "tiles": 2, "docH": 920, "winH": 756, "hdr": 48} +16:59:40 OK 参保规则 -> screenshots/10_社保公积金/常规/06_参保规则.jpg +16:59:40 [106/172] wait 6.2s -> 社保公积金 / 常规 / 参保账单 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/01_参保账单.jpg", "size": [2880, 2297], "tiles": 2, "docH": 1149, "winH": 756, "hdr": 48} +16:59:51 OK 参保账单 -> screenshots/10_社保公积金/常规/01_参保账单.jpg +16:59:51 [107/172] wait 5.9s -> 社保公积金 / 常规 / 社保分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/05_社保分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:00:01 OK 社保分析 -> screenshots/10_社保公积金/常规/05_社保分析.jpg +17:00:01 [108/172] wait 5.9s -> 社保公积金 / 常规 / 社保报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/04_社保报表.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:00:11 OK 社保报表 -> screenshots/10_社保公积金/常规/04_社保报表.jpg +17:00:11 [109/172] wait 10.9s -> 社保公积金 / 常规 / 账单核对 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/02_账单核对.jpg", "size": [2880, 1688], "tiles": 2, "docH": 844, "winH": 756, "hdr": 48} +17:00:27 OK 账单核对 -> screenshots/10_社保公积金/常规/02_账单核对.jpg +17:00:27 [110/172] wait 8.1s -> 第三方对接 / 常规 / 企业微信 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/01_企业微信.jpg", "size": [2880, 1872], "tiles": 2, "docH": 936, "winH": 756, "hdr": 48} +17:00:40 OK 企业微信 -> screenshots/17_第三方对接/常规/01_企业微信.jpg +17:00:40 [111/172] wait 12.3s -> 第三方对接 / 常规 / 携程商旅 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/04_携程商旅.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:00:57 OK 携程商旅 -> screenshots/17_第三方对接/常规/04_携程商旅.jpg +17:00:57 [112/172] wait 13.4s -> 第三方对接 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/05_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:01:14 OK 操作记录 -> screenshots/17_第三方对接/常规/05_操作记录.jpg +17:01:14 [113/172] wait 11.4s -> 第三方对接 / 常规 / 钉钉 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/02_钉钉.jpg", "size": [2880, 2940], "tiles": 3, "docH": 1470, "winH": 756, "hdr": 48} +17:01:30 OK 钉钉 -> screenshots/17_第三方对接/常规/02_钉钉.jpg +17:01:30 [114/172] wait 11.8s -> 第三方对接 / 常规 / 飞书 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/03_飞书.jpg", "size": [2880, 2072], "tiles": 2, "docH": 1036, "winH": 756, "hdr": 48} +17:01:47 OK 飞书 -> screenshots/17_第三方对接/常规/03_飞书.jpg +17:01:47 [115/172] wait 10.7s -> 组织 / 岗位管理 / 员工标签 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/03_员工标签.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +17:02:02 OK 员工标签 -> screenshots/03_组织/岗位管理/03_员工标签.jpg +17:02:02 [116/172] wait 7.2s -> 组织 / 岗位管理 / 岗位管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/01_岗位管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:02:13 OK 岗位管理 -> screenshots/03_组织/岗位管理/01_岗位管理.jpg +17:02:13 [117/172] wait 12.8s -> 组织 / 岗位管理 / 组织报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/05_组织报表.jpg", "size": [2880, 2012], "tiles": 2, "docH": 1006, "winH": 756, "hdr": 48} +17:02:30 OK 组织报表 -> screenshots/03_组织/岗位管理/05_组织报表.jpg +17:02:30 [118/172] wait 6.4s -> 组织 / 岗位管理 / 职务管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/02_职务管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:02:40 OK 职务管理 -> screenshots/03_组织/岗位管理/02_职务管理.jpg +17:02:40 [119/172] wait 14.3s -> 组织 / 岗位管理 / 职级管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/04_职级管理.jpg", "size": [2880, 1558], "tiles": 2, "docH": 779, "winH": 756, "hdr": 48} +17:02:59 OK 职级管理 -> screenshots/03_组织/岗位管理/04_职级管理.jpg +17:02:59 [120/172] wait 10.5s -> 组织 / 组织架构 / 工作地点 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/组织架构/03_工作地点.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:03:13 OK 工作地点 -> screenshots/03_组织/组织架构/03_工作地点.jpg +17:03:13 [121/172] wait 14.8s -> 组织 / 组织架构 / 架构图 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/组织架构/02_架构图.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:03:32 OK 架构图 -> screenshots/03_组织/组织架构/02_架构图.jpg +17:03:32 [122/172] wait 11.8s -> 组织 / 组织架构 / 组织管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/组织架构/01_组织管理.jpg", "size": [2880, 6371], "tiles": 5, "docH": 3186, "winH": 756, "hdr": 48} +17:03:50 OK 组织管理 -> screenshots/03_组织/组织架构/01_组织管理.jpg +17:03:50 [123/172] wait 12.6s -> 绩效 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/常规/01_概览.jpg", "size": [2880, 2124], "tiles": 2, "docH": 1062, "winH": 756, "hdr": 48} +17:04:07 OK 概览 -> screenshots/09_绩效/常规/01_概览.jpg +17:04:07 [124/172] wait 6.1s -> 绩效 / 考核管理 / 历史绩效考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/02_历史绩效考核.jpg", "size": [2880, 1528], "tiles": 2, "docH": 764, "winH": 756, "hdr": 48} +17:04:17 OK 历史绩效考核 -> screenshots/09_绩效/考核管理/02_历史绩效考核.jpg +17:04:17 [125/172] wait 7.7s -> 绩效 / 考核管理 / 晋升考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/04_晋升考核.jpg", "size": [2880, 1556], "tiles": 2, "docH": 778, "winH": 756, "hdr": 48} +17:04:29 OK 晋升考核 -> screenshots/09_绩效/考核管理/04_晋升考核.jpg +17:04:29 [126/172] wait 11.2s -> 绩效 / 考核管理 / 绩效考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/01_绩效考核.jpg", "size": [2880, 1528], "tiles": 2, "docH": 764, "winH": 756, "hdr": 48} +17:04:45 OK 绩效考核 -> screenshots/09_绩效/考核管理/01_绩效考核.jpg +17:04:45 [127/172] wait 8.4s -> 绩效 / 考核管理 / 考核组管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/05_考核组管理.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +17:04:59 OK 考核组管理 -> screenshots/09_绩效/考核管理/05_考核组管理.jpg +17:04:59 [128/172] wait 9.0s -> 绩效 / 考核管理 / 试用期考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/03_试用期考核.jpg", "size": [2880, 1556], "tiles": 2, "docH": 778, "winH": 756, "hdr": 48} +17:05:12 OK 试用期考核 -> screenshots/09_绩效/考核管理/03_试用期考核.jpg +17:05:12 [129/172] wait 11.7s -> 绩效 / 考核结果 / 员工绩效档案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核结果/01_员工绩效档案.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:05:29 OK 员工绩效档案 -> screenshots/09_绩效/考核结果/01_员工绩效档案.jpg +17:05:29 [130/172] wait 14.5s -> 绩效 / 考核结果 / 绩效考核记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核结果/02_绩效考核记录.jpg", "size": [2880, 1553], "tiles": 2, "docH": 777, "winH": 756, "hdr": 48} +17:05:48 OK 绩效考核记录 -> screenshots/09_绩效/考核结果/02_绩效考核记录.jpg +17:05:48 [131/172] wait 9.0s -> 绩效 / 考核结果 / 绩效面谈记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:06:02 OK 绩效面谈记录 -> screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg +17:06:02 [132/172] wait 8.8s -> 绩效 / 考核设置 / 指标库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/01_指标库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:06:15 OK 指标库 -> screenshots/09_绩效/考核设置/01_指标库.jpg +17:06:15 [133/172] wait 8.0s -> 绩效 / 考核设置 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/05_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:06:27 OK 操作记录 -> screenshots/09_绩效/考核设置/05_操作记录.jpg +17:06:27 [134/172] wait 9.7s -> 绩效 / 考核设置 / 考核团队 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/03_考核团队.jpg", "size": [2880, 4336], "tiles": 3, "docH": 2168, "winH": 756, "hdr": 48} +17:06:42 OK 考核团队 -> screenshots/09_绩效/考核设置/03_考核团队.jpg +17:06:42 [135/172] wait 6.7s -> 绩效 / 考核设置 / 考核模板库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/02_考核模板库.jpg", "size": [2880, 13944], "tiles": 10, "docH": 6972, "winH": 756, "hdr": 48} +17:06:57 OK 考核模板库 -> screenshots/09_绩效/考核设置/02_考核模板库.jpg +17:06:57 [136/172] wait 7.1s -> 绩效 / 考核设置 / 自定义设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/04_自定义设置.jpg", "size": [2880, 3804], "tiles": 3, "docH": 1902, "winH": 756, "hdr": 48} +17:07:09 OK 自定义设置 -> screenshots/09_绩效/考核设置/04_自定义设置.jpg +17:07:09 [137/172] wait 13.3s -> 考勤假期 / 假期管理 / 休假一览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/01_休假一览.jpg", "size": [2880, 1803], "tiles": 2, "docH": 902, "winH": 756, "hdr": 48} +17:07:27 OK 休假一览 -> screenshots/05_考勤假期/假期管理/01_休假一览.jpg +17:07:27 [138/172] wait 13.2s -> 考勤假期 / 假期管理 / 假期余额 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/03_假期余额.jpg", "size": [2880, 1522], "tiles": 2, "docH": 761, "winH": 756, "hdr": 48} +17:07:45 OK 假期余额 -> screenshots/05_考勤假期/假期管理/03_假期余额.jpg +17:07:45 [139/172] wait 6.3s -> 考勤假期 / 假期管理 / 假期方案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/04_假期方案.jpg", "size": [2880, 1816], "tiles": 2, "docH": 876, "winH": 756, "hdr": 48} +17:07:56 OK 假期方案 -> screenshots/05_考勤假期/假期管理/04_假期方案.jpg +17:07:56 [140/172] wait 11.4s -> 考勤假期 / 假期管理 / 假期设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/05_假期设置.jpg", "size": [2880, 2756], "tiles": 2, "docH": 1378, "winH": 756, "hdr": 48} +17:08:12 OK 假期设置 -> screenshots/05_考勤假期/假期管理/05_假期设置.jpg +17:08:12 [141/172] wait 10.9s -> 考勤假期 / 假期管理 / 手动调整 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/02_手动调整.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:08:27 OK 手动调整 -> screenshots/05_考勤假期/假期管理/02_手动调整.jpg +17:08:27 [142/172] wait 7.7s -> 考勤假期 / 考勤管理 / 打卡方式 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg", "size": [2880, 1876], "tiles": 2, "docH": 938, "winH": 756, "hdr": 48} +17:08:40 OK 打卡方式 -> screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg +17:08:40 [143/172] wait 7.7s -> 考勤假期 / 考勤管理 / 排班管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/02_排班管理.jpg", "size": [2880, 1634], "tiles": 2, "docH": 817, "winH": 756, "hdr": 48} +17:08:52 OK 排班管理 -> screenshots/05_考勤假期/考勤管理/02_排班管理.jpg +17:08:52 [144/172] wait 12.4s -> 考勤假期 / 考勤管理 / 考勤分组 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg", "size": [2880, 2012], "tiles": 2, "docH": 1006, "winH": 756, "hdr": 48} +17:09:09 OK 考勤分组 -> screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg +17:09:09 [145/172] wait 10.1s -> 考勤假期 / 考勤管理 / 考勤规则 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg", "size": [2880, 1716], "tiles": 2, "docH": 858, "winH": 756, "hdr": 48} +17:09:24 OK 考勤规则 -> screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg +17:09:24 [146/172] wait 14.7s -> 考勤假期 / 考勤管理 / 考勤设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg", "size": [2880, 4070], "tiles": 3, "docH": 2035, "winH": 756, "hdr": 48} +17:09:45 OK 考勤设置 -> screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg +17:09:45 [147/172] wait 11.8s -> 考勤假期 / 考勤统计 / 字段管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/05_字段管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:10:00 OK 字段管理 -> screenshots/05_考勤假期/考勤统计/05_字段管理.jpg +17:10:00 [148/172] wait 5.9s -> 考勤假期 / 考勤统计 / 明细记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/03_明细记录.jpg", "size": [2880, 1578], "tiles": 2, "docH": 789, "winH": 756, "hdr": 48} +17:10:11 OK 明细记录 -> screenshots/05_考勤假期/考勤统计/03_明细记录.jpg +17:10:11 [149/172] wait 14.2s -> 考勤假期 / 考勤统计 / 月考勤表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg", "size": [2880, 2019], "tiles": 2, "docH": 1010, "winH": 756, "hdr": 48} +17:10:31 OK 月考勤表 -> screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg +17:10:31 [150/172] wait 13.1s -> 考勤假期 / 考勤统计 / 每日考勤 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg", "size": [2880, 1538], "tiles": 2, "docH": 769, "winH": 756, "hdr": 48} +17:10:49 OK 每日考勤 -> screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg +17:10:49 [151/172] wait 11.3s -> 考勤假期 / 考勤统计 / 考勤报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg", "size": [2880, 2906], "tiles": 2, "docH": 1453, "winH": 756, "hdr": 48} +17:11:05 OK 考勤报表 -> screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg +17:11:05 [152/172] wait 6.6s -> 考勤假期 / 考勤统计 / 考勤确认 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:11:17 OK 考勤确认 -> screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg +17:11:17 [153/172] wait 8.9s -> 背景调查 / 背景调查服务 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/13_背景调查/背景调查服务.jpg", "size": [2880, 4139], "tiles": 3, "docH": 2070, "winH": 756, "hdr": 48} +17:11:31 OK 背景调查服务 -> screenshots/13_背景调查/背景调查服务.jpg +17:11:31 [154/172] wait 13.5s -> 薪酬 / 薪酬管理 / 发送工资条 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg", "size": [2880, 1778], "tiles": 2, "docH": 889, "winH": 756, "hdr": 48} +17:11:49 OK 发送工资条 -> screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg +17:11:49 [155/172] wait 6.9s -> 薪酬 / 薪酬管理 / 员工薪资 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg", "size": [2880, 1882], "tiles": 2, "docH": 941, "winH": 756, "hdr": 48} +17:12:01 OK 员工薪资 -> screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg +17:12:01 [156/172] wait 9.4s -> 薪酬 / 薪酬管理 / 工资发放 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/02_工资发放.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:12:15 OK 工资发放 -> screenshots/06_薪酬/薪酬管理/02_工资发放.jpg +17:12:15 [157/172] wait 13.5s -> 薪酬 / 薪酬管理 / 年终奖计算 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:12:32 OK 年终奖计算 -> screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg +17:12:32 [158/172] wait 9.3s -> 薪酬 / 薪酬管理 / 月工资表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/01_月工资表.jpg", "size": [2880, 6336], "tiles": 5, "docH": 3168, "winH": 756, "hdr": 48} +17:12:48 OK 月工资表 -> screenshots/06_薪酬/薪酬管理/01_月工资表.jpg +17:12:48 [159/172] wait 11.1s -> 薪酬 / 薪酬管理 / 薪酬分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg", "size": [2880, 3573], "tiles": 3, "docH": 1787, "winH": 756, "hdr": 48} +17:13:04 OK 薪酬分析 -> screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg +17:13:04 [160/172] wait 9.4s -> 薪酬 / 薪酬管理 / 薪酬报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg", "size": [2880, 2242], "tiles": 2, "docH": 1121, "winH": 756, "hdr": 48} +17:13:18 OK 薪酬报表 -> screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg +17:13:18 [161/172] wait 6.5s -> 薪酬 / 薪酬管理 / 薪酬设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg", "size": [2880, 1908], "tiles": 2, "docH": 954, "winH": 756, "hdr": 48} +17:13:30 OK 薪酬设置 -> screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg +17:13:30 [162/172] wait 8.7s -> 薪酬 / 薪酬管理 / 计薪规则 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg", "size": [2880, 1864], "tiles": 2, "docH": 932, "winH": 756, "hdr": 48} +17:13:43 OK 计薪规则 -> screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg +17:13:43 [163/172] wait 9.4s -> 行政管理 / 会议室预定 / 会议室管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/会议室预定/02_会议室管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:13:57 OK 会议室管理 -> screenshots/11_行政管理/会议室预定/02_会议室管理.jpg +17:13:57 [164/172] wait 7.2s -> 行政管理 / 会议室预定 / 会议操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:14:08 OK 会议操作记录 -> screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg +17:14:08 [165/172] wait 11.0s -> 行政管理 / 会议室预定 / 会议预定记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:14:23 OK 会议预定记录 -> screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg +17:14:23 [166/172] wait 14.5s -> 行政管理 / 常规 / 企业公告 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/01_企业公告.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:14:42 OK 企业公告 -> screenshots/11_行政管理/常规/01_企业公告.jpg +17:14:42 [167/172] wait 14.4s -> 行政管理 / 常规 / 企业制度 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/02_企业制度.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:15:01 OK 企业制度 -> screenshots/11_行政管理/常规/02_企业制度.jpg +17:15:01 [168/172] wait 7.3s -> 行政管理 / 常规 / 开具证明 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/04_开具证明.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:15:12 OK 开具证明 -> screenshots/11_行政管理/常规/04_开具证明.jpg +17:15:12 [169/172] wait 10.0s -> 行政管理 / 常规 / 新闻动态 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/03_新闻动态.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:15:27 OK 新闻动态 -> screenshots/11_行政管理/常规/03_新闻动态.jpg +17:15:27 [170/172] wait 6.6s -> 行政管理 / 问卷调查 / 问卷操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +17:15:38 OK 问卷操作记录 -> screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg +17:15:38 [171/172] wait 11.5s -> 行政管理 / 问卷调查 / 问卷模板库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg", "size": [2880, 2356], "tiles": 2, "docH": 1178, "winH": 756, "hdr": 48} +17:15:54 OK 问卷模板库 -> screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg +17:15:54 [172/172] wait 12.9s -> 行政管理 / 问卷调查 / 问卷管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/问卷调查/01_问卷管理.jpg", "size": [2880, 1672], "tiles": 2, "docH": 836, "winH": 756, "hdr": 48} +17:16:11 OK 问卷管理 -> screenshots/11_行政管理/问卷调查/01_问卷管理.jpg +17:16:11 === DONE done=172 skipped=0 failed=0 total=172 === diff --git a/db/dl_biz.out b/db/dl_biz.out new file mode 100644 index 0000000..4e4b8fe --- /dev/null +++ b/db/dl_biz.out @@ -0,0 +1,65 @@ +21:07:42 === BIZ 业务列表页深挖, 共 20 页 === +21:07:42 [1/20] 02_人事 / 员工管理 / 员工花名册 +21:08:26 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:08:34 本页触发导出入口, 落盘=0 (其余走任务中心) +21:08:41 [2/20] 02_人事 / 员工管理 / 员工档案库 +21:09:25 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:09:32 本页触发导出入口, 落盘=0 (其余走任务中心) +21:09:44 [3/20] 02_人事 / 员工管理 / 万能人事表格 +21:10:28 [card=下载] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:10:35 本页触发导出入口, 落盘=0 (其余走任务中心) +21:10:50 [4/20] 02_人事 / 员工关系 / 入职管理 +21:11:34 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:11:41 OK xlsx (6103 bytes) -> downloads/02_人事/员工关系/待入职人员列表-20260717211138.xlsx +21:11:43 本页触发导出入口, 落盘=1 (其余走任务中心) +21:11:50 [5/20] 02_人事 / 员工关系 / 离职管理 +21:12:33 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:12:38 OK xlsx (6778 bytes) -> downloads/02_人事/员工关系/待离职员工列表_20260717211236.xlsx +21:12:41 本页触发导出入口, 落盘=1 (其余走任务中心) +21:12:50 [6/20] 02_人事 / 员工关系 / 合同管理 +21:13:33 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:13:40 OK xlsx (7036 bytes) -> downloads/02_人事/员工关系/已签订合同人员列表_20260717_211338.xlsx +21:13:50 本页触发导出入口, 落盘=1 (其余走任务中心) +21:13:56 [7/20] 02_人事 / 员工关系 / 奖惩记录 +21:14:40 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:14:45 OK xlsx (6648 bytes) -> downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx +21:14:50 本页触发导出入口, 落盘=1 (其余走任务中心) +21:14:59 [8/20] 02_人事 / 员工关系 / 人事异动 +21:15:42 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:15:53 OK xlsx (12551 bytes) -> downloads/02_人事/员工关系/员工异动记录表_20260717211551.xlsx +21:15:56 本页触发导出入口, 落盘=1 (其余走任务中心) +21:16:24 [9/20] 06_薪酬 / 薪酬管理 / 月工资表 +21:16:37 无导出入口, skip +21:16:46 [10/20] 06_薪酬 / 薪酬管理 / 员工薪资 +21:17:08 OK xlsx (35840 bytes) -> downloads/06_薪酬/薪酬管理/工资档案信息表-测试账号.xlsx +21:17:10 本页触发导出入口, 落盘=1 (其余走任务中心) +21:17:16 [11/20] 06_薪酬 / 薪酬管理 / 工资发放 +21:17:29 无导出入口, skip +21:17:50 [12/20] 05_社保公积金 / 常规 / 参保账单 +21:18:03 无导出入口, skip +21:18:09 [13/20] 05_社保公积金 / 常规 / 账单核对 +21:18:22 无导出入口, skip +21:18:28 [14/20] 04_考勤假期 / 考勤统计 / 月考勤表 +21:18:41 无导出入口, skip +21:18:45 [15/20] 04_考勤假期 / 考勤统计 / 明细记录 +21:19:28 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:19:38 OK xlsx (6850 bytes) -> downloads/04_考勤假期/考勤统计/打卡记录表-测试账号.xlsx +21:19:53 本页触发导出入口, 落盘=1 (其余走任务中心) +21:20:03 [16/20] 04_考勤假期 / 考勤统计 / 每日考勤 +21:20:46 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:20:53 OK xlsx (6155 bytes) -> downloads/04_考勤假期/考勤统计/2026年7月17日考勤明细.xlsx +21:20:54 本页触发导出入口, 落盘=1 (其余走任务中心) +21:21:09 [17/20] 04_考勤假期 / 假期管理 / 休假一览 +21:21:53 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:21:55 本页触发导出入口, 落盘=0 (其余走任务中心) +21:22:08 [18/20] 04_考勤假期 / 假期管理 / 假期余额 +21:22:51 [export=txt-导出] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:23:01 本页触发导出入口, 落盘=0 (其余走任务中心) +21:23:34 [19/20] 03_组织 / 岗位管理 / 员工标签 +21:23:47 无导出入口, skip +21:23:54 [20/20] 07_绩效 / 考核结果 / 绩效考核记录 +21:24:07 无导出入口, skip +21:24:15 === 阶段2: 收割任务中心 === +21:24:15 任务中心可下载任务: 3 +21:24:25 === 收割任务中心 stage2=2 === +21:24:25 === BIZ DONE 累计文件=10 === diff --git a/db/dl_biz2.out b/db/dl_biz2.out new file mode 100644 index 0000000..fa5e7a0 --- /dev/null +++ b/db/dl_biz2.out @@ -0,0 +1,56 @@ +22:29:26 === BIZ2 补充业务列表页深挖, 共 18 页 === +22:29:26 [1/18] 03_组织 / 部门管理 / 组织管理 +22:29:40 无导出入口, skip +22:29:43 [2/18] 03_组织 / 岗位管理 / 岗位管理 +22:29:56 无导出入口, skip +22:30:15 [3/18] 03_组织 / 岗位管理 / 职务管理 +22:30:28 无导出入口, skip +22:30:32 [4/18] 03_组织 / 岗位管理 / 职级管理 +22:30:45 无导出入口, skip +22:30:52 [5/18] 08_审批 / 记录 / 审批记录 +22:31:35 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:31:37 本页触发导出入口, 落盘=0 (其余走任务中心) +22:31:48 [6/18] 05_社保公积金 / 常规 / 参保档案 +22:32:31 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:32:40 本页触发导出入口, 落盘=0 (其余走任务中心) +22:32:55 [7/18] 12_电子合同 / 合同签署 / 已签署 +22:33:39 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:33:39 本页触发导出入口, 落盘=0 (其余走任务中心) +22:33:44 [8/18] 12_电子合同 / 合同签署 / 合同档案库 +22:33:57 无导出入口, skip +22:34:05 [9/18] 20_电子工资条 / 常规 / 发放记录 +22:34:18 无导出入口, skip +22:34:25 [10/18] 02_人事 / 员工关系 / 转正管理 +22:35:09 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:35:17 OK xlsx (10983 bytes) -> downloads/02_人事/员工关系/试用期员工列表_20260717223514.xlsx +22:35:20 本页触发导出入口, 落盘=1 (其余走任务中心) +22:35:27 [11/18] 02_人事 / 员工关系 / 任职记录 +22:35:43 OK xlsx (10409 bytes) -> downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx +22:35:50 本页触发导出入口, 落盘=1 (其余走任务中心) +22:35:55 [12/18] 02_人事 / 员工关系 / 实习生管理 +22:36:39 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:36:43 OK xlsx (6023 bytes) -> downloads/02_人事/员工关系/实习生情况记录表-20260717223640.xlsx +22:36:44 本页触发导出入口, 落盘=1 (其余走任务中心) +22:36:50 [13/18] 02_人事 / 员工关系 / 培训经历 +22:37:06 OK xlsx (6261 bytes) -> downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx +22:37:12 本页触发导出入口, 落盘=1 (其余走任务中心) +22:37:39 [14/18] 02_人事 / 员工关系 / 沟通记录 +22:37:55 OK xlsx (6435 bytes) -> downloads/02_人事/员工关系/员工谈话记录-2026-07-17 22_37_52.xlsx +22:38:01 本页触发导出入口, 落盘=1 (其余走任务中心) +22:38:05 [15/18] 09_绩效 / 考核结果 / 员工绩效档案 +22:38:49 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:38:56 本页触发导出入口, 落盘=0 (其余走任务中心) +22:39:03 [16/18] 09_绩效 / 考核结果 / 绩效面谈记录 +22:39:46 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:39:50 本页触发导出入口, 落盘=0 (其余走任务中心) +22:40:28 [17/18] 13_培训学习 / 培训管理 / 培训记录 +22:40:41 无导出入口, skip +22:40:59 [18/18] 11_行政管理 / 常规 / 企业公告 +22:41:12 无导出入口, skip +22:41:20 === 阶段2: 收割任务中心 === +22:41:20 任务中心可下载任务: 5 +22:41:22 OK xlsx (5744 bytes) -> downloads/_任务中心/已签署_电子合同签署记录_20260717223308.xlsx +22:41:28 OK xlsx (5782 bytes) -> downloads/_任务中心/参保档案列表-已参保_20260717223201.xlsx +22:41:37 OK xlsx (5783 bytes) -> downloads/_任务中心/参保档案列表-已参保_20260717172413.xlsx +22:41:46 === 收割任务中心 stage2=4 === +22:41:46 === BIZ2 DONE 累计文件=9 === diff --git a/db/dl_export.log b/db/dl_export.log new file mode 100644 index 0000000..ebe2715 --- /dev/null +++ b/db/dl_export.log @@ -0,0 +1,439 @@ +18:39:24 === 开始导出下载, 共 35 页 === +18:39:24 [1/35] 人事 / 员工管理 / 员工档案库 +18:39:49 无导出入口, skip +18:40:03 [2/35] 人事 / 员工管理 / 统计分析 +18:40:28 无导出入口, skip +18:40:39 [3/35] 人事 / 员工管理 / 人事报表 +18:40:42 发现 图标下载=25 文字入口=0 +18:41:13 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:41:45 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:42:18 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:42:51 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:43:24 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +--- test start 18:46:50 --- +18:47:57 [1/1] 02_人事 / 人事报表 +18:48:02 发现 图标下载=25 文字入口=0 +18:48:11 OK xlsx (101172 bytes) -> downloads/02_人事/在职员工花名册-20260717184803.xlsx +18:48:20 OK xlsx (100945 bytes) -> downloads/02_人事/在职员工花名册(2)-20260717184814.xlsx +18:48:31 OK xlsx (100942 bytes) -> downloads/02_人事/在职员工花名册(1)-20260717184823.xlsx +18:48:37 OK xlsx (24950 bytes) -> downloads/02_人事/员工通讯录-20260717184834.xlsx +18:48:44 OK xlsx (11361 bytes) -> downloads/02_人事/员工劳动合同签订情况-20260717184840.xlsx +18:48:51 OK xlsx (30280 bytes) -> downloads/02_人事/员工工作年限信息表-20260717184848.xlsx +18:48:59 OK xlsx (19310 bytes) -> downloads/02_人事/员工住址信息表-20260717184855.xlsx +18:49:05 OK xlsx (18782 bytes) -> downloads/02_人事/员工生日信息表-20260717184901.xlsx +18:49:12 OK xlsx (4396 bytes) -> downloads/02_人事/离职员工信息表-20260717184908.xlsx +18:49:19 OK xlsx (10581 bytes) -> downloads/02_人事/测试账号_123-20260717184915.xlsx +18:49:28 OK xlsx (100924 bytes) -> downloads/02_人事/在职员工花名册-20260717184922.xlsx +18:49:34 OK xlsx (24946 bytes) -> downloads/02_人事/员工通讯录-20260717184931.xlsx +18:49:42 OK xlsx (5778 bytes) -> downloads/02_人事/测试账号_月度人员进出一览表_20260717184938.xlsx +18:49:48 OK xlsx (10636 bytes) -> downloads/02_人事/各部门人事档案统计-20260717184946.xlsx +18:49:56 OK xlsx (7093 bytes) -> downloads/02_人事/测试账号_月度人员进出明细表_20260717184952.xlsx +18:50:02 OK xlsx (5778 bytes) -> downloads/02_人事/测试账号_月度人员进出一览表_20260717184959.xlsx +18:50:09 OK xlsx (37342 bytes) -> downloads/02_人事/员工学历统计表-20260717185006.xlsx +18:50:16 OK xlsx (37407 bytes) -> downloads/02_人事/员工年龄段统计表-20260717185013.xlsx +18:50:23 OK xlsx (6778 bytes) -> downloads/02_人事/员工入离职情况统计表-20260717185020.xlsx +18:50:52 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:51:21 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:51:49 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:51:57 OK xlsx (25676 bytes) -> downloads/02_人事/测试账号企业-各部门离职情况表.xlsx +18:52:03 OK xlsx (10917 bytes) -> downloads/02_人事/待入职人员流失率统计表-20260717185201.xlsx +18:52:32 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:53:01 [btn=生成excel] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:53:03 单页测试产出: 21 个文件, SAVED=21 +=== FULL RUN start 18:54:08 === +18:54:08 === 开始导出下载, 共 35 页 === +18:54:08 [1/35] 人事 / 员工管理 / 员工档案库 +18:54:33 无导出入口, skip +18:54:39 [2/35] 人事 / 员工管理 / 统计分析 +18:55:04 无导出入口, skip +18:55:19 [3/35] 人事 / 员工管理 / 人事报表 +18:55:21 发现 图标下载=25 文字入口=0 +18:55:30 OK xlsx (101177 bytes) -> downloads/02_人事/员工管理/在职员工花名册-20260717185522.xlsx +18:55:41 OK xlsx (100943 bytes) -> downloads/02_人事/员工管理/在职员工花名册(2)-20260717185533.xlsx +18:55:52 OK xlsx (100940 bytes) -> downloads/02_人事/员工管理/在职员工花名册(1)-20260717185544.xlsx +18:55:58 OK xlsx (24951 bytes) -> downloads/02_人事/员工管理/员工通讯录-20260717185554.xlsx +18:56:05 OK xlsx (11355 bytes) -> downloads/02_人事/员工管理/员工劳动合同签订情况-20260717185601.xlsx +18:56:12 OK xlsx (30279 bytes) -> downloads/02_人事/员工管理/员工工作年限信息表-20260717185608.xlsx +18:56:19 OK xlsx (19310 bytes) -> downloads/02_人事/员工管理/员工住址信息表-20260717185615.xlsx +18:56:26 OK xlsx (18782 bytes) -> downloads/02_人事/员工管理/员工生日信息表-20260717185622.xlsx +18:56:34 OK xlsx (4395 bytes) -> downloads/02_人事/员工管理/离职员工信息表-20260717185628.xlsx +18:56:41 OK xlsx (10581 bytes) -> downloads/02_人事/员工管理/测试账号_123-20260717185637.xlsx +18:56:52 OK xlsx (100922 bytes) -> downloads/02_人事/员工管理/在职员工花名册-20260717185644.xlsx +18:56:59 OK xlsx (24945 bytes) -> downloads/02_人事/员工管理/员工通讯录-20260717185655.xlsx +18:57:05 OK xlsx (5777 bytes) -> downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185702.xlsx +18:57:12 OK xlsx (10635 bytes) -> downloads/02_人事/员工管理/各部门人事档案统计-20260717185710.xlsx +18:57:20 OK xlsx (7092 bytes) -> downloads/02_人事/员工管理/测试账号_月度人员进出明细表_20260717185716.xlsx +18:57:27 OK xlsx (5778 bytes) -> downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185723.xlsx +18:57:33 OK xlsx (37343 bytes) -> downloads/02_人事/员工管理/员工学历统计表-20260717185730.xlsx +18:57:41 OK xlsx (37408 bytes) -> downloads/02_人事/员工管理/员工年龄段统计表-20260717185737.xlsx +18:57:48 OK xlsx (6779 bytes) -> downloads/02_人事/员工管理/员工入离职情况统计表-20260717185744.xlsx +18:57:54 OK xlsx (21391 bytes) -> downloads/02_人事/员工管理/员工证件信息表-20260717185751.xlsx +18:58:02 OK xlsx (20063 bytes) -> downloads/02_人事/员工管理/员工工资卡信息表-20260717185758.xlsx +18:58:08 OK xlsx (18175 bytes) -> downloads/02_人事/员工管理/员工社保公积金账号信息表-20260717185804.xlsx +18:58:15 OK xlsx (25675 bytes) -> downloads/02_人事/员工管理/测试账号企业-各部门离职情况表.xlsx +18:58:22 OK xlsx (10917 bytes) -> downloads/02_人事/员工管理/待入职人员流失率统计表-20260717185820.xlsx +18:58:29 OK xlsx (24801 bytes) -> downloads/02_人事/员工管理/测试账号-员工个人证件照存档情况表-20260717185825.xlsx +18:58:38 [4/35] 组织 / 岗位管理 / 组织报表 +18:59:03 无导出入口, skip +18:59:14 [5/35] 招聘 / 统计分析 / 招聘报表 +18:59:25 发现 图标下载=1 文字入口=0 +18:59:56 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:00:05 [6/35] 招聘 / 统计分析 / 招聘分析 +19:00:18 发现 图标下载=1 文字入口=0 +19:00:49 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:01:02 [7/35] 招聘 / 设置 / 模板设置 +19:01:15 发现 图标下载=1 文字入口=0 +19:01:46 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:01:57 [8/35] 考勤假期 / 考勤统计 / 每日考勤 +19:01:59 发现 图标下载=1 文字入口=0 +19:02:30 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:02:41 [9/35] 考勤假期 / 考勤统计 / 月考勤表 +19:03:07 无导出入口, skip +19:03:20 [10/35] 考勤假期 / 考勤统计 / 明细记录 +19:03:22 发现 图标下载=1 文字入口=0 +19:03:53 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:04:07 [11/35] 考勤假期 / 考勤统计 / 考勤报表 +19:04:32 无导出入口, skip +19:04:44 [12/35] 考勤假期 / 考勤统计 / 字段管理 +19:05:09 无导出入口, skip +19:05:23 [13/35] 考勤假期 / 考勤统计 / 考勤确认 +19:05:48 无导出入口, skip +19:05:57 [14/35] 薪酬 / 薪酬管理 / 薪酬报表 +19:06:22 无导出入口, skip +19:06:37 [15/35] 薪酬 / 薪酬管理 / 薪酬分析 +19:06:39 发现 图标下载=0 文字入口=1 +19:07:10 [btn=批量导出] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:07:24 [16/35] 审批 / 常规 / 审批模板库 +19:07:49 无导出入口, skip +19:08:00 [17/35] 绩效 / 考核结果 / 员工绩效档案 +19:08:25 无导出入口, skip +19:08:38 [18/35] 绩效 / 考核设置 / 考核模板库 +19:09:03 无导出入口, skip +19:09:09 [19/35] 社保公积金 / 常规 / 参保档案 +19:09:34 无导出入口, skip +19:09:48 [20/35] 社保公积金 / 常规 / 社保报表 +19:10:13 无导出入口, skip +19:10:22 [21/35] 社保公积金 / 常规 / 社保分析 +19:10:47 无导出入口, skip +19:10:52 [22/35] 行政管理 / 常规 / 企业公告 +19:11:17 无导出入口, skip +19:11:25 [23/35] 行政管理 / 常规 / 企业制度 +19:11:50 无导出入口, skip +19:12:02 [24/35] 行政管理 / 常规 / 开具证明 +19:12:27 无导出入口, skip +19:12:42 [25/35] 行政管理 / 问卷调查 / 问卷模板库 +19:13:07 无导出入口, skip +19:13:21 [26/35] 电子合同 / 合同签署 / 合同档案库 +19:13:46 无导出入口, skip +19:13:53 [27/35] 电子合同 / 设置 / 合同模板 +19:14:18 无导出入口, skip +19:14:29 [28/35] 人事仪表盘 / 常规 / 我的仪表盘 +19:14:54 无导出入口, skip +19:15:09 [29/35] 人事仪表盘 / 常规 / 报告老板 +19:15:33 无导出入口, skip +19:15:40 [30/35] 电子工资条 / 常规 / 统计分析 +19:16:05 无导出入口, skip +19:16:18 [31/35] 智能薪酬 / 薪酬数据 / 薪酬档案 +19:16:43 无导出入口, skip +19:16:55 [32/35] 智能薪酬 / 报表中心 / 薪酬报表 +19:17:19 无导出入口, skip +19:17:33 [33/35] 智能薪酬 / 报表中心 / 薪酬分析 +19:17:58 无导出入口, skip +19:18:10 [34/35] AI员工助手 / 数据统计 / 总体使用情况 +19:18:35 无导出入口, skip +19:18:46 [35/35] AI员工助手 / 数据统计 / 操作记录 +19:19:11 无导出入口, skip +19:19:24 === 阶段2: 收割任务中心 === +19:19:24 任务中心可下载任务: 0 +19:19:24 === DONE 阶段1=25 阶段2=0 累计文件=25 === +=== RESUME start 19:50:55 === +19:50:55 === RESUME total=35 done=2 todo=34 === +19:50:55 [1/34] 人事 / 员工管理 / 员工档案库 +19:51:21 无导出入口, skip +19:51:27 [2/34] 人事 / 员工管理 / 统计分析 +19:51:52 无导出入口, skip +19:52:11 [3/34] 组织 / 岗位管理 / 组织报表 +19:52:36 无导出入口, skip +19:52:42 [4/34] 招聘 / 统计分析 / 招聘报表 +19:52:55 发现 图标下载=1 文字入口=0 +19:53:26 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:53:38 [5/34] 招聘 / 统计分析 / 招聘分析 +19:53:51 发现 图标下载=1 文字入口=0 +19:54:22 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:54:35 [6/34] 招聘 / 设置 / 模板设置 +19:54:48 发现 图标下载=1 文字入口=0 +19:55:19 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:55:35 [7/34] 考勤假期 / 考勤统计 / 每日考勤 +19:55:38 发现 图标下载=1 文字入口=0 +19:56:09 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:56:48 [8/34] 考勤假期 / 考勤统计 / 月考勤表 +19:57:13 无导出入口, skip +19:57:37 [9/34] 考勤假期 / 考勤统计 / 明细记录 +19:57:40 发现 图标下载=1 文字入口=0 +19:58:11 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:58:39 [10/34] 考勤假期 / 考勤统计 / 考勤报表 +19:59:04 无导出入口, skip +19:59:14 [11/34] 考勤假期 / 考勤统计 / 字段管理 +19:59:39 无导出入口, skip +19:59:44 [12/34] 考勤假期 / 考勤统计 / 考勤确认 +20:00:09 无导出入口, skip +20:00:16 [13/34] 薪酬 / 薪酬管理 / 薪酬报表 +20:00:41 无导出入口, skip +20:00:46 [14/34] 薪酬 / 薪酬管理 / 薪酬分析 +20:00:49 发现 图标下载=0 文字入口=1 +20:01:20 [btn=批量导出] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +20:01:40 [15/34] 审批 / 常规 / 审批模板库 +20:02:05 无导出入口, skip +20:02:14 [16/34] 绩效 / 考核结果 / 员工绩效档案 +20:02:39 无导出入口, skip +20:02:44 [17/34] 绩效 / 考核设置 / 考核模板库 +20:03:09 无导出入口, skip +20:03:49 [18/34] 社保公积金 / 常规 / 参保档案 +20:04:14 无导出入口, skip +20:04:20 [19/34] 社保公积金 / 常规 / 社保报表 +20:04:45 无导出入口, skip +20:04:55 [20/34] 社保公积金 / 常规 / 社保分析 +20:05:20 无导出入口, skip +20:05:24 [21/34] 行政管理 / 常规 / 企业公告 +20:05:49 无导出入口, skip +20:05:56 [22/34] 行政管理 / 常规 / 企业制度 +20:06:21 无导出入口, skip +20:06:25 [23/34] 行政管理 / 常规 / 开具证明 +20:06:50 无导出入口, skip +20:07:05 [24/34] 行政管理 / 问卷调查 / 问卷模板库 +20:07:30 无导出入口, skip +20:07:56 [25/34] 电子合同 / 合同签署 / 合同档案库 +20:08:21 无导出入口, skip +20:08:38 [26/34] 电子合同 / 设置 / 合同模板 +20:09:03 无导出入口, skip +20:09:09 [27/34] 人事仪表盘 / 常规 / 我的仪表盘 +20:09:34 无导出入口, skip +20:09:41 [28/34] 人事仪表盘 / 常规 / 报告老板 +20:10:24 无导出入口, skip +20:11:02 [29/34] 电子工资条 / 常规 / 统计分析 +20:11:27 无导出入口, skip +20:11:44 [30/34] 智能薪酬 / 薪酬数据 / 薪酬档案 +20:12:10 无导出入口, skip +20:12:18 [31/34] 智能薪酬 / 报表中心 / 薪酬报表 +20:12:43 无导出入口, skip +20:12:59 [32/34] 智能薪酬 / 报表中心 / 薪酬分析 +20:13:24 无导出入口, skip +20:13:28 [33/34] AI员工助手 / 数据统计 / 总体使用情况 +20:13:54 无导出入口, skip +20:14:00 [34/34] AI员工助手 / 数据统计 / 操作记录 +20:14:26 无导出入口, skip +20:14:31 === 阶段2: 收割任务中心 === +20:14:31 任务中心可下载任务: 2 +20:14:35 === stage2_taskcenter=1 === +20:14:35 === RESUME DONE files=1 === +20:47:18 === 阶段2: 收割任务中心 === +20:47:19 任务中心可下载任务: 3 +20:47:21 OK xlsx (5783 bytes) -> downloads/_任务中心/参保档案列表-已参保_20260717204514.xlsx +20:50:08 [1/1] 05_社保公积金 / 常规 / 社保报表 +20:50:21 无导出入口, skip +20:51:37 [1/1] 07_绩效 / 考核结果 / 员工绩效档案 +20:51:50 无导出入口, skip +20:51:54 === 阶段2: 收割任务中心 === +20:51:54 任务中心可下载任务: 3 +20:53:47 [1/1] 07_绩效 / 考核结果 / 员工绩效档案 +20:54:31 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +20:54:34 本页触发导出入口, 落盘=0 (其余走任务中心) +20:54:39 === 阶段2: 收割任务中心 === +20:54:39 任务中心可下载任务: 3 +20:56:42 === 阶段2: 收割任务中心 === +20:56:42 任务中心可下载任务: 3 +21:01:18 [1/1] 02_人事 / 员工管理 / 员工花名册 +21:02:02 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:02:06 本页触发导出入口, 落盘=0 (其余走任务中心) +21:02:12 === 阶段2: 收割任务中心 === +21:02:12 任务中心可下载任务: 3 +21:05:45 [1/1] 02_人事 / 员工管理 / 员工花名册 +21:06:28 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:06:32 本页触发导出入口, 落盘=0 (其余走任务中心) +21:06:38 === 阶段2: 收割任务中心 === +21:06:38 任务中心可下载任务: 3 +21:07:42 === BIZ 业务列表页深挖, 共 20 页 === +21:07:42 [1/20] 02_人事 / 员工管理 / 员工花名册 +21:08:26 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:08:34 本页触发导出入口, 落盘=0 (其余走任务中心) +21:08:41 [2/20] 02_人事 / 员工管理 / 员工档案库 +21:09:25 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:09:32 本页触发导出入口, 落盘=0 (其余走任务中心) +21:09:44 [3/20] 02_人事 / 员工管理 / 万能人事表格 +21:10:28 [card=下载] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:10:35 本页触发导出入口, 落盘=0 (其余走任务中心) +21:10:50 [4/20] 02_人事 / 员工关系 / 入职管理 +21:11:34 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:11:41 OK xlsx (6103 bytes) -> downloads/02_人事/员工关系/待入职人员列表-20260717211138.xlsx +21:11:43 本页触发导出入口, 落盘=1 (其余走任务中心) +21:11:50 [5/20] 02_人事 / 员工关系 / 离职管理 +21:12:33 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:12:38 OK xlsx (6778 bytes) -> downloads/02_人事/员工关系/待离职员工列表_20260717211236.xlsx +21:12:41 本页触发导出入口, 落盘=1 (其余走任务中心) +21:12:50 [6/20] 02_人事 / 员工关系 / 合同管理 +21:13:33 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:13:40 OK xlsx (7036 bytes) -> downloads/02_人事/员工关系/已签订合同人员列表_20260717_211338.xlsx +21:13:50 本页触发导出入口, 落盘=1 (其余走任务中心) +21:13:56 [7/20] 02_人事 / 员工关系 / 奖惩记录 +21:14:40 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:14:45 OK xlsx (6648 bytes) -> downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx +21:14:50 本页触发导出入口, 落盘=1 (其余走任务中心) +21:14:59 [8/20] 02_人事 / 员工关系 / 人事异动 +21:15:42 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:15:53 OK xlsx (12551 bytes) -> downloads/02_人事/员工关系/员工异动记录表_20260717211551.xlsx +21:15:56 本页触发导出入口, 落盘=1 (其余走任务中心) +21:16:24 [9/20] 06_薪酬 / 薪酬管理 / 月工资表 +21:16:37 无导出入口, skip +21:16:46 [10/20] 06_薪酬 / 薪酬管理 / 员工薪资 +21:17:08 OK xlsx (35840 bytes) -> downloads/06_薪酬/薪酬管理/工资档案信息表-测试账号.xlsx +21:17:10 本页触发导出入口, 落盘=1 (其余走任务中心) +21:17:16 [11/20] 06_薪酬 / 薪酬管理 / 工资发放 +21:17:29 无导出入口, skip +21:17:50 [12/20] 05_社保公积金 / 常规 / 参保账单 +21:18:03 无导出入口, skip +21:18:09 [13/20] 05_社保公积金 / 常规 / 账单核对 +21:18:22 无导出入口, skip +21:18:28 [14/20] 04_考勤假期 / 考勤统计 / 月考勤表 +21:18:41 无导出入口, skip +21:18:45 [15/20] 04_考勤假期 / 考勤统计 / 明细记录 +21:19:28 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:19:38 OK xlsx (6850 bytes) -> downloads/04_考勤假期/考勤统计/打卡记录表-测试账号.xlsx +21:19:53 本页触发导出入口, 落盘=1 (其余走任务中心) +21:20:03 [16/20] 04_考勤假期 / 考勤统计 / 每日考勤 +21:20:46 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:20:53 OK xlsx (6155 bytes) -> downloads/04_考勤假期/考勤统计/2026年7月17日考勤明细.xlsx +21:20:54 本页触发导出入口, 落盘=1 (其余走任务中心) +21:21:09 [17/20] 04_考勤假期 / 假期管理 / 休假一览 +21:21:53 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:21:55 本页触发导出入口, 落盘=0 (其余走任务中心) +21:22:08 [18/20] 04_考勤假期 / 假期管理 / 假期余额 +21:22:51 [export=txt-导出] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +21:23:01 本页触发导出入口, 落盘=0 (其余走任务中心) +21:23:34 [19/20] 03_组织 / 岗位管理 / 员工标签 +21:23:47 无导出入口, skip +21:23:54 [20/20] 07_绩效 / 考核结果 / 绩效考核记录 +21:24:07 无导出入口, skip +21:24:15 === 阶段2: 收割任务中心 === +21:24:15 任务中心可下载任务: 3 +21:24:25 === 收割任务中心 stage2=2 === +21:24:25 === BIZ DONE 累计文件=10 === +22:29:26 === BIZ2 补充业务列表页深挖, 共 18 页 === +22:29:26 [1/18] 03_组织 / 部门管理 / 组织管理 +22:29:40 无导出入口, skip +22:29:43 [2/18] 03_组织 / 岗位管理 / 岗位管理 +22:29:56 无导出入口, skip +22:30:15 [3/18] 03_组织 / 岗位管理 / 职务管理 +22:30:28 无导出入口, skip +22:30:32 [4/18] 03_组织 / 岗位管理 / 职级管理 +22:30:45 无导出入口, skip +22:30:52 [5/18] 08_审批 / 记录 / 审批记录 +22:31:35 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:31:37 本页触发导出入口, 落盘=0 (其余走任务中心) +22:31:48 [6/18] 05_社保公积金 / 常规 / 参保档案 +22:32:31 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:32:40 本页触发导出入口, 落盘=0 (其余走任务中心) +22:32:55 [7/18] 12_电子合同 / 合同签署 / 已签署 +22:33:39 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:33:39 本页触发导出入口, 落盘=0 (其余走任务中心) +22:33:44 [8/18] 12_电子合同 / 合同签署 / 合同档案库 +22:33:57 无导出入口, skip +22:34:05 [9/18] 20_电子工资条 / 常规 / 发放记录 +22:34:18 无导出入口, skip +22:34:25 [10/18] 02_人事 / 员工关系 / 转正管理 +22:35:09 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:35:17 OK xlsx (10983 bytes) -> downloads/02_人事/员工关系/试用期员工列表_20260717223514.xlsx +22:35:20 本页触发导出入口, 落盘=1 (其余走任务中心) +22:35:27 [11/18] 02_人事 / 员工关系 / 任职记录 +22:35:43 OK xlsx (10409 bytes) -> downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx +22:35:50 本页触发导出入口, 落盘=1 (其余走任务中心) +22:35:55 [12/18] 02_人事 / 员工关系 / 实习生管理 +22:36:39 [icon-download=None] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:36:43 OK xlsx (6023 bytes) -> downloads/02_人事/员工关系/实习生情况记录表-20260717223640.xlsx +22:36:44 本页触发导出入口, 落盘=1 (其余走任务中心) +22:36:50 [13/18] 02_人事 / 员工关系 / 培训经历 +22:37:06 OK xlsx (6261 bytes) -> downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx +22:37:12 本页触发导出入口, 落盘=1 (其余走任务中心) +22:37:39 [14/18] 02_人事 / 员工关系 / 沟通记录 +22:37:55 OK xlsx (6435 bytes) -> downloads/02_人事/员工关系/员工谈话记录-2026-07-17 22_37_52.xlsx +22:38:01 本页触发导出入口, 落盘=1 (其余走任务中心) +22:38:05 [15/18] 09_绩效 / 考核结果 / 员工绩效档案 +22:38:49 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:38:56 本页触发导出入口, 落盘=0 (其余走任务中心) +22:39:03 [16/18] 09_绩效 / 考核结果 / 绩效面谈记录 +22:39:46 [export=icon-export] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +22:39:50 本页触发导出入口, 落盘=0 (其余走任务中心) +22:40:28 [17/18] 13_培训学习 / 培训管理 / 培训记录 +22:40:41 无导出入口, skip +22:40:59 [18/18] 11_行政管理 / 常规 / 企业公告 +22:41:12 无导出入口, skip +22:41:20 === 阶段2: 收割任务中心 === +22:41:20 任务中心可下载任务: 5 +22:41:22 OK xlsx (5744 bytes) -> downloads/_任务中心/已签署_电子合同签署记录_20260717223308.xlsx +22:41:28 OK xlsx (5782 bytes) -> downloads/_任务中心/参保档案列表-已参保_20260717223201.xlsx +22:41:37 OK xlsx (5783 bytes) -> downloads/_任务中心/参保档案列表-已参保_20260717172413.xlsx +22:41:46 === 收割任务中心 stage2=4 === +22:41:46 === BIZ2 DONE 累计文件=9 === +22:57:18 === 招聘报表导出: 触发阶段 === +22:57:18 报表列表区可下载报表: 10 +22:57:19 触发报表#1 确认=True +22:57:24 触发报表#2 确认=True +22:57:29 触发报表#3 确认=True +22:57:34 触发报表#4 确认=True +22:57:38 触发报表#5 确认=True +22:57:43 触发报表#6 确认=True +22:57:47 触发报表#7 确认=True +22:57:52 触发报表#8 确认=True +22:57:59 触发报表#9 确认=True +22:58:05 触发报表#10 确认=True +22:58:07 === 已触发 10 个报表, 等待服务端生成 === +22:58:32 === 招聘报表导出: 收割阶段 === +22:58:32 任务中心任务: 16 +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:52 任务中心任务: 16 +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 === REPORT DONE 触发=10 收割=0 === +23:00:55 任务中心任务: 16 +23:00:58 跳过(非招聘报表): export_1784300458107.bin +23:01:00 跳过(非招聘报表): export_1784300460191.bin +23:01:02 跳过(非招聘报表): export_1784300462306.bin +23:01:04 跳过(非招聘报表): export_1784300464574.bin +23:01:06 跳过(非招聘报表): export_1784300466711.bin +23:01:08 跳过(非招聘报表): export_1784300468789.bin +23:01:10 跳过(非招聘报表): export_1784300470871.bin +23:01:12 跳过(非招聘报表): export_1784300472946.bin +23:01:15 跳过(非招聘报表): export_1784300475017.bin +23:01:17 跳过(非招聘报表): 已签署_电子合同签署记录_20260717223308.xlsx +23:01:19 跳过(非招聘报表): 参保档案列表-已参保_20260717223201.xlsx +23:01:21 跳过(非招聘报表): 参保档案列表-已参保_20260717204514.xlsx +23:01:23 跳过(非招聘报表): 薪酬档案导出_20260717172740.xlsx +23:01:25 跳过(非招聘报表): 参保档案列表-已参保_20260717172413.xlsx diff --git a/db/dl_export_run.log b/db/dl_export_run.log new file mode 100644 index 0000000..a56a5f1 --- /dev/null +++ b/db/dl_export_run.log @@ -0,0 +1,12 @@ +18:39:24 === 开始导出下载, 共 35 页 === +18:39:24 [1/35] 人事 / 员工管理 / 员工档案库 +18:39:49 无导出入口, skip +18:40:03 [2/35] 人事 / 员工管理 / 统计分析 +18:40:28 无导出入口, skip +18:40:39 [3/35] 人事 / 员工管理 / 人事报表 +18:40:42 发现 图标下载=25 文字入口=0 +18:41:13 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:41:45 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:42:18 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:42:51 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +18:43:24 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) diff --git a/db/dl_full.out b/db/dl_full.out new file mode 100644 index 0000000..ddc8072 --- /dev/null +++ b/db/dl_full.out @@ -0,0 +1,105 @@ +18:54:08 === 开始导出下载, 共 35 页 === +18:54:08 [1/35] 人事 / 员工管理 / 员工档案库 +18:54:33 无导出入口, skip +18:54:39 [2/35] 人事 / 员工管理 / 统计分析 +18:55:04 无导出入口, skip +18:55:19 [3/35] 人事 / 员工管理 / 人事报表 +18:55:21 发现 图标下载=25 文字入口=0 +18:55:30 OK xlsx (101177 bytes) -> downloads/02_人事/员工管理/在职员工花名册-20260717185522.xlsx +18:55:41 OK xlsx (100943 bytes) -> downloads/02_人事/员工管理/在职员工花名册(2)-20260717185533.xlsx +18:55:52 OK xlsx (100940 bytes) -> downloads/02_人事/员工管理/在职员工花名册(1)-20260717185544.xlsx +18:55:58 OK xlsx (24951 bytes) -> downloads/02_人事/员工管理/员工通讯录-20260717185554.xlsx +18:56:05 OK xlsx (11355 bytes) -> downloads/02_人事/员工管理/员工劳动合同签订情况-20260717185601.xlsx +18:56:12 OK xlsx (30279 bytes) -> downloads/02_人事/员工管理/员工工作年限信息表-20260717185608.xlsx +18:56:19 OK xlsx (19310 bytes) -> downloads/02_人事/员工管理/员工住址信息表-20260717185615.xlsx +18:56:26 OK xlsx (18782 bytes) -> downloads/02_人事/员工管理/员工生日信息表-20260717185622.xlsx +18:56:34 OK xlsx (4395 bytes) -> downloads/02_人事/员工管理/离职员工信息表-20260717185628.xlsx +18:56:41 OK xlsx (10581 bytes) -> downloads/02_人事/员工管理/测试账号_123-20260717185637.xlsx +18:56:52 OK xlsx (100922 bytes) -> downloads/02_人事/员工管理/在职员工花名册-20260717185644.xlsx +18:56:59 OK xlsx (24945 bytes) -> downloads/02_人事/员工管理/员工通讯录-20260717185655.xlsx +18:57:05 OK xlsx (5777 bytes) -> downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185702.xlsx +18:57:12 OK xlsx (10635 bytes) -> downloads/02_人事/员工管理/各部门人事档案统计-20260717185710.xlsx +18:57:20 OK xlsx (7092 bytes) -> downloads/02_人事/员工管理/测试账号_月度人员进出明细表_20260717185716.xlsx +18:57:27 OK xlsx (5778 bytes) -> downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185723.xlsx +18:57:33 OK xlsx (37343 bytes) -> downloads/02_人事/员工管理/员工学历统计表-20260717185730.xlsx +18:57:41 OK xlsx (37408 bytes) -> downloads/02_人事/员工管理/员工年龄段统计表-20260717185737.xlsx +18:57:48 OK xlsx (6779 bytes) -> downloads/02_人事/员工管理/员工入离职情况统计表-20260717185744.xlsx +18:57:54 OK xlsx (21391 bytes) -> downloads/02_人事/员工管理/员工证件信息表-20260717185751.xlsx +18:58:02 OK xlsx (20063 bytes) -> downloads/02_人事/员工管理/员工工资卡信息表-20260717185758.xlsx +18:58:08 OK xlsx (18175 bytes) -> downloads/02_人事/员工管理/员工社保公积金账号信息表-20260717185804.xlsx +18:58:15 OK xlsx (25675 bytes) -> downloads/02_人事/员工管理/测试账号企业-各部门离职情况表.xlsx +18:58:22 OK xlsx (10917 bytes) -> downloads/02_人事/员工管理/待入职人员流失率统计表-20260717185820.xlsx +18:58:29 OK xlsx (24801 bytes) -> downloads/02_人事/员工管理/测试账号-员工个人证件照存档情况表-20260717185825.xlsx +18:58:38 [4/35] 组织 / 岗位管理 / 组织报表 +18:59:03 无导出入口, skip +18:59:14 [5/35] 招聘 / 统计分析 / 招聘报表 +18:59:25 发现 图标下载=1 文字入口=0 +18:59:56 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:00:05 [6/35] 招聘 / 统计分析 / 招聘分析 +19:00:18 发现 图标下载=1 文字入口=0 +19:00:49 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:01:02 [7/35] 招聘 / 设置 / 模板设置 +19:01:15 发现 图标下载=1 文字入口=0 +19:01:46 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:01:57 [8/35] 考勤假期 / 考勤统计 / 每日考勤 +19:01:59 发现 图标下载=1 文字入口=0 +19:02:30 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:02:41 [9/35] 考勤假期 / 考勤统计 / 月考勤表 +19:03:07 无导出入口, skip +19:03:20 [10/35] 考勤假期 / 考勤统计 / 明细记录 +19:03:22 发现 图标下载=1 文字入口=0 +19:03:53 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:04:07 [11/35] 考勤假期 / 考勤统计 / 考勤报表 +19:04:32 无导出入口, skip +19:04:44 [12/35] 考勤假期 / 考勤统计 / 字段管理 +19:05:09 无导出入口, skip +19:05:23 [13/35] 考勤假期 / 考勤统计 / 考勤确认 +19:05:48 无导出入口, skip +19:05:57 [14/35] 薪酬 / 薪酬管理 / 薪酬报表 +19:06:22 无导出入口, skip +19:06:37 [15/35] 薪酬 / 薪酬管理 / 薪酬分析 +19:06:39 发现 图标下载=0 文字入口=1 +19:07:10 [btn=批量导出] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:07:24 [16/35] 审批 / 常规 / 审批模板库 +19:07:49 无导出入口, skip +19:08:00 [17/35] 绩效 / 考核结果 / 员工绩效档案 +19:08:25 无导出入口, skip +19:08:38 [18/35] 绩效 / 考核设置 / 考核模板库 +19:09:03 无导出入口, skip +19:09:09 [19/35] 社保公积金 / 常规 / 参保档案 +19:09:34 无导出入口, skip +19:09:48 [20/35] 社保公积金 / 常规 / 社保报表 +19:10:13 无导出入口, skip +19:10:22 [21/35] 社保公积金 / 常规 / 社保分析 +19:10:47 无导出入口, skip +19:10:52 [22/35] 行政管理 / 常规 / 企业公告 +19:11:17 无导出入口, skip +19:11:25 [23/35] 行政管理 / 常规 / 企业制度 +19:11:50 无导出入口, skip +19:12:02 [24/35] 行政管理 / 常规 / 开具证明 +19:12:27 无导出入口, skip +19:12:42 [25/35] 行政管理 / 问卷调查 / 问卷模板库 +19:13:07 无导出入口, skip +19:13:21 [26/35] 电子合同 / 合同签署 / 合同档案库 +19:13:46 无导出入口, skip +19:13:53 [27/35] 电子合同 / 设置 / 合同模板 +19:14:18 无导出入口, skip +19:14:29 [28/35] 人事仪表盘 / 常规 / 我的仪表盘 +19:14:54 无导出入口, skip +19:15:09 [29/35] 人事仪表盘 / 常规 / 报告老板 +19:15:33 无导出入口, skip +19:15:40 [30/35] 电子工资条 / 常规 / 统计分析 +19:16:05 无导出入口, skip +19:16:18 [31/35] 智能薪酬 / 薪酬数据 / 薪酬档案 +19:16:43 无导出入口, skip +19:16:55 [32/35] 智能薪酬 / 报表中心 / 薪酬报表 +19:17:19 无导出入口, skip +19:17:33 [33/35] 智能薪酬 / 报表中心 / 薪酬分析 +19:17:58 无导出入口, skip +19:18:10 [34/35] AI员工助手 / 数据统计 / 总体使用情况 +19:18:35 无导出入口, skip +19:18:46 [35/35] AI员工助手 / 数据统计 / 操作记录 +19:19:11 无导出入口, skip +19:19:24 === 阶段2: 收割任务中心 === +19:19:24 任务中心可下载任务: 0 +19:19:24 === DONE 阶段1=25 阶段2=0 累计文件=25 === diff --git a/db/dl_progress.log b/db/dl_progress.log new file mode 100644 index 0000000..1c0a65f --- /dev/null +++ b/db/dl_progress.log @@ -0,0 +1,79 @@ +17:19:41 === 报表/文档下载开始, 目标 35 页 === +17:19:41 [1/35] wait 6.3s -> 人事 / 员工管理 / 员工档案库 +17:19:52 PDF ok 1303KB -> downloads/02_人事/员工管理/02_员工档案库.pdf +17:19:54 Excel skip (弹窗需选参数, 按钮=导出) +17:19:54 [2/35] wait 12.7s -> 人事 / 员工管理 / 统计分析 +17:20:11 PDF ok 1517KB -> downloads/02_人事/员工管理/03_统计分析.pdf +17:20:11 [3/35] wait 9.5s -> 人事 / 员工管理 / 人事报表 +17:20:25 PDF ok 1386KB -> downloads/02_人事/员工管理/04_人事报表.pdf +17:20:25 [4/35] wait 6.3s -> 组织 / 岗位管理 / 组织报表 +17:20:35 PDF ok 1132KB -> downloads/03_组织/岗位管理/05_组织报表.pdf +17:20:35 [5/35] wait 8.8s -> 招聘 / 统计分析 / 招聘报表 +17:20:50 PDF ok 1386KB -> downloads/04_招聘/统计分析/01_招聘报表.pdf +17:20:50 [6/35] wait 6.0s -> 招聘 / 统计分析 / 招聘分析 +17:21:02 PDF ok 1702KB -> downloads/04_招聘/统计分析/02_招聘分析.pdf +17:21:02 [7/35] wait 13.8s -> 招聘 / 设置 / 模板设置 +17:21:20 PDF ok 1346KB -> downloads/04_招聘/设置/04_模板设置.pdf +17:21:20 [8/35] wait 5.5s -> 考勤假期 / 考勤统计 / 每日考勤 +17:21:30 PDF ok 1212KB -> downloads/05_考勤假期/考勤统计/01_每日考勤.pdf +17:21:32 Excel skip (弹窗需选参数, 按钮=导出) +17:21:32 [9/35] wait 12.8s -> 考勤假期 / 考勤统计 / 月考勤表 +17:21:50 PDF ok 1352KB -> downloads/05_考勤假期/考勤统计/02_月考勤表.pdf +17:21:50 [10/35] wait 9.6s -> 考勤假期 / 考勤统计 / 明细记录 +17:22:04 PDF ok 1302KB -> downloads/05_考勤假期/考勤统计/03_明细记录.pdf +17:22:06 Excel skip (弹窗需选参数, 按钮=导出) +17:22:06 [11/35] wait 9.2s -> 考勤假期 / 考勤统计 / 考勤报表 +17:22:21 PDF ok 1208KB -> downloads/05_考勤假期/考勤统计/04_考勤报表.pdf +17:22:21 [12/35] wait 5.7s -> 考勤假期 / 考勤统计 / 字段管理 +17:22:31 PDF ok 1249KB -> downloads/05_考勤假期/考勤统计/05_字段管理.pdf +17:22:31 [13/35] wait 7.0s -> 考勤假期 / 考勤统计 / 考勤确认 +17:22:42 PDF ok 1128KB -> downloads/05_考勤假期/考勤统计/06_考勤确认.pdf +17:22:42 [14/35] wait 6.7s -> 薪酬 / 薪酬管理 / 薪酬报表 +17:22:53 PDF ok 1360KB -> downloads/06_薪酬/薪酬管理/04_薪酬报表.pdf +17:22:53 [15/35] wait 11.6s -> 薪酬 / 薪酬管理 / 薪酬分析 +17:23:10 PDF ok 1573KB -> downloads/06_薪酬/薪酬管理/05_薪酬分析.pdf +17:23:12 Excel skip (弹窗需选参数, 按钮=批量导出) +17:23:12 [16/35] wait 5.1s -> 审批 / 常规 / 审批模板库 +17:23:21 PDF ok 1339KB -> downloads/07_审批/常规/02_审批模板库.pdf +17:23:21 [17/35] wait 14.9s -> 绩效 / 考核结果 / 员工绩效档案 +17:23:40 PDF ok 1324KB -> downloads/09_绩效/考核结果/01_员工绩效档案.pdf +17:23:43 Excel skip (弹窗需选参数, 按钮=导出) +17:23:43 [18/35] wait 6.5s -> 绩效 / 考核设置 / 考核模板库 +17:23:53 PDF ok 1581KB -> downloads/09_绩效/考核设置/02_考核模板库.pdf +17:23:53 [19/35] wait 13.9s -> 社保公积金 / 常规 / 参保档案 +17:24:12 PDF ok 1183KB -> downloads/10_社保公积金/常规/03_参保档案.pdf +17:24:14 Excel skip (弹窗需选参数, 按钮=导出) +17:24:14 [20/35] wait 11.1s -> 社保公积金 / 常规 / 社保报表 +17:24:30 PDF ok 1076KB -> downloads/10_社保公积金/常规/04_社保报表.pdf +17:24:30 [21/35] wait 13.0s -> 社保公积金 / 常规 / 社保分析 +17:24:47 PDF ok 1056KB -> downloads/10_社保公积金/常规/05_社保分析.pdf +17:24:47 [22/35] wait 6.3s -> 行政管理 / 常规 / 企业公告 +17:24:59 PDF ok 1110KB -> downloads/11_行政管理/常规/01_企业公告.pdf +17:24:59 [23/35] wait 6.6s -> 行政管理 / 常规 / 企业制度 +17:25:10 PDF ok 1114KB -> downloads/11_行政管理/常规/02_企业制度.pdf +17:25:10 [24/35] wait 5.3s -> 行政管理 / 常规 / 开具证明 +17:25:20 PDF ok 1120KB -> downloads/11_行政管理/常规/04_开具证明.pdf +17:25:20 [25/35] wait 7.2s -> 行政管理 / 问卷调查 / 问卷模板库 +17:25:31 PDF ok 1402KB -> downloads/11_行政管理/问卷调查/02_问卷模板库.pdf +17:25:31 [26/35] wait 9.5s -> 电子合同 / 合同签署 / 合同档案库 +17:25:45 PDF ok 1114KB -> downloads/12_电子合同/合同签署/04_合同档案库.pdf +17:25:45 [27/35] wait 13.0s -> 电子合同 / 设置 / 合同模板 +17:26:03 PDF ok 1191KB -> downloads/12_电子合同/设置/02_合同模板.pdf +17:26:03 [28/35] wait 12.2s -> 人事仪表盘 / 常规 / 我的仪表盘 +17:26:19 PDF ok 1243KB -> downloads/16_人事仪表盘/常规/01_我的仪表盘.pdf +17:26:21 Excel skip (弹窗需选参数, 按钮=下载) +17:26:21 [29/35] wait 5.8s -> 人事仪表盘 / 常规 / 报告老板 +17:26:32 PDF ok 1904KB -> downloads/16_人事仪表盘/常规/02_报告老板.pdf +17:26:34 Excel skip (弹窗需选参数, 按钮=下载) +17:26:34 [30/35] wait 14.4s -> 电子工资条 / 常规 / 统计分析 +17:26:53 PDF ok 1140KB -> downloads/20_电子工资条/常规/04_统计分析.pdf +17:26:53 [31/35] wait 10.6s -> 智能薪酬 / 报表中心 / 薪酬报表 +17:27:08 PDF ok 1197KB -> downloads/21_智能薪酬/报表中心/01_薪酬报表.pdf +17:27:08 [32/35] wait 10.3s -> 智能薪酬 / 报表中心 / 薪酬分析 +17:27:23 PDF ok 1151KB -> downloads/21_智能薪酬/报表中心/02_薪酬分析.pdf +17:27:23 [33/35] wait 12.0s -> 智能薪酬 / 薪酬数据 / 薪酬档案 +17:27:40 PDF ok 1293KB -> downloads/21_智能薪酬/薪酬数据/01_薪酬档案.pdf +17:27:42 Excel skip (弹窗需选参数, 按钮=导出) +17:27:42 [34/35] wait 9.9s -> AI员工助手 / 数据统计 / 总体使用情况 +17:27:57 PDF ok 1175KB -> downloads/23_AI员工助手/数据统计/01_总体使用情况.pdf +17:27:57 [35/35] wait 8.8s -> AI员工助手 / 数据统计 / 操作记录 diff --git a/db/dl_report.out b/db/dl_report.out new file mode 100644 index 0000000..56f02dd --- /dev/null +++ b/db/dl_report.out @@ -0,0 +1,49 @@ +22:57:18 === 招聘报表导出: 触发阶段 === +22:57:18 报表列表区可下载报表: 10 +22:57:19 触发报表#1 确认=True +22:57:24 触发报表#2 确认=True +22:57:29 触发报表#3 确认=True +22:57:34 触发报表#4 确认=True +22:57:38 触发报表#5 确认=True +22:57:43 触发报表#6 确认=True +22:57:47 触发报表#7 确认=True +22:57:52 触发报表#8 确认=True +22:57:59 触发报表#9 确认=True +22:58:05 触发报表#10 确认=True +22:58:07 === 已触发 10 个报表, 等待服务端生成 === +22:58:32 === 招聘报表导出: 收割阶段 === +22:58:32 任务中心任务: 16 +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:32 跳过(非招聘报表): +22:58:52 任务中心任务: 16 +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 跳过(非招聘报表): +22:58:52 === REPORT DONE 触发=10 收割=0 === diff --git a/db/dl_resume.out b/db/dl_resume.out new file mode 100644 index 0000000..320196b --- /dev/null +++ b/db/dl_resume.out @@ -0,0 +1,79 @@ +19:50:55 === RESUME total=35 done=2 todo=34 === +19:50:55 [1/34] 人事 / 员工管理 / 员工档案库 +19:51:21 无导出入口, skip +19:51:27 [2/34] 人事 / 员工管理 / 统计分析 +19:51:52 无导出入口, skip +19:52:11 [3/34] 组织 / 岗位管理 / 组织报表 +19:52:36 无导出入口, skip +19:52:42 [4/34] 招聘 / 统计分析 / 招聘报表 +19:52:55 发现 图标下载=1 文字入口=0 +19:53:26 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:53:38 [5/34] 招聘 / 统计分析 / 招聘分析 +19:53:51 发现 图标下载=1 文字入口=0 +19:54:22 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:54:35 [6/34] 招聘 / 设置 / 模板设置 +19:54:48 发现 图标下载=1 文字入口=0 +19:55:19 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:55:35 [7/34] 考勤假期 / 考勤统计 / 每日考勤 +19:55:38 发现 图标下载=1 文字入口=0 +19:56:09 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:56:48 [8/34] 考勤假期 / 考勤统计 / 月考勤表 +19:57:13 无导出入口, skip +19:57:37 [9/34] 考勤假期 / 考勤统计 / 明细记录 +19:57:40 发现 图标下载=1 文字入口=0 +19:58:11 [icon-download] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +19:58:39 [10/34] 考勤假期 / 考勤统计 / 考勤报表 +19:59:04 无导出入口, skip +19:59:14 [11/34] 考勤假期 / 考勤统计 / 字段管理 +19:59:39 无导出入口, skip +19:59:44 [12/34] 考勤假期 / 考勤统计 / 考勤确认 +20:00:09 无导出入口, skip +20:00:16 [13/34] 薪酬 / 薪酬管理 / 薪酬报表 +20:00:41 无导出入口, skip +20:00:46 [14/34] 薪酬 / 薪酬管理 / 薪酬分析 +20:00:49 发现 图标下载=0 文字入口=1 +20:01:20 [btn=批量导出] 未产出直链(需必选参数/异步未完成, 待任务中心收割) +20:01:40 [15/34] 审批 / 常规 / 审批模板库 +20:02:05 无导出入口, skip +20:02:14 [16/34] 绩效 / 考核结果 / 员工绩效档案 +20:02:39 无导出入口, skip +20:02:44 [17/34] 绩效 / 考核设置 / 考核模板库 +20:03:09 无导出入口, skip +20:03:49 [18/34] 社保公积金 / 常规 / 参保档案 +20:04:14 无导出入口, skip +20:04:20 [19/34] 社保公积金 / 常规 / 社保报表 +20:04:45 无导出入口, skip +20:04:55 [20/34] 社保公积金 / 常规 / 社保分析 +20:05:20 无导出入口, skip +20:05:24 [21/34] 行政管理 / 常规 / 企业公告 +20:05:49 无导出入口, skip +20:05:56 [22/34] 行政管理 / 常规 / 企业制度 +20:06:21 无导出入口, skip +20:06:25 [23/34] 行政管理 / 常规 / 开具证明 +20:06:50 无导出入口, skip +20:07:05 [24/34] 行政管理 / 问卷调查 / 问卷模板库 +20:07:30 无导出入口, skip +20:07:56 [25/34] 电子合同 / 合同签署 / 合同档案库 +20:08:21 无导出入口, skip +20:08:38 [26/34] 电子合同 / 设置 / 合同模板 +20:09:03 无导出入口, skip +20:09:09 [27/34] 人事仪表盘 / 常规 / 我的仪表盘 +20:09:34 无导出入口, skip +20:09:41 [28/34] 人事仪表盘 / 常规 / 报告老板 +20:10:24 无导出入口, skip +20:11:02 [29/34] 电子工资条 / 常规 / 统计分析 +20:11:27 无导出入口, skip +20:11:44 [30/34] 智能薪酬 / 薪酬数据 / 薪酬档案 +20:12:10 无导出入口, skip +20:12:18 [31/34] 智能薪酬 / 报表中心 / 薪酬报表 +20:12:43 无导出入口, skip +20:12:59 [32/34] 智能薪酬 / 报表中心 / 薪酬分析 +20:13:24 无导出入口, skip +20:13:28 [33/34] AI员工助手 / 数据统计 / 总体使用情况 +20:13:54 无导出入口, skip +20:14:00 [34/34] AI员工助手 / 数据统计 / 操作记录 +20:14:26 无导出入口, skip +20:14:31 === 阶段2: 收割任务中心 === +20:14:31 任务中心可下载任务: 2 +20:14:35 === stage2_taskcenter=1 === +20:14:35 === RESUME DONE files=1 === diff --git a/db/dl_run.log b/db/dl_run.log new file mode 100644 index 0000000..1c0a65f --- /dev/null +++ b/db/dl_run.log @@ -0,0 +1,79 @@ +17:19:41 === 报表/文档下载开始, 目标 35 页 === +17:19:41 [1/35] wait 6.3s -> 人事 / 员工管理 / 员工档案库 +17:19:52 PDF ok 1303KB -> downloads/02_人事/员工管理/02_员工档案库.pdf +17:19:54 Excel skip (弹窗需选参数, 按钮=导出) +17:19:54 [2/35] wait 12.7s -> 人事 / 员工管理 / 统计分析 +17:20:11 PDF ok 1517KB -> downloads/02_人事/员工管理/03_统计分析.pdf +17:20:11 [3/35] wait 9.5s -> 人事 / 员工管理 / 人事报表 +17:20:25 PDF ok 1386KB -> downloads/02_人事/员工管理/04_人事报表.pdf +17:20:25 [4/35] wait 6.3s -> 组织 / 岗位管理 / 组织报表 +17:20:35 PDF ok 1132KB -> downloads/03_组织/岗位管理/05_组织报表.pdf +17:20:35 [5/35] wait 8.8s -> 招聘 / 统计分析 / 招聘报表 +17:20:50 PDF ok 1386KB -> downloads/04_招聘/统计分析/01_招聘报表.pdf +17:20:50 [6/35] wait 6.0s -> 招聘 / 统计分析 / 招聘分析 +17:21:02 PDF ok 1702KB -> downloads/04_招聘/统计分析/02_招聘分析.pdf +17:21:02 [7/35] wait 13.8s -> 招聘 / 设置 / 模板设置 +17:21:20 PDF ok 1346KB -> downloads/04_招聘/设置/04_模板设置.pdf +17:21:20 [8/35] wait 5.5s -> 考勤假期 / 考勤统计 / 每日考勤 +17:21:30 PDF ok 1212KB -> downloads/05_考勤假期/考勤统计/01_每日考勤.pdf +17:21:32 Excel skip (弹窗需选参数, 按钮=导出) +17:21:32 [9/35] wait 12.8s -> 考勤假期 / 考勤统计 / 月考勤表 +17:21:50 PDF ok 1352KB -> downloads/05_考勤假期/考勤统计/02_月考勤表.pdf +17:21:50 [10/35] wait 9.6s -> 考勤假期 / 考勤统计 / 明细记录 +17:22:04 PDF ok 1302KB -> downloads/05_考勤假期/考勤统计/03_明细记录.pdf +17:22:06 Excel skip (弹窗需选参数, 按钮=导出) +17:22:06 [11/35] wait 9.2s -> 考勤假期 / 考勤统计 / 考勤报表 +17:22:21 PDF ok 1208KB -> downloads/05_考勤假期/考勤统计/04_考勤报表.pdf +17:22:21 [12/35] wait 5.7s -> 考勤假期 / 考勤统计 / 字段管理 +17:22:31 PDF ok 1249KB -> downloads/05_考勤假期/考勤统计/05_字段管理.pdf +17:22:31 [13/35] wait 7.0s -> 考勤假期 / 考勤统计 / 考勤确认 +17:22:42 PDF ok 1128KB -> downloads/05_考勤假期/考勤统计/06_考勤确认.pdf +17:22:42 [14/35] wait 6.7s -> 薪酬 / 薪酬管理 / 薪酬报表 +17:22:53 PDF ok 1360KB -> downloads/06_薪酬/薪酬管理/04_薪酬报表.pdf +17:22:53 [15/35] wait 11.6s -> 薪酬 / 薪酬管理 / 薪酬分析 +17:23:10 PDF ok 1573KB -> downloads/06_薪酬/薪酬管理/05_薪酬分析.pdf +17:23:12 Excel skip (弹窗需选参数, 按钮=批量导出) +17:23:12 [16/35] wait 5.1s -> 审批 / 常规 / 审批模板库 +17:23:21 PDF ok 1339KB -> downloads/07_审批/常规/02_审批模板库.pdf +17:23:21 [17/35] wait 14.9s -> 绩效 / 考核结果 / 员工绩效档案 +17:23:40 PDF ok 1324KB -> downloads/09_绩效/考核结果/01_员工绩效档案.pdf +17:23:43 Excel skip (弹窗需选参数, 按钮=导出) +17:23:43 [18/35] wait 6.5s -> 绩效 / 考核设置 / 考核模板库 +17:23:53 PDF ok 1581KB -> downloads/09_绩效/考核设置/02_考核模板库.pdf +17:23:53 [19/35] wait 13.9s -> 社保公积金 / 常规 / 参保档案 +17:24:12 PDF ok 1183KB -> downloads/10_社保公积金/常规/03_参保档案.pdf +17:24:14 Excel skip (弹窗需选参数, 按钮=导出) +17:24:14 [20/35] wait 11.1s -> 社保公积金 / 常规 / 社保报表 +17:24:30 PDF ok 1076KB -> downloads/10_社保公积金/常规/04_社保报表.pdf +17:24:30 [21/35] wait 13.0s -> 社保公积金 / 常规 / 社保分析 +17:24:47 PDF ok 1056KB -> downloads/10_社保公积金/常规/05_社保分析.pdf +17:24:47 [22/35] wait 6.3s -> 行政管理 / 常规 / 企业公告 +17:24:59 PDF ok 1110KB -> downloads/11_行政管理/常规/01_企业公告.pdf +17:24:59 [23/35] wait 6.6s -> 行政管理 / 常规 / 企业制度 +17:25:10 PDF ok 1114KB -> downloads/11_行政管理/常规/02_企业制度.pdf +17:25:10 [24/35] wait 5.3s -> 行政管理 / 常规 / 开具证明 +17:25:20 PDF ok 1120KB -> downloads/11_行政管理/常规/04_开具证明.pdf +17:25:20 [25/35] wait 7.2s -> 行政管理 / 问卷调查 / 问卷模板库 +17:25:31 PDF ok 1402KB -> downloads/11_行政管理/问卷调查/02_问卷模板库.pdf +17:25:31 [26/35] wait 9.5s -> 电子合同 / 合同签署 / 合同档案库 +17:25:45 PDF ok 1114KB -> downloads/12_电子合同/合同签署/04_合同档案库.pdf +17:25:45 [27/35] wait 13.0s -> 电子合同 / 设置 / 合同模板 +17:26:03 PDF ok 1191KB -> downloads/12_电子合同/设置/02_合同模板.pdf +17:26:03 [28/35] wait 12.2s -> 人事仪表盘 / 常规 / 我的仪表盘 +17:26:19 PDF ok 1243KB -> downloads/16_人事仪表盘/常规/01_我的仪表盘.pdf +17:26:21 Excel skip (弹窗需选参数, 按钮=下载) +17:26:21 [29/35] wait 5.8s -> 人事仪表盘 / 常规 / 报告老板 +17:26:32 PDF ok 1904KB -> downloads/16_人事仪表盘/常规/02_报告老板.pdf +17:26:34 Excel skip (弹窗需选参数, 按钮=下载) +17:26:34 [30/35] wait 14.4s -> 电子工资条 / 常规 / 统计分析 +17:26:53 PDF ok 1140KB -> downloads/20_电子工资条/常规/04_统计分析.pdf +17:26:53 [31/35] wait 10.6s -> 智能薪酬 / 报表中心 / 薪酬报表 +17:27:08 PDF ok 1197KB -> downloads/21_智能薪酬/报表中心/01_薪酬报表.pdf +17:27:08 [32/35] wait 10.3s -> 智能薪酬 / 报表中心 / 薪酬分析 +17:27:23 PDF ok 1151KB -> downloads/21_智能薪酬/报表中心/02_薪酬分析.pdf +17:27:23 [33/35] wait 12.0s -> 智能薪酬 / 薪酬数据 / 薪酬档案 +17:27:40 PDF ok 1293KB -> downloads/21_智能薪酬/薪酬数据/01_薪酬档案.pdf +17:27:42 Excel skip (弹窗需选参数, 按钮=导出) +17:27:42 [34/35] wait 9.9s -> AI员工助手 / 数据统计 / 总体使用情况 +17:27:57 PDF ok 1175KB -> downloads/23_AI员工助手/数据统计/01_总体使用情况.pdf +17:27:57 [35/35] wait 8.8s -> AI员工助手 / 数据统计 / 操作记录 diff --git a/db/map_progress.log b/db/map_progress.log new file mode 100644 index 0000000..96fbe64 --- /dev/null +++ b/db/map_progress.log @@ -0,0 +1,49 @@ +16:23:46 [1/24] wait 7.5s -> 工作台 +16:23:56 工作台: loc=https://2haohr.com/desk groups=0 items=0 click=top-clicked +16:23:56 [2/24] wait 13.7s -> 人事 +16:24:13 人事: loc=https://2haohr.com/personnel/employee/roster/list groups=2 items=18 click=top-clicked +16:24:13 [3/24] wait 9.3s -> 组织 +16:24:26 组织: loc=https://2haohr.com/org/dept/manage/home groups=2 items=8 click=top-clicked +16:24:26 [4/24] wait 7.1s -> 招聘 +16:24:36 招聘: loc=https://2haohr.com/recruitment/overview groups=4 items=15 click=top-clicked +16:24:36 [5/24] wait 11.5s -> 考勤假期 +16:24:51 考勤假期: loc=https://2haohr.com/attendance/stat/daily groups=3 items=16 click=top-clicked +16:24:51 [6/24] wait 13.5s -> 薪酬 +16:25:08 薪酬: loc=https://2haohr.com/payroll/salary/monthly/list groups=1 items=9 click=top-clicked +16:25:08 [7/24] wait 10.2s -> 审批 +16:25:23 审批: loc=https://2haohr.com/approval/form/list groups=1 items=6 click=clicked +16:25:23 [8/24] wait 9.6s -> 培训学习 +16:25:37 培训学习: loc=https://2haohr.com/training/manage/team/list groups=4 items=15 click=clicked +16:25:37 [9/24] wait 9.6s -> 绩效 +16:25:52 绩效: loc=https://2haohr.com/performance-evaluation/desk groups=4 items=14 click=clicked +16:25:52 [10/24] wait 7.0s -> 社保公积金 +16:26:03 社保公积金: loc=https://2haohr.com/social-insurance/records/home groups=1 items=6 click=clicked +16:26:03 [11/24] wait 7.6s -> 行政管理 +16:26:16 行政管理: loc=https://2haohr.com/oa/notice/list groups=3 items=10 click=clicked +16:26:16 [12/24] wait 13.9s -> 电子合同 +16:26:34 电子合同: loc=https://2haohr.com/econtract/overview/ groups=3 items=8 click=clicked +16:26:34 [13/24] wait 13.5s -> 背景调查 +16:26:53 背景调查: loc=https://2haohr.com/hrService/background-investigation/entry groups=0 items=0 click=clicked +16:26:53 [14/24] wait 14.3s -> 人才测评 +16:27:12 人才测评: loc=https://2haohr.com/hrService/employee-assessment/ groups=0 items=0 click=clicked +16:27:12 [15/24] wait 9.5s -> 员工福利 +16:27:26 员工福利: loc=https://2haohr.com/welfare/online-shop/overview/ groups=1 items=4 click=clicked +16:27:26 [16/24] wait 5.1s -> 人事仪表盘 +16:27:36 人事仪表盘: loc=https://2haohr.com/dashboard/board/home groups=1 items=2 click=clicked +16:27:36 [17/24] wait 9.5s -> 第三方对接 +16:27:50 第三方对接: loc=https://2haohr.com/third-party-apps/wework/home groups=1 items=5 click=clicked +16:27:50 [18/24] wait 5.8s -> 培训商城 +16:28:01 培训商城: loc=https://2haohr.com/third-party-apps/wework/home groups=1 items=5 click=clicked +16:28:01 [19/24] wait 6.9s -> 短信发送 +16:28:12 短信发送: loc=https://2haohr.com/sms-manage/batch groups=1 items=2 click=clicked +16:28:12 [20/24] wait 10.5s -> 电子工资条 +16:28:28 电子工资条: loc=https://2haohr.com/payslip/home groups=1 items=5 click=clicked +16:28:28 [21/24] wait 11.5s -> 智能薪酬 +16:28:44 智能薪酬: loc=https://2haohr.com/salary/desk groups=5 items=15 click=clicked +16:28:44 [22/24] wait 13.1s -> 个税对接 +16:29:02 个税对接: loc=https://2haohr.com/tax/home groups=1 items=4 click=clicked +16:29:02 [23/24] wait 13.0s -> AI员工助手 +16:29:20 AI员工助手: loc=https://2haohr.com/ai-assistant/chat groups=2 items=5 click=clicked +16:29:20 [24/24] wait 14.9s -> 应用管理 +16:29:39 应用管理: loc=https://2haohr.com/application-manage/application/list groups=0 items=0 click=clicked +16:29:39 DONE all modules diff --git a/db/map_run.log b/db/map_run.log new file mode 100644 index 0000000..96fbe64 --- /dev/null +++ b/db/map_run.log @@ -0,0 +1,49 @@ +16:23:46 [1/24] wait 7.5s -> 工作台 +16:23:56 工作台: loc=https://2haohr.com/desk groups=0 items=0 click=top-clicked +16:23:56 [2/24] wait 13.7s -> 人事 +16:24:13 人事: loc=https://2haohr.com/personnel/employee/roster/list groups=2 items=18 click=top-clicked +16:24:13 [3/24] wait 9.3s -> 组织 +16:24:26 组织: loc=https://2haohr.com/org/dept/manage/home groups=2 items=8 click=top-clicked +16:24:26 [4/24] wait 7.1s -> 招聘 +16:24:36 招聘: loc=https://2haohr.com/recruitment/overview groups=4 items=15 click=top-clicked +16:24:36 [5/24] wait 11.5s -> 考勤假期 +16:24:51 考勤假期: loc=https://2haohr.com/attendance/stat/daily groups=3 items=16 click=top-clicked +16:24:51 [6/24] wait 13.5s -> 薪酬 +16:25:08 薪酬: loc=https://2haohr.com/payroll/salary/monthly/list groups=1 items=9 click=top-clicked +16:25:08 [7/24] wait 10.2s -> 审批 +16:25:23 审批: loc=https://2haohr.com/approval/form/list groups=1 items=6 click=clicked +16:25:23 [8/24] wait 9.6s -> 培训学习 +16:25:37 培训学习: loc=https://2haohr.com/training/manage/team/list groups=4 items=15 click=clicked +16:25:37 [9/24] wait 9.6s -> 绩效 +16:25:52 绩效: loc=https://2haohr.com/performance-evaluation/desk groups=4 items=14 click=clicked +16:25:52 [10/24] wait 7.0s -> 社保公积金 +16:26:03 社保公积金: loc=https://2haohr.com/social-insurance/records/home groups=1 items=6 click=clicked +16:26:03 [11/24] wait 7.6s -> 行政管理 +16:26:16 行政管理: loc=https://2haohr.com/oa/notice/list groups=3 items=10 click=clicked +16:26:16 [12/24] wait 13.9s -> 电子合同 +16:26:34 电子合同: loc=https://2haohr.com/econtract/overview/ groups=3 items=8 click=clicked +16:26:34 [13/24] wait 13.5s -> 背景调查 +16:26:53 背景调查: loc=https://2haohr.com/hrService/background-investigation/entry groups=0 items=0 click=clicked +16:26:53 [14/24] wait 14.3s -> 人才测评 +16:27:12 人才测评: loc=https://2haohr.com/hrService/employee-assessment/ groups=0 items=0 click=clicked +16:27:12 [15/24] wait 9.5s -> 员工福利 +16:27:26 员工福利: loc=https://2haohr.com/welfare/online-shop/overview/ groups=1 items=4 click=clicked +16:27:26 [16/24] wait 5.1s -> 人事仪表盘 +16:27:36 人事仪表盘: loc=https://2haohr.com/dashboard/board/home groups=1 items=2 click=clicked +16:27:36 [17/24] wait 9.5s -> 第三方对接 +16:27:50 第三方对接: loc=https://2haohr.com/third-party-apps/wework/home groups=1 items=5 click=clicked +16:27:50 [18/24] wait 5.8s -> 培训商城 +16:28:01 培训商城: loc=https://2haohr.com/third-party-apps/wework/home groups=1 items=5 click=clicked +16:28:01 [19/24] wait 6.9s -> 短信发送 +16:28:12 短信发送: loc=https://2haohr.com/sms-manage/batch groups=1 items=2 click=clicked +16:28:12 [20/24] wait 10.5s -> 电子工资条 +16:28:28 电子工资条: loc=https://2haohr.com/payslip/home groups=1 items=5 click=clicked +16:28:28 [21/24] wait 11.5s -> 智能薪酬 +16:28:44 智能薪酬: loc=https://2haohr.com/salary/desk groups=5 items=15 click=clicked +16:28:44 [22/24] wait 13.1s -> 个税对接 +16:29:02 个税对接: loc=https://2haohr.com/tax/home groups=1 items=4 click=clicked +16:29:02 [23/24] wait 13.0s -> AI员工助手 +16:29:20 AI员工助手: loc=https://2haohr.com/ai-assistant/chat groups=2 items=5 click=clicked +16:29:20 [24/24] wait 14.9s -> 应用管理 +16:29:39 应用管理: loc=https://2haohr.com/application-manage/application/list groups=0 items=0 click=clicked +16:29:39 DONE all modules diff --git a/db/menu_map.json b/db/menu_map.json new file mode 100644 index 0000000..5ec3979 --- /dev/null +++ b/db/menu_map.json @@ -0,0 +1,1064 @@ +{ + "工作台": { + "loc": "https://2haohr.com/desk", + "groups": [], + "in_more": 0, + "click": "top-clicked" + }, + "人事": { + "loc": "https://2haohr.com/personnel/employee/roster/list", + "groups": [ + { + "title": "员工管理", + "items": [ + { + "name": "员工花名册", + "href": "/personnel/employee/roster" + }, + { + "name": "员工档案库", + "href": "/personnel/employee/archive" + }, + { + "name": "统计分析", + "href": "/personnel/employee/statistics" + }, + { + "name": "人事报表", + "href": "/personnel/employee/personnel-report" + }, + { + "name": "万能人事表格", + "href": "/personnel/employee/personnel-form" + }, + { + "name": "人事动态", + "href": "/personnel/employee/dynamic" + } + ] + }, + { + "title": "员工关系", + "items": [ + { + "name": "入职管理", + "href": "/personnel/relation/enrollment" + }, + { + "name": "转正管理", + "href": "/personnel/relation/probation" + }, + { + "name": "离职管理", + "href": "/personnel/relation/departure" + }, + { + "name": "人事异动", + "href": "/personnel/relation/unusual-action" + }, + { + "name": "关怀通知", + "href": "/personnel/relation/care" + }, + { + "name": "合同管理", + "href": "/personnel/relation/contract" + }, + { + "name": "沟通记录", + "href": "/personnel/relation/talk" + }, + { + "name": "任职记录", + "href": "/personnel/relation/office" + }, + { + "name": "培训经历", + "href": "/personnel/relation/train" + }, + { + "name": "奖惩记录", + "href": "/personnel/relation/award" + }, + { + "name": "考察期管理", + "href": "/personnel/relation/inspect" + }, + { + "name": "实习生管理", + "href": "/personnel/relation/internship" + } + ] + } + ], + "in_more": 0, + "click": "top-clicked" + }, + "组织": { + "loc": "https://2haohr.com/org/dept/manage/home", + "groups": [ + { + "title": "组织架构", + "items": [ + { + "name": "组织管理", + "href": "/org/dept/manage/home" + }, + { + "name": "架构图", + "href": "/org/dept/architecture" + }, + { + "name": "工作地点", + "href": "/org/dept/work-place" + } + ] + }, + { + "title": "岗位管理", + "items": [ + { + "name": "岗位管理", + "href": "/org/job/job-management" + }, + { + "name": "职务管理", + "href": "/org/job-system/title" + }, + { + "name": "员工标签", + "href": "/org/tag/emp-tags" + }, + { + "name": "职级管理", + "href": "/org/rank" + }, + { + "name": "组织报表", + "href": "/org/org-forms" + } + ] + } + ], + "in_more": 0, + "click": "top-clicked" + }, + "招聘": { + "loc": "https://2haohr.com/recruitment/overview", + "groups": [ + { + "title": "", + "items": [ + { + "name": "概览", + "href": "/recruitment/overview" + } + ] + }, + { + "title": "候选人", + "items": [ + { + "name": "招聘中", + "href": "/recruitment/candidate/recruiting/list" + }, + { + "name": "已入职", + "href": "/recruitment/candidate/employed/list" + }, + { + "name": "已淘汰", + "href": "/recruitment/candidate/eliminated/list" + }, + { + "name": "招聘职位", + "href": "/recruitment/jobs" + }, + { + "name": "招聘门户", + "href": "/recruitment/wechat" + }, + { + "name": "面试日程", + "href": "/recruitment/interviews" + }, + { + "name": "人才库", + "href": "/recruitment/talent" + } + ] + }, + { + "title": "统计分析", + "items": [ + { + "name": "招聘报表", + "href": "/recruitment/stats/report" + }, + { + "name": "招聘分析", + "href": "/recruitment/stats/analysis" + } + ] + }, + { + "title": "设置", + "items": [ + { + "name": "招聘团队", + "href": "/recruitment/settings/team" + }, + { + "name": "招聘工具", + "href": "/recruitment/settings/tools" + }, + { + "name": "招聘渠道", + "href": "/recruitment/settings/channels" + }, + { + "name": "模板设置", + "href": "/recruitment/settings/templates" + }, + { + "name": "更多设置", + "href": "/recruitment/settings/others" + } + ] + } + ], + "in_more": 0, + "click": "top-clicked" + }, + "考勤假期": { + "loc": "https://2haohr.com/attendance/stat/daily", + "groups": [ + { + "title": "考勤统计", + "items": [ + { + "name": "每日考勤", + "href": "/attendance/stat/daily" + }, + { + "name": "月考勤表", + "href": "/attendance/stat/monthly" + }, + { + "name": "明细记录", + "href": "/attendance/stat/records" + }, + { + "name": "考勤报表", + "href": "/attendance/stat/report" + }, + { + "name": "字段管理", + "href": "/attendance/stat/field-manage" + }, + { + "name": "考勤确认", + "href": "/attendance/confirmation" + } + ] + }, + { + "title": "考勤管理", + "items": [ + { + "name": "考勤分组", + "href": "/attendance/work/schedule" + }, + { + "name": "排班管理", + "href": "/attendance/work/roster" + }, + { + "name": "考勤规则", + "href": "/attendance/work/rules" + }, + { + "name": "打卡方式", + "href": "/attendance/work/mode" + }, + { + "name": "考勤设置", + "href": "/attendance/work/settings" + } + ] + }, + { + "title": "假期管理", + "items": [ + { + "name": "休假一览", + "href": "/attendance/holiday/leaveRecords" + }, + { + "name": "手动调整", + "href": "/attendance/holiday/adjust" + }, + { + "name": "假期余额", + "href": "/attendance/holiday/balance" + }, + { + "name": "假期方案", + "href": "/attendance/holiday/rules" + }, + { + "name": "假期设置", + "href": "/attendance/holiday/settings" + } + ] + } + ], + "in_more": 0, + "click": "top-clicked" + }, + "薪酬": { + "loc": "https://2haohr.com/payroll/salary/monthly/list", + "groups": [ + { + "title": "薪酬管理", + "items": [ + { + "name": "月工资表", + "href": "/payroll/salary/monthly" + }, + { + "name": "工资发放", + "href": "/payroll/salary/payoff" + }, + { + "name": "员工薪资", + "href": "/payroll/salary/profiles" + }, + { + "name": "薪酬报表", + "href": "/payroll/salary/report" + }, + { + "name": "薪酬分析", + "href": "/payroll/salary/statistics" + }, + { + "name": "计薪规则", + "href": "/payroll/salary/rule" + }, + { + "name": "薪酬设置", + "href": "/payroll/salary/settings" + }, + { + "name": "年终奖计算", + "href": "/payroll/salary/bonus" + }, + { + "name": "发送工资条", + "href": "https://2haohr.com/payslip/home" + } + ] + } + ], + "in_more": 0, + "click": "top-clicked" + }, + "审批": { + "loc": "https://2haohr.com/approval/form/list", + "groups": [ + { + "title": "", + "items": [ + { + "name": "审批表单", + "href": "/approval/form/list" + }, + { + "name": "审批模板库", + "href": "/approval/library/list" + }, + { + "name": "审批代理", + "href": "/approval/agent/list" + }, + { + "name": "审批记录", + "href": "/approval/record/list" + }, + { + "name": "审批交接", + "href": "/approval/abnormal" + }, + { + "name": "操作记录", + "href": "/approval/log" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "培训学习": { + "loc": "https://2haohr.com/training/manage/team/list", + "groups": [ + { + "title": "线下培训", + "items": [ + { + "name": "培训计划", + "href": "/training/manage/team" + }, + { + "name": "开课日程", + "href": "/training/manage/schedule" + }, + { + "name": "培训记录", + "href": "/training/manage/record/list" + } + ] + }, + { + "title": "线上学习", + "items": [ + { + "name": "课程库", + "href": "/training/online/course/home" + }, + { + "name": "学习计划", + "href": "/training/online/learn-plan" + }, + { + "name": "在线直播", + "href": "/training/online/live-plan" + }, + { + "name": "学习进度", + "href": "/training/online/progress" + }, + { + "name": "学习记录", + "href": "/training/online/record" + } + ] + }, + { + "title": "考试练习", + "items": [ + { + "name": "题库管理", + "href": "/training/examine/question-bank" + }, + { + "name": "试卷管理", + "href": "/training/examine/paper" + }, + { + "name": "考试安排", + "href": "/training/examine/record" + }, + { + "name": "考试记录", + "href": "/training/examine/allExam" + } + ] + }, + { + "title": "培训设置", + "items": [ + { + "name": "讲师设置", + "href": "/training/manage/teacher" + }, + { + "name": "团队设置", + "href": "/training/option/team" + }, + { + "name": "自定义设置", + "href": "/training/option/custom" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "绩效": { + "loc": "https://2haohr.com/performance-evaluation/desk", + "groups": [ + { + "title": "", + "items": [ + { + "name": "概览", + "href": "/performance-evaluation/desk" + } + ] + }, + { + "title": "考核管理", + "items": [ + { + "name": "绩效考核", + "href": "/performance-evaluation/manage/plan" + }, + { + "name": "历史绩效考核", + "href": "/performance-evaluation/manage/history" + }, + { + "name": "试用期考核", + "href": "/performance-evaluation/manage/probation" + }, + { + "name": "晋升考核", + "href": "/performance-evaluation/manage/promotion" + }, + { + "name": "考核组管理", + "href": "/performance-evaluation/manage/group" + } + ] + }, + { + "title": "考核结果", + "items": [ + { + "name": "员工绩效档案", + "href": "/performance-evaluation/result/archive" + }, + { + "name": "绩效考核记录", + "href": "/performance-evaluation/result/assessment" + }, + { + "name": "绩效面谈记录", + "href": "/performance-evaluation/result/interview" + } + ] + }, + { + "title": "考核设置", + "items": [ + { + "name": "指标库", + "href": "/performance-evaluation/setting/indicators" + }, + { + "name": "考核模板库", + "href": "/performance-evaluation/setting/template" + }, + { + "name": "考核团队", + "href": "/performance-evaluation/setting/team" + }, + { + "name": "自定义设置", + "href": "/performance-evaluation/setting/custom" + }, + { + "name": "操作记录", + "href": "/performance-evaluation/log" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "社保公积金": { + "loc": "https://2haohr.com/social-insurance/records/home", + "groups": [ + { + "title": "", + "items": [ + { + "name": "参保账单", + "href": "/social-insurance/records" + }, + { + "name": "账单核对", + "href": "/social-insurance/bill" + }, + { + "name": "参保档案", + "href": "/social-insurance/archives" + }, + { + "name": "社保报表", + "href": "/social-insurance/reports" + }, + { + "name": "社保分析", + "href": "/social-insurance/statistics" + }, + { + "name": "参保规则", + "href": "/social-insurance/rules" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "行政管理": { + "loc": "https://2haohr.com/oa/notice/list", + "groups": [ + { + "title": "", + "items": [ + { + "name": "企业公告", + "href": "/oa/notice" + }, + { + "name": "企业制度", + "href": "/oa/regulation" + }, + { + "name": "新闻动态", + "href": "/oa/news" + }, + { + "name": "开具证明", + "href": "/oa/certificate" + } + ] + }, + { + "title": "会议室预定", + "items": [ + { + "name": "会议预定记录", + "href": "/oa/meeting/reservation" + }, + { + "name": "会议室管理", + "href": "/oa/meeting/meetingroom" + }, + { + "name": "会议操作记录", + "href": "/oa/meeting/record" + } + ] + }, + { + "title": "问卷调查", + "items": [ + { + "name": "问卷管理", + "href": "/oa/survey/list" + }, + { + "name": "问卷模板库", + "href": "/oa/survey/template" + }, + { + "name": "问卷操作记录", + "href": "/oa/survey/log" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "电子合同": { + "loc": "https://2haohr.com/econtract/overview/", + "groups": [ + { + "title": "", + "items": [ + { + "name": "概览", + "href": "/econtract/overview" + } + ] + }, + { + "title": "合同签署", + "items": [ + { + "name": "签署中", + "href": "/econtract/sign/signing" + }, + { + "name": "已签署", + "href": "/econtract/sign/signed" + }, + { + "name": "已作废", + "href": "/econtract/sign/cancelled" + }, + { + "name": "合同档案库", + "href": "/econtract/archive/home" + } + ] + }, + { + "title": "设置", + "items": [ + { + "name": "企业印章", + "href": "/econtract/settings/seal" + }, + { + "name": "合同模板", + "href": "/econtract/settings/category" + }, + { + "name": "合同包", + "href": "/econtract/settings/package" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "背景调查": { + "loc": "https://2haohr.com/hrService/background-investigation/entry", + "groups": [], + "in_more": 1, + "click": "clicked" + }, + "人才测评": { + "loc": "https://2haohr.com/hrService/employee-assessment/", + "groups": [], + "in_more": 1, + "click": "clicked" + }, + "员工福利": { + "loc": "https://2haohr.com/welfare/online-shop/overview/", + "groups": [ + { + "title": "", + "items": [ + { + "name": "员工福利概况", + "href": "/welfare/online-shop/overview" + }, + { + "name": "员工积分管理", + "href": "/welfare/online-shop/Integral" + }, + { + "name": "商品专区管理", + "href": "/welfare/online-shop/giftbag" + }, + { + "name": "平安好医生", + "href": "/welfare/pingan-doctor" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "人事仪表盘": { + "loc": "https://2haohr.com/dashboard/board/home", + "groups": [ + { + "title": "", + "items": [ + { + "name": "我的仪表盘", + "href": "/dashboard/board/home" + }, + { + "name": "报告老板", + "href": "/dashboard/board/diyReport" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "第三方对接": { + "loc": "https://2haohr.com/third-party-apps/wework/home", + "groups": [ + { + "title": "", + "items": [ + { + "name": "企业微信", + "href": "/third-party-apps/wework" + }, + { + "name": "钉钉", + "href": "/third-party-apps/dingtalk" + }, + { + "name": "飞书", + "href": "/third-party-apps/new-feishu" + }, + { + "name": "携程商旅", + "href": "/third-party-apps/ctrip" + }, + { + "name": "操作记录", + "href": "/third-party-apps/record" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "培训商城": { + "loc": "https://2haohr.com/third-party-apps/wework/home", + "groups": [ + { + "title": "", + "items": [ + { + "name": "企业微信", + "href": "/third-party-apps/wework" + }, + { + "name": "钉钉", + "href": "/third-party-apps/dingtalk" + }, + { + "name": "飞书", + "href": "/third-party-apps/new-feishu" + }, + { + "name": "携程商旅", + "href": "/third-party-apps/ctrip" + }, + { + "name": "操作记录", + "href": "/third-party-apps/record" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "短信发送": { + "loc": "https://2haohr.com/sms-manage/batch", + "groups": [ + { + "title": "", + "items": [ + { + "name": "短信发送", + "href": "/sms-manage/batch" + }, + { + "name": "发送记录", + "href": "/sms-manage/sms-send/list" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "电子工资条": { + "loc": "https://2haohr.com/payslip/home", + "groups": [ + { + "title": "", + "items": [ + { + "name": "发送工资条", + "href": "/payslip/home" + }, + { + "name": "发放记录", + "href": "/payslip/record" + }, + { + "name": "反馈记录", + "href": "/payslip/feedback" + }, + { + "name": "统计分析", + "href": "/payslip/statistic" + }, + { + "name": "操作记录", + "href": "/payslip/log" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "智能薪酬": { + "loc": "https://2haohr.com/salary/desk", + "groups": [ + { + "title": "", + "items": [ + { + "name": "概览", + "href": "/salary/desk" + }, + { + "name": "薪酬核算", + "href": "/salary/calculate" + } + ] + }, + { + "title": "数据采集", + "items": [ + { + "name": "员工考勤", + "href": "/salary/data-collection/attendance" + }, + { + "name": "业务提报", + "href": "/salary/data-collection/work-report" + } + ] + }, + { + "title": "薪酬数据", + "items": [ + { + "name": "薪酬档案", + "href": "/salary/data/archives" + }, + { + "name": "减除费用确认", + "href": "/salary/data/deduction-confirmation" + }, + { + "name": "税前扣除", + "href": "/salary/data/special-deductions" + }, + { + "name": "个税记录", + "href": "/salary/data/tax" + }, + { + "name": "成本明细", + "href": "/salary/data/cost" + } + ] + }, + { + "title": "报表中心", + "items": [ + { + "name": "薪酬报表", + "href": "/salary/report/statistics" + }, + { + "name": "薪酬分析", + "href": "/salary/report/analysis" + } + ] + }, + { + "title": "薪酬设置", + "items": [ + { + "name": "薪酬结构", + "href": "/salary/setting/structure" + }, + { + "name": "基础设置", + "href": "/salary/setting/company" + }, + { + "name": "成本设置", + "href": "/salary/setting/cost" + }, + { + "name": "操作记录", + "href": "/salary/setting/log" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "个税对接": { + "loc": "https://2haohr.com/tax/home", + "groups": [ + { + "title": "", + "items": [ + { + "name": "人员信息报送", + "href": "/tax/reporting" + }, + { + "name": "个税申报", + "href": "/tax/declaration" + }, + { + "name": "纳税单位管理", + "href": "/tax/message" + }, + { + "name": "操作记录", + "href": "/tax/log" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "AI员工助手": { + "loc": "https://2haohr.com/ai-assistant/chat", + "groups": [ + { + "title": "", + "items": [ + { + "name": "AI员工助手", + "href": "/ai-assistant/chat" + }, + { + "name": "知识库管理", + "href": "/ai-assistant/knowledge-management" + }, + { + "name": "员工助手设置", + "href": "/ai-assistant/assistant-settings" + } + ] + }, + { + "title": "数据统计", + "items": [ + { + "name": "总体使用情况", + "href": "/ai-assistant/data-stats/usage-situation" + }, + { + "name": "操作记录", + "href": "/ai-assistant/log" + } + ] + } + ], + "in_more": 1, + "click": "clicked" + }, + "应用管理": { + "loc": "https://2haohr.com/application-manage/application/list", + "groups": [], + "in_more": 1, + "click": "clicked" + } +} \ No newline at end of file diff --git a/db/research.db b/db/research.db new file mode 100644 index 0000000..f125207 Binary files /dev/null and b/db/research.db differ diff --git a/db/research.db.bak b/db/research.db.bak new file mode 100644 index 0000000..67a2509 Binary files /dev/null and b/db/research.db.bak differ diff --git a/db/rewalk_progress.log b/db/rewalk_progress.log new file mode 100644 index 0000000..d4045ae --- /dev/null +++ b/db/rewalk_progress.log @@ -0,0 +1,395 @@ +04:55:05 === rewalk start total=172 start=0 force=False === +04:55:05 [1/172] AI员工助手 / 常规 / AI员工助手 +04:55:31 OK AI员工助手 / 常规 / AI员工助手 [main] +04:55:31 [2/172] AI员工助手 / 常规 / 员工助手设置 +04:55:55 OK AI员工助手 / 常规 / 员工助手设置 [main] +04:55:55 [3/172] AI员工助手 / 常规 / 知识库管理 +04:56:20 OK AI员工助手 / 常规 / 知识库管理 [main] +04:56:20 [4/172] AI员工助手 / 数据统计 / 总体使用情况 +04:56:46 OK AI员工助手 / 数据统计 / 总体使用情况 [main] +04:56:46 [5/172] AI员工助手 / 数据统计 / 操作记录 +04:57:14 OK AI员工助手 / 数据统计 / 操作记录 [main] +04:57:14 [6/172] 个税对接 / 常规 / 个税申报 +04:57:39 OK 个税对接 / 常规 / 个税申报 [main] +04:57:39 [7/172] 个税对接 / 常规 / 人员信息报送 +04:58:06 OK 个税对接 / 常规 / 人员信息报送 [main] +04:58:06 [8/172] 个税对接 / 常规 / 操作记录 +04:58:34 OK 个税对接 / 常规 / 操作记录 [main] +04:58:34 [9/172] 个税对接 / 常规 / 纳税单位管理 +04:59:06 OK 个税对接 / 常规 / 纳税单位管理 [main] +04:59:06 [10/172] 人事 / 员工关系 / 人事异动 +04:59:40 OK 人事 / 员工关系 / 人事异动 [main, columns(columns)] +04:59:40 [11/172] 人事 / 员工关系 / 任职记录 +05:00:15 OK 人事 / 员工关系 / 任职记录 [main, filter(filter), columns(columns), add(新增)] +05:00:15 [12/172] 人事 / 员工关系 / 入职管理 +05:00:58 OK 人事 / 员工关系 / 入职管理 [main, filter(filter)] +05:00:58 [13/172] 人事 / 员工关系 / 关怀通知 +05:01:27 OK 人事 / 员工关系 / 关怀通知 [main, add(添加关怀通知)] +05:01:27 [14/172] 人事 / 员工关系 / 合同管理 +05:01:48 OK 人事 / 员工关系 / 合同管理 [main] +05:01:48 [15/172] 人事 / 员工关系 / 培训经历 +05:02:20 OK 人事 / 员工关系 / 培训经历 [main, filter(filter), columns(columns)] +05:02:20 [16/172] 人事 / 员工关系 / 奖惩记录 +05:02:50 OK 人事 / 员工关系 / 奖惩记录 [main, columns(columns), add(新增)] +05:02:50 [17/172] 人事 / 员工关系 / 实习生管理 +05:03:26 OK 人事 / 员工关系 / 实习生管理 [main, filter(filter), columns(columns), add(添加实习生)] +05:03:26 [18/172] 人事 / 员工关系 / 沟通记录 +05:04:05 OK 人事 / 员工关系 / 沟通记录 [main, filter(filter), add(添加沟通记录)] +05:04:05 [19/172] 人事 / 员工关系 / 离职管理 +05:04:51 main-capture FAIL 人事 / 员工关系 / 离职管理: timed out +05:04:51 [20/172] 人事 / 员工关系 / 考察期管理 +05:05:24 OK 人事 / 员工关系 / 考察期管理 [main, filter(filter), columns(columns), add(添加考察人员)] +05:05:24 [21/172] 人事 / 员工关系 / 转正管理 +05:07:40 deep columns err: timed out +05:07:50 OK 人事 / 员工关系 / 转正管理 [main, filter(filter)] +05:07:50 [22/172] 人事 / 员工管理 / 万能人事表格 +05:08:20 OK 人事 / 员工管理 / 万能人事表格 [main] +05:08:20 [23/172] 人事 / 员工管理 / 人事动态 +05:08:47 OK 人事 / 员工管理 / 人事动态 [main] +05:08:47 [24/172] 人事 / 员工管理 / 人事报表 +05:09:17 OK 人事 / 员工管理 / 人事报表 [main, add(添加报表)] +05:09:17 [25/172] 人事 / 员工管理 / 员工档案库 +05:10:10 OK 人事 / 员工管理 / 员工档案库 [main] +05:10:10 [26/172] 人事 / 员工管理 / 员工花名册 +05:10:56 OK 人事 / 员工管理 / 员工花名册 [main, filter(filter), columns(columns)] +05:10:56 [27/172] 人事 / 员工管理 / 统计分析 +05:11:21 OK 人事 / 员工管理 / 统计分析 [main] +05:11:21 [28/172] 人事仪表盘 / 常规 / 我的仪表盘 +05:11:45 OK 人事仪表盘 / 常规 / 我的仪表盘 [main] +05:11:45 [29/172] 人事仪表盘 / 常规 / 报告老板 +05:12:11 OK 人事仪表盘 / 常规 / 报告老板 [main] +05:12:11 [30/172] 人才测评 / 人才测评服务 +05:12:41 OK 人才测评 / 人才测评服务 [main] +05:12:41 [31/172] 员工福利 / 常规 / 员工福利概况 +05:13:10 OK 员工福利 / 常规 / 员工福利概况 [main] +05:13:10 [32/172] 员工福利 / 常规 / 员工积分管理 +05:13:40 OK 员工福利 / 常规 / 员工积分管理 [main] +05:13:40 [33/172] 员工福利 / 常规 / 商品专区管理 +05:14:16 OK 员工福利 / 常规 / 商品专区管理 [main] +05:14:16 [34/172] 员工福利 / 常规 / 平安好医生 +05:14:40 OK 员工福利 / 常规 / 平安好医生 [main] +05:14:40 [35/172] 培训商城 / 培训商城(外部课程采购) +05:14:52 OK 培训商城 / 培训商城(外部课程采购) [main] +05:14:52 [36/172] 培训学习 / 培训设置 / 团队设置 +05:15:18 OK 培训学习 / 培训设置 / 团队设置 [main] +05:15:18 [37/172] 培训学习 / 培训设置 / 自定义设置 +05:15:41 OK 培训学习 / 培训设置 / 自定义设置 [main] +05:15:41 [38/172] 培训学习 / 培训设置 / 讲师设置 +05:16:10 OK 培训学习 / 培训设置 / 讲师设置 [main, add(添加讲师)] +05:16:10 [39/172] 培训学习 / 线上学习 / 在线直播 +05:16:44 OK 培训学习 / 线上学习 / 在线直播 [main, add(新增直播计划), detail(查看详情)] +05:16:44 [40/172] 培训学习 / 线上学习 / 学习计划 +05:17:15 OK 培训学习 / 线上学习 / 学习计划 [main, add(新增学习计划)] +05:17:15 [41/172] 培训学习 / 线上学习 / 学习记录 +05:17:44 OK 培训学习 / 线上学习 / 学习记录 [main] +05:17:44 [42/172] 培训学习 / 线上学习 / 学习进度 +05:18:14 OK 培训学习 / 线上学习 / 学习进度 [main] +05:18:14 [43/172] 培训学习 / 线上学习 / 课程库 +05:20:49 deep detail err: timed out +05:20:49 OK 培训学习 / 线上学习 / 课程库 [main] +05:20:49 [44/172] 培训学习 / 线下培训 / 培训计划 +05:21:19 OK 培训学习 / 线下培训 / 培训计划 [main, add(新增培训计划)] +05:21:19 [45/172] 培训学习 / 线下培训 / 培训记录 +05:21:43 OK 培训学习 / 线下培训 / 培训记录 [main] +05:21:43 [46/172] 培训学习 / 线下培训 / 开课日程 +05:22:07 OK 培训学习 / 线下培训 / 开课日程 [main] +05:22:07 [47/172] 培训学习 / 考试练习 / 考试安排 +05:22:31 OK 培训学习 / 考试练习 / 考试安排 [main] +05:22:31 [48/172] 培训学习 / 考试练习 / 考试记录 +05:22:56 OK 培训学习 / 考试练习 / 考试记录 [main] +05:22:56 [49/172] 培训学习 / 考试练习 / 试卷管理 +05:23:27 OK 培训学习 / 考试练习 / 试卷管理 [main] +05:23:27 [50/172] 培训学习 / 考试练习 / 题库管理 +05:23:53 OK 培训学习 / 考试练习 / 题库管理 [main, add(新增试题)] +05:23:53 [51/172] 审批 / 常规 / 审批交接 +05:24:18 OK 审批 / 常规 / 审批交接 [main] +05:24:18 [52/172] 审批 / 常规 / 审批代理 +05:24:47 OK 审批 / 常规 / 审批代理 [main] +05:24:47 [53/172] 审批 / 常规 / 审批模板库 +05:25:17 OK 审批 / 常规 / 审批模板库 [main] +05:25:17 [54/172] 审批 / 常规 / 审批表单 +05:25:46 OK 审批 / 常规 / 审批表单 [main] +05:25:46 [55/172] 审批 / 常规 / 审批记录 +05:26:12 OK 审批 / 常规 / 审批记录 [main, filter(filter)] +05:26:12 [56/172] 审批 / 常规 / 操作记录 +05:26:35 OK 审批 / 常规 / 操作记录 [main] +05:26:35 [57/172] 工作台 / 工作台首页 +05:29:26 deep columns err: timed out +05:29:57 OK 工作台 / 工作台首页 [main] +05:29:57 [58/172] 应用管理 / 应用管理 +05:30:14 OK 应用管理 / 应用管理 [main] +05:30:14 [59/172] 招聘 / 候选人 / 人才库 +05:30:40 OK 招聘 / 候选人 / 人才库 [main, add(添加人才)] +05:30:40 [60/172] 招聘 / 候选人 / 已入职 +05:31:08 OK 招聘 / 候选人 / 已入职 [main] +05:31:08 [61/172] 招聘 / 候选人 / 已淘汰 +05:31:35 OK 招聘 / 候选人 / 已淘汰 [main] +05:31:35 [62/172] 招聘 / 候选人 / 招聘中 +05:32:04 OK 招聘 / 候选人 / 招聘中 [main] +05:32:04 [63/172] 招聘 / 候选人 / 招聘职位 +05:32:36 OK 招聘 / 候选人 / 招聘职位 [main] +05:32:36 [64/172] 招聘 / 候选人 / 招聘门户 +05:33:17 OK 招聘 / 候选人 / 招聘门户 [main, add(添加招聘门户), detail(编辑)] +05:33:17 [65/172] 招聘 / 候选人 / 面试日程 +05:33:58 OK 招聘 / 候选人 / 面试日程 [main] +05:33:58 [66/172] 招聘 / 常规 / 概览 +05:34:32 OK 招聘 / 常规 / 概览 [main] +05:34:32 [67/172] 招聘 / 统计分析 / 招聘分析 +05:34:55 OK 招聘 / 统计分析 / 招聘分析 [main] +05:34:55 [68/172] 招聘 / 统计分析 / 招聘报表 +05:35:22 OK 招聘 / 统计分析 / 招聘报表 [main, add(添加报表)] +05:35:22 [69/172] 招聘 / 设置 / 招聘团队 +05:35:47 OK 招聘 / 设置 / 招聘团队 [main] +05:35:47 [70/172] 招聘 / 设置 / 招聘工具 +05:36:13 OK 招聘 / 设置 / 招聘工具 [main] +05:36:13 [71/172] 招聘 / 设置 / 招聘渠道 +05:36:49 OK 招聘 / 设置 / 招聘渠道 [main] +05:36:49 [72/172] 招聘 / 设置 / 更多设置 +05:37:17 OK 招聘 / 设置 / 更多设置 [main] +05:37:17 [73/172] 招聘 / 设置 / 模板设置 +05:37:42 OK 招聘 / 设置 / 模板设置 [main] +05:37:42 [74/172] 智能薪酬 / 常规 / 概览 +05:38:16 OK 智能薪酬 / 常规 / 概览 [main] +05:38:16 [75/172] 智能薪酬 / 常规 / 薪酬核算 +05:38:53 OK 智能薪酬 / 常规 / 薪酬核算 [main] +05:38:53 [76/172] 智能薪酬 / 报表中心 / 薪酬分析 +05:39:17 OK 智能薪酬 / 报表中心 / 薪酬分析 [main] +05:39:17 [77/172] 智能薪酬 / 报表中心 / 薪酬报表 +05:39:44 OK 智能薪酬 / 报表中心 / 薪酬报表 [main] +05:39:44 [78/172] 智能薪酬 / 数据采集 / 业务提报 +05:40:31 OK 智能薪酬 / 数据采集 / 业务提报 [main, add(新增提报方案)] +05:40:31 [79/172] 智能薪酬 / 数据采集 / 员工考勤 +05:41:11 OK 智能薪酬 / 数据采集 / 员工考勤 [main] +05:41:11 [80/172] 智能薪酬 / 薪酬数据 / 个税记录 +05:41:45 OK 智能薪酬 / 薪酬数据 / 个税记录 [main] +05:41:45 [81/172] 智能薪酬 / 薪酬数据 / 减除费用确认 +05:42:19 OK 智能薪酬 / 薪酬数据 / 减除费用确认 [main] +05:42:19 [82/172] 智能薪酬 / 薪酬数据 / 成本明细 +05:43:00 OK 智能薪酬 / 薪酬数据 / 成本明细 [main, add(新增成本中心)] +05:43:00 [83/172] 智能薪酬 / 薪酬数据 / 税前扣除 +05:43:26 OK 智能薪酬 / 薪酬数据 / 税前扣除 [main] +05:43:26 [84/172] 智能薪酬 / 薪酬数据 / 薪酬档案 +05:43:56 OK 智能薪酬 / 薪酬数据 / 薪酬档案 [main] +05:43:56 [85/172] 智能薪酬 / 薪酬设置 / 基础设置 +05:44:26 OK 智能薪酬 / 薪酬设置 / 基础设置 [main] +05:44:26 [86/172] 智能薪酬 / 薪酬设置 / 成本设置 +05:44:57 OK 智能薪酬 / 薪酬设置 / 成本设置 [main, add(新增成本中心)] +05:44:57 [87/172] 智能薪酬 / 薪酬设置 / 操作记录 +05:45:29 OK 智能薪酬 / 薪酬设置 / 操作记录 [main] +05:45:29 [88/172] 智能薪酬 / 薪酬设置 / 薪酬结构 +05:45:57 OK 智能薪酬 / 薪酬设置 / 薪酬结构 [main] +05:45:57 [89/172] 电子合同 / 合同签署 / 合同档案库 +05:46:24 OK 电子合同 / 合同签署 / 合同档案库 [main] +05:46:24 [90/172] 电子合同 / 合同签署 / 已作废 +05:46:49 OK 电子合同 / 合同签署 / 已作废 [main] +05:46:49 [91/172] 电子合同 / 合同签署 / 已签署 +05:47:14 OK 电子合同 / 合同签署 / 已签署 [main] +05:47:14 [92/172] 电子合同 / 合同签署 / 签署中 +05:47:38 OK 电子合同 / 合同签署 / 签署中 [main] +05:47:38 [93/172] 电子合同 / 常规 / 概览 +05:48:20 OK 电子合同 / 常规 / 概览 [main] +05:48:20 [94/172] 电子合同 / 设置 / 企业印章 +05:48:52 OK 电子合同 / 设置 / 企业印章 [main] +05:48:52 [95/172] 电子合同 / 设置 / 合同包 +05:49:20 OK 电子合同 / 设置 / 合同包 [main, add(新增合同包)] +05:49:20 [96/172] 电子合同 / 设置 / 合同模板 +05:49:50 OK 电子合同 / 设置 / 合同模板 [main] +05:49:50 [97/172] 电子工资条 / 常规 / 反馈记录 +05:50:16 OK 电子工资条 / 常规 / 反馈记录 [main] +05:50:16 [98/172] 电子工资条 / 常规 / 发放记录 +05:50:40 OK 电子工资条 / 常规 / 发放记录 [main] +05:50:40 [99/172] 电子工资条 / 常规 / 发送工资条 +05:51:14 OK 电子工资条 / 常规 / 发送工资条 [main] +05:51:14 [100/172] 电子工资条 / 常规 / 操作记录 +05:51:39 OK 电子工资条 / 常规 / 操作记录 [main] +05:51:39 [101/172] 电子工资条 / 常规 / 统计分析 +05:52:03 OK 电子工资条 / 常规 / 统计分析 [main] +05:52:03 [102/172] 短信发送 / 常规 / 发送记录 +05:52:28 OK 短信发送 / 常规 / 发送记录 [main] +05:52:28 [103/172] 短信发送 / 常规 / 短信发送 +05:52:56 OK 短信发送 / 常规 / 短信发送 [main] +05:52:56 [104/172] 社保公积金 / 常规 / 参保档案 +05:53:20 OK 社保公积金 / 常规 / 参保档案 [main] +05:53:20 [105/172] 社保公积金 / 常规 / 参保规则 +05:53:56 OK 社保公积金 / 常规 / 参保规则 [main] +05:53:56 [106/172] 社保公积金 / 常规 / 参保账单 +05:54:24 OK 社保公积金 / 常规 / 参保账单 [main, add(添加账单)] +05:54:24 [107/172] 社保公积金 / 常规 / 社保分析 +05:54:48 OK 社保公积金 / 常规 / 社保分析 [main] +05:54:48 [108/172] 社保公积金 / 常规 / 社保报表 +05:55:17 OK 社保公积金 / 常规 / 社保报表 [main, add(添加报表)] +05:55:17 [109/172] 社保公积金 / 常规 / 账单核对 +05:55:41 OK 社保公积金 / 常规 / 账单核对 [main] +05:55:41 [110/172] 第三方对接 / 常规 / 企业微信 +05:56:05 OK 第三方对接 / 常规 / 企业微信 [main] +05:56:05 [111/172] 第三方对接 / 常规 / 携程商旅 +05:56:29 OK 第三方对接 / 常规 / 携程商旅 [main] +05:56:29 [112/172] 第三方对接 / 常规 / 操作记录 +05:56:56 OK 第三方对接 / 常规 / 操作记录 [main] +05:56:56 [113/172] 第三方对接 / 常规 / 钉钉 +05:57:21 OK 第三方对接 / 常规 / 钉钉 [main] +05:57:21 [114/172] 第三方对接 / 常规 / 飞书 +05:57:45 OK 第三方对接 / 常规 / 飞书 [main] +05:57:45 [115/172] 组织 / 岗位管理 / 员工标签 +05:58:13 OK 组织 / 岗位管理 / 员工标签 [main] +05:58:13 [116/172] 组织 / 岗位管理 / 岗位管理 +05:58:56 OK 组织 / 岗位管理 / 岗位管理 [main, filter(filter), add(新增岗位)] +05:58:56 [117/172] 组织 / 岗位管理 / 组织报表 +05:59:20 OK 组织 / 岗位管理 / 组织报表 [main] +05:59:20 [118/172] 组织 / 岗位管理 / 职务管理 +05:59:57 OK 组织 / 岗位管理 / 职务管理 [main] +05:59:57 [119/172] 组织 / 岗位管理 / 职级管理 +06:00:22 OK 组织 / 岗位管理 / 职级管理 [main] +06:00:22 [120/172] 组织 / 组织架构 / 工作地点 +06:00:47 OK 组织 / 组织架构 / 工作地点 [main] +06:00:47 [121/172] 组织 / 组织架构 / 架构图 +06:01:24 OK 组织 / 组织架构 / 架构图 [main] +06:01:24 [122/172] 组织 / 组织架构 / 组织管理 +06:02:08 OK 组织 / 组织架构 / 组织管理 [main, filter(filter), add(新增组织)] +06:02:08 [123/172] 绩效 / 常规 / 概览 +06:02:39 OK 绩效 / 常规 / 概览 [main] +06:02:39 [124/172] 绩效 / 考核管理 / 历史绩效考核 +06:03:18 OK 绩效 / 考核管理 / 历史绩效考核 [main] +06:03:18 [125/172] 绩效 / 考核管理 / 晋升考核 +06:03:51 OK 绩效 / 考核管理 / 晋升考核 [main, add(发起晋升考核)] +06:03:51 [126/172] 绩效 / 考核管理 / 绩效考核 +06:04:26 OK 绩效 / 考核管理 / 绩效考核 [main, add(新增考核计划)] +06:04:26 [127/172] 绩效 / 考核管理 / 考核组管理 +06:04:56 OK 绩效 / 考核管理 / 考核组管理 [main] +06:04:56 [128/172] 绩效 / 考核管理 / 试用期考核 +06:05:39 OK 绩效 / 考核管理 / 试用期考核 [main, add(发起试用期考核)] +06:05:39 [129/172] 绩效 / 考核结果 / 员工绩效档案 +06:06:09 OK 绩效 / 考核结果 / 员工绩效档案 [main] +06:06:09 [130/172] 绩效 / 考核结果 / 绩效考核记录 +06:06:34 OK 绩效 / 考核结果 / 绩效考核记录 [main] +06:06:34 [131/172] 绩效 / 考核结果 / 绩效面谈记录 +06:07:03 OK 绩效 / 考核结果 / 绩效面谈记录 [main] +06:07:03 [132/172] 绩效 / 考核设置 / 指标库 +06:07:29 OK 绩效 / 考核设置 / 指标库 [main, add(新增指标)] +06:07:29 [133/172] 绩效 / 考核设置 / 操作记录 +06:09:45 deep columns err: timed out +06:09:55 OK 绩效 / 考核设置 / 操作记录 [main] +06:09:55 [134/172] 绩效 / 考核设置 / 考核团队 +06:10:29 OK 绩效 / 考核设置 / 考核团队 [main, add(发起考核计划), detail(详情)] +06:10:29 [135/172] 绩效 / 考核设置 / 考核模板库 +06:11:06 OK 绩效 / 考核设置 / 考核模板库 [main, detail(编辑)] +06:11:06 [136/172] 绩效 / 考核设置 / 自定义设置 +06:11:30 OK 绩效 / 考核设置 / 自定义设置 [main] +06:11:30 [137/172] 考勤假期 / 假期管理 / 休假一览 +06:11:57 OK 考勤假期 / 假期管理 / 休假一览 [main, filter(filter)] +06:11:57 [138/172] 考勤假期 / 假期管理 / 假期余额 +06:12:24 OK 考勤假期 / 假期管理 / 假期余额 [main] +06:12:24 [139/172] 考勤假期 / 假期管理 / 假期方案 +06:12:58 OK 考勤假期 / 假期管理 / 假期方案 [main, filter(filter)] +06:12:58 [140/172] 考勤假期 / 假期管理 / 假期设置 +06:13:33 OK 考勤假期 / 假期管理 / 假期设置 [main] +06:13:33 [141/172] 考勤假期 / 假期管理 / 手动调整 +06:13:58 OK 考勤假期 / 假期管理 / 手动调整 [main] +06:13:58 [142/172] 考勤假期 / 考勤管理 / 打卡方式 +06:14:27 OK 考勤假期 / 考勤管理 / 打卡方式 [main] +06:14:27 [143/172] 考勤假期 / 考勤管理 / 排班管理 +06:14:52 OK 考勤假期 / 考勤管理 / 排班管理 [main] +06:14:52 [144/172] 考勤假期 / 考勤管理 / 考勤分组 +06:15:19 OK 考勤假期 / 考勤管理 / 考勤分组 [main] +06:15:19 [145/172] 考勤假期 / 考勤管理 / 考勤规则 +06:15:45 OK 考勤假期 / 考勤管理 / 考勤规则 [main] +06:15:45 [146/172] 考勤假期 / 考勤管理 / 考勤设置 +06:16:15 OK 考勤假期 / 考勤管理 / 考勤设置 [main] +06:16:15 [147/172] 考勤假期 / 考勤统计 / 字段管理 +06:16:50 OK 考勤假期 / 考勤统计 / 字段管理 [main, filter(filter)] +06:16:50 [148/172] 考勤假期 / 考勤统计 / 明细记录 +06:17:21 OK 考勤假期 / 考勤统计 / 明细记录 [main, filter(filter)] +06:17:21 [149/172] 考勤假期 / 考勤统计 / 月考勤表 +06:17:49 OK 考勤假期 / 考勤统计 / 月考勤表 [main, filter(filter)] +06:17:49 [150/172] 考勤假期 / 考勤统计 / 每日考勤 +06:18:21 OK 考勤假期 / 考勤统计 / 每日考勤 [main, filter(filter), columns(columns)] +06:18:21 [151/172] 考勤假期 / 考勤统计 / 考勤报表 +06:18:51 OK 考勤假期 / 考勤统计 / 考勤报表 [main, add(添加报表)] +06:18:51 [152/172] 考勤假期 / 考勤统计 / 考勤确认 +06:19:15 OK 考勤假期 / 考勤统计 / 考勤确认 [main] +06:19:15 [153/172] 背景调查 / 背景调查服务 +06:19:38 OK 背景调查 / 背景调查服务 [main] +06:19:38 [154/172] 薪酬 / 薪酬管理 / 发送工资条 +06:20:05 OK 薪酬 / 薪酬管理 / 发送工资条 [main] +06:20:05 [155/172] 薪酬 / 薪酬管理 / 员工薪资 +06:20:32 OK 薪酬 / 薪酬管理 / 员工薪资 [main] +06:20:32 [156/172] 薪酬 / 薪酬管理 / 工资发放 +06:20:56 OK 薪酬 / 薪酬管理 / 工资发放 [main] +06:20:56 [157/172] 薪酬 / 薪酬管理 / 年终奖计算 +06:21:20 OK 薪酬 / 薪酬管理 / 年终奖计算 [main] +06:21:20 [158/172] 薪酬 / 薪酬管理 / 月工资表 +06:21:44 OK 薪酬 / 薪酬管理 / 月工资表 [main] +06:21:44 [159/172] 薪酬 / 薪酬管理 / 薪酬分析 +06:22:08 OK 薪酬 / 薪酬管理 / 薪酬分析 [main] +06:22:08 [160/172] 薪酬 / 薪酬管理 / 薪酬报表 +06:22:32 OK 薪酬 / 薪酬管理 / 薪酬报表 [main] +06:22:32 [161/172] 薪酬 / 薪酬管理 / 薪酬设置 +06:23:00 OK 薪酬 / 薪酬管理 / 薪酬设置 [main] +06:23:00 [162/172] 薪酬 / 薪酬管理 / 计薪规则 +06:23:29 OK 薪酬 / 薪酬管理 / 计薪规则 [main] +06:23:29 [163/172] 行政管理 / 会议室预定 / 会议室管理 +06:23:59 OK 行政管理 / 会议室预定 / 会议室管理 [main] +06:23:59 [164/172] 行政管理 / 会议室预定 / 会议操作记录 +06:24:24 OK 行政管理 / 会议室预定 / 会议操作记录 [main] +06:24:24 [165/172] 行政管理 / 会议室预定 / 会议预定记录 +06:24:48 OK 行政管理 / 会议室预定 / 会议预定记录 [main] +06:24:48 [166/172] 行政管理 / 常规 / 企业公告 +06:25:15 OK 行政管理 / 常规 / 企业公告 [main, add(新建公告)] +06:25:15 [167/172] 行政管理 / 常规 / 企业制度 +06:25:44 OK 行政管理 / 常规 / 企业制度 [main, add(新建制度)] +06:25:44 [168/172] 行政管理 / 常规 / 开具证明 +06:28:05 deep add err: timed out +06:28:11 OK 行政管理 / 常规 / 开具证明 [main] +06:28:11 [169/172] 行政管理 / 常规 / 新闻动态 +06:28:38 OK 行政管理 / 常规 / 新闻动态 [main, add(新建新闻)] +06:28:38 [170/172] 行政管理 / 问卷调查 / 问卷操作记录 +06:29:05 OK 行政管理 / 问卷调查 / 问卷操作记录 [main] +06:29:05 [171/172] 行政管理 / 问卷调查 / 问卷模板库 +06:29:29 OK 行政管理 / 问卷调查 / 问卷模板库 [main] +06:29:29 [172/172] 行政管理 / 问卷调查 / 问卷管理 +06:29:52 OK 行政管理 / 问卷调查 / 问卷管理 [main] +06:29:52 === DONE done=171 skip=0 fail=1 total=172 === +06:35:56 OK 人事 / 员工关系 / 离职管理 [main, filter(filter), columns(columns)] +07:59:50 === recap_main mode=att total=18 === +07:59:50 [1/18] 人事异动 https://2haohr.com/personnel/relation/unusual-action +08:00:00 [2/18] 人事报表 https://2haohr.com/personnel/employee/personnel-report +08:00:09 [3/18] 任职记录 https://2haohr.com/personnel/relation/office +08:00:16 [4/18] 入职管理 https://2haohr.com/personnel/relation/enrollment +08:00:34 [5/18] 参保档案 https://2haohr.com/social-insurance/archives +08:00:43 [6/18] 合同管理 https://2haohr.com/personnel/relation/contract +08:00:51 [7/18] 员工花名册 https://2haohr.com/personnel/employee/roster +08:00:59 [8/18] 员工薪资 https://2haohr.com/payroll/salary/profiles +08:01:07 [9/18] 培训经历 https://2haohr.com/personnel/relation/train +08:01:14 [10/18] 奖惩记录 https://2haohr.com/personnel/relation/award +08:01:21 [11/18] 实习生管理 https://2haohr.com/personnel/relation/internship +08:01:39 [12/18] 已签署 https://2haohr.com/econtract/sign/signed +08:01:46 [13/18] 招聘报表 https://2haohr.com/recruitment/stats/report +08:01:54 [14/18] 明细记录 https://2haohr.com/attendance/stat/records +08:02:02 [15/18] 沟通记录 https://2haohr.com/personnel/relation/talk +08:02:09 [16/18] 离职管理 https://2haohr.com/personnel/relation/departure +08:02:17 [17/18] 薪酬档案 https://2haohr.com/salary/data/archives +08:02:25 [18/18] 转正管理 https://2haohr.com/personnel/relation/probation +08:02:32 === recap DONE ok=18 fail=0 total=18 === +08:04:35 === recap_main mode=人事::/personnel/employee/roster total=1 === +08:04:35 [1/1] 员工花名册 https://2haohr.com/personnel/employee/roster +08:04:43 === recap DONE ok=1 fail=0 total=1 === +08:05:20 === recap_main mode=att total=18 === +08:05:20 [1/18] 人事异动 https://2haohr.com/personnel/relation/unusual-action +08:20:57 [2/18] 人事报表 https://2haohr.com/personnel/employee/personnel-report +08:21:06 [3/18] 任职记录 https://2haohr.com/personnel/relation/office +08:21:14 [4/18] 入职管理 https://2haohr.com/personnel/relation/enrollment +08:21:33 [5/18] 参保档案 https://2haohr.com/social-insurance/archives +08:21:42 [6/18] 合同管理 https://2haohr.com/personnel/relation/contract +08:37:18 [7/18] 员工花名册 https://2haohr.com/personnel/employee/roster +08:37:26 [8/18] 员工薪资 https://2haohr.com/payroll/salary/profiles +08:37:37 [9/18] 培训经历 https://2haohr.com/personnel/relation/train +08:37:44 [10/18] 奖惩记录 https://2haohr.com/personnel/relation/award +08:37:53 [11/18] 实习生管理 https://2haohr.com/personnel/relation/internship +08:50:22 [12/18] 已签署 https://2haohr.com/econtract/sign/signed +08:50:28 [13/18] 招聘报表 https://2haohr.com/recruitment/stats/report +08:50:36 [14/18] 明细记录 https://2haohr.com/attendance/stat/records +08:50:44 [15/18] 沟通记录 https://2haohr.com/personnel/relation/talk +08:50:53 [16/18] 离职管理 https://2haohr.com/personnel/relation/departure +08:51:01 [17/18] 薪酬档案 https://2haohr.com/salary/data/archives +08:51:11 [18/18] 转正管理 https://2haohr.com/personnel/relation/probation +08:51:18 === recap DONE ok=18 fail=0 total=18 === diff --git a/db/rewalk_stdout.log b/db/rewalk_stdout.log new file mode 100644 index 0000000..8afd136 --- /dev/null +++ b/db/rewalk_stdout.log @@ -0,0 +1,548 @@ +04:55:05 === rewalk start total=172 start=0 force=False === +04:55:05 [1/172] AI员工助手 / 常规 / AI员工助手 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/常规/01_AI员工助手.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:55:31 OK AI员工助手 / 常规 / AI员工助手 [main] +04:55:31 [2/172] AI员工助手 / 常规 / 员工助手设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/常规/03_员工助手设置.jpg", "size": [2880, 3265], "tiles": 3, "docH": 1632, "winH": 756, "hdr": 48} +04:55:55 OK AI员工助手 / 常规 / 员工助手设置 [main] +04:55:55 [3/172] AI员工助手 / 常规 / 知识库管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/常规/02_知识库管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:56:20 OK AI员工助手 / 常规 / 知识库管理 [main] +04:56:20 [4/172] AI员工助手 / 数据统计 / 总体使用情况 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg", "size": [2880, 2954], "tiles": 3, "docH": 1477, "winH": 756, "hdr": 48} +04:56:46 OK AI员工助手 / 数据统计 / 总体使用情况 [main] +04:56:46 [5/172] AI员工助手 / 数据统计 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/23_AI员工助手/数据统计/02_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:57:14 OK AI员工助手 / 数据统计 / 操作记录 [main] +04:57:14 [6/172] 个税对接 / 常规 / 个税申报 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/02_个税申报.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:57:39 OK 个税对接 / 常规 / 个税申报 [main] +04:57:39 [7/172] 个税对接 / 常规 / 人员信息报送 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/01_人员信息报送.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:58:06 OK 个税对接 / 常规 / 人员信息报送 [main] +04:58:06 [8/172] 个税对接 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/04_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:58:34 OK 个税对接 / 常规 / 操作记录 [main] +04:58:34 [9/172] 个税对接 / 常规 / 纳税单位管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/22_个税对接/常规/03_纳税单位管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:59:06 OK 个税对接 / 常规 / 纳税单位管理 [main] +04:59:06 [10/172] 人事 / 员工关系 / 人事异动 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/04_人事异动.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +04:59:40 OK 人事 / 员工关系 / 人事异动 [main, columns(columns)] +04:59:40 [11/172] 人事 / 员工关系 / 任职记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/08_任职记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:00:15 OK 人事 / 员工关系 / 任职记录 [main, filter(filter), columns(columns), add(新增)] +05:00:15 [12/172] 人事 / 员工关系 / 入职管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/01_入职管理.jpg", "size": [2880, 1536], "tiles": 2, "docH": 768, "winH": 756, "hdr": 48} +05:00:58 OK 人事 / 员工关系 / 入职管理 [main, filter(filter)] +05:00:58 [13/172] 人事 / 员工关系 / 关怀通知 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/05_关怀通知.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/05_关怀通知__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:01:27 OK 人事 / 员工关系 / 关怀通知 [main, add(添加关怀通知)] +05:01:27 [14/172] 人事 / 员工关系 / 合同管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/06_合同管理.jpg", "size": [2880, 1664], "tiles": 2, "docH": 768, "winH": 756, "hdr": 48} +05:01:48 OK 人事 / 员工关系 / 合同管理 [main] +05:01:48 [15/172] 人事 / 员工关系 / 培训经历 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/09_培训经历.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:02:20 OK 人事 / 员工关系 / 培训经历 [main, filter(filter), columns(columns)] +05:02:20 [16/172] 人事 / 员工关系 / 奖惩记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/10_奖惩记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:02:50 OK 人事 / 员工关系 / 奖惩记录 [main, columns(columns), add(新增)] +05:02:50 [17/172] 人事 / 员工关系 / 实习生管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/12_实习生管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/12_实习生管理__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 108} +05:03:26 OK 人事 / 员工关系 / 实习生管理 [main, filter(filter), columns(columns), add(添加实习生)] +05:03:26 [18/172] 人事 / 员工关系 / 沟通记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/07_沟通记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/07_沟通记录__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:04:05 OK 人事 / 员工关系 / 沟通记录 [main, filter(filter), add(添加沟通记录)] +05:04:05 [19/172] 人事 / 员工关系 / 离职管理 +05:04:51 main-capture FAIL 人事 / 员工关系 / 离职管理: timed out +05:04:51 [20/172] 人事 / 员工关系 / 考察期管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/11_考察期管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/11_考察期管理__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:05:24 OK 人事 / 员工关系 / 考察期管理 [main, filter(filter), columns(columns), add(添加考察人员)] +05:05:24 [21/172] 人事 / 员工关系 / 转正管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工关系/02_转正管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:07:40 deep columns err: timed out +05:07:50 OK 人事 / 员工关系 / 转正管理 [main, filter(filter)] +05:07:50 [22/172] 人事 / 员工管理 / 万能人事表格 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/05_万能人事表格.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:08:20 OK 人事 / 员工管理 / 万能人事表格 [main] +05:08:20 [23/172] 人事 / 员工管理 / 人事动态 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/06_人事动态.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:08:47 OK 人事 / 员工管理 / 人事动态 [main] +05:08:47 [24/172] 人事 / 员工管理 / 人事报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/04_人事报表.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/04_人事报表__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:09:17 OK 人事 / 员工管理 / 人事报表 [main, add(添加报表)] +05:09:17 [25/172] 人事 / 员工管理 / 员工档案库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/02_员工档案库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:10:10 OK 人事 / 员工管理 / 员工档案库 [main] +05:10:10 [26/172] 人事 / 员工管理 / 员工花名册 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/01_员工花名册.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:10:56 OK 人事 / 员工管理 / 员工花名册 [main, filter(filter), columns(columns)] +05:10:56 [27/172] 人事 / 员工管理 / 统计分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/02_人事/员工管理/03_统计分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:11:21 OK 人事 / 员工管理 / 统计分析 [main] +05:11:21 [28/172] 人事仪表盘 / 常规 / 我的仪表盘 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:11:45 OK 人事仪表盘 / 常规 / 我的仪表盘 [main] +05:11:45 [29/172] 人事仪表盘 / 常规 / 报告老板 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/16_人事仪表盘/常规/02_报告老板.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:12:11 OK 人事仪表盘 / 常规 / 报告老板 [main] +05:12:11 [30/172] 人才测评 / 人才测评服务 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/14_人才测评/人才测评服务.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:12:41 OK 人才测评 / 人才测评服务 [main] +05:12:41 [31/172] 员工福利 / 常规 / 员工福利概况 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/01_员工福利概况.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:13:10 OK 员工福利 / 常规 / 员工福利概况 [main] +05:13:10 [32/172] 员工福利 / 常规 / 员工积分管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/02_员工积分管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:13:40 OK 员工福利 / 常规 / 员工积分管理 [main] +05:13:40 [33/172] 员工福利 / 常规 / 商品专区管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/03_商品专区管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:14:16 OK 员工福利 / 常规 / 商品专区管理 [main] +05:14:16 [34/172] 员工福利 / 常规 / 平安好医生 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/15_员工福利/常规/04_平安好医生.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:14:40 OK 员工福利 / 常规 / 平安好医生 [main] +05:14:40 [35/172] 培训商城 / 培训商城(外部课程采购) +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/18_培训商城/培训商城(外部课程采购).jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +05:14:52 OK 培训商城 / 培训商城(外部课程采购) [main] +05:14:52 [36/172] 培训学习 / 培训设置 / 团队设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/培训设置/02_团队设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:15:18 OK 培训学习 / 培训设置 / 团队设置 [main] +05:15:18 [37/172] 培训学习 / 培训设置 / 自定义设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/培训设置/03_自定义设置.jpg", "size": [2880, 1960], "tiles": 2, "docH": 980, "winH": 756, "hdr": 48} +05:15:41 OK 培训学习 / 培训设置 / 自定义设置 [main] +05:15:41 [38/172] 培训学习 / 培训设置 / 讲师设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/培训设置/01_讲师设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:16:10 OK 培训学习 / 培训设置 / 讲师设置 [main, add(添加讲师)] +05:16:10 [39/172] 培训学习 / 线上学习 / 在线直播 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/03_在线直播.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/03_在线直播__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 60} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/03_在线直播__detail.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:16:44 OK 培训学习 / 线上学习 / 在线直播 [main, add(新增直播计划), detail(查看详情)] +05:16:44 [40/172] 培训学习 / 线上学习 / 学习计划 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/02_学习计划.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/02_学习计划__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 60} +05:17:15 OK 培训学习 / 线上学习 / 学习计划 [main, add(新增学习计划)] +05:17:15 [41/172] 培训学习 / 线上学习 / 学习记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/05_学习记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:17:44 OK 培训学习 / 线上学习 / 学习记录 [main] +05:17:44 [42/172] 培训学习 / 线上学习 / 学习进度 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/04_学习进度.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:18:14 OK 培训学习 / 线上学习 / 学习进度 [main] +05:18:14 [43/172] 培训学习 / 线上学习 / 课程库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线上学习/01_课程库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:20:49 deep detail err: timed out +05:20:49 OK 培训学习 / 线上学习 / 课程库 [main] +05:20:49 [44/172] 培训学习 / 线下培训 / 培训计划 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线下培训/01_培训计划.jpg", "size": [2880, 1875], "tiles": 2, "docH": 938, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线下培训/01_培训计划__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 60} +05:21:19 OK 培训学习 / 线下培训 / 培训计划 [main, add(新增培训计划)] +05:21:19 [45/172] 培训学习 / 线下培训 / 培训记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线下培训/03_培训记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:21:43 OK 培训学习 / 线下培训 / 培训记录 [main] +05:21:43 [46/172] 培训学习 / 线下培训 / 开课日程 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/线下培训/02_开课日程.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:22:07 OK 培训学习 / 线下培训 / 开课日程 [main] +05:22:07 [47/172] 培训学习 / 考试练习 / 考试安排 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/03_考试安排.jpg", "size": [2880, 1556], "tiles": 2, "docH": 778, "winH": 756, "hdr": 48} +05:22:31 OK 培训学习 / 考试练习 / 考试安排 [main] +05:22:31 [48/172] 培训学习 / 考试练习 / 考试记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/04_考试记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:22:56 OK 培训学习 / 考试练习 / 考试记录 [main] +05:22:56 [49/172] 培训学习 / 考试练习 / 试卷管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/02_试卷管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:23:27 OK 培训学习 / 考试练习 / 试卷管理 [main] +05:23:27 [50/172] 培训学习 / 考试练习 / 题库管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/08_培训学习/考试练习/01_题库管理.jpg", "size": [2880, 1580], "tiles": 2, "docH": 790, "winH": 756, "hdr": 48} +05:23:53 OK 培训学习 / 考试练习 / 题库管理 [main, add(新增试题)] +05:23:53 [51/172] 审批 / 常规 / 审批交接 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/05_审批交接.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:24:18 OK 审批 / 常规 / 审批交接 [main] +05:24:18 [52/172] 审批 / 常规 / 审批代理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/03_审批代理.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +05:24:47 OK 审批 / 常规 / 审批代理 [main] +05:24:47 [53/172] 审批 / 常规 / 审批模板库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/02_审批模板库.jpg", "size": [2880, 4868], "tiles": 4, "docH": 2434, "winH": 756, "hdr": 48} +05:25:17 OK 审批 / 常规 / 审批模板库 [main] +05:25:17 [54/172] 审批 / 常规 / 审批表单 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/01_审批表单.jpg", "size": [2880, 4344], "tiles": 3, "docH": 852, "winH": 756, "hdr": 48} +05:25:46 OK 审批 / 常规 / 审批表单 [main] +05:25:46 [55/172] 审批 / 常规 / 审批记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/04_审批记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:26:12 OK 审批 / 常规 / 审批记录 [main, filter(filter)] +05:26:12 [56/172] 审批 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/07_审批/常规/06_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:26:35 OK 审批 / 常规 / 操作记录 [main] +05:26:35 [57/172] 工作台 / 工作台首页 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/01_工作台/工作台首页.jpg", "size": [2880, 23658], "tiles": 17, "docH": 2745, "winH": 756, "hdr": 48} +05:29:26 deep columns err: timed out +05:29:57 OK 工作台 / 工作台首页 [main] +05:29:57 [58/172] 应用管理 / 应用管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/24_应用管理/应用管理.jpg", "size": [2880, 2168], "tiles": 2, "docH": 1084, "winH": 756, "hdr": 48} +05:30:14 OK 应用管理 / 应用管理 [main] +05:30:14 [59/172] 招聘 / 候选人 / 人才库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/07_人才库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:30:40 OK 招聘 / 候选人 / 人才库 [main, add(添加人才)] +05:30:40 [60/172] 招聘 / 候选人 / 已入职 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/02_已入职.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:31:08 OK 招聘 / 候选人 / 已入职 [main] +05:31:08 [61/172] 招聘 / 候选人 / 已淘汰 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/03_已淘汰.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:31:35 OK 招聘 / 候选人 / 已淘汰 [main] +05:31:35 [62/172] 招聘 / 候选人 / 招聘中 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/01_招聘中.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:32:04 OK 招聘 / 候选人 / 招聘中 [main] +05:32:04 [63/172] 招聘 / 候选人 / 招聘职位 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/04_招聘职位.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:32:36 OK 招聘 / 候选人 / 招聘职位 [main] +05:32:36 [64/172] 招聘 / 候选人 / 招聘门户 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/05_招聘门户.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/05_招聘门户__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 60} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/05_招聘门户__detail.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 60} +05:33:17 OK 招聘 / 候选人 / 招聘门户 [main, add(添加招聘门户), detail(编辑)] +05:33:17 [65/172] 招聘 / 候选人 / 面试日程 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/候选人/06_面试日程.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:33:58 OK 招聘 / 候选人 / 面试日程 [main] +05:33:58 [66/172] 招聘 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/常规/01_概览.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:34:32 OK 招聘 / 常规 / 概览 [main] +05:34:32 [67/172] 招聘 / 统计分析 / 招聘分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/统计分析/02_招聘分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:34:55 OK 招聘 / 统计分析 / 招聘分析 [main] +05:34:55 [68/172] 招聘 / 统计分析 / 招聘报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/统计分析/01_招聘报表.jpg", "size": [2880, 1722], "tiles": 2, "docH": 861, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/统计分析/01_招聘报表__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:35:22 OK 招聘 / 统计分析 / 招聘报表 [main, add(添加报表)] +05:35:22 [69/172] 招聘 / 设置 / 招聘团队 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/01_招聘团队.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:35:47 OK 招聘 / 设置 / 招聘团队 [main] +05:35:47 [70/172] 招聘 / 设置 / 招聘工具 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/02_招聘工具.jpg", "size": [2880, 4344], "tiles": 3, "docH": 2095, "winH": 756, "hdr": 48} +05:36:13 OK 招聘 / 设置 / 招聘工具 [main] +05:36:13 [71/172] 招聘 / 设置 / 招聘渠道 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/03_招聘渠道.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:36:49 OK 招聘 / 设置 / 招聘渠道 [main] +05:36:49 [72/172] 招聘 / 设置 / 更多设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/05_更多设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:37:17 OK 招聘 / 设置 / 更多设置 [main] +05:37:17 [73/172] 招聘 / 设置 / 模板设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/04_招聘/设置/04_模板设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:37:42 OK 招聘 / 设置 / 模板设置 [main] +05:37:42 [74/172] 智能薪酬 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/常规/01_概览.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:38:16 OK 智能薪酬 / 常规 / 概览 [main] +05:38:16 [75/172] 智能薪酬 / 常规 / 薪酬核算 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/常规/02_薪酬核算.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:38:53 OK 智能薪酬 / 常规 / 薪酬核算 [main] +05:38:53 [76/172] 智能薪酬 / 报表中心 / 薪酬分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:39:17 OK 智能薪酬 / 报表中心 / 薪酬分析 [main] +05:39:17 [77/172] 智能薪酬 / 报表中心 / 薪酬报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:39:44 OK 智能薪酬 / 报表中心 / 薪酬报表 [main] +05:39:44 [78/172] 智能薪酬 / 数据采集 / 业务提报 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/数据采集/02_业务提报.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/数据采集/02_业务提报__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:40:31 OK 智能薪酬 / 数据采集 / 业务提报 [main, add(新增提报方案)] +05:40:31 [79/172] 智能薪酬 / 数据采集 / 员工考勤 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:41:11 OK 智能薪酬 / 数据采集 / 员工考勤 [main] +05:41:11 [80/172] 智能薪酬 / 薪酬数据 / 个税记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:41:45 OK 智能薪酬 / 薪酬数据 / 个税记录 [main] +05:41:45 [81/172] 智能薪酬 / 薪酬数据 / 减除费用确认 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:42:19 OK 智能薪酬 / 薪酬数据 / 减除费用确认 [main] +05:42:19 [82/172] 智能薪酬 / 薪酬数据 / 成本明细 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:43:00 OK 智能薪酬 / 薪酬数据 / 成本明细 [main, add(新增成本中心)] +05:43:00 [83/172] 智能薪酬 / 薪酬数据 / 税前扣除 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:43:26 OK 智能薪酬 / 薪酬数据 / 税前扣除 [main] +05:43:26 [84/172] 智能薪酬 / 薪酬数据 / 薪酬档案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg", "size": [2880, 1544], "tiles": 2, "docH": 772, "winH": 756, "hdr": 48} +05:43:56 OK 智能薪酬 / 薪酬数据 / 薪酬档案 [main] +05:43:56 [85/172] 智能薪酬 / 薪酬设置 / 基础设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:44:26 OK 智能薪酬 / 薪酬设置 / 基础设置 [main] +05:44:26 [86/172] 智能薪酬 / 薪酬设置 / 成本设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:44:57 OK 智能薪酬 / 薪酬设置 / 成本设置 [main, add(新增成本中心)] +05:44:57 [87/172] 智能薪酬 / 薪酬设置 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:45:29 OK 智能薪酬 / 薪酬设置 / 操作记录 [main] +05:45:29 [88/172] 智能薪酬 / 薪酬设置 / 薪酬结构 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg", "size": [2880, 1560], "tiles": 2, "docH": 780, "winH": 756, "hdr": 48} +05:45:57 OK 智能薪酬 / 薪酬设置 / 薪酬结构 [main] +05:45:57 [89/172] 电子合同 / 合同签署 / 合同档案库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/04_合同档案库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:46:24 OK 电子合同 / 合同签署 / 合同档案库 [main] +05:46:24 [90/172] 电子合同 / 合同签署 / 已作废 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/03_已作废.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:46:49 OK 电子合同 / 合同签署 / 已作废 [main] +05:46:49 [91/172] 电子合同 / 合同签署 / 已签署 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/02_已签署.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:47:14 OK 电子合同 / 合同签署 / 已签署 [main] +05:47:14 [92/172] 电子合同 / 合同签署 / 签署中 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/合同签署/01_签署中.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:47:38 OK 电子合同 / 合同签署 / 签署中 [main] +05:47:38 [93/172] 电子合同 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/常规/01_概览.jpg", "size": [2880, 1616], "tiles": 2, "docH": 808, "winH": 756, "hdr": 48} +05:48:20 OK 电子合同 / 常规 / 概览 [main] +05:48:20 [94/172] 电子合同 / 设置 / 企业印章 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/设置/01_企业印章.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:48:52 OK 电子合同 / 设置 / 企业印章 [main] +05:48:52 [95/172] 电子合同 / 设置 / 合同包 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/设置/03_合同包.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/设置/03_合同包__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:49:20 OK 电子合同 / 设置 / 合同包 [main, add(新增合同包)] +05:49:20 [96/172] 电子合同 / 设置 / 合同模板 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/12_电子合同/设置/02_合同模板.jpg", "size": [2880, 3048], "tiles": 3, "docH": 1524, "winH": 756, "hdr": 48} +05:49:50 OK 电子合同 / 设置 / 合同模板 [main] +05:49:50 [97/172] 电子工资条 / 常规 / 反馈记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/03_反馈记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:50:16 OK 电子工资条 / 常规 / 反馈记录 [main] +05:50:16 [98/172] 电子工资条 / 常规 / 发放记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/02_发放记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:50:40 OK 电子工资条 / 常规 / 发放记录 [main] +05:50:40 [99/172] 电子工资条 / 常规 / 发送工资条 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/01_发送工资条.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:51:14 OK 电子工资条 / 常规 / 发送工资条 [main] +05:51:14 [100/172] 电子工资条 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/05_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:51:39 OK 电子工资条 / 常规 / 操作记录 [main] +05:51:39 [101/172] 电子工资条 / 常规 / 统计分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/20_电子工资条/常规/04_统计分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:52:03 OK 电子工资条 / 常规 / 统计分析 [main] +05:52:03 [102/172] 短信发送 / 常规 / 发送记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/19_短信发送/常规/02_发送记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:52:28 OK 短信发送 / 常规 / 发送记录 [main] +05:52:28 [103/172] 短信发送 / 常规 / 短信发送 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/19_短信发送/常规/01_短信发送.jpg", "size": [2880, 1690], "tiles": 2, "docH": 845, "winH": 756, "hdr": 48} +05:52:56 OK 短信发送 / 常规 / 短信发送 [main] +05:52:56 [104/172] 社保公积金 / 常规 / 参保档案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/03_参保档案.jpg", "size": [2880, 1664], "tiles": 2, "docH": 832, "winH": 756, "hdr": 48} +05:53:20 OK 社保公积金 / 常规 / 参保档案 [main] +05:53:20 [105/172] 社保公积金 / 常规 / 参保规则 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/06_参保规则.jpg", "size": [2880, 1840], "tiles": 2, "docH": 888, "winH": 756, "hdr": 48} +05:53:56 OK 社保公积金 / 常规 / 参保规则 [main] +05:53:56 [106/172] 社保公积金 / 常规 / 参保账单 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/01_参保账单.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/01_参保账单__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:54:24 OK 社保公积金 / 常规 / 参保账单 [main, add(添加账单)] +05:54:24 [107/172] 社保公积金 / 常规 / 社保分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/05_社保分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:54:48 OK 社保公积金 / 常规 / 社保分析 [main] +05:54:48 [108/172] 社保公积金 / 常规 / 社保报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/04_社保报表.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/04_社保报表__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:55:17 OK 社保公积金 / 常规 / 社保报表 [main, add(添加报表)] +05:55:17 [109/172] 社保公积金 / 常规 / 账单核对 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/10_社保公积金/常规/02_账单核对.jpg", "size": [2880, 1688], "tiles": 2, "docH": 844, "winH": 756, "hdr": 48} +05:55:41 OK 社保公积金 / 常规 / 账单核对 [main] +05:55:41 [110/172] 第三方对接 / 常规 / 企业微信 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/01_企业微信.jpg", "size": [2880, 1872], "tiles": 2, "docH": 936, "winH": 756, "hdr": 48} +05:56:05 OK 第三方对接 / 常规 / 企业微信 [main] +05:56:05 [111/172] 第三方对接 / 常规 / 携程商旅 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/04_携程商旅.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:56:29 OK 第三方对接 / 常规 / 携程商旅 [main] +05:56:29 [112/172] 第三方对接 / 常规 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/05_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:56:56 OK 第三方对接 / 常规 / 操作记录 [main] +05:56:56 [113/172] 第三方对接 / 常规 / 钉钉 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/02_钉钉.jpg", "size": [2880, 2940], "tiles": 3, "docH": 1470, "winH": 756, "hdr": 48} +05:57:21 OK 第三方对接 / 常规 / 钉钉 [main] +05:57:21 [114/172] 第三方对接 / 常规 / 飞书 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/17_第三方对接/常规/03_飞书.jpg", "size": [2880, 2072], "tiles": 2, "docH": 1036, "winH": 756, "hdr": 48} +05:57:45 OK 第三方对接 / 常规 / 飞书 [main] +05:57:45 [115/172] 组织 / 岗位管理 / 员工标签 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/03_员工标签.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +05:58:13 OK 组织 / 岗位管理 / 员工标签 [main] +05:58:13 [116/172] 组织 / 岗位管理 / 岗位管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/01_岗位管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:58:56 OK 组织 / 岗位管理 / 岗位管理 [main, filter(filter), add(新增岗位)] +05:58:56 [117/172] 组织 / 岗位管理 / 组织报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/05_组织报表.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:59:20 OK 组织 / 岗位管理 / 组织报表 [main] +05:59:20 [118/172] 组织 / 岗位管理 / 职务管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/02_职务管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +05:59:57 OK 组织 / 岗位管理 / 职务管理 [main] +05:59:57 [119/172] 组织 / 岗位管理 / 职级管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/岗位管理/04_职级管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:00:22 OK 组织 / 岗位管理 / 职级管理 [main] +06:00:22 [120/172] 组织 / 组织架构 / 工作地点 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/组织架构/03_工作地点.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:00:47 OK 组织 / 组织架构 / 工作地点 [main] +06:00:47 [121/172] 组织 / 组织架构 / 架构图 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/组织架构/02_架构图.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:01:24 OK 组织 / 组织架构 / 架构图 [main] +06:01:24 [122/172] 组织 / 组织架构 / 组织管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/03_组织/组织架构/01_组织管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:02:08 OK 组织 / 组织架构 / 组织管理 [main, filter(filter), add(新增组织)] +06:02:08 [123/172] 绩效 / 常规 / 概览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/常规/01_概览.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:02:39 OK 绩效 / 常规 / 概览 [main] +06:02:39 [124/172] 绩效 / 考核管理 / 历史绩效考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/02_历史绩效考核.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:03:18 OK 绩效 / 考核管理 / 历史绩效考核 [main] +06:03:18 [125/172] 绩效 / 考核管理 / 晋升考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/04_晋升考核.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/04_晋升考核__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:03:51 OK 绩效 / 考核管理 / 晋升考核 [main, add(发起晋升考核)] +06:03:51 [126/172] 绩效 / 考核管理 / 绩效考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/01_绩效考核.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/01_绩效考核__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:04:26 OK 绩效 / 考核管理 / 绩效考核 [main, add(新增考核计划)] +06:04:26 [127/172] 绩效 / 考核管理 / 考核组管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/05_考核组管理.jpg", "size": [2880, 1552], "tiles": 2, "docH": 776, "winH": 756, "hdr": 48} +06:04:56 OK 绩效 / 考核管理 / 考核组管理 [main] +06:04:56 [128/172] 绩效 / 考核管理 / 试用期考核 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/03_试用期考核.jpg", "size": [2880, 1556], "tiles": 2, "docH": 778, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核管理/03_试用期考核__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:05:39 OK 绩效 / 考核管理 / 试用期考核 [main, add(发起试用期考核)] +06:05:39 [129/172] 绩效 / 考核结果 / 员工绩效档案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核结果/01_员工绩效档案.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:06:09 OK 绩效 / 考核结果 / 员工绩效档案 [main] +06:06:09 [130/172] 绩效 / 考核结果 / 绩效考核记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核结果/02_绩效考核记录.jpg", "size": [2880, 1553], "tiles": 2, "docH": 777, "winH": 756, "hdr": 48} +06:06:34 OK 绩效 / 考核结果 / 绩效考核记录 [main] +06:06:34 [131/172] 绩效 / 考核结果 / 绩效面谈记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:07:03 OK 绩效 / 考核结果 / 绩效面谈记录 [main] +06:07:03 [132/172] 绩效 / 考核设置 / 指标库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/01_指标库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:07:29 OK 绩效 / 考核设置 / 指标库 [main, add(新增指标)] +06:07:29 [133/172] 绩效 / 考核设置 / 操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/05_操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:09:45 deep columns err: timed out +06:09:55 OK 绩效 / 考核设置 / 操作记录 [main] +06:09:55 [134/172] 绩效 / 考核设置 / 考核团队 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/03_考核团队.jpg", "size": [2880, 4336], "tiles": 3, "docH": 2168, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/03_考核团队__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/03_考核团队__detail.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 96} +06:10:29 OK 绩效 / 考核设置 / 考核团队 [main, add(发起考核计划), detail(详情)] +06:10:29 [135/172] 绩效 / 考核设置 / 考核模板库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/02_考核模板库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/02_考核模板库__detail.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:11:06 OK 绩效 / 考核设置 / 考核模板库 [main, detail(编辑)] +06:11:06 [136/172] 绩效 / 考核设置 / 自定义设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/09_绩效/考核设置/04_自定义设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:11:30 OK 绩效 / 考核设置 / 自定义设置 [main] +06:11:30 [137/172] 考勤假期 / 假期管理 / 休假一览 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/01_休假一览.jpg", "size": [2880, 1803], "tiles": 2, "docH": 902, "winH": 756, "hdr": 48} +06:11:57 OK 考勤假期 / 假期管理 / 休假一览 [main, filter(filter)] +06:11:57 [138/172] 考勤假期 / 假期管理 / 假期余额 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/03_假期余额.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:12:24 OK 考勤假期 / 假期管理 / 假期余额 [main] +06:12:24 [139/172] 考勤假期 / 假期管理 / 假期方案 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/04_假期方案.jpg", "size": [2880, 1752], "tiles": 2, "docH": 876, "winH": 756, "hdr": 48} +06:12:58 OK 考勤假期 / 假期管理 / 假期方案 [main, filter(filter)] +06:12:58 [140/172] 考勤假期 / 假期管理 / 假期设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/05_假期设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:13:33 OK 考勤假期 / 假期管理 / 假期设置 [main] +06:13:33 [141/172] 考勤假期 / 假期管理 / 手动调整 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/假期管理/02_手动调整.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:13:58 OK 考勤假期 / 假期管理 / 手动调整 [main] +06:13:58 [142/172] 考勤假期 / 考勤管理 / 打卡方式 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:14:27 OK 考勤假期 / 考勤管理 / 打卡方式 [main] +06:14:27 [143/172] 考勤假期 / 考勤管理 / 排班管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/02_排班管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:14:52 OK 考勤假期 / 考勤管理 / 排班管理 [main] +06:14:52 [144/172] 考勤假期 / 考勤管理 / 考勤分组 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg", "size": [2880, 2012], "tiles": 2, "docH": 974, "winH": 756, "hdr": 48} +06:15:19 OK 考勤假期 / 考勤管理 / 考勤分组 [main] +06:15:19 [145/172] 考勤假期 / 考勤管理 / 考勤规则 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg", "size": [2880, 1716], "tiles": 2, "docH": 858, "winH": 756, "hdr": 48} +06:15:45 OK 考勤假期 / 考勤管理 / 考勤规则 [main] +06:15:45 [146/172] 考勤假期 / 考勤管理 / 考勤设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg", "size": [2880, 4070], "tiles": 3, "docH": 2035, "winH": 756, "hdr": 48} +06:16:15 OK 考勤假期 / 考勤管理 / 考勤设置 [main] +06:16:15 [147/172] 考勤假期 / 考勤统计 / 字段管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/05_字段管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:16:50 OK 考勤假期 / 考勤统计 / 字段管理 [main, filter(filter)] +06:16:50 [148/172] 考勤假期 / 考勤统计 / 明细记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/03_明细记录.jpg", "size": [2880, 1578], "tiles": 2, "docH": 789, "winH": 756, "hdr": 48} +06:17:21 OK 考勤假期 / 考勤统计 / 明细记录 [main, filter(filter)] +06:17:21 [149/172] 考勤假期 / 考勤统计 / 月考勤表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg", "size": [2880, 2019], "tiles": 2, "docH": 802, "winH": 756, "hdr": 48} +06:17:49 OK 考勤假期 / 考勤统计 / 月考勤表 [main, filter(filter)] +06:17:49 [150/172] 考勤假期 / 考勤统计 / 每日考勤 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:18:21 OK 考勤假期 / 考勤统计 / 每日考勤 [main, filter(filter), columns(columns)] +06:18:21 [151/172] 考勤假期 / 考勤统计 / 考勤报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg", "size": [2880, 2906], "tiles": 2, "docH": 800, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/04_考勤报表__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:18:51 OK 考勤假期 / 考勤统计 / 考勤报表 [main, add(添加报表)] +06:18:51 [152/172] 考勤假期 / 考勤统计 / 考勤确认 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:19:15 OK 考勤假期 / 考勤统计 / 考勤确认 [main] +06:19:15 [153/172] 背景调查 / 背景调查服务 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/13_背景调查/背景调查服务.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 0} +06:19:38 OK 背景调查 / 背景调查服务 [main] +06:19:38 [154/172] 薪酬 / 薪酬管理 / 发送工资条 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:20:05 OK 薪酬 / 薪酬管理 / 发送工资条 [main] +06:20:05 [155/172] 薪酬 / 薪酬管理 / 员工薪资 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:20:32 OK 薪酬 / 薪酬管理 / 员工薪资 [main] +06:20:32 [156/172] 薪酬 / 薪酬管理 / 工资发放 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/02_工资发放.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:20:56 OK 薪酬 / 薪酬管理 / 工资发放 [main] +06:20:56 [157/172] 薪酬 / 薪酬管理 / 年终奖计算 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:21:20 OK 薪酬 / 薪酬管理 / 年终奖计算 [main] +06:21:20 [158/172] 薪酬 / 薪酬管理 / 月工资表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/01_月工资表.jpg", "size": [2880, 2928], "tiles": 2, "docH": 906, "winH": 756, "hdr": 48} +06:21:44 OK 薪酬 / 薪酬管理 / 月工资表 [main] +06:21:44 [159/172] 薪酬 / 薪酬管理 / 薪酬分析 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:22:08 OK 薪酬 / 薪酬管理 / 薪酬分析 [main] +06:22:08 [160/172] 薪酬 / 薪酬管理 / 薪酬报表 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:22:32 OK 薪酬 / 薪酬管理 / 薪酬报表 [main] +06:22:32 [161/172] 薪酬 / 薪酬管理 / 薪酬设置 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:23:00 OK 薪酬 / 薪酬管理 / 薪酬设置 [main] +06:23:00 [162/172] 薪酬 / 薪酬管理 / 计薪规则 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:23:29 OK 薪酬 / 薪酬管理 / 计薪规则 [main] +06:23:29 [163/172] 行政管理 / 会议室预定 / 会议室管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/会议室预定/02_会议室管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:23:59 OK 行政管理 / 会议室预定 / 会议室管理 [main] +06:23:59 [164/172] 行政管理 / 会议室预定 / 会议操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:24:24 OK 行政管理 / 会议室预定 / 会议操作记录 [main] +06:24:24 [165/172] 行政管理 / 会议室预定 / 会议预定记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:24:48 OK 行政管理 / 会议室预定 / 会议预定记录 [main] +06:24:48 [166/172] 行政管理 / 常规 / 企业公告 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/01_企业公告.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/01_企业公告__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 108} +06:25:15 OK 行政管理 / 常规 / 企业公告 [main, add(新建公告)] +06:25:15 [167/172] 行政管理 / 常规 / 企业制度 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/02_企业制度.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/02_企业制度__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:25:44 OK 行政管理 / 常规 / 企业制度 [main, add(新建制度)] +06:25:44 [168/172] 行政管理 / 常规 / 开具证明 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/04_开具证明.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:28:05 deep add err: timed out +06:28:11 OK 行政管理 / 常规 / 开具证明 [main] +06:28:11 [169/172] 行政管理 / 常规 / 新闻动态 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/03_新闻动态.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/常规/03_新闻动态__add.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:28:38 OK 行政管理 / 常规 / 新闻动态 [main, add(新建新闻)] +06:28:38 [170/172] 行政管理 / 问卷调查 / 问卷操作记录 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:29:05 OK 行政管理 / 问卷调查 / 问卷操作记录 [main] +06:29:05 [171/172] 行政管理 / 问卷调查 / 问卷模板库 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:29:29 OK 行政管理 / 问卷调查 / 问卷模板库 [main] +06:29:29 [172/172] 行政管理 / 问卷调查 / 问卷管理 +{"path": "/Users/lucky/Documents/WorkSapce/TwoJob/screenshots/11_行政管理/问卷调查/01_问卷管理.jpg", "size": [2880, 1512], "tiles": 1, "docH": 756, "winH": 756, "hdr": 48} +06:29:52 OK 行政管理 / 问卷调查 / 问卷管理 [main] +06:29:52 === DONE done=171 skip=0 fail=1 total=172 === diff --git a/db/serve.log b/db/serve.log new file mode 100644 index 0000000..45bb667 --- /dev/null +++ b/db/serve.log @@ -0,0 +1,25 @@ + * Serving Flask app 'serve' + * Debug mode: off +WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://127.0.0.1:8777 +Press CTRL+C to quit +127.0.0.1 - - [17/Jul/2026 22:34:10] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:34:18] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:34:18] "GET /dl/downloads/06_薪酬/薪酬管理/工资档案信息表-测试账号.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:34:36] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:34:36] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:34:36] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:34:36] "GET /shot/screenshots/01_工作台/工作台首页.jpg HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:35:50] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:35:50] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:35:51] "GET /favicon.ico HTTP/1.1" 404 - +127.0.0.1 - - [17/Jul/2026 22:35:51] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:35:51] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [17/Jul/2026 22:35:59] "GET /dl/downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:45:08] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:57:10] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:57:11] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:57:11] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 22:57:11] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [17/Jul/2026 23:10:29] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 23:10:29] "GET /dl/downloads/04_招聘/统计分析/招聘报表/Offer记录表.xls HTTP/1.1" 200 - diff --git a/db/serve.out b/db/serve.out new file mode 100644 index 0000000..ec50fc9 --- /dev/null +++ b/db/serve.out @@ -0,0 +1,94 @@ + * Serving Flask app 'serve' + * Debug mode: off +WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://127.0.0.1:8777 +Press CTRL+C to quit +127.0.0.1 - - [17/Jul/2026 23:38:11] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 23:38:14] "GET /dl/downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 23:38:40] "GET /api/preview?rel=downloads/04_招聘/统计分析/招聘报表/Offer记录表.xls HTTP/1.1" 200 - +127.0.0.1 - - [17/Jul/2026 23:38:52] "GET /api/preview?rel=downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 00:46:50] "GET /; HTTP/1.1" 404 - +127.0.0.1 - - [18/Jul/2026 00:46:50] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 00:47:21] "GET /; HTTP/1.1" 404 - +127.0.0.1 - - [18/Jul/2026 00:47:21] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 00:47:31] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 00:47:31] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 00:49:21] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 00:49:22] "GET /favicon.ico HTTP/1.1" 404 - +127.0.0.1 - - [18/Jul/2026 00:49:22] "GET /favicon.ico HTTP/1.1" 404 - +127.0.0.1 - - [18/Jul/2026 01:00:12] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:12] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:12] "GET /favicon.ico HTTP/1.1" 404 - +127.0.0.1 - - [18/Jul/2026 01:00:12] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:12] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:00:14] "GET /api/preview?rel=downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:18] "GET /api/preview?rel=downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:21] "GET /api/preview?rel=downloads/02_人事/员工关系/实习生情况记录表-20260717223640.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:33] "GET /shot/screenshots/02_人事/员工管理/02_员工档案库.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:34] "GET /shot/screenshots/02_人事/员工管理/03_统计分析.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:39] "GET /shot/screenshots/02_人事/员工管理/04_人事报表.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:00:51] "GET /shot/screenshots/03_组织/组织架构/01_组织管理.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:00:53] "GET /shot/screenshots/03_组织/岗位管理/01_岗位管理.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:01:00] "GET /shot/screenshots/03_组织/岗位管理/05_组织报表.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:15] "GET /shot/screenshots/04_招聘/常规/01_概览.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:01:17] "GET /api/preview?rel=downloads/04_招聘/统计分析/招聘报表/Offer记录表.xls HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:22] "GET /api/preview?rel=downloads/04_招聘/统计分析/招聘报表/候选人Offer等待期统计表.xls HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:25] "GET /shot/screenshots/07_审批/常规/02_审批模板库.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:46] "GET /shot/screenshots/07_审批/常规/03_审批代理.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:47] "GET /shot/screenshots/07_审批/常规/04_审批记录.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:49] "GET /shot/screenshots/11_行政管理/常规/02_企业制度.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:50] "GET /shot/screenshots/11_行政管理/常规/03_新闻动态.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:53] "GET /shot/screenshots/12_电子合同/合同签署/01_签署中.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:54] "GET /shot/screenshots/12_电子合同/合同签署/02_已签署.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:55] "GET /shot/screenshots/12_电子合同/合同签署/03_已作废.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:56] "GET /shot/screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:57] "GET /shot/screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:58] "GET /shot/screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:01:59] "GET /shot/screenshots/23_AI员工助手/常规/01_AI员工助手.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:02:01] "GET /shot/screenshots/23_AI员工助手/常规/03_员工助手设置.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:02:04] "GET /shot/screenshots/01_工作台/工作台首页.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:02:06] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:02:07] "GET /shot/screenshots/02_人事/员工管理/02_员工档案库.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:02:08] "GET /shot/screenshots/02_人事/员工管理/04_人事报表.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:02:09] "GET /shot/screenshots/02_人事/员工管理/05_万能人事表格.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:02:10] "GET /shot/screenshots/02_人事/员工管理/02_员工档案库.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:02:11] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:13:41] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:41] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:41] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:41] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:13:42] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:42] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:42] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:42] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:13:44] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:44] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:44] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:13:44] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:18:54] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:18:54] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:18:54] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 01:18:54] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 01:18:57] "GET /shot/screenshots/01_工作台/工作台首页.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 05:05:19] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:05:19] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:05:19] "GET /favicon.ico HTTP/1.1" 404 - +127.0.0.1 - - [18/Jul/2026 05:05:19] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:05:19] "GET /shot/screenshots/01_工作台/工作台首页.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 05:05:22] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:05:24] "GET /shot/screenshots/02_人事/员工管理/02_员工档案库.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 05:13:37] "GET / HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:37] "GET /api/features HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:37] "GET /favicon.ico HTTP/1.1" 404 - +127.0.0.1 - - [18/Jul/2026 05:13:37] "GET /api/attachments HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:37] "GET /shot/screenshots/02_人事/员工管理/02_员工档案库.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:39] "GET /shot/screenshots/01_工作台/工作台首页.jpg HTTP/1.1" 304 - +127.0.0.1 - - [18/Jul/2026 05:13:43] "GET /shot/screenshots/02_人事/员工管理/01_员工花名册.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:46] "GET /shot/screenshots/02_人事/员工管理/03_统计分析.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:47] "GET /shot/screenshots/02_人事/员工管理/04_人事报表.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:47] "GET /shot/screenshots/02_人事/员工管理/06_人事动态.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:48] "GET /shot/screenshots/02_人事/员工关系/02_转正管理.jpg HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:49] "GET /api/preview?rel=downloads/02_人事/员工关系/员工谈话记录-2026-07-17%2022_37_52.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:51] "GET /api/preview?rel=downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:53] "GET /api/preview?rel=downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx HTTP/1.1" 200 - +127.0.0.1 - - [18/Jul/2026 05:13:57] "GET /api/preview?rel=downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx HTTP/1.1" 200 - diff --git a/docs/selection.json b/docs/selection.json new file mode 100644 index 0000000..a246068 --- /dev/null +++ b/docs/selection.json @@ -0,0 +1,4605 @@ +{ + "generated_at": "2026-07-17T09:54:53", + "source": "2号人事部 https://2haohr.com 功能调研", + "total": 172, + "keep": 172, + "dropped": 0, + "module_summary": [ + { + "module": "人事", + "total": 18, + "keep": 18 + }, + { + "module": "考勤假期", + "total": 16, + "keep": 16 + }, + { + "module": "招聘", + "total": 15, + "keep": 15 + }, + { + "module": "培训学习", + "total": 15, + "keep": 15 + }, + { + "module": "智能薪酬", + "total": 15, + "keep": 15 + }, + { + "module": "绩效", + "total": 14, + "keep": 14 + }, + { + "module": "行政管理", + "total": 10, + "keep": 10 + }, + { + "module": "薪酬", + "total": 9, + "keep": 9 + }, + { + "module": "组织", + "total": 8, + "keep": 8 + }, + { + "module": "电子合同", + "total": 8, + "keep": 8 + }, + { + "module": "审批", + "total": 6, + "keep": 6 + }, + { + "module": "社保公积金", + "total": 6, + "keep": 6 + }, + { + "module": "第三方对接", + "total": 5, + "keep": 5 + }, + { + "module": "电子工资条", + "total": 5, + "keep": 5 + }, + { + "module": "AI员工助手", + "total": 5, + "keep": 5 + }, + { + "module": "员工福利", + "total": 4, + "keep": 4 + }, + { + "module": "个税对接", + "total": 4, + "keep": 4 + }, + { + "module": "人事仪表盘", + "total": 2, + "keep": 2 + }, + { + "module": "短信发送", + "total": 2, + "keep": 2 + }, + { + "module": "工作台", + "total": 1, + "keep": 1 + }, + { + "module": "背景调查", + "total": 1, + "keep": 1 + }, + { + "module": "人才测评", + "total": 1, + "keep": 1 + }, + { + "module": "培训商城", + "total": 1, + "keep": 1 + }, + { + "module": "应用管理", + "total": 1, + "keep": 1 + } + ], + "items": [ + { + "module": "工作台", + "group": "", + "name": "工作台首页", + "node_key": "工作台::/desk", + "full_path": "工作台 / 工作台首页", + "url": "https://2haohr.com/desk", + "keep": 1, + "description": "工作台模块下「工作台首页」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/01_工作台/工作台首页.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "员工花名册", + "node_key": "人事::/personnel/employee/roster", + "full_path": "人事 / 员工管理 / 员工花名册", + "url": "https://2haohr.com/personnel/employee/roster", + "keep": 1, + "description": "全体员工的核心名册列表,支持按部门/状态筛选、字段自定义、批量导入导出。", + "understanding": "员工主数据入口,几乎所有人事操作从此发起;字段可配置是关键需求。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/01_员工花名册.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "入职管理", + "node_key": "人事::/personnel/relation/enrollment", + "full_path": "人事 / 员工关系 / 入职管理", + "url": "https://2haohr.com/personnel/relation/enrollment", + "keep": 1, + "description": "待入职/入职办理流程,含入职登记、资料收集与开通账号。", + "understanding": "与招聘‘已入职’衔接;支持员工自助填写(AI 辅助)。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/01_入职管理.jpg" + }, + { + "module": "组织", + "group": "组织架构", + "name": "组织管理", + "node_key": "组织::/org/dept/manage/home", + "full_path": "组织 / 组织架构 / 组织管理", + "url": "https://2haohr.com/org/dept/manage/home", + "keep": 1, + "description": "部门树的增删改与部门负责人、编制等管理。", + "understanding": "组织主数据根节点,权限与审批的部门维度基础。", + "note": "", + "screenshot": "screenshots/03_组织/组织架构/01_组织管理.jpg" + }, + { + "module": "组织", + "group": "", + "name": "岗位管理", + "node_key": "组织::/org/job/job-management", + "full_path": "组织 / 岗位管理 / 岗位管理", + "url": "https://2haohr.com/org/job/job-management", + "keep": 1, + "description": "岗位设置、岗位职责与编制管理。", + "understanding": "岗位是招聘/薪酬/绩效的归属维度。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/01_岗位管理.jpg" + }, + { + "module": "招聘", + "group": "常规", + "name": "概览", + "node_key": "招聘::/recruitment/overview", + "full_path": "招聘 / 常规 / 概览", + "url": "https://2haohr.com/recruitment/overview", + "keep": 1, + "description": "招聘整体数据概览(职位/候选人/面试等看板)。", + "understanding": "招聘经理入口页。", + "note": "", + "screenshot": "screenshots/04_招聘/常规/01_概览.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "招聘中", + "node_key": "招聘::/recruitment/candidate/recruiting/list", + "full_path": "招聘 / 候选人 / 招聘中", + "url": "https://2haohr.com/recruitment/candidate/recruiting/list", + "keep": 1, + "description": "处于招聘流程中的候选人列表与阶段管理。", + "understanding": "ATS 核心看板,支持阶段流转。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/01_招聘中.jpg" + }, + { + "module": "招聘", + "group": "统计分析", + "name": "招聘报表", + "node_key": "招聘::/recruitment/stats/report", + "full_path": "招聘 / 统计分析 / 招聘报表", + "url": "https://2haohr.com/recruitment/stats/report", + "keep": 1, + "description": "招聘漏斗/周期/渠道效果报表。", + "understanding": "衡量招聘效率。", + "note": "", + "screenshot": "screenshots/04_招聘/统计分析/01_招聘报表.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "招聘团队", + "node_key": "招聘::/recruitment/settings/team", + "full_path": "招聘 / 设置 / 招聘团队", + "url": "https://2haohr.com/recruitment/settings/team", + "keep": 1, + "description": "招聘协作团队与角色权限设置。", + "understanding": "多角色协同招聘。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/01_招聘团队.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "每日考勤", + "node_key": "考勤假期::/attendance/stat/daily", + "full_path": "考勤假期 / 考勤统计 / 每日考勤", + "url": "https://2haohr.com/attendance/stat/daily", + "keep": 1, + "description": "按日展示全员打卡与异常。", + "understanding": "考勤日常监控入口。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "考勤分组", + "node_key": "考勤假期::/attendance/work/schedule", + "full_path": "考勤假期 / 考勤管理 / 考勤分组", + "url": "https://2haohr.com/attendance/work/schedule", + "keep": 1, + "description": "按人群划分考勤规则分组。", + "understanding": "不同班制人群差异化管理。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "休假一览", + "node_key": "考勤假期::/attendance/holiday/leaveRecords", + "full_path": "考勤假期 / 假期管理 / 休假一览", + "url": "https://2haohr.com/attendance/holiday/leaveRecords", + "keep": 1, + "description": "全员请假记录总览。", + "understanding": "假期使用监控。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/01_休假一览.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "月工资表", + "node_key": "薪酬::/payroll/salary/monthly", + "full_path": "薪酬 / 薪酬管理 / 月工资表", + "url": "https://2haohr.com/payroll/salary/monthly", + "keep": 1, + "description": "按月生成的工资核算表。", + "understanding": "薪酬核算主表,支持公式与批量。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/01_月工资表.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批表单", + "node_key": "审批::/approval/form/list", + "full_path": "审批 / 常规 / 审批表单", + "url": "https://2haohr.com/approval/form/list", + "keep": 1, + "description": "各类审批单据的发起与列表。", + "understanding": "通用审批入口。", + "note": "", + "screenshot": "screenshots/07_审批/常规/01_审批表单.jpg" + }, + { + "module": "培训学习", + "group": "线下培训", + "name": "培训计划", + "node_key": "培训学习::/training/manage/team", + "full_path": "培训学习 / 线下培训 / 培训计划", + "url": "https://2haohr.com/training/manage/team", + "keep": 1, + "description": "线下培训计划制定与管理。", + "understanding": "培训组织入口。", + "note": "", + "screenshot": "screenshots/08_培训学习/线下培训/01_培训计划.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "课程库", + "node_key": "培训学习::/training/online/course/home", + "full_path": "培训学习 / 线上学习 / 课程库", + "url": "https://2haohr.com/training/online/course/home", + "keep": 1, + "description": "在线课程资源库。", + "understanding": "LMS 内容中心。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/01_课程库.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "题库管理", + "node_key": "培训学习::/training/examine/question-bank", + "full_path": "培训学习 / 考试练习 / 题库管理", + "url": "https://2haohr.com/training/examine/question-bank", + "keep": 1, + "description": "考试题目库维护。", + "understanding": "考试基础数据。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/01_题库管理.jpg" + }, + { + "module": "培训学习", + "group": "培训设置", + "name": "讲师设置", + "node_key": "培训学习::/training/manage/teacher", + "full_path": "培训学习 / 培训设置 / 讲师设置", + "url": "https://2haohr.com/training/manage/teacher", + "keep": 1, + "description": "培训讲师维护。", + "understanding": "线下培训资源。", + "note": "", + "screenshot": "screenshots/08_培训学习/培训设置/01_讲师设置.jpg" + }, + { + "module": "绩效", + "group": "常规", + "name": "概览", + "node_key": "绩效::/performance-evaluation/desk", + "full_path": "绩效 / 常规 / 概览", + "url": "https://2haohr.com/performance-evaluation/desk", + "keep": 1, + "description": "绩效整体概览看板。", + "understanding": "绩效经理入口。", + "note": "", + "screenshot": "screenshots/09_绩效/常规/01_概览.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "绩效考核", + "node_key": "绩效::/performance-evaluation/manage/plan", + "full_path": "绩效 / 考核管理 / 绩效考核", + "url": "https://2haohr.com/performance-evaluation/manage/plan", + "keep": 1, + "description": "发起与管理绩效考核方案。", + "understanding": "绩效核心,含指标与流程。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/01_绩效考核.jpg" + }, + { + "module": "绩效", + "group": "考核结果", + "name": "员工绩效档案", + "node_key": "绩效::/performance-evaluation/result/archive", + "full_path": "绩效 / 考核结果 / 员工绩效档案", + "url": "https://2haohr.com/performance-evaluation/result/archive", + "keep": 1, + "description": "员工历史绩效档案。", + "understanding": "绩效履历。", + "note": "", + "screenshot": "screenshots/09_绩效/考核结果/01_员工绩效档案.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "指标库", + "node_key": "绩效::/performance-evaluation/setting/indicators", + "full_path": "绩效 / 考核设置 / 指标库", + "url": "https://2haohr.com/performance-evaluation/setting/indicators", + "keep": 1, + "description": "绩效指标(KPI/OKR)库。", + "understanding": "考核内容基础。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/01_指标库.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "参保账单", + "node_key": "社保公积金::/social-insurance/records", + "full_path": "社保公积金 / 常规 / 参保账单", + "url": "https://2haohr.com/social-insurance/records", + "keep": 1, + "description": "每月社保公积金参保账单。", + "understanding": "缴费核对入口。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/01_参保账单.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "企业公告", + "node_key": "行政管理::/oa/notice", + "full_path": "行政管理 / 常规 / 企业公告", + "url": "https://2haohr.com/oa/notice", + "keep": 1, + "description": "企业公告发布与阅读。", + "understanding": "全员触达。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/01_企业公告.jpg" + }, + { + "module": "行政管理", + "group": "会议室预定", + "name": "会议预定记录", + "node_key": "行政管理::/oa/meeting/reservation", + "full_path": "行政管理 / 会议室预定 / 会议预定记录", + "url": "https://2haohr.com/oa/meeting/reservation", + "keep": 1, + "description": "会议室预定记录。", + "understanding": "资源使用查询。", + "note": "", + "screenshot": "screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg" + }, + { + "module": "行政管理", + "group": "问卷调查", + "name": "问卷管理", + "node_key": "行政管理::/oa/survey/list", + "full_path": "行政管理 / 问卷调查 / 问卷管理", + "url": "https://2haohr.com/oa/survey/list", + "keep": 1, + "description": "企业问卷调查发起与统计。", + "understanding": "满意度/调研工具。", + "note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/01_问卷管理.jpg" + }, + { + "module": "电子合同", + "group": "常规", + "name": "概览", + "node_key": "电子合同::/econtract/overview", + "full_path": "电子合同 / 常规 / 概览", + "url": "https://2haohr.com/econtract/overview", + "keep": 1, + "description": "电子合同数据概览。", + "understanding": "签署情况看板。", + "note": "", + "screenshot": "screenshots/12_电子合同/常规/01_概览.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "签署中", + "node_key": "电子合同::/econtract/sign/signing", + "full_path": "电子合同 / 合同签署 / 签署中", + "url": "https://2haohr.com/econtract/sign/signing", + "keep": 1, + "description": "签署流程进行中的合同。", + "understanding": "待办跟踪。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/01_签署中.jpg" + }, + { + "module": "电子合同", + "group": "设置", + "name": "企业印章", + "node_key": "电子合同::/econtract/settings/seal", + "full_path": "电子合同 / 设置 / 企业印章", + "url": "https://2haohr.com/econtract/settings/seal", + "keep": 1, + "description": "企业电子印章管理。", + "understanding": "签署授权核心。", + "note": "", + "screenshot": "screenshots/12_电子合同/设置/01_企业印章.jpg" + }, + { + "module": "背景调查", + "group": "", + "name": "背景调查服务", + "node_key": "背景调查::/hrService/background-investigation/entry", + "full_path": "背景调查 / 背景调查服务", + "url": "https://2haohr.com/hrService/background-investigation/entry", + "keep": 1, + "description": "背景调查模块下「背景调查服务」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/13_背景调查/背景调查服务.jpg" + }, + { + "module": "人才测评", + "group": "", + "name": "人才测评服务", + "node_key": "人才测评::/hrService/employee-assessment/", + "full_path": "人才测评 / 人才测评服务", + "url": "https://2haohr.com/hrService/employee-assessment/", + "keep": 1, + "description": "人才测评模块下「人才测评服务」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/14_人才测评/人才测评服务.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "员工福利概况", + "node_key": "员工福利::/welfare/online-shop/overview", + "full_path": "员工福利 / 常规 / 员工福利概况", + "url": "https://2haohr.com/welfare/online-shop/overview", + "keep": 1, + "description": "福利运营数据概览。", + "understanding": "福利运营入口。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/01_员工福利概况.jpg" + }, + { + "module": "人事仪表盘", + "group": "常规", + "name": "我的仪表盘", + "node_key": "人事仪表盘::/dashboard/board/home", + "full_path": "人事仪表盘 / 常规 / 我的仪表盘", + "url": "https://2haohr.com/dashboard/board/home", + "keep": 1, + "description": "个人自定义数据看板。", + "understanding": "BI 自助看板。", + "note": "", + "screenshot": "screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "企业微信", + "node_key": "第三方对接::/third-party-apps/wework", + "full_path": "第三方对接 / 常规 / 企业微信", + "url": "https://2haohr.com/third-party-apps/wework", + "keep": 1, + "description": "对接企业微信(组织同步/消息)。", + "understanding": "生态集成。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/01_企业微信.jpg" + }, + { + "module": "培训商城", + "group": "", + "name": "培训商城(外部课程采购)", + "node_key": "培训商城::/training-mall", + "full_path": "培训商城 / 培训商城(外部课程采购)", + "url": "https://2haohr.com/training-mall", + "keep": 1, + "description": "培训商城模块下「培训商城(外部课程采购)」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/18_培训商城/培训商城(外部课程采购).jpg" + }, + { + "module": "短信发送", + "group": "常规", + "name": "短信发送", + "node_key": "短信发送::/sms-manage/batch", + "full_path": "短信发送 / 常规 / 短信发送", + "url": "https://2haohr.com/sms-manage/batch", + "keep": 1, + "description": "批量发送短信通知。", + "understanding": "触达通道。", + "note": "", + "screenshot": "screenshots/19_短信发送/常规/01_短信发送.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "发送工资条", + "node_key": "电子工资条::/payslip/home", + "full_path": "电子工资条 / 常规 / 发送工资条", + "url": "https://2haohr.com/payslip/home", + "keep": 1, + "description": "发送电子工资条给员工。", + "understanding": "保密发放。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/01_发送工资条.jpg" + }, + { + "module": "智能薪酬", + "group": "常规", + "name": "概览", + "node_key": "智能薪酬::/salary/desk", + "full_path": "智能薪酬 / 常规 / 概览", + "url": "https://2haohr.com/salary/desk", + "keep": 1, + "description": "智能薪酬数据概览。", + "understanding": "薪酬看板。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/常规/01_概览.jpg" + }, + { + "module": "智能薪酬", + "group": "数据采集", + "name": "员工考勤", + "node_key": "智能薪酬::/salary/data-collection/attendance", + "full_path": "智能薪酬 / 数据采集 / 员工考勤", + "url": "https://2haohr.com/salary/data-collection/attendance", + "keep": 1, + "description": "采集考勤数据用于计薪。", + "understanding": "数据采集环节。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "薪酬档案", + "node_key": "智能薪酬::/salary/data/archives", + "full_path": "智能薪酬 / 薪酬数据 / 薪酬档案", + "url": "https://2haohr.com/salary/data/archives", + "keep": 1, + "description": "员工薪酬档案。", + "understanding": "计薪基础。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg" + }, + { + "module": "智能薪酬", + "group": "报表中心", + "name": "薪酬报表", + "node_key": "智能薪酬::/salary/report/statistics", + "full_path": "智能薪酬 / 报表中心 / 薪酬报表", + "url": "https://2haohr.com/salary/report/statistics", + "keep": 1, + "description": "智能薪酬报表。", + "understanding": "统计。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "薪酬结构", + "node_key": "智能薪酬::/salary/setting/structure", + "full_path": "智能薪酬 / 薪酬设置 / 薪酬结构", + "url": "https://2haohr.com/salary/setting/structure", + "keep": 1, + "description": "薪酬结构(薪资项)配置。", + "understanding": "计薪规则基础。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "人员信息报送", + "node_key": "个税对接::/tax/reporting", + "full_path": "个税对接 / 常规 / 人员信息报送", + "url": "https://2haohr.com/tax/reporting", + "keep": 1, + "description": "向税务报送人员信息。", + "understanding": "个税申报前置。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/01_人员信息报送.jpg" + }, + { + "module": "AI员工助手", + "group": "常规", + "name": "AI员工助手", + "node_key": "AI员工助手::/ai-assistant/chat", + "full_path": "AI员工助手 / 常规 / AI员工助手", + "url": "https://2haohr.com/ai-assistant/chat", + "keep": 1, + "description": "面向员工的 AI 问答助手。", + "understanding": "降低 HR 答疑成本。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/常规/01_AI员工助手.jpg" + }, + { + "module": "AI员工助手", + "group": "数据统计", + "name": "总体使用情况", + "node_key": "AI员工助手::/ai-assistant/data-stats/usage-situation", + "full_path": "AI员工助手 / 数据统计 / 总体使用情况", + "url": "https://2haohr.com/ai-assistant/data-stats/usage-situation", + "keep": 1, + "description": "AI 助手使用统计。", + "understanding": "效果度量。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg" + }, + { + "module": "应用管理", + "group": "", + "name": "应用管理", + "node_key": "应用管理::/application-manage/application/list", + "full_path": "应用管理 / 应用管理", + "url": "https://2haohr.com/application-manage/application/list", + "keep": 1, + "description": "应用管理模块下「应用管理」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/24_应用管理/应用管理.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "员工档案库", + "node_key": "人事::/personnel/employee/archive", + "full_path": "人事 / 员工管理 / 员工档案库", + "url": "https://2haohr.com/personnel/employee/archive", + "keep": 1, + "description": "员工完整电子档案(证件/合同/学历/家庭等)的集中存储与调阅。", + "understanding": "360°档案,强调附件管理与字段完整率统计。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/02_员工档案库.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "转正管理", + "node_key": "人事::/personnel/relation/probation", + "full_path": "人事 / 员工关系 / 转正管理", + "url": "https://2haohr.com/personnel/relation/probation", + "keep": 1, + "description": "试用期到期提醒与转正申请/审批办理。", + "understanding": "与绩效试用期考核联动。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/02_转正管理.jpg" + }, + { + "module": "组织", + "group": "组织架构", + "name": "架构图", + "node_key": "组织::/org/dept/architecture", + "full_path": "组织 / 组织架构 / 架构图", + "url": "https://2haohr.com/org/dept/architecture", + "keep": 1, + "description": "可视化组织架构图展示与调整。", + "understanding": "直观呈现汇报关系,支持导出。", + "note": "", + "screenshot": "screenshots/03_组织/组织架构/02_架构图.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "职务管理", + "node_key": "组织::/org/job-system/title", + "full_path": "组织 / 岗位管理 / 职务管理", + "url": "https://2haohr.com/org/job-system/title", + "keep": 1, + "description": "职务序列与职务信息管理。", + "understanding": "与职级配合构成职级体系。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/02_职务管理.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "已入职", + "node_key": "招聘::/recruitment/candidate/employed/list", + "full_path": "招聘 / 候选人 / 已入职", + "url": "https://2haohr.com/recruitment/candidate/employed/list", + "keep": 1, + "description": "已录用入职的候选人。", + "understanding": "与人事入职管理衔接。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/02_已入职.jpg" + }, + { + "module": "招聘", + "group": "统计分析", + "name": "招聘分析", + "node_key": "招聘::/recruitment/stats/analysis", + "full_path": "招聘 / 统计分析 / 招聘分析", + "url": "https://2haohr.com/recruitment/stats/analysis", + "keep": 1, + "description": "招聘数据多维分析。", + "understanding": "优化招聘策略。", + "note": "", + "screenshot": "screenshots/04_招聘/统计分析/02_招聘分析.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "招聘工具", + "node_key": "招聘::/recruitment/settings/tools", + "full_path": "招聘 / 设置 / 招聘工具", + "url": "https://2haohr.com/recruitment/settings/tools", + "keep": 1, + "description": "招聘相关工具(如筛选/AI)配置。", + "understanding": "提效工具集。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/02_招聘工具.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "月考勤表", + "node_key": "考勤假期::/attendance/stat/monthly", + "full_path": "考勤假期 / 考勤统计 / 月考勤表", + "url": "https://2haohr.com/attendance/stat/monthly", + "keep": 1, + "description": "按月汇总的考勤统计表。", + "understanding": "薪酬核算的考勤依据。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "排班管理", + "node_key": "考勤假期::/attendance/work/roster", + "full_path": "考勤假期 / 考勤管理 / 排班管理", + "url": "https://2haohr.com/attendance/work/roster", + "keep": 1, + "description": "排班表编制与发布。", + "understanding": "复杂班制的核心,支持轮班。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/02_排班管理.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "手动调整", + "node_key": "考勤假期::/attendance/holiday/adjust", + "full_path": "考勤假期 / 假期管理 / 手动调整", + "url": "https://2haohr.com/attendance/holiday/adjust", + "keep": 1, + "description": "手动调整假期余额/记录。", + "understanding": "异常修正入口。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/02_手动调整.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "工资发放", + "node_key": "薪酬::/payroll/salary/payoff", + "full_path": "薪酬 / 薪酬管理 / 工资发放", + "url": "https://2haohr.com/payroll/salary/payoff", + "keep": 1, + "description": "工资发放确认与银行代发。", + "understanding": "对接银行代发,资金安全关键。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/02_工资发放.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批模板库", + "node_key": "审批::/approval/library/list", + "full_path": "审批 / 常规 / 审批模板库", + "url": "https://2haohr.com/approval/library/list", + "keep": 1, + "description": "预置审批流程模板。", + "understanding": "快速套用标准流程。", + "note": "", + "screenshot": "screenshots/07_审批/常规/02_审批模板库.jpg" + }, + { + "module": "培训学习", + "group": "线下培训", + "name": "开课日程", + "node_key": "培训学习::/training/manage/schedule", + "full_path": "培训学习 / 线下培训 / 开课日程", + "url": "https://2haohr.com/training/manage/schedule", + "keep": 1, + "description": "培训课程排期日程。", + "understanding": "线下课程时间管理。", + "note": "", + "screenshot": "screenshots/08_培训学习/线下培训/02_开课日程.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "学习计划", + "node_key": "培训学习::/training/online/learn-plan", + "full_path": "培训学习 / 线上学习 / 学习计划", + "url": "https://2haohr.com/training/online/learn-plan", + "keep": 1, + "description": "为员工指派学习计划。", + "understanding": "驱动在线学习。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/02_学习计划.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "试卷管理", + "node_key": "培训学习::/training/examine/paper", + "full_path": "培训学习 / 考试练习 / 试卷管理", + "url": "https://2haohr.com/training/examine/paper", + "keep": 1, + "description": "试卷组卷与管理。", + "understanding": "考试内容配置。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/02_试卷管理.jpg" + }, + { + "module": "培训学习", + "group": "培训设置", + "name": "团队设置", + "node_key": "培训学习::/training/option/team", + "full_path": "培训学习 / 培训设置 / 团队设置", + "url": "https://2haohr.com/training/option/team", + "keep": 1, + "description": "培训管理团队设置。", + "understanding": "权限协作。", + "note": "", + "screenshot": "screenshots/08_培训学习/培训设置/02_团队设置.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "历史绩效考核", + "node_key": "绩效::/performance-evaluation/manage/history", + "full_path": "绩效 / 考核管理 / 历史绩效考核", + "url": "https://2haohr.com/performance-evaluation/manage/history", + "keep": 1, + "description": "历史考核归档查询。", + "understanding": "结果追溯。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/02_历史绩效考核.jpg" + }, + { + "module": "绩效", + "group": "考核结果", + "name": "绩效考核记录", + "node_key": "绩效::/performance-evaluation/result/assessment", + "full_path": "绩效 / 考核结果 / 绩效考核记录", + "url": "https://2haohr.com/performance-evaluation/result/assessment", + "keep": 1, + "description": "考核过程与结果记录。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/09_绩效/考核结果/02_绩效考核记录.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "考核模板库", + "node_key": "绩效::/performance-evaluation/setting/template", + "full_path": "绩效 / 考核设置 / 考核模板库", + "url": "https://2haohr.com/performance-evaluation/setting/template", + "keep": 1, + "description": "考核表模板库。", + "understanding": "快速套用。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/02_考核模板库.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "账单核对", + "node_key": "社保公积金::/social-insurance/bill", + "full_path": "社保公积金 / 常规 / 账单核对", + "url": "https://2haohr.com/social-insurance/bill", + "keep": 1, + "description": "账单与实缴核对。", + "understanding": "差异排查。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/02_账单核对.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "企业制度", + "node_key": "行政管理::/oa/regulation", + "full_path": "行政管理 / 常规 / 企业制度", + "url": "https://2haohr.com/oa/regulation", + "keep": 1, + "description": "企业规章制度发布。", + "understanding": "制度沉淀。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/02_企业制度.jpg" + }, + { + "module": "行政管理", + "group": "会议室预定", + "name": "会议室管理", + "node_key": "行政管理::/oa/meeting/meetingroom", + "full_path": "行政管理 / 会议室预定 / 会议室管理", + "url": "https://2haohr.com/oa/meeting/meetingroom", + "keep": 1, + "description": "会议室资源维护。", + "understanding": "行政资源管理。", + "note": "", + "screenshot": "screenshots/11_行政管理/会议室预定/02_会议室管理.jpg" + }, + { + "module": "行政管理", + "group": "问卷调查", + "name": "问卷模板库", + "node_key": "行政管理::/oa/survey/template", + "full_path": "行政管理 / 问卷调查 / 问卷模板库", + "url": "https://2haohr.com/oa/survey/template", + "keep": 1, + "description": "问卷模板库。", + "understanding": "快速创建。", + "note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "已签署", + "node_key": "电子合同::/econtract/sign/signed", + "full_path": "电子合同 / 合同签署 / 已签署", + "url": "https://2haohr.com/econtract/sign/signed", + "keep": 1, + "description": "已完成签署合同。", + "understanding": "生效合同管理。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/02_已签署.jpg" + }, + { + "module": "电子合同", + "group": "设置", + "name": "合同模板", + "node_key": "电子合同::/econtract/settings/category", + "full_path": "电子合同 / 设置 / 合同模板", + "url": "https://2haohr.com/econtract/settings/category", + "keep": 1, + "description": "合同模板管理。", + "understanding": "标准化签署。", + "note": "", + "screenshot": "screenshots/12_电子合同/设置/02_合同模板.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "员工积分管理", + "node_key": "员工福利::/welfare/online-shop/Integral", + "full_path": "员工福利 / 常规 / 员工积分管理", + "url": "https://2haohr.com/welfare/online-shop/Integral", + "keep": 1, + "description": "员工积分发放与管理。", + "understanding": "激励体系。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/02_员工积分管理.jpg" + }, + { + "module": "人事仪表盘", + "group": "常规", + "name": "报告老板", + "node_key": "人事仪表盘::/dashboard/board/diyReport", + "full_path": "人事仪表盘 / 常规 / 报告老板", + "url": "https://2haohr.com/dashboard/board/diyReport", + "keep": 1, + "description": "面向管理层的经营人事报告。", + "understanding": "高层决策报告。", + "note": "", + "screenshot": "screenshots/16_人事仪表盘/常规/02_报告老板.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "钉钉", + "node_key": "第三方对接::/third-party-apps/dingtalk", + "full_path": "第三方对接 / 常规 / 钉钉", + "url": "https://2haohr.com/third-party-apps/dingtalk", + "keep": 1, + "description": "对接钉钉。", + "understanding": "生态集成。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/02_钉钉.jpg" + }, + { + "module": "短信发送", + "group": "常规", + "name": "发送记录", + "node_key": "短信发送::/sms-manage/sms-send/list", + "full_path": "短信发送 / 常规 / 发送记录", + "url": "https://2haohr.com/sms-manage/sms-send/list", + "keep": 1, + "description": "短信发送记录。", + "understanding": "留痕与计费。", + "note": "", + "screenshot": "screenshots/19_短信发送/常规/02_发送记录.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "发放记录", + "node_key": "电子工资条::/payslip/record", + "full_path": "电子工资条 / 常规 / 发放记录", + "url": "https://2haohr.com/payslip/record", + "keep": 1, + "description": "工资条发放记录。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/02_发放记录.jpg" + }, + { + "module": "智能薪酬", + "group": "常规", + "name": "薪酬核算", + "node_key": "智能薪酬::/salary/calculate", + "full_path": "智能薪酬 / 常规 / 薪酬核算", + "url": "https://2haohr.com/salary/calculate", + "keep": 1, + "description": "智能化薪酬核算。", + "understanding": "核心核算引擎。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/常规/02_薪酬核算.jpg" + }, + { + "module": "智能薪酬", + "group": "数据采集", + "name": "业务提报", + "node_key": "智能薪酬::/salary/data-collection/work-report", + "full_path": "智能薪酬 / 数据采集 / 业务提报", + "url": "https://2haohr.com/salary/data-collection/work-report", + "keep": 1, + "description": "采集业务提成/绩效等计薪数据。", + "understanding": "数据采集环节。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/数据采集/02_业务提报.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "减除费用确认", + "node_key": "智能薪酬::/salary/data/deduction-confirmation", + "full_path": "智能薪酬 / 薪酬数据 / 减除费用确认", + "url": "https://2haohr.com/salary/data/deduction-confirmation", + "keep": 1, + "description": "个税减除费用确认。", + "understanding": "个税计算前置。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg" + }, + { + "module": "智能薪酬", + "group": "报表中心", + "name": "薪酬分析", + "node_key": "智能薪酬::/salary/report/analysis", + "full_path": "智能薪酬 / 报表中心 / 薪酬分析", + "url": "https://2haohr.com/salary/report/analysis", + "keep": 1, + "description": "智能薪酬分析。", + "understanding": "成本洞察。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "基础设置", + "node_key": "智能薪酬::/salary/setting/company", + "full_path": "智能薪酬 / 薪酬设置 / 基础设置", + "url": "https://2haohr.com/salary/setting/company", + "keep": 1, + "description": "智能薪酬基础设置。", + "understanding": "公司级配置。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "个税申报", + "node_key": "个税对接::/tax/declaration", + "full_path": "个税对接 / 常规 / 个税申报", + "url": "https://2haohr.com/tax/declaration", + "keep": 1, + "description": "个人所得税申报。", + "understanding": "合规刚需。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/02_个税申报.jpg" + }, + { + "module": "AI员工助手", + "group": "常规", + "name": "知识库管理", + "node_key": "AI员工助手::/ai-assistant/knowledge-management", + "full_path": "AI员工助手 / 常规 / 知识库管理", + "url": "https://2haohr.com/ai-assistant/knowledge-management", + "keep": 1, + "description": "AI 助手知识库维护。", + "understanding": "决定回答质量。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/常规/02_知识库管理.jpg" + }, + { + "module": "AI员工助手", + "group": "数据统计", + "name": "操作记录", + "node_key": "AI员工助手::/ai-assistant/log", + "full_path": "AI员工助手 / 数据统计 / 操作记录", + "url": "https://2haohr.com/ai-assistant/log", + "keep": 1, + "description": "AI员工助手模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/数据统计/02_操作记录.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "统计分析", + "node_key": "人事::/personnel/employee/statistics", + "full_path": "人事 / 员工管理 / 统计分析", + "url": "https://2haohr.com/personnel/employee/statistics", + "keep": 1, + "description": "按维度对在职/结构/异动等人事数据的图表统计分析。", + "understanding": "偏 BI 图表,服务人事盘点。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/03_统计分析.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "离职管理", + "node_key": "人事::/personnel/relation/departure", + "full_path": "人事 / 员工关系 / 离职管理", + "url": "https://2haohr.com/personnel/relation/departure", + "keep": 1, + "description": "离职申请、离职办理、交接与离职档案。", + "understanding": "涉及权限回收、薪酬结算、社保停缴等联动。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/03_离职管理.jpg" + }, + { + "module": "组织", + "group": "组织架构", + "name": "工作地点", + "node_key": "组织::/org/dept/work-place", + "full_path": "组织 / 组织架构 / 工作地点", + "url": "https://2haohr.com/org/dept/work-place", + "keep": 1, + "description": "企业办公/工作地点的维护。", + "understanding": "关联考勤打卡范围与员工工作城市。", + "note": "", + "screenshot": "screenshots/03_组织/组织架构/03_工作地点.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "员工标签", + "node_key": "组织::/org/tag/emp-tags", + "full_path": "组织 / 岗位管理 / 员工标签", + "url": "https://2haohr.com/org/tag/emp-tags", + "keep": 1, + "description": "为员工打自定义标签用于分组/筛选。", + "understanding": "灵活分群,服务精细化运营与权限。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/03_员工标签.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "已淘汰", + "node_key": "招聘::/recruitment/candidate/eliminated/list", + "full_path": "招聘 / 候选人 / 已淘汰", + "url": "https://2haohr.com/recruitment/candidate/eliminated/list", + "keep": 1, + "description": "被淘汰候选人归档。", + "understanding": "复用人才库,支持再激活。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/03_已淘汰.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "招聘渠道", + "node_key": "招聘::/recruitment/settings/channels", + "full_path": "招聘 / 设置 / 招聘渠道", + "url": "https://2haohr.com/recruitment/settings/channels", + "keep": 1, + "description": "招聘发布渠道与聚合配置。", + "understanding": "对接外部招聘网站。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/03_招聘渠道.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "明细记录", + "node_key": "考勤假期::/attendance/stat/records", + "full_path": "考勤假期 / 考勤统计 / 明细记录", + "url": "https://2haohr.com/attendance/stat/records", + "keep": 1, + "description": "原始打卡明细记录查询。", + "understanding": "异常核查与申诉依据。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/03_明细记录.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "考勤规则", + "node_key": "考勤假期::/attendance/work/rules", + "full_path": "考勤假期 / 考勤管理 / 考勤规则", + "url": "https://2haohr.com/attendance/work/rules", + "keep": 1, + "description": "上下班/加班/迟到等规则配置。", + "understanding": "考勤计算引擎的规则中心。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "假期余额", + "node_key": "考勤假期::/attendance/holiday/balance", + "full_path": "考勤假期 / 假期管理 / 假期余额", + "url": "https://2haohr.com/attendance/holiday/balance", + "keep": 1, + "description": "各员工各类假期余额。", + "understanding": "请假审批的额度依据。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/03_假期余额.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "员工薪资", + "node_key": "薪酬::/payroll/salary/profiles", + "full_path": "薪酬 / 薪酬管理 / 员工薪资", + "url": "https://2haohr.com/payroll/salary/profiles", + "keep": 1, + "description": "员工薪资档案(基本工资/结构)。", + "understanding": "计薪基础数据。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批代理", + "node_key": "审批::/approval/agent/list", + "full_path": "审批 / 常规 / 审批代理", + "url": "https://2haohr.com/approval/agent/list", + "keep": 1, + "description": "审批人不在时的代理设置。", + "understanding": "保障流程不中断。", + "note": "", + "screenshot": "screenshots/07_审批/常规/03_审批代理.jpg" + }, + { + "module": "培训学习", + "group": "线下培训", + "name": "培训记录", + "node_key": "培训学习::/training/manage/record/list", + "full_path": "培训学习 / 线下培训 / 培训记录", + "url": "https://2haohr.com/training/manage/record/list", + "keep": 1, + "description": "培训完成记录。", + "understanding": "回流员工培训经历。", + "note": "", + "screenshot": "screenshots/08_培训学习/线下培训/03_培训记录.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "在线直播", + "node_key": "培训学习::/training/online/live-plan", + "full_path": "培训学习 / 线上学习 / 在线直播", + "url": "https://2haohr.com/training/online/live-plan", + "keep": 1, + "description": "在线直播课安排。", + "understanding": "远程培训能力。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/03_在线直播.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "考试安排", + "node_key": "培训学习::/training/examine/record", + "full_path": "培训学习 / 考试练习 / 考试安排", + "url": "https://2haohr.com/training/examine/record", + "keep": 1, + "description": "考试计划安排。", + "understanding": "组织在线考试。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/03_考试安排.jpg" + }, + { + "module": "培训学习", + "group": "培训设置", + "name": "自定义设置", + "node_key": "培训学习::/training/option/custom", + "full_path": "培训学习 / 培训设置 / 自定义设置", + "url": "https://2haohr.com/training/option/custom", + "keep": 1, + "description": "培训模块自定义设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/08_培训学习/培训设置/03_自定义设置.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "试用期考核", + "node_key": "绩效::/performance-evaluation/manage/probation", + "full_path": "绩效 / 考核管理 / 试用期考核", + "url": "https://2haohr.com/performance-evaluation/manage/probation", + "keep": 1, + "description": "试用期专项考核。", + "understanding": "与转正联动。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/03_试用期考核.jpg" + }, + { + "module": "绩效", + "group": "考核结果", + "name": "绩效面谈记录", + "node_key": "绩效::/performance-evaluation/result/interview", + "full_path": "绩效 / 考核结果 / 绩效面谈记录", + "url": "https://2haohr.com/performance-evaluation/result/interview", + "keep": 1, + "description": "绩效面谈内容记录。", + "understanding": "改进跟踪。", + "note": "", + "screenshot": "screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "考核团队", + "node_key": "绩效::/performance-evaluation/setting/team", + "full_path": "绩效 / 考核设置 / 考核团队", + "url": "https://2haohr.com/performance-evaluation/setting/team", + "keep": 1, + "description": "绩效管理团队设置。", + "understanding": "权限协作。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/03_考核团队.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "参保档案", + "node_key": "社保公积金::/social-insurance/archives", + "full_path": "社保公积金 / 常规 / 参保档案", + "url": "https://2haohr.com/social-insurance/archives", + "keep": 1, + "description": "员工参保档案。", + "understanding": "参保状态主数据。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/03_参保档案.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "新闻动态", + "node_key": "行政管理::/oa/news", + "full_path": "行政管理 / 常规 / 新闻动态", + "url": "https://2haohr.com/oa/news", + "keep": 1, + "description": "企业新闻动态。", + "understanding": "文化运营。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/03_新闻动态.jpg" + }, + { + "module": "行政管理", + "group": "会议室预定", + "name": "会议操作记录", + "node_key": "行政管理::/oa/meeting/record", + "full_path": "行政管理 / 会议室预定 / 会议操作记录", + "url": "https://2haohr.com/oa/meeting/record", + "keep": 1, + "description": "会议室操作日志。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg" + }, + { + "module": "行政管理", + "group": "问卷调查", + "name": "问卷操作记录", + "node_key": "行政管理::/oa/survey/log", + "full_path": "行政管理 / 问卷调查 / 问卷操作记录", + "url": "https://2haohr.com/oa/survey/log", + "keep": 1, + "description": "问卷操作日志。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "已作废", + "node_key": "电子合同::/econtract/sign/cancelled", + "full_path": "电子合同 / 合同签署 / 已作废", + "url": "https://2haohr.com/econtract/sign/cancelled", + "keep": 1, + "description": "作废合同归档。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/03_已作废.jpg" + }, + { + "module": "电子合同", + "group": "设置", + "name": "合同包", + "node_key": "电子合同::/econtract/settings/package", + "full_path": "电子合同 / 设置 / 合同包", + "url": "https://2haohr.com/econtract/settings/package", + "keep": 1, + "description": "合同套餐/额度包。", + "understanding": "计费额度管理。", + "note": "", + "screenshot": "screenshots/12_电子合同/设置/03_合同包.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "商品专区管理", + "node_key": "员工福利::/welfare/online-shop/giftbag", + "full_path": "员工福利 / 常规 / 商品专区管理", + "url": "https://2haohr.com/welfare/online-shop/giftbag", + "keep": 1, + "description": "福利商城商品管理。", + "understanding": "福利兑换运营。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/03_商品专区管理.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "飞书", + "node_key": "第三方对接::/third-party-apps/new-feishu", + "full_path": "第三方对接 / 常规 / 飞书", + "url": "https://2haohr.com/third-party-apps/new-feishu", + "keep": 1, + "description": "对接飞书。", + "understanding": "生态集成。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/03_飞书.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "反馈记录", + "node_key": "电子工资条::/payslip/feedback", + "full_path": "电子工资条 / 常规 / 反馈记录", + "url": "https://2haohr.com/payslip/feedback", + "keep": 1, + "description": "员工对工资条的确认/异议。", + "understanding": "确认闭环。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/03_反馈记录.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "税前扣除", + "node_key": "智能薪酬::/salary/data/special-deductions", + "full_path": "智能薪酬 / 薪酬数据 / 税前扣除", + "url": "https://2haohr.com/salary/data/special-deductions", + "keep": 1, + "description": "专项附加扣除等税前扣除。", + "understanding": "个税合规。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "成本设置", + "node_key": "智能薪酬::/salary/setting/cost", + "full_path": "智能薪酬 / 薪酬设置 / 成本设置", + "url": "https://2haohr.com/salary/setting/cost", + "keep": 1, + "description": "成本核算规则设置。", + "understanding": "成本分摊配置。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "纳税单位管理", + "node_key": "个税对接::/tax/message", + "full_path": "个税对接 / 常规 / 纳税单位管理", + "url": "https://2haohr.com/tax/message", + "keep": 1, + "description": "纳税主体单位管理。", + "understanding": "多主体申报。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/03_纳税单位管理.jpg" + }, + { + "module": "AI员工助手", + "group": "常规", + "name": "员工助手设置", + "node_key": "AI员工助手::/ai-assistant/assistant-settings", + "full_path": "AI员工助手 / 常规 / 员工助手设置", + "url": "https://2haohr.com/ai-assistant/assistant-settings", + "keep": 1, + "description": "AI 助手行为设置。", + "understanding": "配置。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/常规/03_员工助手设置.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "人事报表", + "node_key": "人事::/personnel/employee/personnel-report", + "full_path": "人事 / 员工管理 / 人事报表", + "url": "https://2haohr.com/personnel/employee/personnel-report", + "keep": 1, + "description": "各类标准人事报表(在职、异动、合同到期等)的生成与导出。", + "understanding": "满足周期性上报需求,需支持自定义与导出。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/04_人事报表.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "人事异动", + "node_key": "人事::/personnel/relation/unusual-action", + "full_path": "人事 / 员工关系 / 人事异动", + "url": "https://2haohr.com/personnel/relation/unusual-action", + "keep": 1, + "description": "部门/岗位/职级调动等异动记录与审批。", + "understanding": "组织变动留痕,影响薪酬与汇报关系。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/04_人事异动.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "职级管理", + "node_key": "组织::/org/rank", + "full_path": "组织 / 岗位管理 / 职级管理", + "url": "https://2haohr.com/org/rank", + "keep": 1, + "description": "职级/职等体系维护。", + "understanding": "薪酬带宽与晋升通道的基础。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/04_职级管理.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "招聘职位", + "node_key": "招聘::/recruitment/jobs", + "full_path": "招聘 / 候选人 / 招聘职位", + "url": "https://2haohr.com/recruitment/jobs", + "keep": 1, + "description": "招聘岗位(JD)的发布与管理。", + "understanding": "对接招聘门户与渠道分发。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/04_招聘职位.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "模板设置", + "node_key": "招聘::/recruitment/settings/templates", + "full_path": "招聘 / 设置 / 模板设置", + "url": "https://2haohr.com/recruitment/settings/templates", + "keep": 1, + "description": "招聘环节的邮件/短信/评价模板。", + "understanding": "标准化沟通。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/04_模板设置.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "考勤报表", + "node_key": "考勤假期::/attendance/stat/report", + "full_path": "考勤假期 / 考勤统计 / 考勤报表", + "url": "https://2haohr.com/attendance/stat/report", + "keep": 1, + "description": "考勤假期模块下「考勤报表」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "打卡方式", + "node_key": "考勤假期::/attendance/work/mode", + "full_path": "考勤假期 / 考勤管理 / 打卡方式", + "url": "https://2haohr.com/attendance/work/mode", + "keep": 1, + "description": "GPS/WiFi/人脸等打卡方式配置。", + "understanding": "决定打卡合规与防作弊。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "假期方案", + "node_key": "考勤假期::/attendance/holiday/rules", + "full_path": "考勤假期 / 假期管理 / 假期方案", + "url": "https://2haohr.com/attendance/holiday/rules", + "keep": 1, + "description": "年假/事病假等假期规则方案。", + "understanding": "假期计算的规则中心。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/04_假期方案.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "薪酬报表", + "node_key": "薪酬::/payroll/salary/report", + "full_path": "薪酬 / 薪酬管理 / 薪酬报表", + "url": "https://2haohr.com/payroll/salary/report", + "keep": 1, + "description": "薪酬相关报表。", + "understanding": "成本与发放统计。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批记录", + "node_key": "审批::/approval/record/list", + "full_path": "审批 / 常规 / 审批记录", + "url": "https://2haohr.com/approval/record/list", + "keep": 1, + "description": "历史审批记录查询。", + "understanding": "留痕与追溯。", + "note": "", + "screenshot": "screenshots/07_审批/常规/04_审批记录.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "学习进度", + "node_key": "培训学习::/training/online/progress", + "full_path": "培训学习 / 线上学习 / 学习进度", + "url": "https://2haohr.com/training/online/progress", + "keep": 1, + "description": "员工学习进度跟踪。", + "understanding": "学习效果监控。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/04_学习进度.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "考试记录", + "node_key": "培训学习::/training/examine/allExam", + "full_path": "培训学习 / 考试练习 / 考试记录", + "url": "https://2haohr.com/training/examine/allExam", + "keep": 1, + "description": "考试成绩记录。", + "understanding": "培训效果评估。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/04_考试记录.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "晋升考核", + "node_key": "绩效::/performance-evaluation/manage/promotion", + "full_path": "绩效 / 考核管理 / 晋升考核", + "url": "https://2haohr.com/performance-evaluation/manage/promotion", + "keep": 1, + "description": "晋升评估考核。", + "understanding": "与职级晋升联动。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/04_晋升考核.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "自定义设置", + "node_key": "绩效::/performance-evaluation/setting/custom", + "full_path": "绩效 / 考核设置 / 自定义设置", + "url": "https://2haohr.com/performance-evaluation/setting/custom", + "keep": 1, + "description": "绩效模块自定义设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/04_自定义设置.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "社保报表", + "node_key": "社保公积金::/social-insurance/reports", + "full_path": "社保公积金 / 常规 / 社保报表", + "url": "https://2haohr.com/social-insurance/reports", + "keep": 1, + "description": "社保缴纳报表。", + "understanding": "上报与统计。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/04_社保报表.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "开具证明", + "node_key": "行政管理::/oa/certificate", + "full_path": "行政管理 / 常规 / 开具证明", + "url": "https://2haohr.com/oa/certificate", + "keep": 1, + "description": "在职/收入等证明在线开具。", + "understanding": "员工自助高频需求。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/04_开具证明.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "合同档案库", + "node_key": "电子合同::/econtract/archive/home", + "full_path": "电子合同 / 合同签署 / 合同档案库", + "url": "https://2haohr.com/econtract/archive/home", + "keep": 1, + "description": "电子合同档案库。", + "understanding": "集中存储与检索。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/04_合同档案库.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "平安好医生", + "node_key": "员工福利::/welfare/pingan-doctor", + "full_path": "员工福利 / 常规 / 平安好医生", + "url": "https://2haohr.com/welfare/pingan-doctor", + "keep": 1, + "description": "对接平安好医生健康服务。", + "understanding": "健康福利增值。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/04_平安好医生.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "携程商旅", + "node_key": "第三方对接::/third-party-apps/ctrip", + "full_path": "第三方对接 / 常规 / 携程商旅", + "url": "https://2haohr.com/third-party-apps/ctrip", + "keep": 1, + "description": "对接携程商旅(差旅)。", + "understanding": "差旅报销联动。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/04_携程商旅.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "统计分析", + "node_key": "电子工资条::/payslip/statistic", + "full_path": "电子工资条 / 常规 / 统计分析", + "url": "https://2haohr.com/payslip/statistic", + "keep": 1, + "description": "工资条发送与确认统计。", + "understanding": "触达率监控。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/04_统计分析.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "个税记录", + "node_key": "智能薪酬::/salary/data/tax", + "full_path": "智能薪酬 / 薪酬数据 / 个税记录", + "url": "https://2haohr.com/salary/data/tax", + "keep": 1, + "description": "个税计算记录。", + "understanding": "代扣代缴留痕。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "操作记录", + "node_key": "智能薪酬::/salary/setting/log", + "full_path": "智能薪酬 / 薪酬设置 / 操作记录", + "url": "https://2haohr.com/salary/setting/log", + "keep": 1, + "description": "智能薪酬模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "操作记录", + "node_key": "个税对接::/tax/log", + "full_path": "个税对接 / 常规 / 操作记录", + "url": "https://2haohr.com/tax/log", + "keep": 1, + "description": "个税对接模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/04_操作记录.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "万能人事表格", + "node_key": "人事::/personnel/employee/personnel-form", + "full_path": "人事 / 员工管理 / 万能人事表格", + "url": "https://2haohr.com/personnel/employee/personnel-form", + "keep": 1, + "description": "自定义字段与筛选组合生成任意人事数据表格。", + "understanding": "灵活取数工具,降低对开发出报表的依赖。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/05_万能人事表格.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "关怀通知", + "node_key": "人事::/personnel/relation/care", + "full_path": "人事 / 员工关系 / 关怀通知", + "url": "https://2haohr.com/personnel/relation/care", + "keep": 1, + "description": "生日/周年/证件到期等关怀提醒与自动通知。", + "understanding": "员工体验运营,可配置触发规则与文案。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/05_关怀通知.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "组织报表", + "node_key": "组织::/org/org-forms", + "full_path": "组织 / 岗位管理 / 组织报表", + "url": "https://2haohr.com/org/org-forms", + "keep": 1, + "description": "组织维度(编制/人数/结构)的报表。", + "understanding": "支持组织盘点。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/05_组织报表.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "招聘门户", + "node_key": "招聘::/recruitment/wechat", + "full_path": "招聘 / 候选人 / 招聘门户", + "url": "https://2haohr.com/recruitment/wechat", + "keep": 1, + "description": "企业招聘官网/微信招聘门户配置。", + "understanding": "候选人投递入口,支持自定义。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/05_招聘门户.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "更多设置", + "node_key": "招聘::/recruitment/settings/others", + "full_path": "招聘 / 设置 / 更多设置", + "url": "https://2haohr.com/recruitment/settings/others", + "keep": 1, + "description": "招聘模块其它设置项。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/05_更多设置.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "字段管理", + "node_key": "考勤假期::/attendance/stat/field-manage", + "full_path": "考勤假期 / 考勤统计 / 字段管理", + "url": "https://2haohr.com/attendance/stat/field-manage", + "keep": 1, + "description": "考勤表字段自定义。", + "understanding": "适配企业统计口径。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/05_字段管理.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "考勤设置", + "node_key": "考勤假期::/attendance/work/settings", + "full_path": "考勤假期 / 考勤管理 / 考勤设置", + "url": "https://2haohr.com/attendance/work/settings", + "keep": 1, + "description": "考勤模块的其它设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "假期设置", + "node_key": "考勤假期::/attendance/holiday/settings", + "full_path": "考勤假期 / 假期管理 / 假期设置", + "url": "https://2haohr.com/attendance/holiday/settings", + "keep": 1, + "description": "假期模块其它设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/05_假期设置.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "薪酬分析", + "node_key": "薪酬::/payroll/salary/statistics", + "full_path": "薪酬 / 薪酬管理 / 薪酬分析", + "url": "https://2haohr.com/payroll/salary/statistics", + "keep": 1, + "description": "薪酬多维分析。", + "understanding": "人力成本洞察。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批交接", + "node_key": "审批::/approval/abnormal", + "full_path": "审批 / 常规 / 审批交接", + "url": "https://2haohr.com/approval/abnormal", + "keep": 1, + "description": "审批任务交接处理。", + "understanding": "人员变动时的流程转交。", + "note": "", + "screenshot": "screenshots/07_审批/常规/05_审批交接.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "学习记录", + "node_key": "培训学习::/training/online/record", + "full_path": "培训学习 / 线上学习 / 学习记录", + "url": "https://2haohr.com/training/online/record", + "keep": 1, + "description": "在线学习历史记录。", + "understanding": "留痕与统计。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/05_学习记录.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "考核组管理", + "node_key": "绩效::/performance-evaluation/manage/group", + "full_path": "绩效 / 考核管理 / 考核组管理", + "url": "https://2haohr.com/performance-evaluation/manage/group", + "keep": 1, + "description": "考核分组管理。", + "understanding": "按人群组织考核。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/05_考核组管理.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "操作记录", + "node_key": "绩效::/performance-evaluation/log", + "full_path": "绩效 / 考核设置 / 操作记录", + "url": "https://2haohr.com/performance-evaluation/log", + "keep": 1, + "description": "绩效模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/05_操作记录.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "社保分析", + "node_key": "社保公积金::/social-insurance/statistics", + "full_path": "社保公积金 / 常规 / 社保分析", + "url": "https://2haohr.com/social-insurance/statistics", + "keep": 1, + "description": "社保成本分析。", + "understanding": "成本洞察。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/05_社保分析.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "操作记录", + "node_key": "第三方对接::/third-party-apps/record", + "full_path": "第三方对接 / 常规 / 操作记录", + "url": "https://2haohr.com/third-party-apps/record", + "keep": 1, + "description": "第三方对接模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/05_操作记录.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "操作记录", + "node_key": "电子工资条::/payslip/log", + "full_path": "电子工资条 / 常规 / 操作记录", + "url": "https://2haohr.com/payslip/log", + "keep": 1, + "description": "电子工资条模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/05_操作记录.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "成本明细", + "node_key": "智能薪酬::/salary/data/cost", + "full_path": "智能薪酬 / 薪酬数据 / 成本明细", + "url": "https://2haohr.com/salary/data/cost", + "keep": 1, + "description": "人力成本明细。", + "understanding": "成本核算。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "人事动态", + "node_key": "人事::/personnel/employee/dynamic", + "full_path": "人事 / 员工管理 / 人事动态", + "url": "https://2haohr.com/personnel/employee/dynamic", + "keep": 1, + "description": "入职/转正/离职/生日等人事事件的动态时间线。", + "understanding": "事件流,可驱动关怀通知与提醒。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/06_人事动态.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "合同管理", + "node_key": "人事::/personnel/relation/contract", + "full_path": "人事 / 员工关系 / 合同管理", + "url": "https://2haohr.com/personnel/relation/contract", + "keep": 1, + "description": "劳动合同签订、续签、到期提醒与合同台账。", + "understanding": "与电子合同模块可打通;合同到期预警是刚需。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/06_合同管理.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "面试日程", + "node_key": "招聘::/recruitment/interviews", + "full_path": "招聘 / 候选人 / 面试日程", + "url": "https://2haohr.com/recruitment/interviews", + "keep": 1, + "description": "面试安排、通知与面试评价。", + "understanding": "支持面试官协同与日程提醒。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/06_面试日程.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "考勤确认", + "node_key": "考勤假期::/attendance/confirmation", + "full_path": "考勤假期 / 考勤统计 / 考勤确认", + "url": "https://2haohr.com/attendance/confirmation", + "keep": 1, + "description": "月末考勤结果确认锁定。", + "understanding": "确认后进入薪酬核算。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "计薪规则", + "node_key": "薪酬::/payroll/salary/rule", + "full_path": "薪酬 / 薪酬管理 / 计薪规则", + "url": "https://2haohr.com/payroll/salary/rule", + "keep": 1, + "description": "计薪周期与规则配置。", + "understanding": "薪酬引擎规则。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "操作记录", + "node_key": "审批::/approval/log", + "full_path": "审批 / 常规 / 操作记录", + "url": "https://2haohr.com/approval/log", + "keep": 1, + "description": "审批模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/07_审批/常规/06_操作记录.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "参保规则", + "node_key": "社保公积金::/social-insurance/rules", + "full_path": "社保公积金 / 常规 / 参保规则", + "url": "https://2haohr.com/social-insurance/rules", + "keep": 1, + "description": "参保基数/比例规则。", + "understanding": "地区政策配置核心。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/06_参保规则.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "沟通记录", + "node_key": "人事::/personnel/relation/talk", + "full_path": "人事 / 员工关系 / 沟通记录", + "url": "https://2haohr.com/personnel/relation/talk", + "keep": 1, + "description": "HR 与员工的沟通/谈话记录留存。", + "understanding": "员工关系管理留痕,支撑争议处理。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/07_沟通记录.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "人才库", + "node_key": "招聘::/recruitment/talent", + "full_path": "招聘 / 候选人 / 人才库", + "url": "https://2haohr.com/recruitment/talent", + "keep": 1, + "description": "企业人才储备库。", + "understanding": "沉淀历史候选人,降低复招成本。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/07_人才库.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "薪酬设置", + "node_key": "薪酬::/payroll/salary/settings", + "full_path": "薪酬 / 薪酬管理 / 薪酬设置", + "url": "https://2haohr.com/payroll/salary/settings", + "keep": 1, + "description": "薪酬模块设置。", + "understanding": "结构/权限配置。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "任职记录", + "node_key": "人事::/personnel/relation/office", + "full_path": "人事 / 员工关系 / 任职记录", + "url": "https://2haohr.com/personnel/relation/office", + "keep": 1, + "description": "员工历史任职(岗位/部门)变化记录。", + "understanding": "履历追溯,来源于人事异动。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/08_任职记录.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "年终奖计算", + "node_key": "薪酬::/payroll/salary/bonus", + "full_path": "薪酬 / 薪酬管理 / 年终奖计算", + "url": "https://2haohr.com/payroll/salary/bonus", + "keep": 1, + "description": "年终奖专项计税计算。", + "understanding": "年度一次性奖金个税处理。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "培训经历", + "node_key": "人事::/personnel/relation/train", + "full_path": "人事 / 员工关系 / 培训经历", + "url": "https://2haohr.com/personnel/relation/train", + "keep": 1, + "description": "员工参加培训的经历记录。", + "understanding": "与培训模块数据互通。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/09_培训经历.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "发送工资条", + "node_key": "薪酬::https://2haohr.com/payslip/home", + "full_path": "薪酬 / 薪酬管理 / 发送工资条", + "url": "https://2haohr.com/payslip/home", + "keep": 1, + "description": "发送电子工资条(跳转电子工资条模块)。", + "understanding": "与电子工资条模块共用。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "奖惩记录", + "node_key": "人事::/personnel/relation/award", + "full_path": "人事 / 员工关系 / 奖惩记录", + "url": "https://2haohr.com/personnel/relation/award", + "keep": 1, + "description": "员工奖励与处罚记录管理。", + "understanding": "影响绩效与晋升评估。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/10_奖惩记录.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "考察期管理", + "node_key": "人事::/personnel/relation/inspect", + "full_path": "人事 / 员工关系 / 考察期管理", + "url": "https://2haohr.com/personnel/relation/inspect", + "keep": 1, + "description": "特定员工考察期的设置与跟踪。", + "understanding": "试用/观察期管理的补充。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/11_考察期管理.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "实习生管理", + "node_key": "人事::/personnel/relation/internship", + "full_path": "人事 / 员工关系 / 实习生管理", + "url": "https://2haohr.com/personnel/relation/internship", + "keep": 1, + "description": "实习生专项档案与转正管理。", + "understanding": "针对实习用工的差异化流程。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/12_实习生管理.jpg" + } + ], + "kept_items": [ + { + "module": "工作台", + "group": "", + "name": "工作台首页", + "node_key": "工作台::/desk", + "full_path": "工作台 / 工作台首页", + "url": "https://2haohr.com/desk", + "keep": 1, + "description": "工作台模块下「工作台首页」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/01_工作台/工作台首页.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "员工花名册", + "node_key": "人事::/personnel/employee/roster", + "full_path": "人事 / 员工管理 / 员工花名册", + "url": "https://2haohr.com/personnel/employee/roster", + "keep": 1, + "description": "全体员工的核心名册列表,支持按部门/状态筛选、字段自定义、批量导入导出。", + "understanding": "员工主数据入口,几乎所有人事操作从此发起;字段可配置是关键需求。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/01_员工花名册.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "入职管理", + "node_key": "人事::/personnel/relation/enrollment", + "full_path": "人事 / 员工关系 / 入职管理", + "url": "https://2haohr.com/personnel/relation/enrollment", + "keep": 1, + "description": "待入职/入职办理流程,含入职登记、资料收集与开通账号。", + "understanding": "与招聘‘已入职’衔接;支持员工自助填写(AI 辅助)。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/01_入职管理.jpg" + }, + { + "module": "组织", + "group": "组织架构", + "name": "组织管理", + "node_key": "组织::/org/dept/manage/home", + "full_path": "组织 / 组织架构 / 组织管理", + "url": "https://2haohr.com/org/dept/manage/home", + "keep": 1, + "description": "部门树的增删改与部门负责人、编制等管理。", + "understanding": "组织主数据根节点,权限与审批的部门维度基础。", + "note": "", + "screenshot": "screenshots/03_组织/组织架构/01_组织管理.jpg" + }, + { + "module": "组织", + "group": "", + "name": "岗位管理", + "node_key": "组织::/org/job/job-management", + "full_path": "组织 / 岗位管理 / 岗位管理", + "url": "https://2haohr.com/org/job/job-management", + "keep": 1, + "description": "岗位设置、岗位职责与编制管理。", + "understanding": "岗位是招聘/薪酬/绩效的归属维度。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/01_岗位管理.jpg" + }, + { + "module": "招聘", + "group": "常规", + "name": "概览", + "node_key": "招聘::/recruitment/overview", + "full_path": "招聘 / 常规 / 概览", + "url": "https://2haohr.com/recruitment/overview", + "keep": 1, + "description": "招聘整体数据概览(职位/候选人/面试等看板)。", + "understanding": "招聘经理入口页。", + "note": "", + "screenshot": "screenshots/04_招聘/常规/01_概览.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "招聘中", + "node_key": "招聘::/recruitment/candidate/recruiting/list", + "full_path": "招聘 / 候选人 / 招聘中", + "url": "https://2haohr.com/recruitment/candidate/recruiting/list", + "keep": 1, + "description": "处于招聘流程中的候选人列表与阶段管理。", + "understanding": "ATS 核心看板,支持阶段流转。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/01_招聘中.jpg" + }, + { + "module": "招聘", + "group": "统计分析", + "name": "招聘报表", + "node_key": "招聘::/recruitment/stats/report", + "full_path": "招聘 / 统计分析 / 招聘报表", + "url": "https://2haohr.com/recruitment/stats/report", + "keep": 1, + "description": "招聘漏斗/周期/渠道效果报表。", + "understanding": "衡量招聘效率。", + "note": "", + "screenshot": "screenshots/04_招聘/统计分析/01_招聘报表.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "招聘团队", + "node_key": "招聘::/recruitment/settings/team", + "full_path": "招聘 / 设置 / 招聘团队", + "url": "https://2haohr.com/recruitment/settings/team", + "keep": 1, + "description": "招聘协作团队与角色权限设置。", + "understanding": "多角色协同招聘。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/01_招聘团队.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "每日考勤", + "node_key": "考勤假期::/attendance/stat/daily", + "full_path": "考勤假期 / 考勤统计 / 每日考勤", + "url": "https://2haohr.com/attendance/stat/daily", + "keep": 1, + "description": "按日展示全员打卡与异常。", + "understanding": "考勤日常监控入口。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "考勤分组", + "node_key": "考勤假期::/attendance/work/schedule", + "full_path": "考勤假期 / 考勤管理 / 考勤分组", + "url": "https://2haohr.com/attendance/work/schedule", + "keep": 1, + "description": "按人群划分考勤规则分组。", + "understanding": "不同班制人群差异化管理。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "休假一览", + "node_key": "考勤假期::/attendance/holiday/leaveRecords", + "full_path": "考勤假期 / 假期管理 / 休假一览", + "url": "https://2haohr.com/attendance/holiday/leaveRecords", + "keep": 1, + "description": "全员请假记录总览。", + "understanding": "假期使用监控。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/01_休假一览.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "月工资表", + "node_key": "薪酬::/payroll/salary/monthly", + "full_path": "薪酬 / 薪酬管理 / 月工资表", + "url": "https://2haohr.com/payroll/salary/monthly", + "keep": 1, + "description": "按月生成的工资核算表。", + "understanding": "薪酬核算主表,支持公式与批量。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/01_月工资表.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批表单", + "node_key": "审批::/approval/form/list", + "full_path": "审批 / 常规 / 审批表单", + "url": "https://2haohr.com/approval/form/list", + "keep": 1, + "description": "各类审批单据的发起与列表。", + "understanding": "通用审批入口。", + "note": "", + "screenshot": "screenshots/07_审批/常规/01_审批表单.jpg" + }, + { + "module": "培训学习", + "group": "线下培训", + "name": "培训计划", + "node_key": "培训学习::/training/manage/team", + "full_path": "培训学习 / 线下培训 / 培训计划", + "url": "https://2haohr.com/training/manage/team", + "keep": 1, + "description": "线下培训计划制定与管理。", + "understanding": "培训组织入口。", + "note": "", + "screenshot": "screenshots/08_培训学习/线下培训/01_培训计划.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "课程库", + "node_key": "培训学习::/training/online/course/home", + "full_path": "培训学习 / 线上学习 / 课程库", + "url": "https://2haohr.com/training/online/course/home", + "keep": 1, + "description": "在线课程资源库。", + "understanding": "LMS 内容中心。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/01_课程库.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "题库管理", + "node_key": "培训学习::/training/examine/question-bank", + "full_path": "培训学习 / 考试练习 / 题库管理", + "url": "https://2haohr.com/training/examine/question-bank", + "keep": 1, + "description": "考试题目库维护。", + "understanding": "考试基础数据。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/01_题库管理.jpg" + }, + { + "module": "培训学习", + "group": "培训设置", + "name": "讲师设置", + "node_key": "培训学习::/training/manage/teacher", + "full_path": "培训学习 / 培训设置 / 讲师设置", + "url": "https://2haohr.com/training/manage/teacher", + "keep": 1, + "description": "培训讲师维护。", + "understanding": "线下培训资源。", + "note": "", + "screenshot": "screenshots/08_培训学习/培训设置/01_讲师设置.jpg" + }, + { + "module": "绩效", + "group": "常规", + "name": "概览", + "node_key": "绩效::/performance-evaluation/desk", + "full_path": "绩效 / 常规 / 概览", + "url": "https://2haohr.com/performance-evaluation/desk", + "keep": 1, + "description": "绩效整体概览看板。", + "understanding": "绩效经理入口。", + "note": "", + "screenshot": "screenshots/09_绩效/常规/01_概览.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "绩效考核", + "node_key": "绩效::/performance-evaluation/manage/plan", + "full_path": "绩效 / 考核管理 / 绩效考核", + "url": "https://2haohr.com/performance-evaluation/manage/plan", + "keep": 1, + "description": "发起与管理绩效考核方案。", + "understanding": "绩效核心,含指标与流程。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/01_绩效考核.jpg" + }, + { + "module": "绩效", + "group": "考核结果", + "name": "员工绩效档案", + "node_key": "绩效::/performance-evaluation/result/archive", + "full_path": "绩效 / 考核结果 / 员工绩效档案", + "url": "https://2haohr.com/performance-evaluation/result/archive", + "keep": 1, + "description": "员工历史绩效档案。", + "understanding": "绩效履历。", + "note": "", + "screenshot": "screenshots/09_绩效/考核结果/01_员工绩效档案.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "指标库", + "node_key": "绩效::/performance-evaluation/setting/indicators", + "full_path": "绩效 / 考核设置 / 指标库", + "url": "https://2haohr.com/performance-evaluation/setting/indicators", + "keep": 1, + "description": "绩效指标(KPI/OKR)库。", + "understanding": "考核内容基础。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/01_指标库.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "参保账单", + "node_key": "社保公积金::/social-insurance/records", + "full_path": "社保公积金 / 常规 / 参保账单", + "url": "https://2haohr.com/social-insurance/records", + "keep": 1, + "description": "每月社保公积金参保账单。", + "understanding": "缴费核对入口。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/01_参保账单.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "企业公告", + "node_key": "行政管理::/oa/notice", + "full_path": "行政管理 / 常规 / 企业公告", + "url": "https://2haohr.com/oa/notice", + "keep": 1, + "description": "企业公告发布与阅读。", + "understanding": "全员触达。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/01_企业公告.jpg" + }, + { + "module": "行政管理", + "group": "会议室预定", + "name": "会议预定记录", + "node_key": "行政管理::/oa/meeting/reservation", + "full_path": "行政管理 / 会议室预定 / 会议预定记录", + "url": "https://2haohr.com/oa/meeting/reservation", + "keep": 1, + "description": "会议室预定记录。", + "understanding": "资源使用查询。", + "note": "", + "screenshot": "screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg" + }, + { + "module": "行政管理", + "group": "问卷调查", + "name": "问卷管理", + "node_key": "行政管理::/oa/survey/list", + "full_path": "行政管理 / 问卷调查 / 问卷管理", + "url": "https://2haohr.com/oa/survey/list", + "keep": 1, + "description": "企业问卷调查发起与统计。", + "understanding": "满意度/调研工具。", + "note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/01_问卷管理.jpg" + }, + { + "module": "电子合同", + "group": "常规", + "name": "概览", + "node_key": "电子合同::/econtract/overview", + "full_path": "电子合同 / 常规 / 概览", + "url": "https://2haohr.com/econtract/overview", + "keep": 1, + "description": "电子合同数据概览。", + "understanding": "签署情况看板。", + "note": "", + "screenshot": "screenshots/12_电子合同/常规/01_概览.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "签署中", + "node_key": "电子合同::/econtract/sign/signing", + "full_path": "电子合同 / 合同签署 / 签署中", + "url": "https://2haohr.com/econtract/sign/signing", + "keep": 1, + "description": "签署流程进行中的合同。", + "understanding": "待办跟踪。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/01_签署中.jpg" + }, + { + "module": "电子合同", + "group": "设置", + "name": "企业印章", + "node_key": "电子合同::/econtract/settings/seal", + "full_path": "电子合同 / 设置 / 企业印章", + "url": "https://2haohr.com/econtract/settings/seal", + "keep": 1, + "description": "企业电子印章管理。", + "understanding": "签署授权核心。", + "note": "", + "screenshot": "screenshots/12_电子合同/设置/01_企业印章.jpg" + }, + { + "module": "背景调查", + "group": "", + "name": "背景调查服务", + "node_key": "背景调查::/hrService/background-investigation/entry", + "full_path": "背景调查 / 背景调查服务", + "url": "https://2haohr.com/hrService/background-investigation/entry", + "keep": 1, + "description": "背景调查模块下「背景调查服务」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/13_背景调查/背景调查服务.jpg" + }, + { + "module": "人才测评", + "group": "", + "name": "人才测评服务", + "node_key": "人才测评::/hrService/employee-assessment/", + "full_path": "人才测评 / 人才测评服务", + "url": "https://2haohr.com/hrService/employee-assessment/", + "keep": 1, + "description": "人才测评模块下「人才测评服务」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/14_人才测评/人才测评服务.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "员工福利概况", + "node_key": "员工福利::/welfare/online-shop/overview", + "full_path": "员工福利 / 常规 / 员工福利概况", + "url": "https://2haohr.com/welfare/online-shop/overview", + "keep": 1, + "description": "福利运营数据概览。", + "understanding": "福利运营入口。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/01_员工福利概况.jpg" + }, + { + "module": "人事仪表盘", + "group": "常规", + "name": "我的仪表盘", + "node_key": "人事仪表盘::/dashboard/board/home", + "full_path": "人事仪表盘 / 常规 / 我的仪表盘", + "url": "https://2haohr.com/dashboard/board/home", + "keep": 1, + "description": "个人自定义数据看板。", + "understanding": "BI 自助看板。", + "note": "", + "screenshot": "screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "企业微信", + "node_key": "第三方对接::/third-party-apps/wework", + "full_path": "第三方对接 / 常规 / 企业微信", + "url": "https://2haohr.com/third-party-apps/wework", + "keep": 1, + "description": "对接企业微信(组织同步/消息)。", + "understanding": "生态集成。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/01_企业微信.jpg" + }, + { + "module": "培训商城", + "group": "", + "name": "培训商城(外部课程采购)", + "node_key": "培训商城::/training-mall", + "full_path": "培训商城 / 培训商城(外部课程采购)", + "url": "https://2haohr.com/training-mall", + "keep": 1, + "description": "培训商城模块下「培训商城(外部课程采购)」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/18_培训商城/培训商城(外部课程采购).jpg" + }, + { + "module": "短信发送", + "group": "常规", + "name": "短信发送", + "node_key": "短信发送::/sms-manage/batch", + "full_path": "短信发送 / 常规 / 短信发送", + "url": "https://2haohr.com/sms-manage/batch", + "keep": 1, + "description": "批量发送短信通知。", + "understanding": "触达通道。", + "note": "", + "screenshot": "screenshots/19_短信发送/常规/01_短信发送.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "发送工资条", + "node_key": "电子工资条::/payslip/home", + "full_path": "电子工资条 / 常规 / 发送工资条", + "url": "https://2haohr.com/payslip/home", + "keep": 1, + "description": "发送电子工资条给员工。", + "understanding": "保密发放。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/01_发送工资条.jpg" + }, + { + "module": "智能薪酬", + "group": "常规", + "name": "概览", + "node_key": "智能薪酬::/salary/desk", + "full_path": "智能薪酬 / 常规 / 概览", + "url": "https://2haohr.com/salary/desk", + "keep": 1, + "description": "智能薪酬数据概览。", + "understanding": "薪酬看板。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/常规/01_概览.jpg" + }, + { + "module": "智能薪酬", + "group": "数据采集", + "name": "员工考勤", + "node_key": "智能薪酬::/salary/data-collection/attendance", + "full_path": "智能薪酬 / 数据采集 / 员工考勤", + "url": "https://2haohr.com/salary/data-collection/attendance", + "keep": 1, + "description": "采集考勤数据用于计薪。", + "understanding": "数据采集环节。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "薪酬档案", + "node_key": "智能薪酬::/salary/data/archives", + "full_path": "智能薪酬 / 薪酬数据 / 薪酬档案", + "url": "https://2haohr.com/salary/data/archives", + "keep": 1, + "description": "员工薪酬档案。", + "understanding": "计薪基础。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg" + }, + { + "module": "智能薪酬", + "group": "报表中心", + "name": "薪酬报表", + "node_key": "智能薪酬::/salary/report/statistics", + "full_path": "智能薪酬 / 报表中心 / 薪酬报表", + "url": "https://2haohr.com/salary/report/statistics", + "keep": 1, + "description": "智能薪酬报表。", + "understanding": "统计。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "薪酬结构", + "node_key": "智能薪酬::/salary/setting/structure", + "full_path": "智能薪酬 / 薪酬设置 / 薪酬结构", + "url": "https://2haohr.com/salary/setting/structure", + "keep": 1, + "description": "薪酬结构(薪资项)配置。", + "understanding": "计薪规则基础。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "人员信息报送", + "node_key": "个税对接::/tax/reporting", + "full_path": "个税对接 / 常规 / 人员信息报送", + "url": "https://2haohr.com/tax/reporting", + "keep": 1, + "description": "向税务报送人员信息。", + "understanding": "个税申报前置。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/01_人员信息报送.jpg" + }, + { + "module": "AI员工助手", + "group": "常规", + "name": "AI员工助手", + "node_key": "AI员工助手::/ai-assistant/chat", + "full_path": "AI员工助手 / 常规 / AI员工助手", + "url": "https://2haohr.com/ai-assistant/chat", + "keep": 1, + "description": "面向员工的 AI 问答助手。", + "understanding": "降低 HR 答疑成本。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/常规/01_AI员工助手.jpg" + }, + { + "module": "AI员工助手", + "group": "数据统计", + "name": "总体使用情况", + "node_key": "AI员工助手::/ai-assistant/data-stats/usage-situation", + "full_path": "AI员工助手 / 数据统计 / 总体使用情况", + "url": "https://2haohr.com/ai-assistant/data-stats/usage-situation", + "keep": 1, + "description": "AI 助手使用统计。", + "understanding": "效果度量。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg" + }, + { + "module": "应用管理", + "group": "", + "name": "应用管理", + "node_key": "应用管理::/application-manage/application/list", + "full_path": "应用管理 / 应用管理", + "url": "https://2haohr.com/application-manage/application/list", + "keep": 1, + "description": "应用管理模块下「应用管理」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/24_应用管理/应用管理.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "员工档案库", + "node_key": "人事::/personnel/employee/archive", + "full_path": "人事 / 员工管理 / 员工档案库", + "url": "https://2haohr.com/personnel/employee/archive", + "keep": 1, + "description": "员工完整电子档案(证件/合同/学历/家庭等)的集中存储与调阅。", + "understanding": "360°档案,强调附件管理与字段完整率统计。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/02_员工档案库.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "转正管理", + "node_key": "人事::/personnel/relation/probation", + "full_path": "人事 / 员工关系 / 转正管理", + "url": "https://2haohr.com/personnel/relation/probation", + "keep": 1, + "description": "试用期到期提醒与转正申请/审批办理。", + "understanding": "与绩效试用期考核联动。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/02_转正管理.jpg" + }, + { + "module": "组织", + "group": "组织架构", + "name": "架构图", + "node_key": "组织::/org/dept/architecture", + "full_path": "组织 / 组织架构 / 架构图", + "url": "https://2haohr.com/org/dept/architecture", + "keep": 1, + "description": "可视化组织架构图展示与调整。", + "understanding": "直观呈现汇报关系,支持导出。", + "note": "", + "screenshot": "screenshots/03_组织/组织架构/02_架构图.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "职务管理", + "node_key": "组织::/org/job-system/title", + "full_path": "组织 / 岗位管理 / 职务管理", + "url": "https://2haohr.com/org/job-system/title", + "keep": 1, + "description": "职务序列与职务信息管理。", + "understanding": "与职级配合构成职级体系。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/02_职务管理.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "已入职", + "node_key": "招聘::/recruitment/candidate/employed/list", + "full_path": "招聘 / 候选人 / 已入职", + "url": "https://2haohr.com/recruitment/candidate/employed/list", + "keep": 1, + "description": "已录用入职的候选人。", + "understanding": "与人事入职管理衔接。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/02_已入职.jpg" + }, + { + "module": "招聘", + "group": "统计分析", + "name": "招聘分析", + "node_key": "招聘::/recruitment/stats/analysis", + "full_path": "招聘 / 统计分析 / 招聘分析", + "url": "https://2haohr.com/recruitment/stats/analysis", + "keep": 1, + "description": "招聘数据多维分析。", + "understanding": "优化招聘策略。", + "note": "", + "screenshot": "screenshots/04_招聘/统计分析/02_招聘分析.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "招聘工具", + "node_key": "招聘::/recruitment/settings/tools", + "full_path": "招聘 / 设置 / 招聘工具", + "url": "https://2haohr.com/recruitment/settings/tools", + "keep": 1, + "description": "招聘相关工具(如筛选/AI)配置。", + "understanding": "提效工具集。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/02_招聘工具.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "月考勤表", + "node_key": "考勤假期::/attendance/stat/monthly", + "full_path": "考勤假期 / 考勤统计 / 月考勤表", + "url": "https://2haohr.com/attendance/stat/monthly", + "keep": 1, + "description": "按月汇总的考勤统计表。", + "understanding": "薪酬核算的考勤依据。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "排班管理", + "node_key": "考勤假期::/attendance/work/roster", + "full_path": "考勤假期 / 考勤管理 / 排班管理", + "url": "https://2haohr.com/attendance/work/roster", + "keep": 1, + "description": "排班表编制与发布。", + "understanding": "复杂班制的核心,支持轮班。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/02_排班管理.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "手动调整", + "node_key": "考勤假期::/attendance/holiday/adjust", + "full_path": "考勤假期 / 假期管理 / 手动调整", + "url": "https://2haohr.com/attendance/holiday/adjust", + "keep": 1, + "description": "手动调整假期余额/记录。", + "understanding": "异常修正入口。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/02_手动调整.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "工资发放", + "node_key": "薪酬::/payroll/salary/payoff", + "full_path": "薪酬 / 薪酬管理 / 工资发放", + "url": "https://2haohr.com/payroll/salary/payoff", + "keep": 1, + "description": "工资发放确认与银行代发。", + "understanding": "对接银行代发,资金安全关键。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/02_工资发放.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批模板库", + "node_key": "审批::/approval/library/list", + "full_path": "审批 / 常规 / 审批模板库", + "url": "https://2haohr.com/approval/library/list", + "keep": 1, + "description": "预置审批流程模板。", + "understanding": "快速套用标准流程。", + "note": "", + "screenshot": "screenshots/07_审批/常规/02_审批模板库.jpg" + }, + { + "module": "培训学习", + "group": "线下培训", + "name": "开课日程", + "node_key": "培训学习::/training/manage/schedule", + "full_path": "培训学习 / 线下培训 / 开课日程", + "url": "https://2haohr.com/training/manage/schedule", + "keep": 1, + "description": "培训课程排期日程。", + "understanding": "线下课程时间管理。", + "note": "", + "screenshot": "screenshots/08_培训学习/线下培训/02_开课日程.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "学习计划", + "node_key": "培训学习::/training/online/learn-plan", + "full_path": "培训学习 / 线上学习 / 学习计划", + "url": "https://2haohr.com/training/online/learn-plan", + "keep": 1, + "description": "为员工指派学习计划。", + "understanding": "驱动在线学习。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/02_学习计划.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "试卷管理", + "node_key": "培训学习::/training/examine/paper", + "full_path": "培训学习 / 考试练习 / 试卷管理", + "url": "https://2haohr.com/training/examine/paper", + "keep": 1, + "description": "试卷组卷与管理。", + "understanding": "考试内容配置。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/02_试卷管理.jpg" + }, + { + "module": "培训学习", + "group": "培训设置", + "name": "团队设置", + "node_key": "培训学习::/training/option/team", + "full_path": "培训学习 / 培训设置 / 团队设置", + "url": "https://2haohr.com/training/option/team", + "keep": 1, + "description": "培训管理团队设置。", + "understanding": "权限协作。", + "note": "", + "screenshot": "screenshots/08_培训学习/培训设置/02_团队设置.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "历史绩效考核", + "node_key": "绩效::/performance-evaluation/manage/history", + "full_path": "绩效 / 考核管理 / 历史绩效考核", + "url": "https://2haohr.com/performance-evaluation/manage/history", + "keep": 1, + "description": "历史考核归档查询。", + "understanding": "结果追溯。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/02_历史绩效考核.jpg" + }, + { + "module": "绩效", + "group": "考核结果", + "name": "绩效考核记录", + "node_key": "绩效::/performance-evaluation/result/assessment", + "full_path": "绩效 / 考核结果 / 绩效考核记录", + "url": "https://2haohr.com/performance-evaluation/result/assessment", + "keep": 1, + "description": "考核过程与结果记录。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/09_绩效/考核结果/02_绩效考核记录.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "考核模板库", + "node_key": "绩效::/performance-evaluation/setting/template", + "full_path": "绩效 / 考核设置 / 考核模板库", + "url": "https://2haohr.com/performance-evaluation/setting/template", + "keep": 1, + "description": "考核表模板库。", + "understanding": "快速套用。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/02_考核模板库.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "账单核对", + "node_key": "社保公积金::/social-insurance/bill", + "full_path": "社保公积金 / 常规 / 账单核对", + "url": "https://2haohr.com/social-insurance/bill", + "keep": 1, + "description": "账单与实缴核对。", + "understanding": "差异排查。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/02_账单核对.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "企业制度", + "node_key": "行政管理::/oa/regulation", + "full_path": "行政管理 / 常规 / 企业制度", + "url": "https://2haohr.com/oa/regulation", + "keep": 1, + "description": "企业规章制度发布。", + "understanding": "制度沉淀。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/02_企业制度.jpg" + }, + { + "module": "行政管理", + "group": "会议室预定", + "name": "会议室管理", + "node_key": "行政管理::/oa/meeting/meetingroom", + "full_path": "行政管理 / 会议室预定 / 会议室管理", + "url": "https://2haohr.com/oa/meeting/meetingroom", + "keep": 1, + "description": "会议室资源维护。", + "understanding": "行政资源管理。", + "note": "", + "screenshot": "screenshots/11_行政管理/会议室预定/02_会议室管理.jpg" + }, + { + "module": "行政管理", + "group": "问卷调查", + "name": "问卷模板库", + "node_key": "行政管理::/oa/survey/template", + "full_path": "行政管理 / 问卷调查 / 问卷模板库", + "url": "https://2haohr.com/oa/survey/template", + "keep": 1, + "description": "问卷模板库。", + "understanding": "快速创建。", + "note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "已签署", + "node_key": "电子合同::/econtract/sign/signed", + "full_path": "电子合同 / 合同签署 / 已签署", + "url": "https://2haohr.com/econtract/sign/signed", + "keep": 1, + "description": "已完成签署合同。", + "understanding": "生效合同管理。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/02_已签署.jpg" + }, + { + "module": "电子合同", + "group": "设置", + "name": "合同模板", + "node_key": "电子合同::/econtract/settings/category", + "full_path": "电子合同 / 设置 / 合同模板", + "url": "https://2haohr.com/econtract/settings/category", + "keep": 1, + "description": "合同模板管理。", + "understanding": "标准化签署。", + "note": "", + "screenshot": "screenshots/12_电子合同/设置/02_合同模板.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "员工积分管理", + "node_key": "员工福利::/welfare/online-shop/Integral", + "full_path": "员工福利 / 常规 / 员工积分管理", + "url": "https://2haohr.com/welfare/online-shop/Integral", + "keep": 1, + "description": "员工积分发放与管理。", + "understanding": "激励体系。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/02_员工积分管理.jpg" + }, + { + "module": "人事仪表盘", + "group": "常规", + "name": "报告老板", + "node_key": "人事仪表盘::/dashboard/board/diyReport", + "full_path": "人事仪表盘 / 常规 / 报告老板", + "url": "https://2haohr.com/dashboard/board/diyReport", + "keep": 1, + "description": "面向管理层的经营人事报告。", + "understanding": "高层决策报告。", + "note": "", + "screenshot": "screenshots/16_人事仪表盘/常规/02_报告老板.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "钉钉", + "node_key": "第三方对接::/third-party-apps/dingtalk", + "full_path": "第三方对接 / 常规 / 钉钉", + "url": "https://2haohr.com/third-party-apps/dingtalk", + "keep": 1, + "description": "对接钉钉。", + "understanding": "生态集成。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/02_钉钉.jpg" + }, + { + "module": "短信发送", + "group": "常规", + "name": "发送记录", + "node_key": "短信发送::/sms-manage/sms-send/list", + "full_path": "短信发送 / 常规 / 发送记录", + "url": "https://2haohr.com/sms-manage/sms-send/list", + "keep": 1, + "description": "短信发送记录。", + "understanding": "留痕与计费。", + "note": "", + "screenshot": "screenshots/19_短信发送/常规/02_发送记录.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "发放记录", + "node_key": "电子工资条::/payslip/record", + "full_path": "电子工资条 / 常规 / 发放记录", + "url": "https://2haohr.com/payslip/record", + "keep": 1, + "description": "工资条发放记录。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/02_发放记录.jpg" + }, + { + "module": "智能薪酬", + "group": "常规", + "name": "薪酬核算", + "node_key": "智能薪酬::/salary/calculate", + "full_path": "智能薪酬 / 常规 / 薪酬核算", + "url": "https://2haohr.com/salary/calculate", + "keep": 1, + "description": "智能化薪酬核算。", + "understanding": "核心核算引擎。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/常规/02_薪酬核算.jpg" + }, + { + "module": "智能薪酬", + "group": "数据采集", + "name": "业务提报", + "node_key": "智能薪酬::/salary/data-collection/work-report", + "full_path": "智能薪酬 / 数据采集 / 业务提报", + "url": "https://2haohr.com/salary/data-collection/work-report", + "keep": 1, + "description": "采集业务提成/绩效等计薪数据。", + "understanding": "数据采集环节。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/数据采集/02_业务提报.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "减除费用确认", + "node_key": "智能薪酬::/salary/data/deduction-confirmation", + "full_path": "智能薪酬 / 薪酬数据 / 减除费用确认", + "url": "https://2haohr.com/salary/data/deduction-confirmation", + "keep": 1, + "description": "个税减除费用确认。", + "understanding": "个税计算前置。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg" + }, + { + "module": "智能薪酬", + "group": "报表中心", + "name": "薪酬分析", + "node_key": "智能薪酬::/salary/report/analysis", + "full_path": "智能薪酬 / 报表中心 / 薪酬分析", + "url": "https://2haohr.com/salary/report/analysis", + "keep": 1, + "description": "智能薪酬分析。", + "understanding": "成本洞察。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "基础设置", + "node_key": "智能薪酬::/salary/setting/company", + "full_path": "智能薪酬 / 薪酬设置 / 基础设置", + "url": "https://2haohr.com/salary/setting/company", + "keep": 1, + "description": "智能薪酬基础设置。", + "understanding": "公司级配置。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "个税申报", + "node_key": "个税对接::/tax/declaration", + "full_path": "个税对接 / 常规 / 个税申报", + "url": "https://2haohr.com/tax/declaration", + "keep": 1, + "description": "个人所得税申报。", + "understanding": "合规刚需。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/02_个税申报.jpg" + }, + { + "module": "AI员工助手", + "group": "常规", + "name": "知识库管理", + "node_key": "AI员工助手::/ai-assistant/knowledge-management", + "full_path": "AI员工助手 / 常规 / 知识库管理", + "url": "https://2haohr.com/ai-assistant/knowledge-management", + "keep": 1, + "description": "AI 助手知识库维护。", + "understanding": "决定回答质量。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/常规/02_知识库管理.jpg" + }, + { + "module": "AI员工助手", + "group": "数据统计", + "name": "操作记录", + "node_key": "AI员工助手::/ai-assistant/log", + "full_path": "AI员工助手 / 数据统计 / 操作记录", + "url": "https://2haohr.com/ai-assistant/log", + "keep": 1, + "description": "AI员工助手模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/数据统计/02_操作记录.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "统计分析", + "node_key": "人事::/personnel/employee/statistics", + "full_path": "人事 / 员工管理 / 统计分析", + "url": "https://2haohr.com/personnel/employee/statistics", + "keep": 1, + "description": "按维度对在职/结构/异动等人事数据的图表统计分析。", + "understanding": "偏 BI 图表,服务人事盘点。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/03_统计分析.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "离职管理", + "node_key": "人事::/personnel/relation/departure", + "full_path": "人事 / 员工关系 / 离职管理", + "url": "https://2haohr.com/personnel/relation/departure", + "keep": 1, + "description": "离职申请、离职办理、交接与离职档案。", + "understanding": "涉及权限回收、薪酬结算、社保停缴等联动。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/03_离职管理.jpg" + }, + { + "module": "组织", + "group": "组织架构", + "name": "工作地点", + "node_key": "组织::/org/dept/work-place", + "full_path": "组织 / 组织架构 / 工作地点", + "url": "https://2haohr.com/org/dept/work-place", + "keep": 1, + "description": "企业办公/工作地点的维护。", + "understanding": "关联考勤打卡范围与员工工作城市。", + "note": "", + "screenshot": "screenshots/03_组织/组织架构/03_工作地点.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "员工标签", + "node_key": "组织::/org/tag/emp-tags", + "full_path": "组织 / 岗位管理 / 员工标签", + "url": "https://2haohr.com/org/tag/emp-tags", + "keep": 1, + "description": "为员工打自定义标签用于分组/筛选。", + "understanding": "灵活分群,服务精细化运营与权限。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/03_员工标签.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "已淘汰", + "node_key": "招聘::/recruitment/candidate/eliminated/list", + "full_path": "招聘 / 候选人 / 已淘汰", + "url": "https://2haohr.com/recruitment/candidate/eliminated/list", + "keep": 1, + "description": "被淘汰候选人归档。", + "understanding": "复用人才库,支持再激活。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/03_已淘汰.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "招聘渠道", + "node_key": "招聘::/recruitment/settings/channels", + "full_path": "招聘 / 设置 / 招聘渠道", + "url": "https://2haohr.com/recruitment/settings/channels", + "keep": 1, + "description": "招聘发布渠道与聚合配置。", + "understanding": "对接外部招聘网站。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/03_招聘渠道.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "明细记录", + "node_key": "考勤假期::/attendance/stat/records", + "full_path": "考勤假期 / 考勤统计 / 明细记录", + "url": "https://2haohr.com/attendance/stat/records", + "keep": 1, + "description": "原始打卡明细记录查询。", + "understanding": "异常核查与申诉依据。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/03_明细记录.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "考勤规则", + "node_key": "考勤假期::/attendance/work/rules", + "full_path": "考勤假期 / 考勤管理 / 考勤规则", + "url": "https://2haohr.com/attendance/work/rules", + "keep": 1, + "description": "上下班/加班/迟到等规则配置。", + "understanding": "考勤计算引擎的规则中心。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "假期余额", + "node_key": "考勤假期::/attendance/holiday/balance", + "full_path": "考勤假期 / 假期管理 / 假期余额", + "url": "https://2haohr.com/attendance/holiday/balance", + "keep": 1, + "description": "各员工各类假期余额。", + "understanding": "请假审批的额度依据。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/03_假期余额.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "员工薪资", + "node_key": "薪酬::/payroll/salary/profiles", + "full_path": "薪酬 / 薪酬管理 / 员工薪资", + "url": "https://2haohr.com/payroll/salary/profiles", + "keep": 1, + "description": "员工薪资档案(基本工资/结构)。", + "understanding": "计薪基础数据。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批代理", + "node_key": "审批::/approval/agent/list", + "full_path": "审批 / 常规 / 审批代理", + "url": "https://2haohr.com/approval/agent/list", + "keep": 1, + "description": "审批人不在时的代理设置。", + "understanding": "保障流程不中断。", + "note": "", + "screenshot": "screenshots/07_审批/常规/03_审批代理.jpg" + }, + { + "module": "培训学习", + "group": "线下培训", + "name": "培训记录", + "node_key": "培训学习::/training/manage/record/list", + "full_path": "培训学习 / 线下培训 / 培训记录", + "url": "https://2haohr.com/training/manage/record/list", + "keep": 1, + "description": "培训完成记录。", + "understanding": "回流员工培训经历。", + "note": "", + "screenshot": "screenshots/08_培训学习/线下培训/03_培训记录.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "在线直播", + "node_key": "培训学习::/training/online/live-plan", + "full_path": "培训学习 / 线上学习 / 在线直播", + "url": "https://2haohr.com/training/online/live-plan", + "keep": 1, + "description": "在线直播课安排。", + "understanding": "远程培训能力。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/03_在线直播.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "考试安排", + "node_key": "培训学习::/training/examine/record", + "full_path": "培训学习 / 考试练习 / 考试安排", + "url": "https://2haohr.com/training/examine/record", + "keep": 1, + "description": "考试计划安排。", + "understanding": "组织在线考试。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/03_考试安排.jpg" + }, + { + "module": "培训学习", + "group": "培训设置", + "name": "自定义设置", + "node_key": "培训学习::/training/option/custom", + "full_path": "培训学习 / 培训设置 / 自定义设置", + "url": "https://2haohr.com/training/option/custom", + "keep": 1, + "description": "培训模块自定义设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/08_培训学习/培训设置/03_自定义设置.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "试用期考核", + "node_key": "绩效::/performance-evaluation/manage/probation", + "full_path": "绩效 / 考核管理 / 试用期考核", + "url": "https://2haohr.com/performance-evaluation/manage/probation", + "keep": 1, + "description": "试用期专项考核。", + "understanding": "与转正联动。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/03_试用期考核.jpg" + }, + { + "module": "绩效", + "group": "考核结果", + "name": "绩效面谈记录", + "node_key": "绩效::/performance-evaluation/result/interview", + "full_path": "绩效 / 考核结果 / 绩效面谈记录", + "url": "https://2haohr.com/performance-evaluation/result/interview", + "keep": 1, + "description": "绩效面谈内容记录。", + "understanding": "改进跟踪。", + "note": "", + "screenshot": "screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "考核团队", + "node_key": "绩效::/performance-evaluation/setting/team", + "full_path": "绩效 / 考核设置 / 考核团队", + "url": "https://2haohr.com/performance-evaluation/setting/team", + "keep": 1, + "description": "绩效管理团队设置。", + "understanding": "权限协作。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/03_考核团队.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "参保档案", + "node_key": "社保公积金::/social-insurance/archives", + "full_path": "社保公积金 / 常规 / 参保档案", + "url": "https://2haohr.com/social-insurance/archives", + "keep": 1, + "description": "员工参保档案。", + "understanding": "参保状态主数据。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/03_参保档案.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "新闻动态", + "node_key": "行政管理::/oa/news", + "full_path": "行政管理 / 常规 / 新闻动态", + "url": "https://2haohr.com/oa/news", + "keep": 1, + "description": "企业新闻动态。", + "understanding": "文化运营。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/03_新闻动态.jpg" + }, + { + "module": "行政管理", + "group": "会议室预定", + "name": "会议操作记录", + "node_key": "行政管理::/oa/meeting/record", + "full_path": "行政管理 / 会议室预定 / 会议操作记录", + "url": "https://2haohr.com/oa/meeting/record", + "keep": 1, + "description": "会议室操作日志。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg" + }, + { + "module": "行政管理", + "group": "问卷调查", + "name": "问卷操作记录", + "node_key": "行政管理::/oa/survey/log", + "full_path": "行政管理 / 问卷调查 / 问卷操作记录", + "url": "https://2haohr.com/oa/survey/log", + "keep": 1, + "description": "问卷操作日志。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "已作废", + "node_key": "电子合同::/econtract/sign/cancelled", + "full_path": "电子合同 / 合同签署 / 已作废", + "url": "https://2haohr.com/econtract/sign/cancelled", + "keep": 1, + "description": "作废合同归档。", + "understanding": "留痕。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/03_已作废.jpg" + }, + { + "module": "电子合同", + "group": "设置", + "name": "合同包", + "node_key": "电子合同::/econtract/settings/package", + "full_path": "电子合同 / 设置 / 合同包", + "url": "https://2haohr.com/econtract/settings/package", + "keep": 1, + "description": "合同套餐/额度包。", + "understanding": "计费额度管理。", + "note": "", + "screenshot": "screenshots/12_电子合同/设置/03_合同包.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "商品专区管理", + "node_key": "员工福利::/welfare/online-shop/giftbag", + "full_path": "员工福利 / 常规 / 商品专区管理", + "url": "https://2haohr.com/welfare/online-shop/giftbag", + "keep": 1, + "description": "福利商城商品管理。", + "understanding": "福利兑换运营。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/03_商品专区管理.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "飞书", + "node_key": "第三方对接::/third-party-apps/new-feishu", + "full_path": "第三方对接 / 常规 / 飞书", + "url": "https://2haohr.com/third-party-apps/new-feishu", + "keep": 1, + "description": "对接飞书。", + "understanding": "生态集成。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/03_飞书.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "反馈记录", + "node_key": "电子工资条::/payslip/feedback", + "full_path": "电子工资条 / 常规 / 反馈记录", + "url": "https://2haohr.com/payslip/feedback", + "keep": 1, + "description": "员工对工资条的确认/异议。", + "understanding": "确认闭环。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/03_反馈记录.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "税前扣除", + "node_key": "智能薪酬::/salary/data/special-deductions", + "full_path": "智能薪酬 / 薪酬数据 / 税前扣除", + "url": "https://2haohr.com/salary/data/special-deductions", + "keep": 1, + "description": "专项附加扣除等税前扣除。", + "understanding": "个税合规。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "成本设置", + "node_key": "智能薪酬::/salary/setting/cost", + "full_path": "智能薪酬 / 薪酬设置 / 成本设置", + "url": "https://2haohr.com/salary/setting/cost", + "keep": 1, + "description": "成本核算规则设置。", + "understanding": "成本分摊配置。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "纳税单位管理", + "node_key": "个税对接::/tax/message", + "full_path": "个税对接 / 常规 / 纳税单位管理", + "url": "https://2haohr.com/tax/message", + "keep": 1, + "description": "纳税主体单位管理。", + "understanding": "多主体申报。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/03_纳税单位管理.jpg" + }, + { + "module": "AI员工助手", + "group": "常规", + "name": "员工助手设置", + "node_key": "AI员工助手::/ai-assistant/assistant-settings", + "full_path": "AI员工助手 / 常规 / 员工助手设置", + "url": "https://2haohr.com/ai-assistant/assistant-settings", + "keep": 1, + "description": "AI 助手行为设置。", + "understanding": "配置。", + "note": "", + "screenshot": "screenshots/23_AI员工助手/常规/03_员工助手设置.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "人事报表", + "node_key": "人事::/personnel/employee/personnel-report", + "full_path": "人事 / 员工管理 / 人事报表", + "url": "https://2haohr.com/personnel/employee/personnel-report", + "keep": 1, + "description": "各类标准人事报表(在职、异动、合同到期等)的生成与导出。", + "understanding": "满足周期性上报需求,需支持自定义与导出。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/04_人事报表.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "人事异动", + "node_key": "人事::/personnel/relation/unusual-action", + "full_path": "人事 / 员工关系 / 人事异动", + "url": "https://2haohr.com/personnel/relation/unusual-action", + "keep": 1, + "description": "部门/岗位/职级调动等异动记录与审批。", + "understanding": "组织变动留痕,影响薪酬与汇报关系。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/04_人事异动.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "职级管理", + "node_key": "组织::/org/rank", + "full_path": "组织 / 岗位管理 / 职级管理", + "url": "https://2haohr.com/org/rank", + "keep": 1, + "description": "职级/职等体系维护。", + "understanding": "薪酬带宽与晋升通道的基础。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/04_职级管理.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "招聘职位", + "node_key": "招聘::/recruitment/jobs", + "full_path": "招聘 / 候选人 / 招聘职位", + "url": "https://2haohr.com/recruitment/jobs", + "keep": 1, + "description": "招聘岗位(JD)的发布与管理。", + "understanding": "对接招聘门户与渠道分发。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/04_招聘职位.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "模板设置", + "node_key": "招聘::/recruitment/settings/templates", + "full_path": "招聘 / 设置 / 模板设置", + "url": "https://2haohr.com/recruitment/settings/templates", + "keep": 1, + "description": "招聘环节的邮件/短信/评价模板。", + "understanding": "标准化沟通。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/04_模板设置.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "考勤报表", + "node_key": "考勤假期::/attendance/stat/report", + "full_path": "考勤假期 / 考勤统计 / 考勤报表", + "url": "https://2haohr.com/attendance/stat/report", + "keep": 1, + "description": "考勤假期模块下「考勤报表」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "打卡方式", + "node_key": "考勤假期::/attendance/work/mode", + "full_path": "考勤假期 / 考勤管理 / 打卡方式", + "url": "https://2haohr.com/attendance/work/mode", + "keep": 1, + "description": "GPS/WiFi/人脸等打卡方式配置。", + "understanding": "决定打卡合规与防作弊。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "假期方案", + "node_key": "考勤假期::/attendance/holiday/rules", + "full_path": "考勤假期 / 假期管理 / 假期方案", + "url": "https://2haohr.com/attendance/holiday/rules", + "keep": 1, + "description": "年假/事病假等假期规则方案。", + "understanding": "假期计算的规则中心。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/04_假期方案.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "薪酬报表", + "node_key": "薪酬::/payroll/salary/report", + "full_path": "薪酬 / 薪酬管理 / 薪酬报表", + "url": "https://2haohr.com/payroll/salary/report", + "keep": 1, + "description": "薪酬相关报表。", + "understanding": "成本与发放统计。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批记录", + "node_key": "审批::/approval/record/list", + "full_path": "审批 / 常规 / 审批记录", + "url": "https://2haohr.com/approval/record/list", + "keep": 1, + "description": "历史审批记录查询。", + "understanding": "留痕与追溯。", + "note": "", + "screenshot": "screenshots/07_审批/常规/04_审批记录.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "学习进度", + "node_key": "培训学习::/training/online/progress", + "full_path": "培训学习 / 线上学习 / 学习进度", + "url": "https://2haohr.com/training/online/progress", + "keep": 1, + "description": "员工学习进度跟踪。", + "understanding": "学习效果监控。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/04_学习进度.jpg" + }, + { + "module": "培训学习", + "group": "考试练习", + "name": "考试记录", + "node_key": "培训学习::/training/examine/allExam", + "full_path": "培训学习 / 考试练习 / 考试记录", + "url": "https://2haohr.com/training/examine/allExam", + "keep": 1, + "description": "考试成绩记录。", + "understanding": "培训效果评估。", + "note": "", + "screenshot": "screenshots/08_培训学习/考试练习/04_考试记录.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "晋升考核", + "node_key": "绩效::/performance-evaluation/manage/promotion", + "full_path": "绩效 / 考核管理 / 晋升考核", + "url": "https://2haohr.com/performance-evaluation/manage/promotion", + "keep": 1, + "description": "晋升评估考核。", + "understanding": "与职级晋升联动。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/04_晋升考核.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "自定义设置", + "node_key": "绩效::/performance-evaluation/setting/custom", + "full_path": "绩效 / 考核设置 / 自定义设置", + "url": "https://2haohr.com/performance-evaluation/setting/custom", + "keep": 1, + "description": "绩效模块自定义设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/04_自定义设置.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "社保报表", + "node_key": "社保公积金::/social-insurance/reports", + "full_path": "社保公积金 / 常规 / 社保报表", + "url": "https://2haohr.com/social-insurance/reports", + "keep": 1, + "description": "社保缴纳报表。", + "understanding": "上报与统计。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/04_社保报表.jpg" + }, + { + "module": "行政管理", + "group": "常规", + "name": "开具证明", + "node_key": "行政管理::/oa/certificate", + "full_path": "行政管理 / 常规 / 开具证明", + "url": "https://2haohr.com/oa/certificate", + "keep": 1, + "description": "在职/收入等证明在线开具。", + "understanding": "员工自助高频需求。", + "note": "", + "screenshot": "screenshots/11_行政管理/常规/04_开具证明.jpg" + }, + { + "module": "电子合同", + "group": "合同签署", + "name": "合同档案库", + "node_key": "电子合同::/econtract/archive/home", + "full_path": "电子合同 / 合同签署 / 合同档案库", + "url": "https://2haohr.com/econtract/archive/home", + "keep": 1, + "description": "电子合同档案库。", + "understanding": "集中存储与检索。", + "note": "", + "screenshot": "screenshots/12_电子合同/合同签署/04_合同档案库.jpg" + }, + { + "module": "员工福利", + "group": "常规", + "name": "平安好医生", + "node_key": "员工福利::/welfare/pingan-doctor", + "full_path": "员工福利 / 常规 / 平安好医生", + "url": "https://2haohr.com/welfare/pingan-doctor", + "keep": 1, + "description": "对接平安好医生健康服务。", + "understanding": "健康福利增值。", + "note": "", + "screenshot": "screenshots/15_员工福利/常规/04_平安好医生.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "携程商旅", + "node_key": "第三方对接::/third-party-apps/ctrip", + "full_path": "第三方对接 / 常规 / 携程商旅", + "url": "https://2haohr.com/third-party-apps/ctrip", + "keep": 1, + "description": "对接携程商旅(差旅)。", + "understanding": "差旅报销联动。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/04_携程商旅.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "统计分析", + "node_key": "电子工资条::/payslip/statistic", + "full_path": "电子工资条 / 常规 / 统计分析", + "url": "https://2haohr.com/payslip/statistic", + "keep": 1, + "description": "工资条发送与确认统计。", + "understanding": "触达率监控。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/04_统计分析.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "个税记录", + "node_key": "智能薪酬::/salary/data/tax", + "full_path": "智能薪酬 / 薪酬数据 / 个税记录", + "url": "https://2haohr.com/salary/data/tax", + "keep": 1, + "description": "个税计算记录。", + "understanding": "代扣代缴留痕。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬设置", + "name": "操作记录", + "node_key": "智能薪酬::/salary/setting/log", + "full_path": "智能薪酬 / 薪酬设置 / 操作记录", + "url": "https://2haohr.com/salary/setting/log", + "keep": 1, + "description": "智能薪酬模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg" + }, + { + "module": "个税对接", + "group": "常规", + "name": "操作记录", + "node_key": "个税对接::/tax/log", + "full_path": "个税对接 / 常规 / 操作记录", + "url": "https://2haohr.com/tax/log", + "keep": 1, + "description": "个税对接模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/22_个税对接/常规/04_操作记录.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "万能人事表格", + "node_key": "人事::/personnel/employee/personnel-form", + "full_path": "人事 / 员工管理 / 万能人事表格", + "url": "https://2haohr.com/personnel/employee/personnel-form", + "keep": 1, + "description": "自定义字段与筛选组合生成任意人事数据表格。", + "understanding": "灵活取数工具,降低对开发出报表的依赖。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/05_万能人事表格.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "关怀通知", + "node_key": "人事::/personnel/relation/care", + "full_path": "人事 / 员工关系 / 关怀通知", + "url": "https://2haohr.com/personnel/relation/care", + "keep": 1, + "description": "生日/周年/证件到期等关怀提醒与自动通知。", + "understanding": "员工体验运营,可配置触发规则与文案。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/05_关怀通知.jpg" + }, + { + "module": "组织", + "group": "岗位管理", + "name": "组织报表", + "node_key": "组织::/org/org-forms", + "full_path": "组织 / 岗位管理 / 组织报表", + "url": "https://2haohr.com/org/org-forms", + "keep": 1, + "description": "组织维度(编制/人数/结构)的报表。", + "understanding": "支持组织盘点。", + "note": "", + "screenshot": "screenshots/03_组织/岗位管理/05_组织报表.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "招聘门户", + "node_key": "招聘::/recruitment/wechat", + "full_path": "招聘 / 候选人 / 招聘门户", + "url": "https://2haohr.com/recruitment/wechat", + "keep": 1, + "description": "企业招聘官网/微信招聘门户配置。", + "understanding": "候选人投递入口,支持自定义。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/05_招聘门户.jpg" + }, + { + "module": "招聘", + "group": "设置", + "name": "更多设置", + "node_key": "招聘::/recruitment/settings/others", + "full_path": "招聘 / 设置 / 更多设置", + "url": "https://2haohr.com/recruitment/settings/others", + "keep": 1, + "description": "招聘模块其它设置项。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/04_招聘/设置/05_更多设置.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "字段管理", + "node_key": "考勤假期::/attendance/stat/field-manage", + "full_path": "考勤假期 / 考勤统计 / 字段管理", + "url": "https://2haohr.com/attendance/stat/field-manage", + "keep": 1, + "description": "考勤表字段自定义。", + "understanding": "适配企业统计口径。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/05_字段管理.jpg" + }, + { + "module": "考勤假期", + "group": "考勤管理", + "name": "考勤设置", + "node_key": "考勤假期::/attendance/work/settings", + "full_path": "考勤假期 / 考勤管理 / 考勤设置", + "url": "https://2haohr.com/attendance/work/settings", + "keep": 1, + "description": "考勤模块的其它设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg" + }, + { + "module": "考勤假期", + "group": "假期管理", + "name": "假期设置", + "node_key": "考勤假期::/attendance/holiday/settings", + "full_path": "考勤假期 / 假期管理 / 假期设置", + "url": "https://2haohr.com/attendance/holiday/settings", + "keep": 1, + "description": "假期模块其它设置。", + "understanding": "杂项配置。", + "note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/05_假期设置.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "薪酬分析", + "node_key": "薪酬::/payroll/salary/statistics", + "full_path": "薪酬 / 薪酬管理 / 薪酬分析", + "url": "https://2haohr.com/payroll/salary/statistics", + "keep": 1, + "description": "薪酬多维分析。", + "understanding": "人力成本洞察。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "审批交接", + "node_key": "审批::/approval/abnormal", + "full_path": "审批 / 常规 / 审批交接", + "url": "https://2haohr.com/approval/abnormal", + "keep": 1, + "description": "审批任务交接处理。", + "understanding": "人员变动时的流程转交。", + "note": "", + "screenshot": "screenshots/07_审批/常规/05_审批交接.jpg" + }, + { + "module": "培训学习", + "group": "线上学习", + "name": "学习记录", + "node_key": "培训学习::/training/online/record", + "full_path": "培训学习 / 线上学习 / 学习记录", + "url": "https://2haohr.com/training/online/record", + "keep": 1, + "description": "在线学习历史记录。", + "understanding": "留痕与统计。", + "note": "", + "screenshot": "screenshots/08_培训学习/线上学习/05_学习记录.jpg" + }, + { + "module": "绩效", + "group": "考核管理", + "name": "考核组管理", + "node_key": "绩效::/performance-evaluation/manage/group", + "full_path": "绩效 / 考核管理 / 考核组管理", + "url": "https://2haohr.com/performance-evaluation/manage/group", + "keep": 1, + "description": "考核分组管理。", + "understanding": "按人群组织考核。", + "note": "", + "screenshot": "screenshots/09_绩效/考核管理/05_考核组管理.jpg" + }, + { + "module": "绩效", + "group": "考核设置", + "name": "操作记录", + "node_key": "绩效::/performance-evaluation/log", + "full_path": "绩效 / 考核设置 / 操作记录", + "url": "https://2haohr.com/performance-evaluation/log", + "keep": 1, + "description": "绩效模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/09_绩效/考核设置/05_操作记录.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "社保分析", + "node_key": "社保公积金::/social-insurance/statistics", + "full_path": "社保公积金 / 常规 / 社保分析", + "url": "https://2haohr.com/social-insurance/statistics", + "keep": 1, + "description": "社保成本分析。", + "understanding": "成本洞察。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/05_社保分析.jpg" + }, + { + "module": "第三方对接", + "group": "常规", + "name": "操作记录", + "node_key": "第三方对接::/third-party-apps/record", + "full_path": "第三方对接 / 常规 / 操作记录", + "url": "https://2haohr.com/third-party-apps/record", + "keep": 1, + "description": "第三方对接模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/17_第三方对接/常规/05_操作记录.jpg" + }, + { + "module": "电子工资条", + "group": "常规", + "name": "操作记录", + "node_key": "电子工资条::/payslip/log", + "full_path": "电子工资条 / 常规 / 操作记录", + "url": "https://2haohr.com/payslip/log", + "keep": 1, + "description": "电子工资条模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/20_电子工资条/常规/05_操作记录.jpg" + }, + { + "module": "智能薪酬", + "group": "薪酬数据", + "name": "成本明细", + "node_key": "智能薪酬::/salary/data/cost", + "full_path": "智能薪酬 / 薪酬数据 / 成本明细", + "url": "https://2haohr.com/salary/data/cost", + "keep": 1, + "description": "人力成本明细。", + "understanding": "成本核算。", + "note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg" + }, + { + "module": "人事", + "group": "员工管理", + "name": "人事动态", + "node_key": "人事::/personnel/employee/dynamic", + "full_path": "人事 / 员工管理 / 人事动态", + "url": "https://2haohr.com/personnel/employee/dynamic", + "keep": 1, + "description": "入职/转正/离职/生日等人事事件的动态时间线。", + "understanding": "事件流,可驱动关怀通知与提醒。", + "note": "", + "screenshot": "screenshots/02_人事/员工管理/06_人事动态.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "合同管理", + "node_key": "人事::/personnel/relation/contract", + "full_path": "人事 / 员工关系 / 合同管理", + "url": "https://2haohr.com/personnel/relation/contract", + "keep": 1, + "description": "劳动合同签订、续签、到期提醒与合同台账。", + "understanding": "与电子合同模块可打通;合同到期预警是刚需。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/06_合同管理.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "面试日程", + "node_key": "招聘::/recruitment/interviews", + "full_path": "招聘 / 候选人 / 面试日程", + "url": "https://2haohr.com/recruitment/interviews", + "keep": 1, + "description": "面试安排、通知与面试评价。", + "understanding": "支持面试官协同与日程提醒。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/06_面试日程.jpg" + }, + { + "module": "考勤假期", + "group": "考勤统计", + "name": "考勤确认", + "node_key": "考勤假期::/attendance/confirmation", + "full_path": "考勤假期 / 考勤统计 / 考勤确认", + "url": "https://2haohr.com/attendance/confirmation", + "keep": 1, + "description": "月末考勤结果确认锁定。", + "understanding": "确认后进入薪酬核算。", + "note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "计薪规则", + "node_key": "薪酬::/payroll/salary/rule", + "full_path": "薪酬 / 薪酬管理 / 计薪规则", + "url": "https://2haohr.com/payroll/salary/rule", + "keep": 1, + "description": "计薪周期与规则配置。", + "understanding": "薪酬引擎规则。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg" + }, + { + "module": "审批", + "group": "常规", + "name": "操作记录", + "node_key": "审批::/approval/log", + "full_path": "审批 / 常规 / 操作记录", + "url": "https://2haohr.com/approval/log", + "keep": 1, + "description": "审批模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "note": "", + "screenshot": "screenshots/07_审批/常规/06_操作记录.jpg" + }, + { + "module": "社保公积金", + "group": "常规", + "name": "参保规则", + "node_key": "社保公积金::/social-insurance/rules", + "full_path": "社保公积金 / 常规 / 参保规则", + "url": "https://2haohr.com/social-insurance/rules", + "keep": 1, + "description": "参保基数/比例规则。", + "understanding": "地区政策配置核心。", + "note": "", + "screenshot": "screenshots/10_社保公积金/常规/06_参保规则.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "沟通记录", + "node_key": "人事::/personnel/relation/talk", + "full_path": "人事 / 员工关系 / 沟通记录", + "url": "https://2haohr.com/personnel/relation/talk", + "keep": 1, + "description": "HR 与员工的沟通/谈话记录留存。", + "understanding": "员工关系管理留痕,支撑争议处理。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/07_沟通记录.jpg" + }, + { + "module": "招聘", + "group": "候选人", + "name": "人才库", + "node_key": "招聘::/recruitment/talent", + "full_path": "招聘 / 候选人 / 人才库", + "url": "https://2haohr.com/recruitment/talent", + "keep": 1, + "description": "企业人才储备库。", + "understanding": "沉淀历史候选人,降低复招成本。", + "note": "", + "screenshot": "screenshots/04_招聘/候选人/07_人才库.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "薪酬设置", + "node_key": "薪酬::/payroll/salary/settings", + "full_path": "薪酬 / 薪酬管理 / 薪酬设置", + "url": "https://2haohr.com/payroll/salary/settings", + "keep": 1, + "description": "薪酬模块设置。", + "understanding": "结构/权限配置。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "任职记录", + "node_key": "人事::/personnel/relation/office", + "full_path": "人事 / 员工关系 / 任职记录", + "url": "https://2haohr.com/personnel/relation/office", + "keep": 1, + "description": "员工历史任职(岗位/部门)变化记录。", + "understanding": "履历追溯,来源于人事异动。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/08_任职记录.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "年终奖计算", + "node_key": "薪酬::/payroll/salary/bonus", + "full_path": "薪酬 / 薪酬管理 / 年终奖计算", + "url": "https://2haohr.com/payroll/salary/bonus", + "keep": 1, + "description": "年终奖专项计税计算。", + "understanding": "年度一次性奖金个税处理。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "培训经历", + "node_key": "人事::/personnel/relation/train", + "full_path": "人事 / 员工关系 / 培训经历", + "url": "https://2haohr.com/personnel/relation/train", + "keep": 1, + "description": "员工参加培训的经历记录。", + "understanding": "与培训模块数据互通。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/09_培训经历.jpg" + }, + { + "module": "薪酬", + "group": "薪酬管理", + "name": "发送工资条", + "node_key": "薪酬::https://2haohr.com/payslip/home", + "full_path": "薪酬 / 薪酬管理 / 发送工资条", + "url": "https://2haohr.com/payslip/home", + "keep": 1, + "description": "发送电子工资条(跳转电子工资条模块)。", + "understanding": "与电子工资条模块共用。", + "note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "奖惩记录", + "node_key": "人事::/personnel/relation/award", + "full_path": "人事 / 员工关系 / 奖惩记录", + "url": "https://2haohr.com/personnel/relation/award", + "keep": 1, + "description": "员工奖励与处罚记录管理。", + "understanding": "影响绩效与晋升评估。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/10_奖惩记录.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "考察期管理", + "node_key": "人事::/personnel/relation/inspect", + "full_path": "人事 / 员工关系 / 考察期管理", + "url": "https://2haohr.com/personnel/relation/inspect", + "keep": 1, + "description": "特定员工考察期的设置与跟踪。", + "understanding": "试用/观察期管理的补充。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/11_考察期管理.jpg" + }, + { + "module": "人事", + "group": "员工关系", + "name": "实习生管理", + "node_key": "人事::/personnel/relation/internship", + "full_path": "人事 / 员工关系 / 实习生管理", + "url": "https://2haohr.com/personnel/relation/internship", + "keep": 1, + "description": "实习生专项档案与转正管理。", + "understanding": "针对实习用工的差异化流程。", + "note": "", + "screenshot": "screenshots/02_人事/员工关系/12_实习生管理.jpg" + } + ] +} \ No newline at end of file diff --git a/docs/spec.json b/docs/spec.json new file mode 100644 index 0000000..b507a1a --- /dev/null +++ b/docs/spec.json @@ -0,0 +1,11293 @@ +{ + "meta": { + "product": "2号人事部", + "source": "https://2haohr.com 功能调研", + "generated_at": "2026-07-18T07:13:55", + "schema_version": 1, + "notes": "按 模块->功能页 组织; fields 为自定义列/选择表头弹窗采集的完整字段(远超截图); hidden_entries 为'更多'菜单发现的隐藏功能界面; data_samples 为真实导出样本(含表头预览); screenshot 为去遮挡后重拍的整页主图; deep_shots 为点击按钮抵达的深层界面截图(新增表单/筛选/自定义列/行详情)。" + }, + "stats": { + "modules": 24, + "pages": 172, + "kept_pages": 172, + "pages_with_fields": 93, + "total_fields": 1167, + "pages_with_hidden_entries": 83, + "total_hidden_entries": 293, + "data_samples": 51, + "pages_with_deep_shots": 46, + "total_deep_shots": 63, + "approval_templates": 44 + }, + "modules": [ + { + "module": "工作台", + "page_count": 1, + "field_pages": 0, + "pages": [ + { + "node_key": "工作台::/desk", + "name": "工作台首页", + "group": "", + "full_path": "工作台 / 工作台首页", + "url": "https://2haohr.com/desk", + "keep": 1, + "description": "工作台模块下「工作台首页」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "用户可根据工作习惯、工作重点增减调整显示的模块\n可通过拖拽各模块自行DIY主届面\n面面风格库可选择柔和商务+轻soft UI\n双主题配置:浅色常规模式+暗黑科技模式(HR加班统计报表、查看数据,夜间办公开启)\n1、“邀请员工加入”目前是两个,保留一个;\n2、右下角的数据“试用期”和在职逻辑对不上;\n3、缺卡改成请假;\n4、首页一屏显示完,不要滚动屏的动作;", + "screenshot": "screenshots/01_工作台/工作台首页.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "切换小日历", + "快捷入口设置", + "调整排序", + "隐藏卡片", + "去设置", + "提醒规则设置" + ], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "人事", + "page_count": 18, + "field_pages": 13, + "pages": [ + { + "node_key": "人事::/personnel/employee/roster", + "name": "员工花名册", + "group": "员工管理", + "full_path": "人事 / 员工管理 / 员工花名册", + "url": "https://2haohr.com/personnel/employee/roster", + "keep": 1, + "description": "全体员工的核心名册列表,支持按部门/状态筛选、字段自定义、批量导入导出。", + "understanding": "员工主数据入口,几乎所有人事操作从此发起;字段可配置是关键需求。", + "review_note": "1、汇总栏字段优化,显示关键字段,避免模糊歧义字段\n2、花名册增加性别、年龄等字段\n3、花名册总表需要从新确定字段;\n4、导出花名册可以自定义字段;\n\n", + "screenshot": "screenshots/02_人事/员工管理/01_员工花名册.jpg", + "field_count": 81, + "fields": [ + { + "group": "系统字段", + "name": "头像", + "order": 0 + }, + { + "group": "系统字段", + "name": "姓名", + "order": 1 + }, + { + "group": "系统字段", + "name": "工号", + "order": 2 + }, + { + "group": "系统字段", + "name": "部门", + "order": 3 + }, + { + "group": "系统字段", + "name": "岗位", + "order": 4 + }, + { + "group": "系统字段", + "name": "工作性质", + "order": 5 + }, + { + "group": "系统字段", + "name": "入职日期", + "order": 6 + }, + { + "group": "系统字段", + "name": "证件类型", + "order": 7 + }, + { + "group": "系统字段", + "name": "证件号码", + "order": 8 + }, + { + "group": "系统字段", + "name": "手机号码", + "order": 9 + }, + { + "group": "系统字段", + "name": "一级部门", + "order": 10 + }, + { + "group": "系统字段", + "name": "二级部门", + "order": 11 + }, + { + "group": "系统字段", + "name": "三级部门", + "order": 12 + }, + { + "group": "系统字段", + "name": "职务", + "order": 13 + }, + { + "group": "系统字段", + "name": "职级", + "order": 14 + }, + { + "group": "系统字段", + "name": "职等", + "order": 15 + }, + { + "group": "系统字段", + "name": "岗位类别", + "order": 16 + }, + { + "group": "系统字段", + "name": "汇报上级", + "order": 17 + }, + { + "group": "系统字段", + "name": "工作城市", + "order": 18 + }, + { + "group": "系统字段", + "name": "工作地点", + "order": 19 + }, + { + "group": "系统字段", + "name": "合同公司", + "order": 20 + }, + { + "group": "系统字段", + "name": "考勤编号", + "order": 21 + }, + { + "group": "系统字段", + "name": "工时制度", + "order": 22 + }, + { + "group": "系统字段", + "name": "招聘渠道", + "order": 23 + }, + { + "group": "系统字段", + "name": "员工状态", + "order": 24 + }, + { + "group": "系统字段", + "name": "转正日期", + "order": 25 + }, + { + "group": "系统字段", + "name": "司龄", + "order": 26 + }, + { + "group": "系统字段", + "name": "档案编号", + "order": 27 + }, + { + "group": "系统字段", + "name": "别名", + "order": 28 + }, + { + "group": "系统字段", + "name": "身份证有效期", + "order": 29 + }, + { + "group": "系统字段", + "name": "性别", + "order": 30 + }, + { + "group": "系统字段", + "name": "生日", + "order": 31 + }, + { + "group": "系统字段", + "name": "年龄", + "order": 32 + }, + { + "group": "系统字段", + "name": "是否已婚", + "order": 33 + }, + { + "group": "系统字段", + "name": "是否已育", + "order": 34 + }, + { + "group": "系统字段", + "name": "国家地区", + "order": 35 + }, + { + "group": "系统字段", + "name": "民族", + "order": 36 + }, + { + "group": "系统字段", + "name": "政治面貌", + "order": 37 + }, + { + "group": "系统字段", + "name": "籍贯", + "order": 38 + }, + { + "group": "系统字段", + "name": "户籍城市", + "order": 39 + }, + { + "group": "系统字段", + "name": "户籍地址", + "order": 40 + }, + { + "group": "系统字段", + "name": "参加工作时间", + "order": 41 + }, + { + "group": "系统字段", + "name": "工龄", + "order": 42 + }, + { + "group": "系统字段", + "name": "健康状况", + "order": 43 + }, + { + "group": "系统字段", + "name": "个人邮箱", + "order": 44 + }, + { + "group": "系统字段", + "name": "工作电话", + "order": 45 + }, + { + "group": "系统字段", + "name": "分机号", + "order": 46 + }, + { + "group": "系统字段", + "name": "工作邮箱", + "order": 47 + }, + { + "group": "系统字段", + "name": "现居住地", + "order": 48 + }, + { + "group": "系统字段", + "name": "工资卡卡号", + "order": 49 + }, + { + "group": "系统字段", + "name": "工资卡开户城市", + "order": 50 + }, + { + "group": "系统字段", + "name": "银行名称", + "order": 51 + }, + { + "group": "系统字段", + "name": "工资卡开户行", + "order": 52 + }, + { + "group": "系统字段", + "name": "个人社保账号", + "order": 53 + }, + { + "group": "系统字段", + "name": "个人公积金账号", + "order": 54 + }, + { + "group": "系统字段", + "name": "标签", + "order": 55 + }, + { + "group": "系统字段", + "name": "出生年份", + "order": 56 + }, + { + "group": "系统字段", + "name": "户口性质", + "order": 57 + }, + { + "group": "系统字段", + "name": "最高学历", + "order": 58 + }, + { + "group": "系统字段", + "name": "毕业院校", + "order": 59 + }, + { + "group": "系统字段", + "name": "毕业专业", + "order": 60 + }, + { + "group": "系统字段", + "name": "毕业时间", + "order": 61 + }, + { + "group": "系统字段", + "name": "学位类型", + "order": 62 + }, + { + "group": "系统字段", + "name": "现合同类型", + "order": 63 + }, + { + "group": "系统字段", + "name": "现合同开始日期", + "order": 64 + }, + { + "group": "系统字段", + "name": "现合同结束日期", + "order": 65 + }, + { + "group": "系统字段", + "name": "现合同期限", + "order": 66 + }, + { + "group": "系统字段", + "name": "现合同签约公司", + "order": 67 + }, + { + "group": "系统字段", + "name": "合同签订次数", + "order": 68 + }, + { + "group": "系统字段", + "name": "学习形式", + "order": 69 + }, + { + "group": "系统字段", + "name": "备注", + "order": 70 + }, + { + "group": "自定义字段", + "name": "宿舍号", + "order": 71 + }, + { + "group": "自定义字段", + "name": "省份", + "order": 72 + }, + { + "group": "自定义字段", + "name": "工行卡号", + "order": 73 + }, + { + "group": "自定义字段", + "name": "中行卡号", + "order": 74 + }, + { + "group": "自定义字段", + "name": "派遣单位", + "order": 75 + }, + { + "group": "自定义字段", + "name": "入住宿舍日期", + "order": 76 + }, + { + "group": "自定义字段", + "name": "兴业银行", + "order": 77 + }, + { + "group": "自定义字段", + "name": "现通讯地址", + "order": 78 + }, + { + "group": "自定义字段", + "name": "实习生", + "order": 79 + }, + { + "group": "自定义字段", + "name": "股龄", + "order": 80 + } + ], + "hidden_entries": [ + "导出", + "自定义导出", + "设置花名册字段", + "员工成长对比", + "批量删除员工", + "花名册备份", + "回收站" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工管理/01_员工花名册__filter.jpg" + }, + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工管理/01_员工花名册__columns.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工管理/在职员工花名册-20260717185522.xlsx", + "kind": "xlsx", + "size": 101177, + "sheet": "在职员工花名册", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "生日", + "性别", + "年龄", + "证件类型", + "证件号码", + "出生日期", + "是否已婚", + "生育情况", + "民族", + "政治面貌", + "户籍地址", + "户口性质", + "籍贯", + "户籍城市", + "首次参加工作时间", + "别名", + "健康证有效期", + "英文名", + "血型", + "服装尺寸", + "工号", + "部门", + "职务", + "岗位类别", + "岗位", + "职等", + "职级编号", + "所在城市", + "工作地点", + "合同公司", + "考勤编号", + "招聘渠道", + "工时制度", + "员工状态", + "工作性质", + "入职日期", + "试用期", + "转正日期", + "司龄开始日期" + ] + }, + { + "file": "downloads/02_人事/员工管理/在职员工花名册-20260717185644.xlsx", + "kind": "xlsx", + "size": 100922, + "sheet": "在职员工花名册", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "性别", + "生日", + "年龄", + "证件类型", + "证件号码", + "出生日期", + "是否已婚", + "生育情况", + "民族", + "政治面貌", + "户籍地址", + "户口性质", + "籍贯", + "户籍城市", + "首次参加工作时间", + "别名", + "健康证有效期", + "英文名", + "血型", + "服装尺寸", + "工号", + "部门", + "职务", + "岗位类别", + "岗位", + "职等", + "职级编号", + "所在城市", + "工作地点", + "合同公司", + "考勤编号", + "招聘渠道", + "工时制度", + "员工状态", + "工作性质", + "入职日期", + "试用期", + "转正日期", + "司龄开始日期" + ] + }, + { + "file": "downloads/02_人事/员工管理/在职员工花名册(1)-20260717185544.xlsx", + "kind": "xlsx", + "size": 100940, + "sheet": "在职员工花名册(1)", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "性别", + "生日", + "年龄", + "证件类型", + "证件号码", + "出生日期", + "是否已婚", + "生育情况", + "民族", + "政治面貌", + "户籍地址", + "户口性质", + "籍贯", + "户籍城市", + "首次参加工作时间", + "别名", + "健康证有效期", + "英文名", + "血型", + "服装尺寸", + "工号", + "部门", + "职务", + "岗位类别", + "岗位", + "职等", + "职级编号", + "所在城市", + "工作地点", + "合同公司", + "考勤编号", + "招聘渠道", + "工时制度", + "员工状态", + "工作性质", + "入职日期", + "试用期", + "转正日期", + "司龄开始日期" + ] + }, + { + "file": "downloads/02_人事/员工管理/在职员工花名册(2)-20260717185533.xlsx", + "kind": "xlsx", + "size": 100943, + "sheet": "在职员工花名册(2)", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "性别", + "生日", + "年龄", + "证件类型", + "证件号码", + "出生日期", + "是否已婚", + "生育情况", + "民族", + "政治面貌", + "户籍地址", + "户口性质", + "籍贯", + "户籍城市", + "首次参加工作时间", + "别名", + "健康证有效期", + "英文名", + "血型", + "服装尺寸", + "工号", + "部门", + "职务", + "岗位类别", + "岗位", + "职等", + "职级编号", + "所在城市", + "工作地点", + "合同公司", + "考勤编号", + "招聘渠道", + "工时制度", + "员工状态", + "工作性质", + "入职日期", + "试用期", + "转正日期", + "司龄开始日期" + ] + } + ] + }, + { + "node_key": "人事::/personnel/employee/archive", + "name": "员工档案库", + "group": "员工管理", + "full_path": "人事 / 员工管理 / 员工档案库", + "url": "https://2haohr.com/personnel/employee/archive", + "keep": 1, + "description": "员工完整电子档案(证件/合同/学历/家庭等)的集中存储与调阅。", + "understanding": "360°档案,强调附件管理与字段完整率统计。", + "review_note": "1、增加“户口本业主页及本人页”;\n2、增加“无犯罪记录证明”;\n3、增加“征信报告”;", + "screenshot": "screenshots/02_人事/员工管理/02_员工档案库.jpg", + "field_count": 4, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "工号", + "order": 1 + }, + { + "group": "", + "name": "部门", + "order": 2 + }, + { + "group": "", + "name": "岗位", + "order": 3 + } + ], + "hidden_entries": [ + "导出档案概况", + "导出档案附件", + "完善档案设置", + "1完善档案记录", + "导入导出记录", + "统计设置" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "人事::/personnel/employee/statistics", + "name": "统计分析", + "group": "员工管理", + "full_path": "人事 / 员工管理 / 统计分析", + "url": "https://2haohr.com/personnel/employee/statistics", + "keep": 1, + "description": "按维度对在职/结构/异动等人事数据的图表统计分析。", + "understanding": "偏 BI 图表,服务人事盘点。", + "review_note": "报表显示有自定义升序、降序显示\n服务人事直观看到排名并粘贴至PPT汇报", + "screenshot": "screenshots/02_人事/员工管理/03_统计分析.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "人事::/personnel/employee/personnel-report", + "name": "人事报表", + "group": "员工管理", + "full_path": "人事 / 员工管理 / 人事报表", + "url": "https://2haohr.com/personnel/employee/personnel-report", + "keep": 1, + "description": "各类标准人事报表(在职、异动、合同到期等)的生成与导出。", + "understanding": "满足周期性上报需求,需支持自定义与导出。", + "review_note": "页画堆砌过满,简化页面;\n根据需要、自行选择字段,生成报表并命名报表名称\n", + "screenshot": "screenshots/02_人事/员工管理/04_人事报表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "预览", + "订阅", + "编辑", + "移除" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加报表", + "path": "screenshots/02_人事/员工管理/04_人事报表__add.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工管理/各部门人事档案统计-20260717185710.xlsx", + "kind": "xlsx", + "size": 10635, + "sheet": "各部门人事档案统计", + "total_rows": 149, + "total_cols": 5, + "headers": [ + "部门", + "员工重要信息完整率", + "人事材料存档率", + "在职人数(人)", + "人数占比" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工住址信息表-20260717185615.xlsx", + "kind": "xlsx", + "size": 19310, + "sheet": "员工住址信息表", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "所在城市", + "现居住地" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工入离职情况统计表-20260717185744.xlsx", + "kind": "xlsx", + "size": 6779, + "sheet": "员工入离职情况统计", + "total_rows": 23, + "total_cols": 6, + "headers": [ + "月份", + "月初在职人数", + "当月入职人数", + "当月离职人数", + "当月入职率", + "当月离职率" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工劳动合同签订情况-20260717185601.xlsx", + "kind": "xlsx", + "size": 11355, + "sheet": "员工劳动合同签订情况", + "total_rows": null, + "total_cols": null, + "headers": [ + "合同类型", + "合同备注", + "姓名", + "工号", + "部门", + "岗位", + "合同期限", + "合同开始日期", + "合同结束日期", + "合同签订日期", + "合同状态", + "性别", + "证件类型", + "证件号码" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工学历统计表-20260717185730.xlsx", + "kind": "xlsx", + "size": 37343, + "sheet": "员工学历统计", + "total_rows": 12, + "total_cols": 3, + "headers": [ + "学历", + "人数", + "比例" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工工作年限信息表-20260717185608.xlsx", + "kind": "xlsx", + "size": 30279, + "sheet": "员工工作年限信息表", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "证件类型", + "证件号码", + "首次参加工作时间", + "工龄", + "工龄(天数)", + "入职日期", + "司龄", + "司龄(天数)" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工工资卡信息表-20260717185758.xlsx", + "kind": "xlsx", + "size": 20063, + "sheet": "员工工资卡信息表", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工资卡卡号", + "工资卡开户城市", + "工资卡开户行" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工年龄段统计表-20260717185737.xlsx", + "kind": "xlsx", + "size": 37408, + "sheet": "员工年龄段统计", + "total_rows": 11, + "total_cols": 3, + "headers": [ + "年龄段", + "人数", + "比例" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工生日信息表-20260717185622.xlsx", + "kind": "xlsx", + "size": 18782, + "sheet": "员工生日信息表", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "性别", + "生日", + "工号", + "部门", + "岗位" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工社保公积金账号信息表-20260717185804.xlsx", + "kind": "xlsx", + "size": 18175, + "sheet": "员工社保公积金账号信息表", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "个人社保账号", + "个人公积金账号" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工证件信息表-20260717185751.xlsx", + "kind": "xlsx", + "size": 21391, + "sheet": "员工证件信息表", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "证件类型", + "证件号码", + "健康证有效期" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工通讯录-20260717185554.xlsx", + "kind": "xlsx", + "size": 24951, + "sheet": "员工通讯录", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "手机号码", + "个人邮箱", + "工作电话", + "QQ号", + "微信号", + "分机号" + ] + }, + { + "file": "downloads/02_人事/员工管理/员工通讯录-20260717185655.xlsx", + "kind": "xlsx", + "size": 24945, + "sheet": "员工通讯录", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "手机号码", + "个人邮箱", + "工作电话", + "QQ号", + "微信号", + "分机号" + ] + }, + { + "file": "downloads/02_人事/员工管理/测试账号-员工个人证件照存档情况表-20260717185825.xlsx", + "kind": "xlsx", + "size": 24801, + "sheet": "员工个人证件照存档情况表", + "total_rows": 410, + "total_cols": 8, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "汇报上级", + "手机号码", + "工作邮箱", + "是否有证件照" + ] + }, + { + "file": "downloads/02_人事/员工管理/测试账号_123-20260717185637.xlsx", + "kind": "xlsx", + "size": 10581, + "sheet": "员工信息", + "total_rows": 413, + "total_cols": 1, + "headers": [] + }, + { + "file": "downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185702.xlsx", + "kind": "xlsx", + "size": 5777, + "sheet": "月度人员进出一览", + "total_rows": 3, + "total_cols": 8, + "headers": [ + "总计(人)", + "新增(人)", + "离职(人)", + "总计(人)", + "新增(人)", + "离职(人)" + ] + }, + { + "file": "downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185723.xlsx", + "kind": "xlsx", + "size": 5778, + "sheet": "月度人员进出一览", + "total_rows": 3, + "total_cols": 8, + "headers": [ + "总计(人)", + "新增(人)", + "离职(人)", + "总计(人)", + "新增(人)", + "离职(人)" + ] + }, + { + "file": "downloads/02_人事/员工管理/测试账号_月度人员进出明细表_20260717185716.xlsx", + "kind": "xlsx", + "size": 7092, + "sheet": "新进", + "total_rows": 5, + "total_cols": 20, + "headers": [ + "月份", + "姓名", + "性别", + "入职日期", + "工作性质", + "部门", + "职务", + "岗位", + "职等", + "职级", + "工号", + "证件类型", + "证件号码", + "户籍城市", + "户口性质", + "手机号码", + "个人社保账号", + "个人公积金账号", + "工资卡开户行", + "工资卡卡号" + ] + }, + { + "file": "downloads/02_人事/员工管理/测试账号企业-各部门离职情况表.xlsx", + "kind": "xlsx", + "size": 25675, + "sheet": "测试账号企业-各部门离职情况表", + "total_rows": 150, + "total_cols": 51, + "headers": [ + "部门名称", + "计划编制人数", + "月初人数", + "新招人数", + "调入人数", + "离职人数", + "调出人数", + "月末人数", + "离职率", + "家庭原因人数", + "身体原因人数", + "薪资原因人数", + "交通不便人数", + "工作压力人数", + "管理问题人数", + "无晋升机会人数", + "职业规划人数", + "合同到期放弃续签人数", + "其他个人原因人数", + "自动离职人数", + "不能胜任工作人数", + "回家照顾家人人数", + "个人创业人数", + "回家乡发展人数", + "不认同企业文化人数", + "学习深造人数", + "回家生小孩人数", + "试用期劝退人数", + "体检不合格人数", + "入职资料有问题人数", + "背景调查不通过人数", + "自离(不计薪资)人数", + "试用期内辞退人数", + "违反公司条例人数", + "组织调整/裁员人数", + "绩效不达标辞退人数", + "合同到期不续签人数", + "其他原因被动离职人数", + "严重违规违纪人数", + "造成重大损害人数" + ] + }, + { + "file": "downloads/02_人事/员工管理/离职员工信息表-20260717185628.xlsx", + "kind": "xlsx", + "size": 4395, + "sheet": "离职员工信息表", + "total_rows": null, + "total_cols": null, + "headers": [ + "姓名", + "首次参加工作时间", + "工龄", + "工号", + "部门", + "岗位", + "员工状态", + "工作性质", + "入职日期", + "司龄", + "离职日期", + "离职原因", + "离职原因说明", + "离职备注", + "离职去向", + "是否试用期内离职" + ] + } + ] + }, + { + "node_key": "人事::/personnel/employee/personnel-form", + "name": "万能人事表格", + "group": "员工管理", + "full_path": "人事 / 员工管理 / 万能人事表格", + "url": "https://2haohr.com/personnel/employee/personnel-form", + "keep": 1, + "description": "自定义字段与筛选组合生成任意人事数据表格。", + "understanding": "灵活取数工具,降低对开发出报表的依赖。", + "review_note": "模版库\n模版填写有bug优化,填写的内容下划线", + "screenshot": "screenshots/02_人事/员工管理/05_万能人事表格.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "设置", + "删除", + "编辑" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "人事::/personnel/employee/dynamic", + "name": "人事动态", + "group": "员工管理", + "full_path": "人事 / 员工管理 / 人事动态", + "url": "https://2haohr.com/personnel/employee/dynamic", + "keep": 1, + "description": "入职/转正/离职/生日等人事事件的动态时间线。", + "understanding": "事件流,可驱动关怀通知与提醒。", + "review_note": "", + "screenshot": "screenshots/02_人事/员工管理/06_人事动态.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "人事::/personnel/relation/enrollment", + "name": "入职管理", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 入职管理", + "url": "https://2haohr.com/personnel/relation/enrollment", + "keep": 1, + "description": "待入职/入职办理流程,含入职登记、资料收集与开通账号。", + "understanding": "与招聘‘已入职’衔接;支持员工自助填写(AI 辅助)。", + "review_note": "1、员工填写:路径与方式优化\n2、HR填写:上传文档、支持图片扫描自动识别\n3、右上角更多操作内容展开,放主页面", + "screenshot": "screenshots/02_人事/员工关系/01_入职管理.jpg", + "field_count": 34, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "入职部门", + "order": 1 + }, + { + "group": "", + "name": "入职岗位", + "order": 2 + }, + { + "group": "", + "name": "预计入职日期", + "order": 3 + }, + { + "group": "", + "name": "手机号码", + "order": 4 + }, + { + "group": "", + "name": "个人邮箱", + "order": 5 + }, + { + "group": "", + "name": "入职登记", + "order": 6 + }, + { + "group": "", + "name": "背景调查", + "order": 7 + }, + { + "group": "", + "name": "人才测评", + "order": 8 + }, + { + "group": "", + "name": "添加人", + "order": 9 + }, + { + "group": "", + "name": "汇报上级", + "order": 10 + }, + { + "group": "", + "name": "offer状态", + "order": 11 + }, + { + "group": "", + "name": "录用审批编号", + "order": 12 + }, + { + "group": "", + "name": "录用审批状态", + "order": 13 + }, + { + "group": "", + "name": "修改人", + "order": 14 + }, + { + "group": "", + "name": "修改时间", + "order": 15 + }, + { + "group": "", + "name": "合同公司", + "order": 16 + }, + { + "group": "", + "name": "工号", + "order": 17 + }, + { + "group": "", + "name": "职级", + "order": 18 + }, + { + "group": "", + "name": "工作性质", + "order": 19 + }, + { + "group": "", + "name": "试用期", + "order": 20 + }, + { + "group": "", + "name": "工作地点", + "order": 21 + }, + { + "group": "", + "name": "工作城市", + "order": 22 + }, + { + "group": "", + "name": "招聘渠道", + "order": 23 + }, + { + "group": "", + "name": "性别", + "order": 24 + }, + { + "group": "", + "name": "证件类型", + "order": 25 + }, + { + "group": "", + "name": "证件号码", + "order": 26 + }, + { + "group": "", + "name": "年龄", + "order": 27 + }, + { + "group": "", + "name": "工作年限", + "order": 28 + }, + { + "group": "", + "name": "学历", + "order": 29 + }, + { + "group": "", + "name": "毕业院校", + "order": 30 + }, + { + "group": "", + "name": "毕业专业", + "order": 31 + }, + { + "group": "", + "name": "最近工作单位", + "order": 32 + }, + { + "group": "", + "name": "添加时间", + "order": 33 + } + ], + "hidden_entries": [ + "设置入职登记", + "1入职登记表填写记录", + "实名认证与核验记录" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/01_入职管理__filter.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/待入职人员列表-20260717211138.xlsx", + "kind": "xlsx", + "size": 6103, + "sheet": "待入职人员列表-20260717211138.xlsx", + "total_rows": 2, + "total_cols": 16, + "headers": [ + "姓名", + "入职部门", + "入职岗位", + "预计入职日期", + "手机号码", + "入职登记", + "背景调查", + "人才测评", + "个人邮箱", + "添加人", + "汇报上级", + "offer状态", + "录用审批编号", + "录用审批状态", + "修改人", + "修改时间" + ] + }, + { + "file": "downloads/02_人事/员工管理/待入职人员流失率统计表-20260717185820.xlsx", + "kind": "xlsx", + "size": 10917, + "sheet": "汇总表", + "total_rows": 22, + "total_cols": 5, + "headers": [ + "月份", + "当月放弃入职人数", + "当月离职人数", + "当月入职人数", + "待入职人员流失率" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/probation", + "name": "转正管理", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 转正管理", + "url": "https://2haohr.com/personnel/relation/probation", + "keep": 1, + "description": "试用期到期提醒与转正申请/审批办理。", + "understanding": "与绩效试用期考核联动。", + "review_note": "1、只显示已入职、未转正、但符合转正时间条件的成员花名册\n2、字段增加入职天数,转正到期倒计时\n3、办理转正内容,部门和岗位要匹配", + "screenshot": "screenshots/02_人事/员工关系/02_转正管理.jpg", + "field_count": 35, + "fields": [ + { + "group": "系统字段", + "name": "头像", + "order": 0 + }, + { + "group": "系统字段", + "name": "姓名", + "order": 1 + }, + { + "group": "系统字段", + "name": "工号", + "order": 2 + }, + { + "group": "系统字段", + "name": "部门", + "order": 3 + }, + { + "group": "系统字段", + "name": "岗位", + "order": 4 + }, + { + "group": "系统字段", + "name": "工作性质", + "order": 5 + }, + { + "group": "系统字段", + "name": "入职日期", + "order": 6 + }, + { + "group": "系统字段", + "name": "试用期", + "order": 7 + }, + { + "group": "系统字段", + "name": "转正日期", + "order": 8 + }, + { + "group": "系统字段", + "name": "司龄", + "order": 9 + }, + { + "group": "系统字段", + "name": "转正审批编号", + "order": 10 + }, + { + "group": "系统字段", + "name": "转正审批状态", + "order": 11 + }, + { + "group": "系统字段", + "name": "一级部门", + "order": 12 + }, + { + "group": "系统字段", + "name": "二级部门", + "order": 13 + }, + { + "group": "系统字段", + "name": "三级部门", + "order": 14 + }, + { + "group": "系统字段", + "name": "职级", + "order": 15 + }, + { + "group": "系统字段", + "name": "岗位类别", + "order": 16 + }, + { + "group": "系统字段", + "name": "工作城市", + "order": 17 + }, + { + "group": "系统字段", + "name": "工作地点", + "order": 18 + }, + { + "group": "系统字段", + "name": "合同公司", + "order": 19 + }, + { + "group": "系统字段", + "name": "性别", + "order": 20 + }, + { + "group": "系统字段", + "name": "年龄", + "order": 21 + }, + { + "group": "系统字段", + "name": "工龄", + "order": 22 + }, + { + "group": "系统字段", + "name": "手机号码", + "order": 23 + }, + { + "group": "系统字段", + "name": "工作邮箱", + "order": 24 + }, + { + "group": "自定义字段", + "name": "宿舍号", + "order": 25 + }, + { + "group": "自定义字段", + "name": "省份", + "order": 26 + }, + { + "group": "自定义字段", + "name": "工行卡号", + "order": 27 + }, + { + "group": "自定义字段", + "name": "中行卡号", + "order": 28 + }, + { + "group": "自定义字段", + "name": "派遣单位", + "order": 29 + }, + { + "group": "自定义字段", + "name": "入住宿舍日期", + "order": 30 + }, + { + "group": "自定义字段", + "name": "兴业银行", + "order": 31 + }, + { + "group": "自定义字段", + "name": "现通讯地址", + "order": 32 + }, + { + "group": "自定义字段", + "name": "实习生", + "order": 33 + }, + { + "group": "自定义字段", + "name": "股龄", + "order": 34 + } + ], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/02_转正管理__filter.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/试用期员工列表_20260717223514.xlsx", + "kind": "xlsx", + "size": 10983, + "sheet": "试用期员工列表", + "total_rows": 76, + "total_cols": 11, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工作性质", + "入职日期", + "试用期", + "转正日期", + "司龄", + "转正审批编号", + "转正审批状态" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/departure", + "name": "离职管理", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 离职管理", + "url": "https://2haohr.com/personnel/relation/departure", + "keep": 1, + "description": "离职申请、离职办理、交接与离职档案。", + "understanding": "涉及权限回收、薪酬结算、社保停缴等联动。", + "review_note": "", + "screenshot": "screenshots/02_人事/员工关系/03_离职管理.jpg", + "field_count": 42, + "fields": [ + { + "group": "系统字段", + "name": "头像", + "order": 0 + }, + { + "group": "系统字段", + "name": "姓名", + "order": 1 + }, + { + "group": "系统字段", + "name": "工号", + "order": 2 + }, + { + "group": "系统字段", + "name": "部门", + "order": 3 + }, + { + "group": "系统字段", + "name": "岗位", + "order": 4 + }, + { + "group": "系统字段", + "name": "工作性质", + "order": 5 + }, + { + "group": "系统字段", + "name": "员工状态", + "order": 6 + }, + { + "group": "系统字段", + "name": "入职日期", + "order": 7 + }, + { + "group": "系统字段", + "name": "司龄", + "order": 8 + }, + { + "group": "系统字段", + "name": "离职日期", + "order": 9 + }, + { + "group": "系统字段", + "name": "离职类型", + "order": 10 + }, + { + "group": "系统字段", + "name": "离职原因", + "order": 11 + }, + { + "group": "系统字段", + "name": "离职审批编号", + "order": 12 + }, + { + "group": "系统字段", + "name": "离职审批状态", + "order": 13 + }, + { + "group": "系统字段", + "name": "一级部门", + "order": 14 + }, + { + "group": "系统字段", + "name": "二级部门", + "order": 15 + }, + { + "group": "系统字段", + "name": "三级部门", + "order": 16 + }, + { + "group": "系统字段", + "name": "职级", + "order": 17 + }, + { + "group": "系统字段", + "name": "岗位类别", + "order": 18 + }, + { + "group": "系统字段", + "name": "工作城市", + "order": 19 + }, + { + "group": "系统字段", + "name": "工作地点", + "order": 20 + }, + { + "group": "系统字段", + "name": "合同公司", + "order": 21 + }, + { + "group": "系统字段", + "name": "离职申请日期", + "order": 22 + }, + { + "group": "系统字段", + "name": "薪资结算日", + "order": 23 + }, + { + "group": "系统字段", + "name": "离职原因说明", + "order": 24 + }, + { + "group": "系统字段", + "name": "离职备注", + "order": 25 + }, + { + "group": "系统字段", + "name": "离职去向", + "order": 26 + }, + { + "group": "系统字段", + "name": "性别", + "order": 27 + }, + { + "group": "系统字段", + "name": "年龄", + "order": 28 + }, + { + "group": "系统字段", + "name": "工龄", + "order": 29 + }, + { + "group": "系统字段", + "name": "手机号码", + "order": 30 + }, + { + "group": "系统字段", + "name": "工作邮箱", + "order": 31 + }, + { + "group": "自定义字段", + "name": "宿舍号", + "order": 32 + }, + { + "group": "自定义字段", + "name": "省份", + "order": 33 + }, + { + "group": "自定义字段", + "name": "工行卡号", + "order": 34 + }, + { + "group": "自定义字段", + "name": "中行卡号", + "order": 35 + }, + { + "group": "自定义字段", + "name": "派遣单位", + "order": 36 + }, + { + "group": "自定义字段", + "name": "入住宿舍日期", + "order": 37 + }, + { + "group": "自定义字段", + "name": "兴业银行", + "order": 38 + }, + { + "group": "自定义字段", + "name": "现通讯地址", + "order": 39 + }, + { + "group": "自定义字段", + "name": "实习生", + "order": 40 + }, + { + "group": "自定义字段", + "name": "股龄", + "order": 41 + } + ], + "hidden_entries": [ + "办理离职", + "批量办理离职", + "放弃离职", + "调整离职信息" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/03_离职管理__filter.jpg" + }, + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工关系/03_离职管理__columns.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/待离职员工列表_20260717211236.xlsx", + "kind": "xlsx", + "size": 6778, + "sheet": "待离职员工列表", + "total_rows": 10, + "total_cols": 13, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工作性质", + "员工状态", + "入职日期", + "司龄", + "离职日期", + "离职类型", + "离职原因", + "离职审批编号", + "离职审批状态" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/unusual-action", + "name": "人事异动", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 人事异动", + "url": "https://2haohr.com/personnel/relation/unusual-action", + "keep": 1, + "description": "部门/岗位/职级调动等异动记录与审批。", + "understanding": "组织变动留痕,影响薪酬与汇报关系。", + "review_note": "", + "screenshot": "screenshots/02_人事/员工关系/04_人事异动.jpg", + "field_count": 55, + "fields": [ + { + "group": "系统字段", + "name": "头像", + "order": 0 + }, + { + "group": "系统字段", + "name": "姓名", + "order": 1 + }, + { + "group": "系统字段", + "name": "工号", + "order": 2 + }, + { + "group": "系统字段", + "name": "部门", + "order": 3 + }, + { + "group": "系统字段", + "name": "岗位", + "order": 4 + }, + { + "group": "系统字段", + "name": "工作性质", + "order": 5 + }, + { + "group": "系统字段", + "name": "异动类型", + "order": 6 + }, + { + "group": "系统字段", + "name": "异动原因", + "order": 7 + }, + { + "group": "系统字段", + "name": "异动日期", + "order": 8 + }, + { + "group": "系统字段", + "name": "异动详情", + "order": 9 + }, + { + "group": "系统字段", + "name": "原部门", + "order": 10 + }, + { + "group": "系统字段", + "name": "异动后部门", + "order": 11 + }, + { + "group": "系统字段", + "name": "原岗位", + "order": 12 + }, + { + "group": "系统字段", + "name": "异动后岗位", + "order": 13 + }, + { + "group": "系统字段", + "name": "原职务", + "order": 14 + }, + { + "group": "系统字段", + "name": "异动后职务", + "order": 15 + }, + { + "group": "系统字段", + "name": "原职级", + "order": 16 + }, + { + "group": "系统字段", + "name": "异动后职级", + "order": 17 + }, + { + "group": "系统字段", + "name": "原汇报上级", + "order": 18 + }, + { + "group": "系统字段", + "name": "异动后汇报上级", + "order": 19 + }, + { + "group": "系统字段", + "name": "原工作地点", + "order": 20 + }, + { + "group": "系统字段", + "name": "异动后工作地点", + "order": 21 + }, + { + "group": "系统字段", + "name": "原合同公司", + "order": 22 + }, + { + "group": "系统字段", + "name": "异动后合同公司", + "order": 23 + }, + { + "group": "系统字段", + "name": "异动备注", + "order": 24 + }, + { + "group": "系统字段", + "name": "审批单号", + "order": 25 + }, + { + "group": "系统字段", + "name": "审批状态", + "order": 26 + }, + { + "group": "系统字段", + "name": "异动状态", + "order": 27 + }, + { + "group": "系统字段", + "name": "修改人", + "order": 28 + }, + { + "group": "系统字段", + "name": "修改时间", + "order": 29 + }, + { + "group": "系统字段", + "name": "一级部门", + "order": 30 + }, + { + "group": "系统字段", + "name": "二级部门", + "order": 31 + }, + { + "group": "系统字段", + "name": "三级部门", + "order": 32 + }, + { + "group": "系统字段", + "name": "职级", + "order": 33 + }, + { + "group": "系统字段", + "name": "岗位类别", + "order": 34 + }, + { + "group": "系统字段", + "name": "工作城市", + "order": 35 + }, + { + "group": "系统字段", + "name": "工作地点", + "order": 36 + }, + { + "group": "系统字段", + "name": "合同公司", + "order": 37 + }, + { + "group": "系统字段", + "name": "员工状态", + "order": 38 + }, + { + "group": "系统字段", + "name": "入职日期", + "order": 39 + }, + { + "group": "系统字段", + "name": "性别", + "order": 40 + }, + { + "group": "系统字段", + "name": "年龄", + "order": 41 + }, + { + "group": "系统字段", + "name": "手机号码", + "order": 42 + }, + { + "group": "系统字段", + "name": "工作邮箱", + "order": 43 + }, + { + "group": "系统字段", + "name": "同步员工信息", + "order": 44 + }, + { + "group": "自定义字段", + "name": "宿舍号", + "order": 45 + }, + { + "group": "自定义字段", + "name": "省份", + "order": 46 + }, + { + "group": "自定义字段", + "name": "工行卡号", + "order": 47 + }, + { + "group": "自定义字段", + "name": "中行卡号", + "order": 48 + }, + { + "group": "自定义字段", + "name": "派遣单位", + "order": 49 + }, + { + "group": "自定义字段", + "name": "入住宿舍日期", + "order": 50 + }, + { + "group": "自定义字段", + "name": "兴业银行", + "order": 51 + }, + { + "group": "自定义字段", + "name": "现通讯地址", + "order": 52 + }, + { + "group": "自定义字段", + "name": "实习生", + "order": 53 + }, + { + "group": "自定义字段", + "name": "股龄", + "order": 54 + } + ], + "hidden_entries": [ + "批量导入", + "批量导入转全职" + ], + "deep_shots": [ + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工关系/04_人事异动__columns.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/员工异动记录表_20260717211551.xlsx", + "kind": "xlsx", + "size": 12551, + "sheet": "员工异动记录表", + "total_rows": 42, + "total_cols": 29, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工作性质", + "异动类型", + "异动原因", + "异动日期", + "异动详情", + "原部门", + "异动后部门", + "原岗位", + "异动后岗位", + "原职务", + "异动后职务", + "原职级", + "异动后职级", + "原汇报上级", + "异动后汇报上级", + "原工作地点", + "异动后工作地点", + "原合同公司", + "异动后合同公司", + "异动备注", + "审批单号", + "审批状态", + "修改人", + "修改时间", + "异动状态" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/care", + "name": "关怀通知", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 关怀通知", + "url": "https://2haohr.com/personnel/relation/care", + "keep": 1, + "description": "生日/周年/证件到期等关怀提醒与自动通知。", + "understanding": "员工体验运营,可配置触发规则与文案。", + "review_note": "通知类型太多,简化窗口。\n手工发送:选报范围、编辑信息\n自动发送:节日统一全员祝福\n智能发送:生日,可ai设定", + "screenshot": "screenshots/02_人事/员工关系/05_关怀通知.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "停用", + "删除", + "编辑" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加关怀通知", + "path": "screenshots/02_人事/员工关系/05_关怀通知__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "人事::/personnel/relation/contract", + "name": "合同管理", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 合同管理", + "url": "https://2haohr.com/personnel/relation/contract", + "keep": 1, + "description": "劳动合同签订、续签、到期提醒与合同台账。", + "understanding": "与电子合同模块可打通;合同到期预警是刚需。", + "review_note": "", + "screenshot": "screenshots/02_人事/员工关系/06_合同管理.jpg", + "field_count": 22, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "部门", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "入职日期", + "order": 3 + }, + { + "group": "", + "name": "工作性质", + "order": 4 + }, + { + "group": "", + "name": "员工状态", + "order": 5 + }, + { + "group": "", + "name": "合同公司", + "order": 6 + }, + { + "group": "", + "name": "工作地点", + "order": 7 + }, + { + "group": "", + "name": "合同编号", + "order": 8 + }, + { + "group": "", + "name": "合同类型", + "order": 9 + }, + { + "group": "", + "name": "合同状态", + "order": 10 + }, + { + "group": "", + "name": "审批单号", + "order": 11 + }, + { + "group": "", + "name": "审批状态", + "order": 12 + }, + { + "group": "", + "name": "合同期限", + "order": 13 + }, + { + "group": "", + "name": "合同开始日期", + "order": 14 + }, + { + "group": "", + "name": "合同结束日期", + "order": 15 + }, + { + "group": "", + "name": "合同签约公司", + "order": 16 + }, + { + "group": "", + "name": "合同签订日期", + "order": 17 + }, + { + "group": "", + "name": "合同签订次数", + "order": 18 + }, + { + "group": "", + "name": "修改人", + "order": 19 + }, + { + "group": "", + "name": "修改时间", + "order": 20 + }, + { + "group": "", + "name": "姓名", + "order": 21 + } + ], + "hidden_entries": [ + "批量导入新增", + "批量导入更新", + "解除", + "终止" + ], + "deep_shots": [], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/已签订合同人员列表_20260717_211338.xlsx", + "kind": "xlsx", + "size": 7036, + "sheet": "已签订合同人员列表", + "total_rows": 7, + "total_cols": 22, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "入职日期", + "工作性质", + "员工状态", + "合同公司", + "工作地点", + "合同编号", + "合同类型", + "合同状态", + "合同期限", + "合同开始日期", + "合同结束日期", + "合同签约公司", + "合同签订日期", + "合同签订次数", + "审批单号", + "审批状态", + "修改人", + "修改时间" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/talk", + "name": "沟通记录", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 沟通记录", + "url": "https://2haohr.com/personnel/relation/talk", + "keep": 1, + "description": "HR 与员工的沟通/谈话记录留存。", + "understanding": "员工关系管理留痕,支撑争议处理。", + "review_note": "绩效沟通记录", + "screenshot": "screenshots/02_人事/员工关系/07_沟通记录.jpg", + "field_count": 28, + "fields": [ + { + "group": "", + "name": "头像", + "order": 0 + }, + { + "group": "", + "name": "姓名", + "order": 1 + }, + { + "group": "", + "name": "工号", + "order": 2 + }, + { + "group": "", + "name": "部门", + "order": 3 + }, + { + "group": "", + "name": "岗位", + "order": 4 + }, + { + "group": "", + "name": "工作性质", + "order": 5 + }, + { + "group": "", + "name": "员工状态", + "order": 6 + }, + { + "group": "", + "name": "沟通类型", + "order": 7 + }, + { + "group": "", + "name": "沟通日期", + "order": 8 + }, + { + "group": "", + "name": "沟通负责人", + "order": 9 + }, + { + "group": "", + "name": "沟通状态", + "order": 10 + }, + { + "group": "", + "name": "修改人", + "order": 11 + }, + { + "group": "", + "name": "修改时间", + "order": 12 + }, + { + "group": "", + "name": "一级部门", + "order": 13 + }, + { + "group": "", + "name": "二级部门", + "order": 14 + }, + { + "group": "", + "name": "三级部门", + "order": 15 + }, + { + "group": "", + "name": "职务", + "order": 16 + }, + { + "group": "", + "name": "职级", + "order": 17 + }, + { + "group": "", + "name": "职等", + "order": 18 + }, + { + "group": "", + "name": "岗位类别", + "order": 19 + }, + { + "group": "", + "name": "工作城市", + "order": 20 + }, + { + "group": "", + "name": "工作地点", + "order": 21 + }, + { + "group": "", + "name": "合同公司", + "order": 22 + }, + { + "group": "", + "name": "入职日期", + "order": 23 + }, + { + "group": "", + "name": "性别", + "order": 24 + }, + { + "group": "", + "name": "年龄", + "order": 25 + }, + { + "group": "", + "name": "手机号码", + "order": 26 + }, + { + "group": "", + "name": "工作邮箱", + "order": 27 + } + ], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/07_沟通记录__filter.jpg" + }, + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加沟通记录", + "path": "screenshots/02_人事/员工关系/07_沟通记录__add.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/员工谈话记录-2026-07-17 22_37_52.xlsx", + "kind": "xlsx", + "size": 6435, + "sheet": "员工谈话记录", + "total_rows": 6, + "total_cols": 12, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工作性质", + "员工状态", + "沟通类型", + "沟通日期", + "沟通负责人", + "沟通状态", + "修改人", + "修改时间" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/office", + "name": "任职记录", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 任职记录", + "url": "https://2haohr.com/personnel/relation/office", + "keep": 1, + "description": "员工历史任职(岗位/部门)变化记录。", + "understanding": "履历追溯,来源于人事异动。", + "review_note": "输入员工姓名或工号,自动展现该员工在公司内的任职记录,按时间轴的方式\n呈现该员工的岗位、职级、职档、上级、奖罚情况", + "screenshot": "screenshots/02_人事/员工关系/08_任职记录.jpg", + "field_count": 46, + "fields": [ + { + "group": "系统字段", + "name": "头像", + "order": 0 + }, + { + "group": "系统字段", + "name": "姓名", + "order": 1 + }, + { + "group": "系统字段", + "name": "工号", + "order": 2 + }, + { + "group": "系统字段", + "name": "部门", + "order": 3 + }, + { + "group": "系统字段", + "name": "岗位", + "order": 4 + }, + { + "group": "系统字段", + "name": "工作性质", + "order": 5 + }, + { + "group": "系统字段", + "name": "任职开始日期", + "order": 6 + }, + { + "group": "系统字段", + "name": "任职结束日期", + "order": 7 + }, + { + "group": "系统字段", + "name": "曾任职部门", + "order": 8 + }, + { + "group": "系统字段", + "name": "曾汇报上级", + "order": 9 + }, + { + "group": "系统字段", + "name": "曾任职岗位", + "order": 10 + }, + { + "group": "系统字段", + "name": "任职职级", + "order": 11 + }, + { + "group": "系统字段", + "name": "任职合同公司", + "order": 12 + }, + { + "group": "系统字段", + "name": "任职工作地点", + "order": 13 + }, + { + "group": "系统字段", + "name": "任职备注", + "order": 14 + }, + { + "group": "系统字段", + "name": "修改人", + "order": 15 + }, + { + "group": "系统字段", + "name": "修改时间", + "order": 16 + }, + { + "group": "系统字段", + "name": "一级部门", + "order": 17 + }, + { + "group": "系统字段", + "name": "二级部门", + "order": 18 + }, + { + "group": "系统字段", + "name": "三级部门", + "order": 19 + }, + { + "group": "系统字段", + "name": "职务", + "order": 20 + }, + { + "group": "系统字段", + "name": "职级", + "order": 21 + }, + { + "group": "系统字段", + "name": "职等", + "order": 22 + }, + { + "group": "系统字段", + "name": "岗位类别", + "order": 23 + }, + { + "group": "系统字段", + "name": "工作城市", + "order": 24 + }, + { + "group": "系统字段", + "name": "工作地点", + "order": 25 + }, + { + "group": "系统字段", + "name": "合同公司", + "order": 26 + }, + { + "group": "系统字段", + "name": "员工状态", + "order": 27 + }, + { + "group": "系统字段", + "name": "入职日期", + "order": 28 + }, + { + "group": "系统字段", + "name": "性别", + "order": 29 + }, + { + "group": "系统字段", + "name": "年龄", + "order": 30 + }, + { + "group": "系统字段", + "name": "手机号码", + "order": 31 + }, + { + "group": "系统字段", + "name": "工作邮箱", + "order": 32 + }, + { + "group": "系统字段", + "name": "曾任职工作性质", + "order": 33 + }, + { + "group": "系统字段", + "name": "曾任职职等", + "order": 34 + }, + { + "group": "系统字段", + "name": "曾任职职务", + "order": 35 + }, + { + "group": "自定义字段", + "name": "宿舍号", + "order": 36 + }, + { + "group": "自定义字段", + "name": "省份", + "order": 37 + }, + { + "group": "自定义字段", + "name": "工行卡号", + "order": 38 + }, + { + "group": "自定义字段", + "name": "中行卡号", + "order": 39 + }, + { + "group": "自定义字段", + "name": "派遣单位", + "order": 40 + }, + { + "group": "自定义字段", + "name": "入住宿舍日期", + "order": 41 + }, + { + "group": "自定义字段", + "name": "兴业银行", + "order": 42 + }, + { + "group": "自定义字段", + "name": "现通讯地址", + "order": 43 + }, + { + "group": "自定义字段", + "name": "实习生", + "order": 44 + }, + { + "group": "自定义字段", + "name": "股龄", + "order": 45 + } + ], + "hidden_entries": [ + "批量导入新增", + "批量导入更新" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/08_任职记录__filter.jpg" + }, + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工关系/08_任职记录__columns.jpg" + }, + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增", + "path": "screenshots/02_人事/员工关系/08_任职记录__add.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx", + "kind": "xlsx", + "size": 10409, + "sheet": "员工任职记录", + "total_rows": 49, + "total_cols": 16, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工作性质", + "任职开始日期", + "任职结束日期", + "曾任职部门", + "曾汇报上级", + "曾任职岗位", + "任职职级", + "任职合同公司", + "任职工作地点", + "任职备注", + "修改人", + "修改时间" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/train", + "name": "培训经历", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 培训经历", + "url": "https://2haohr.com/personnel/relation/train", + "keep": 1, + "description": "员工参加培训的经历记录。", + "understanding": "与培训模块数据互通。", + "review_note": "不是必要选项", + "screenshot": "screenshots/02_人事/员工关系/09_培训经历.jpg", + "field_count": 44, + "fields": [ + { + "group": "系统字段", + "name": "头像", + "order": 0 + }, + { + "group": "系统字段", + "name": "姓名", + "order": 1 + }, + { + "group": "系统字段", + "name": "工号", + "order": 2 + }, + { + "group": "系统字段", + "name": "部门", + "order": 3 + }, + { + "group": "系统字段", + "name": "岗位", + "order": 4 + }, + { + "group": "系统字段", + "name": "工作性质", + "order": 5 + }, + { + "group": "系统字段", + "name": "培训名称", + "order": 6 + }, + { + "group": "系统字段", + "name": "培训开始时间", + "order": 7 + }, + { + "group": "系统字段", + "name": "培训结束时间", + "order": 8 + }, + { + "group": "系统字段", + "name": "培训时间", + "order": 9 + }, + { + "group": "系统字段", + "name": "培训总学时", + "order": 10 + }, + { + "group": "系统字段", + "name": "培训证书名称", + "order": 11 + }, + { + "group": "系统字段", + "name": "培训备注", + "order": 12 + }, + { + "group": "系统字段", + "name": "修改人", + "order": 13 + }, + { + "group": "系统字段", + "name": "修改时间", + "order": 14 + }, + { + "group": "系统字段", + "name": "一级部门", + "order": 15 + }, + { + "group": "系统字段", + "name": "二级部门", + "order": 16 + }, + { + "group": "系统字段", + "name": "三级部门", + "order": 17 + }, + { + "group": "系统字段", + "name": "职务", + "order": 18 + }, + { + "group": "系统字段", + "name": "职级", + "order": 19 + }, + { + "group": "系统字段", + "name": "职等", + "order": 20 + }, + { + "group": "系统字段", + "name": "岗位类别", + "order": 21 + }, + { + "group": "系统字段", + "name": "工作城市", + "order": 22 + }, + { + "group": "系统字段", + "name": "工作地点", + "order": 23 + }, + { + "group": "系统字段", + "name": "合同公司", + "order": 24 + }, + { + "group": "系统字段", + "name": "员工状态", + "order": 25 + }, + { + "group": "系统字段", + "name": "入职日期", + "order": 26 + }, + { + "group": "系统字段", + "name": "性别", + "order": 27 + }, + { + "group": "系统字段", + "name": "年龄", + "order": 28 + }, + { + "group": "系统字段", + "name": "手机号码", + "order": 29 + }, + { + "group": "系统字段", + "name": "工作邮箱", + "order": 30 + }, + { + "group": "系统字段", + "name": "培训单位", + "order": 31 + }, + { + "group": "系统字段", + "name": "培训成绩", + "order": 32 + }, + { + "group": "系统字段", + "name": "培训证书编号", + "order": 33 + }, + { + "group": "自定义字段", + "name": "宿舍号", + "order": 34 + }, + { + "group": "自定义字段", + "name": "省份", + "order": 35 + }, + { + "group": "自定义字段", + "name": "工行卡号", + "order": 36 + }, + { + "group": "自定义字段", + "name": "中行卡号", + "order": 37 + }, + { + "group": "自定义字段", + "name": "派遣单位", + "order": 38 + }, + { + "group": "自定义字段", + "name": "入住宿舍日期", + "order": 39 + }, + { + "group": "自定义字段", + "name": "兴业银行", + "order": 40 + }, + { + "group": "自定义字段", + "name": "现通讯地址", + "order": 41 + }, + { + "group": "自定义字段", + "name": "实习生", + "order": 42 + }, + { + "group": "自定义字段", + "name": "股龄", + "order": 43 + } + ], + "hidden_entries": [ + "批量导入新增", + "批量导入更新" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/09_培训经历__filter.jpg" + }, + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工关系/09_培训经历__columns.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx", + "kind": "xlsx", + "size": 6261, + "sheet": "员工培训经历", + "total_rows": 4, + "total_cols": 14, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工作性质", + "培训名称", + "培训开始时间", + "培训结束时间", + "培训时间", + "培训总学时", + "培训证书名称", + "培训备注", + "修改人", + "修改时间" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/award", + "name": "奖惩记录", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 奖惩记录", + "url": "https://2haohr.com/personnel/relation/award", + "keep": 1, + "description": "员工奖励与处罚记录管理。", + "understanding": "影响绩效与晋升评估。", + "review_note": "1、从员工信息查该员工的所有奖罚\n2、从奖罚类型查,对应的员工", + "screenshot": "screenshots/02_人事/员工关系/10_奖惩记录.jpg", + "field_count": 48, + "fields": [ + { + "group": "系统字段", + "name": "头像", + "order": 0 + }, + { + "group": "系统字段", + "name": "姓名", + "order": 1 + }, + { + "group": "系统字段", + "name": "工号", + "order": 2 + }, + { + "group": "系统字段", + "name": "部门", + "order": 3 + }, + { + "group": "系统字段", + "name": "岗位", + "order": 4 + }, + { + "group": "系统字段", + "name": "工作性质", + "order": 5 + }, + { + "group": "系统字段", + "name": "奖励/惩罚", + "order": 6 + }, + { + "group": "系统字段", + "name": "奖惩类别", + "order": 7 + }, + { + "group": "系统字段", + "name": "奖惩日期", + "order": 8 + }, + { + "group": "系统字段", + "name": "奖惩内容", + "order": 9 + }, + { + "group": "系统字段", + "name": "奖惩金额", + "order": 10 + }, + { + "group": "系统字段", + "name": "奖惩原因", + "order": 11 + }, + { + "group": "系统字段", + "name": "奖惩备注", + "order": 12 + }, + { + "group": "系统字段", + "name": "奖惩所在部门", + "order": 13 + }, + { + "group": "系统字段", + "name": "奖惩所在岗位", + "order": 14 + }, + { + "group": "系统字段", + "name": "是否已撤销", + "order": 15 + }, + { + "group": "系统字段", + "name": "撤销日期", + "order": 16 + }, + { + "group": "系统字段", + "name": "撤销原因", + "order": 17 + }, + { + "group": "系统字段", + "name": "撤销备注", + "order": 18 + }, + { + "group": "系统字段", + "name": "修改人", + "order": 19 + }, + { + "group": "系统字段", + "name": "修改时间", + "order": 20 + }, + { + "group": "系统字段", + "name": "一级部门", + "order": 21 + }, + { + "group": "系统字段", + "name": "二级部门", + "order": 22 + }, + { + "group": "系统字段", + "name": "三级部门", + "order": 23 + }, + { + "group": "系统字段", + "name": "职务", + "order": 24 + }, + { + "group": "系统字段", + "name": "职级", + "order": 25 + }, + { + "group": "系统字段", + "name": "职等", + "order": 26 + }, + { + "group": "系统字段", + "name": "岗位类别", + "order": 27 + }, + { + "group": "系统字段", + "name": "工作城市", + "order": 28 + }, + { + "group": "系统字段", + "name": "工作地点", + "order": 29 + }, + { + "group": "系统字段", + "name": "合同公司", + "order": 30 + }, + { + "group": "系统字段", + "name": "员工状态", + "order": 31 + }, + { + "group": "系统字段", + "name": "入职日期", + "order": 32 + }, + { + "group": "系统字段", + "name": "性别", + "order": 33 + }, + { + "group": "系统字段", + "name": "年龄", + "order": 34 + }, + { + "group": "系统字段", + "name": "手机号码", + "order": 35 + }, + { + "group": "系统字段", + "name": "工作邮箱", + "order": 36 + }, + { + "group": "系统字段", + "name": "奖惩审批单号", + "order": 37 + }, + { + "group": "自定义字段", + "name": "宿舍号", + "order": 38 + }, + { + "group": "自定义字段", + "name": "省份", + "order": 39 + }, + { + "group": "自定义字段", + "name": "工行卡号", + "order": 40 + }, + { + "group": "自定义字段", + "name": "中行卡号", + "order": 41 + }, + { + "group": "自定义字段", + "name": "派遣单位", + "order": 42 + }, + { + "group": "自定义字段", + "name": "入住宿舍日期", + "order": 43 + }, + { + "group": "自定义字段", + "name": "兴业银行", + "order": 44 + }, + { + "group": "自定义字段", + "name": "现通讯地址", + "order": 45 + }, + { + "group": "自定义字段", + "name": "实习生", + "order": 46 + }, + { + "group": "自定义字段", + "name": "股龄", + "order": 47 + } + ], + "hidden_entries": [ + "批量导入新增", + "批量导入更新" + ], + "deep_shots": [ + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工关系/10_奖惩记录__columns.jpg" + }, + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增", + "path": "screenshots/02_人事/员工关系/10_奖惩记录__add.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx", + "kind": "xlsx", + "size": 6648, + "sheet": "员工奖惩记录表", + "total_rows": 5, + "total_cols": 20, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "工作性质", + "奖励/惩罚", + "奖惩类别", + "奖惩日期", + "奖惩内容", + "奖惩金额", + "奖惩原因", + "奖惩备注", + "奖惩所在部门", + "奖惩所在岗位", + "是否已撤销", + "撤销日期", + "撤销原因", + "撤销备注", + "修改人", + "修改时间" + ] + } + ] + }, + { + "node_key": "人事::/personnel/relation/inspect", + "name": "考察期管理", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 考察期管理", + "url": "https://2haohr.com/personnel/relation/inspect", + "keep": 1, + "description": "特定员工考察期的设置与跟踪。", + "understanding": "试用/观察期管理的补充。", + "review_note": "不是必要选项", + "screenshot": "screenshots/02_人事/员工关系/11_考察期管理.jpg", + "field_count": 29, + "fields": [ + { + "group": "", + "name": "头像", + "order": 0 + }, + { + "group": "", + "name": "姓名", + "order": 1 + }, + { + "group": "", + "name": "工号", + "order": 2 + }, + { + "group": "", + "name": "部门", + "order": 3 + }, + { + "group": "", + "name": "岗位", + "order": 4 + }, + { + "group": "", + "name": "考察开始日期", + "order": 5 + }, + { + "group": "", + "name": "考察结束日期", + "order": 6 + }, + { + "group": "", + "name": "考察内容", + "order": 7 + }, + { + "group": "", + "name": "考察结果", + "order": 8 + }, + { + "group": "", + "name": "考察备注", + "order": 9 + }, + { + "group": "", + "name": "修改人", + "order": 10 + }, + { + "group": "", + "name": "修改时间", + "order": 11 + }, + { + "group": "", + "name": "一级部门", + "order": 12 + }, + { + "group": "", + "name": "二级部门", + "order": 13 + }, + { + "group": "", + "name": "三级部门", + "order": 14 + }, + { + "group": "", + "name": "职务", + "order": 15 + }, + { + "group": "", + "name": "职级", + "order": 16 + }, + { + "group": "", + "name": "职等", + "order": 17 + }, + { + "group": "", + "name": "岗位类别", + "order": 18 + }, + { + "group": "", + "name": "工作城市", + "order": 19 + }, + { + "group": "", + "name": "工作地点", + "order": 20 + }, + { + "group": "", + "name": "合同公司", + "order": 21 + }, + { + "group": "", + "name": "工作性质", + "order": 22 + }, + { + "group": "", + "name": "员工状态", + "order": 23 + }, + { + "group": "", + "name": "入职日期", + "order": 24 + }, + { + "group": "", + "name": "性别", + "order": 25 + }, + { + "group": "", + "name": "年龄", + "order": 26 + }, + { + "group": "", + "name": "手机号码", + "order": 27 + }, + { + "group": "", + "name": "工作邮箱", + "order": 28 + } + ], + "hidden_entries": [ + "批量导入新增", + "批量导入更新" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/11_考察期管理__filter.jpg" + }, + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工关系/11_考察期管理__columns.jpg" + }, + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加考察人员", + "path": "screenshots/02_人事/员工关系/11_考察期管理__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "人事::/personnel/relation/internship", + "name": "实习生管理", + "group": "员工关系", + "full_path": "人事 / 员工关系 / 实习生管理", + "url": "https://2haohr.com/personnel/relation/internship", + "keep": 1, + "description": "实习生专项档案与转正管理。", + "understanding": "针对实习用工的差异化流程。", + "review_note": "不是必要选项", + "screenshot": "screenshots/02_人事/员工关系/12_实习生管理.jpg", + "field_count": 30, + "fields": [ + { + "group": "", + "name": "头像", + "order": 0 + }, + { + "group": "", + "name": "姓名", + "order": 1 + }, + { + "group": "", + "name": "工号", + "order": 2 + }, + { + "group": "", + "name": "部门", + "order": 3 + }, + { + "group": "", + "name": "岗位", + "order": 4 + }, + { + "group": "", + "name": "年龄", + "order": 5 + }, + { + "group": "", + "name": "入职日期", + "order": 6 + }, + { + "group": "", + "name": "实习期", + "order": 7 + }, + { + "group": "", + "name": "实习到期日", + "order": 8 + }, + { + "group": "", + "name": "实习内容", + "order": 9 + }, + { + "group": "", + "name": "实习导师", + "order": 10 + }, + { + "group": "", + "name": "实习备注", + "order": 11 + }, + { + "group": "", + "name": "实习评价", + "order": 12 + }, + { + "group": "", + "name": "转全职审批编号", + "order": 13 + }, + { + "group": "", + "name": "转全职审批状态", + "order": 14 + }, + { + "group": "", + "name": "性别", + "order": 15 + }, + { + "group": "", + "name": "一级部门", + "order": 16 + }, + { + "group": "", + "name": "二级部门", + "order": 17 + }, + { + "group": "", + "name": "三级部门", + "order": 18 + }, + { + "group": "", + "name": "职务", + "order": 19 + }, + { + "group": "", + "name": "职级", + "order": 20 + }, + { + "group": "", + "name": "职等", + "order": 21 + }, + { + "group": "", + "name": "工作性质", + "order": 22 + }, + { + "group": "", + "name": "员工状态", + "order": 23 + }, + { + "group": "", + "name": "手机号码", + "order": 24 + }, + { + "group": "", + "name": "工作邮箱", + "order": 25 + }, + { + "group": "", + "name": "合同公司", + "order": 26 + }, + { + "group": "", + "name": "工作地点", + "order": 27 + }, + { + "group": "", + "name": "工作城市", + "order": 28 + }, + { + "group": "", + "name": "岗位类别", + "order": 29 + } + ], + "hidden_entries": [ + "批量导入更新", + "批量转全职" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/02_人事/员工关系/12_实习生管理__filter.jpg" + }, + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/02_人事/员工关系/12_实习生管理__columns.jpg" + }, + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加实习生", + "path": "screenshots/02_人事/员工关系/12_实习生管理__add.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/02_人事/员工关系/实习生情况记录表-20260717223640.xlsx", + "kind": "xlsx", + "size": 6023, + "sheet": "全部实习生情况信息", + "total_rows": 2, + "total_cols": 14, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "年龄", + "入职日期", + "实习期", + "实习到期日", + "实习内容", + "实习导师", + "实习备注", + "实习评价", + "转全职审批编号", + "转全职审批状态" + ] + } + ] + } + ] + }, + { + "module": "组织", + "page_count": 8, + "field_pages": 5, + "pages": [ + { + "node_key": "组织::/org/dept/manage/home", + "name": "组织管理", + "group": "组织架构", + "full_path": "组织 / 组织架构 / 组织管理", + "url": "https://2haohr.com/org/dept/manage/home", + "keep": 1, + "description": "部门树的增删改与部门负责人、编制等管理。", + "understanding": "组织主数据根节点,权限与审批的部门维度基础。", + "review_note": "", + "screenshot": "screenshots/03_组织/组织架构/01_组织管理.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "隐藏组织类型", + "隐藏员工数", + "隐藏全职员工", + "隐藏非全职员工", + "隐藏人员编制", + "隐藏缺编/超编", + "隐藏负责人", + "隐藏分管领导", + "调整排序", + "导出", + "历史组织", + "批量删除组织" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/03_组织/组织架构/01_组织管理__filter.jpg" + }, + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增组织", + "path": "screenshots/03_组织/组织架构/01_组织管理__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "组织::/org/dept/architecture", + "name": "架构图", + "group": "组织架构", + "full_path": "组织 / 组织架构 / 架构图", + "url": "https://2haohr.com/org/dept/architecture", + "keep": 1, + "description": "可视化组织架构图展示与调整。", + "understanding": "直观呈现汇报关系,支持导出。", + "review_note": "", + "screenshot": "screenshots/03_组织/组织架构/02_架构图.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "显示部门负责人", + "显示岗位", + "显示人数", + "隐藏人数为0的组织", + "设置管理机构", + "下载组织架构" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "组织::/org/dept/work-place", + "name": "工作地点", + "group": "组织架构", + "full_path": "组织 / 组织架构 / 工作地点", + "url": "https://2haohr.com/org/dept/work-place", + "keep": 1, + "description": "企业办公/工作地点的维护。", + "understanding": "关联考勤打卡范围与员工工作城市。", + "review_note": "", + "screenshot": "screenshots/03_组织/组织架构/03_工作地点.jpg", + "field_count": 6, + "fields": [ + { + "group": "", + "name": "工作地点名称", + "order": 0 + }, + { + "group": "", + "name": "所在城市", + "order": 1 + }, + { + "group": "", + "name": "所属区域", + "order": 2 + }, + { + "group": "", + "name": "详细地址", + "order": 3 + }, + { + "group": "", + "name": "邮政编码", + "order": 4 + }, + { + "group": "", + "name": "在职员工数", + "order": 5 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "组织::/org/job/job-management", + "name": "岗位管理", + "group": "", + "full_path": "组织 / 岗位管理 / 岗位管理", + "url": "https://2haohr.com/org/job/job-management", + "keep": 1, + "description": "岗位设置、岗位职责与编制管理。", + "understanding": "岗位是招聘/薪酬/绩效的归属维度。", + "review_note": "111", + "screenshot": "screenshots/03_组织/岗位管理/01_岗位管理.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "在职人数", + "order": 0 + }, + { + "group": "", + "name": "全职人数", + "order": 1 + }, + { + "group": "", + "name": "人员编制", + "order": 2 + }, + { + "group": "", + "name": "岗位编码", + "order": 3 + }, + { + "group": "", + "name": "所属组织", + "order": 4 + }, + { + "group": "", + "name": "岗位类别", + "order": 5 + }, + { + "group": "", + "name": "职级", + "order": 6 + }, + { + "group": "", + "name": "职等", + "order": 7 + }, + { + "group": "", + "name": "岗位名称", + "order": 8 + } + ], + "hidden_entries": [ + "批量新增", + "批量修改", + "批量停用", + "批量删除", + "调整排序", + "历史岗位", + "导入岗位编制", + "导出岗位编制表", + "导出岗位信息表", + "合并导出岗位说明书" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/03_组织/岗位管理/01_岗位管理__filter.jpg" + }, + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增岗位", + "path": "screenshots/03_组织/岗位管理/01_岗位管理__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "组织::/org/job-system/title", + "name": "职务管理", + "group": "岗位管理", + "full_path": "组织 / 岗位管理 / 职务管理", + "url": "https://2haohr.com/org/job-system/title", + "keep": 1, + "description": "职务序列与职务信息管理。", + "understanding": "与职级配合构成职级体系。", + "review_note": "", + "screenshot": "screenshots/03_组织/岗位管理/02_职务管理.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "职务名称", + "order": 0 + }, + { + "group": "", + "name": "在职人数", + "order": 1 + }, + { + "group": "", + "name": "全职人数", + "order": 2 + }, + { + "group": "", + "name": "职务编码", + "order": 3 + }, + { + "group": "", + "name": "职务说明", + "order": 4 + } + ], + "hidden_entries": [ + "调整排序", + "批量删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "组织::/org/tag/emp-tags", + "name": "员工标签", + "group": "岗位管理", + "full_path": "组织 / 岗位管理 / 员工标签", + "url": "https://2haohr.com/org/tag/emp-tags", + "keep": 1, + "description": "为员工打自定义标签用于分组/筛选。", + "understanding": "灵活分群,服务精细化运营与权限。", + "review_note": "", + "screenshot": "screenshots/03_组织/岗位管理/03_员工标签.jpg", + "field_count": 2, + "fields": [ + { + "group": "", + "name": "员工标签", + "order": 0 + }, + { + "group": "", + "name": "在职员工数", + "order": 1 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "组织::/org/rank", + "name": "职级管理", + "group": "岗位管理", + "full_path": "组织 / 岗位管理 / 职级管理", + "url": "https://2haohr.com/org/rank", + "keep": 1, + "description": "职级/职等体系维护。", + "understanding": "薪酬带宽与晋升通道的基础。", + "review_note": "", + "screenshot": "screenshots/03_组织/岗位管理/04_职级管理.jpg", + "field_count": 3, + "fields": [ + { + "group": "", + "name": "职级通道名称", + "order": 0 + }, + { + "group": "", + "name": "职级分组", + "order": 1 + }, + { + "group": "", + "name": "职级数", + "order": 2 + } + ], + "hidden_entries": [ + "导出职级明细表", + "导出职级体系地图" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "组织::/org/org-forms", + "name": "组织报表", + "group": "岗位管理", + "full_path": "组织 / 岗位管理 / 组织报表", + "url": "https://2haohr.com/org/org-forms", + "keep": 1, + "description": "组织维度(编制/人数/结构)的报表。", + "understanding": "支持组织盘点。", + "review_note": "评估有没有优化空间、智能化空间", + "screenshot": "screenshots/03_组织/岗位管理/05_组织报表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "招聘", + "page_count": 15, + "field_pages": 4, + "pages": [ + { + "node_key": "招聘::/recruitment/overview", + "name": "概览", + "group": "常规", + "full_path": "招聘 / 常规 / 概览", + "url": "https://2haohr.com/recruitment/overview", + "keep": 1, + "description": "招聘整体数据概览(职位/候选人/面试等看板)。", + "understanding": "招聘经理入口页。", + "review_note": "招聘版块全面参考卓小米升级版", + "screenshot": "screenshots/04_招聘/常规/01_概览.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/candidate/recruiting/list", + "name": "招聘中", + "group": "候选人", + "full_path": "招聘 / 候选人 / 招聘中", + "url": "https://2haohr.com/recruitment/candidate/recruiting/list", + "keep": 1, + "description": "处于招聘流程中的候选人列表与阶段管理。", + "understanding": "ATS 核心看板,支持阶段流转。", + "review_note": "", + "screenshot": "screenshots/04_招聘/候选人/01_招聘中.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入简历", + "手动添加", + "Excel导入", + "简历助手", + "全部轮次", + "第1轮", + "第2轮", + "第3轮", + "第4轮", + "第5轮" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/candidate/employed/list", + "name": "已入职", + "group": "候选人", + "full_path": "招聘 / 候选人 / 已入职", + "url": "https://2haohr.com/recruitment/candidate/employed/list", + "keep": 1, + "description": "已录用入职的候选人。", + "understanding": "与人事入职管理衔接。", + "review_note": "", + "screenshot": "screenshots/04_招聘/候选人/02_已入职.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入简历", + "手动添加", + "Excel导入", + "简历助手" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/candidate/eliminated/list", + "name": "已淘汰", + "group": "候选人", + "full_path": "招聘 / 候选人 / 已淘汰", + "url": "https://2haohr.com/recruitment/candidate/eliminated/list", + "keep": 1, + "description": "被淘汰候选人归档。", + "understanding": "复用人才库,支持再激活。", + "review_note": "", + "screenshot": "screenshots/04_招聘/候选人/03_已淘汰.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入简历", + "手动添加", + "Excel导入", + "简历助手" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/jobs", + "name": "招聘职位", + "group": "候选人", + "full_path": "招聘 / 候选人 / 招聘职位", + "url": "https://2haohr.com/recruitment/jobs", + "keep": 1, + "description": "招聘岗位(JD)的发布与管理。", + "understanding": "对接招聘门户与渠道分发。", + "review_note": "", + "screenshot": "screenshots/04_招聘/候选人/04_招聘职位.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "手动创建", + "Excel批量导入", + "按启动日期倒序", + "按截止日期倒序", + "复制", + "停止招聘" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/wechat", + "name": "招聘门户", + "group": "候选人", + "full_path": "招聘 / 候选人 / 招聘门户", + "url": "https://2haohr.com/recruitment/wechat", + "keep": 1, + "description": "企业招聘官网/微信招聘门户配置。", + "understanding": "候选人投递入口,支持自定义。", + "review_note": "", + "screenshot": "screenshots/04_招聘/候选人/05_招聘门户.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "停用", + "操作记录" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加招聘门户", + "path": "screenshots/04_招聘/候选人/05_招聘门户__add.jpg" + }, + { + "kind": "detail", + "kind_cn": "行详情/编辑", + "label": "编辑", + "path": "screenshots/04_招聘/候选人/05_招聘门户__detail.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/interviews", + "name": "面试日程", + "group": "候选人", + "full_path": "招聘 / 候选人 / 面试日程", + "url": "https://2haohr.com/recruitment/interviews", + "keep": 1, + "description": "面试安排、通知与面试评价。", + "understanding": "支持面试官协同与日程提醒。", + "review_note": "", + "screenshot": "screenshots/04_招聘/候选人/06_面试日程.jpg", + "field_count": 7, + "fields": [ + { + "group": "", + "name": "13周一", + "order": 0 + }, + { + "group": "", + "name": "14周二", + "order": 1 + }, + { + "group": "", + "name": "15周三", + "order": 2 + }, + { + "group": "", + "name": "16周四", + "order": 3 + }, + { + "group": "", + "name": "17周五", + "order": 4 + }, + { + "group": "", + "name": "18周六", + "order": 5 + }, + { + "group": "", + "name": "19周日", + "order": 6 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/talent", + "name": "人才库", + "group": "候选人", + "full_path": "招聘 / 候选人 / 人才库", + "url": "https://2haohr.com/recruitment/talent", + "keep": 1, + "description": "企业人才储备库。", + "understanding": "沉淀历史候选人,降低复招成本。", + "review_note": "", + "screenshot": "screenshots/04_招聘/候选人/07_人才库.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入简历", + "手动添加", + "Excel导入", + "简历助手" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加人才", + "path": "screenshots/04_招聘/候选人/07_人才库__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/stats/report", + "name": "招聘报表", + "group": "统计分析", + "full_path": "招聘 / 统计分析 / 招聘报表", + "url": "https://2haohr.com/recruitment/stats/report", + "keep": 1, + "description": "招聘漏斗/周期/渠道效果报表。", + "understanding": "衡量招聘效率。", + "review_note": "", + "screenshot": "screenshots/04_招聘/统计分析/01_招聘报表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加报表", + "path": "screenshots/04_招聘/统计分析/01_招聘报表__add.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/04_招聘/统计分析/招聘报表/Offer记录表.xls", + "kind": "xls", + "size": 5120, + "sheet": "Offer记录表", + "total_rows": 1, + "total_cols": 13, + "headers": [ + "姓名", + "手机号码", + "招聘职位", + "关联岗位", + "候选人状态", + "入职部门", + "入职关联岗位", + "入职日期", + "Offer状态", + "候选人是否阅读", + "Offer有效期", + "Offer发送时间", + "Offer发送人" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/面试记录表.xls", + "kind": "xls", + "size": 4096, + "sheet": "招聘趋势统计表", + "total_rows": 1, + "total_cols": 5, + "headers": [ + "时间", + "新增候选人", + "安排面试", + "发offer", + "到岗" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/招聘趋势统计表.xls", + "kind": "xls", + "size": 4096, + "sheet": "候选人Offer等待期统计表", + "total_rows": 1, + "total_cols": 3, + "headers": [ + "Offer等待期", + "人数", + "占比" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/候选人Offer等待期统计表.xls", + "kind": "xls", + "size": 4608, + "sheet": "第1轮面试等待期", + "total_rows": 1, + "total_cols": 3, + "headers": [ + "等待期", + "人数", + "占比" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/候选人面试等待期统计表.xls", + "kind": "xls", + "size": 10752, + "sheet": "各部门投入工作量", + "total_rows": 2, + "total_cols": 13, + "headers": [ + "人数", + "占比", + "人数", + "占比", + "场数", + "占比", + "场数", + "占比", + "人数", + "占比", + "人数", + "占比" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/招聘工作量统计表.xls", + "kind": "xls", + "size": 6144, + "sheet": "淘汰原因", + "total_rows": 1, + "total_cols": 4, + "headers": [ + "淘汰原因", + "人数", + "占比", + "累计占比" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/候选人淘汰原因统计表.xls", + "kind": "xls", + "size": 5120, + "sheet": "各渠道贡献率", + "total_rows": 2, + "total_cols": 9, + "headers": [ + "人数", + "贡献率", + "场数", + "贡献率", + "人数", + "贡献率", + "人数", + "贡献率" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/渠道贡献率统计表.xls", + "kind": "xls", + "size": 9728, + "sheet": "各职位转化率", + "total_rows": 2, + "total_cols": 16, + "headers": [ + "人数", + "通过率", + "人数", + "安排面试率", + "人数", + "到面率", + "人数", + "通过率", + "人数", + "录用率", + "人数", + "到岗率" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/招聘转化率统计表.xls", + "kind": "xls", + "size": 5120, + "sheet": "各部门招聘进度", + "total_rows": 1, + "total_cols": 5, + "headers": [ + "用人部门", + "招聘人数", + "准时到岗人数", + "准时达成率", + "实际到岗日期" + ] + }, + { + "file": "downloads/04_招聘/统计分析/招聘报表/招聘进度统计表.xls", + "kind": "xls", + "size": 5120, + "sheet": "各部门招聘进度", + "total_rows": 1, + "total_cols": 5, + "headers": [ + "用人部门", + "招聘人数", + "准时到岗人数", + "准时达成率", + "实际到岗日期" + ] + } + ] + }, + { + "node_key": "招聘::/recruitment/stats/analysis", + "name": "招聘分析", + "group": "统计分析", + "full_path": "招聘 / 统计分析 / 招聘分析", + "url": "https://2haohr.com/recruitment/stats/analysis", + "keep": 1, + "description": "招聘数据多维分析。", + "understanding": "优化招聘策略。", + "review_note": "", + "screenshot": "screenshots/04_招聘/统计分析/02_招聘分析.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "下载图片", + "导出数据" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/settings/team", + "name": "招聘团队", + "group": "设置", + "full_path": "招聘 / 设置 / 招聘团队", + "url": "https://2haohr.com/recruitment/settings/team", + "keep": 1, + "description": "招聘协作团队与角色权限设置。", + "understanding": "多角色协同招聘。", + "review_note": "", + "screenshot": "screenshots/04_招聘/设置/01_招聘团队.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "手机号码", + "order": 1 + }, + { + "group": "", + "name": "邮箱", + "order": 2 + }, + { + "group": "", + "name": "绑定微信", + "order": 3 + }, + { + "group": "", + "name": "参与招聘职位", + "order": 4 + } + ], + "hidden_entries": [ + "移除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/settings/tools", + "name": "招聘工具", + "group": "设置", + "full_path": "招聘 / 设置 / 招聘工具", + "url": "https://2haohr.com/recruitment/settings/tools", + "keep": 1, + "description": "招聘相关工具(如筛选/AI)配置。", + "understanding": "提效工具集。", + "review_note": "", + "screenshot": "screenshots/04_招聘/设置/02_招聘工具.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/settings/channels", + "name": "招聘渠道", + "group": "设置", + "full_path": "招聘 / 设置 / 招聘渠道", + "url": "https://2haohr.com/recruitment/settings/channels", + "keep": 1, + "description": "招聘发布渠道与聚合配置。", + "understanding": "对接外部招聘网站。", + "review_note": "", + "screenshot": "screenshots/04_招聘/设置/03_招聘渠道.jpg", + "field_count": 2, + "fields": [ + { + "group": "", + "name": "招聘渠道名称", + "order": 0 + }, + { + "group": "", + "name": "备注", + "order": 1 + } + ], + "hidden_entries": [ + "禁用" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/settings/templates", + "name": "模板设置", + "group": "设置", + "full_path": "招聘 / 设置 / 模板设置", + "url": "https://2haohr.com/recruitment/settings/templates", + "keep": 1, + "description": "招聘环节的邮件/短信/评价模板。", + "understanding": "标准化沟通。", + "review_note": "", + "screenshot": "screenshots/04_招聘/设置/04_模板设置.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "招聘::/recruitment/settings/others", + "name": "更多设置", + "group": "设置", + "full_path": "招聘 / 设置 / 更多设置", + "url": "https://2haohr.com/recruitment/settings/others", + "keep": 1, + "description": "招聘模块其它设置项。", + "understanding": "杂项配置。", + "review_note": "", + "screenshot": "screenshots/04_招聘/设置/05_更多设置.jpg", + "field_count": 12, + "fields": [ + { + "group": "", + "name": "行业", + "order": 0 + }, + { + "group": "", + "name": "企业规模", + "order": 1 + }, + { + "group": "", + "name": "企业简介", + "order": 2 + }, + { + "group": "", + "name": "企业地址", + "order": 3 + }, + { + "group": "", + "name": "企业福利特色", + "order": 4 + }, + { + "group": "", + "name": "企业logo", + "order": 5 + }, + { + "group": "", + "name": "企业照片", + "order": 6 + }, + { + "group": "", + "name": "联系人", + "order": 7 + }, + { + "group": "", + "name": "联系电话", + "order": 8 + }, + { + "group": "", + "name": "联系邮箱", + "order": 9 + }, + { + "group": "", + "name": "联系HR二维码", + "order": 10 + }, + { + "group": "", + "name": "企业名称", + "order": 11 + } + ], + "hidden_entries": [ + "删除" + ], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "考勤假期", + "page_count": 16, + "field_pages": 10, + "pages": [ + { + "node_key": "考勤假期::/attendance/stat/daily", + "name": "每日考勤", + "group": "考勤统计", + "full_path": "考勤假期 / 考勤统计 / 每日考勤", + "url": "https://2haohr.com/attendance/stat/daily", + "keep": 1, + "description": "按日展示全员打卡与异常。", + "understanding": "考勤日常监控入口。", + "review_note": "每日考勤、月考勤表考虑实现合二为一\n这个版块吸取薪人薪事优点", + "screenshot": "screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg", + "field_count": 16, + "fields": [ + { + "group": "", + "name": "头像", + "order": 0 + }, + { + "group": "", + "name": "姓名", + "order": 1 + }, + { + "group": "", + "name": "工号", + "order": 2 + }, + { + "group": "", + "name": "部门", + "order": 3 + }, + { + "group": "", + "name": "岗位", + "order": 4 + }, + { + "group": "", + "name": "考勤编号", + "order": 5 + }, + { + "group": "", + "name": "工作性质", + "order": 6 + }, + { + "group": "", + "name": "员工状态", + "order": 7 + }, + { + "group": "", + "name": "入职日期", + "order": 8 + }, + { + "group": "", + "name": "离职日期", + "order": 9 + }, + { + "group": "", + "name": "试用期", + "order": 10 + }, + { + "group": "", + "name": "转正日期", + "order": 11 + }, + { + "group": "", + "name": "合同公司", + "order": 12 + }, + { + "group": "", + "name": "工作地点", + "order": 13 + }, + { + "group": "", + "name": "司龄", + "order": 14 + }, + { + "group": "", + "name": "工龄", + "order": 15 + } + ], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/05_考勤假期/考勤统计/01_每日考勤__filter.jpg" + }, + { + "kind": "columns", + "kind_cn": "自定义列/选择表头", + "label": "columns", + "path": "screenshots/05_考勤假期/考勤统计/01_每日考勤__columns.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/stat/monthly", + "name": "月考勤表", + "group": "考勤统计", + "full_path": "考勤假期 / 考勤统计 / 月考勤表", + "url": "https://2haohr.com/attendance/stat/monthly", + "keep": 1, + "description": "按月汇总的考勤统计表。", + "understanding": "薪酬核算的考勤依据。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg", + "field_count": 16, + "fields": [ + { + "group": "", + "name": "头像", + "order": 0 + }, + { + "group": "", + "name": "姓名", + "order": 1 + }, + { + "group": "", + "name": "工号", + "order": 2 + }, + { + "group": "", + "name": "部门", + "order": 3 + }, + { + "group": "", + "name": "岗位", + "order": 4 + }, + { + "group": "", + "name": "考勤编号", + "order": 5 + }, + { + "group": "", + "name": "工作性质", + "order": 6 + }, + { + "group": "", + "name": "员工状态", + "order": 7 + }, + { + "group": "", + "name": "入职日期", + "order": 8 + }, + { + "group": "", + "name": "离职日期", + "order": 9 + }, + { + "group": "", + "name": "试用期", + "order": 10 + }, + { + "group": "", + "name": "转正日期", + "order": 11 + }, + { + "group": "", + "name": "合同公司", + "order": 12 + }, + { + "group": "", + "name": "工作地点", + "order": 13 + }, + { + "group": "", + "name": "司龄", + "order": 14 + }, + { + "group": "", + "name": "工龄", + "order": 15 + } + ], + "hidden_entries": [ + "新建下月考勤", + "添加考勤人员", + "删除月考勤表", + "导入历史考勤", + "导入考勤数据", + "导入钉钉考勤结果" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/05_考勤假期/考勤统计/02_月考勤表__filter.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/stat/records", + "name": "明细记录", + "group": "考勤统计", + "full_path": "考勤假期 / 考勤统计 / 明细记录", + "url": "https://2haohr.com/attendance/stat/records", + "keep": 1, + "description": "原始打卡明细记录查询。", + "understanding": "异常核查与申诉依据。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/03_明细记录.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "单个添加", + "批量导入", + "删除全部打卡数据" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/05_考勤假期/考勤统计/03_明细记录__filter.jpg" + } + ], + "data_samples": [ + { + "file": "downloads/04_考勤假期/考勤统计/2026年7月17日考勤明细.xlsx", + "kind": "xlsx", + "size": 6155, + "sheet": "考勤明细", + "total_rows": 4, + "total_cols": 20, + "headers": [ + "姓名", + "工号", + "部门", + "岗位", + "班次", + "打卡时间", + "第一段上班", + "第一段下班", + "第二段上班", + "第二段下班", + "第三段上班", + "第三段下班", + "迟到(分钟)", + "早退(分钟)", + "缺卡(次数)", + "旷工(天)", + "请假(小时)", + "加班(小时)", + "外出(小时)", + "出差(小时)" + ] + }, + { + "file": "downloads/04_考勤假期/考勤统计/打卡记录表-测试账号.xlsx", + "kind": "xlsx", + "size": 6850, + "sheet": "打卡记录", + "total_rows": 14, + "total_cols": 12, + "headers": [ + "序号", + "姓名", + "工号", + "部门", + "岗位", + "上班日期", + "班次", + "打卡时间", + "打卡来源", + "打卡设备", + "打卡地点", + "备注" + ] + } + ] + }, + { + "node_key": "考勤假期::/attendance/stat/report", + "name": "考勤报表", + "group": "考勤统计", + "full_path": "考勤假期 / 考勤统计 / 考勤报表", + "url": "https://2haohr.com/attendance/stat/report", + "keep": 1, + "description": "考勤假期模块下「考勤报表」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加报表", + "path": "screenshots/05_考勤假期/考勤统计/04_考勤报表__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/stat/field-manage", + "name": "字段管理", + "group": "考勤统计", + "full_path": "考勤假期 / 考勤统计 / 字段管理", + "url": "https://2haohr.com/attendance/stat/field-manage", + "keep": 1, + "description": "考勤表字段自定义。", + "understanding": "适配企业统计口径。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/05_字段管理.jpg", + "field_count": 11, + "fields": [ + { + "group": "", + "name": "字段名称", + "order": 0 + }, + { + "group": "", + "name": "字段分组", + "order": 1 + }, + { + "group": "", + "name": "状态", + "order": 2 + }, + { + "group": "", + "name": "字段类型", + "order": 3 + }, + { + "group": "", + "name": "数据类型", + "order": 4 + }, + { + "group": "", + "name": "舍入规则", + "order": 5 + }, + { + "group": "", + "name": "展示小数位数", + "order": 6 + }, + { + "group": "", + "name": "日期格式", + "order": 7 + }, + { + "group": "", + "name": "汇总方式", + "order": 8 + }, + { + "group": "", + "name": "计算公式", + "order": 9 + }, + { + "group": "", + "name": "字段说明", + "order": 10 + } + ], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/05_考勤假期/考勤统计/05_字段管理__filter.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/confirmation", + "name": "考勤确认", + "group": "考勤统计", + "full_path": "考勤假期 / 考勤统计 / 考勤确认", + "url": "https://2haohr.com/attendance/confirmation", + "keep": 1, + "description": "月末考勤结果确认锁定。", + "understanding": "确认后进入薪酬核算。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/work/schedule", + "name": "考勤分组", + "group": "考勤管理", + "full_path": "考勤假期 / 考勤管理 / 考勤分组", + "url": "https://2haohr.com/attendance/work/schedule", + "keep": 1, + "description": "按人群划分考勤规则分组。", + "understanding": "不同班制人群差异化管理。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "考勤组类型", + "order": 0 + }, + { + "group": "", + "name": "出勤日", + "order": 1 + }, + { + "group": "", + "name": "出勤时间", + "order": 2 + }, + { + "group": "", + "name": "核算规则", + "order": 3 + }, + { + "group": "", + "name": "负责人", + "order": 4 + }, + { + "group": "", + "name": "适用范围", + "order": 5 + }, + { + "group": "", + "name": "最后更新时间", + "order": 6 + }, + { + "group": "", + "name": "最后更新人", + "order": 7 + }, + { + "group": "", + "name": "考勤组名称", + "order": 8 + } + ], + "hidden_entries": [ + "复制", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/work/roster", + "name": "排班管理", + "group": "考勤管理", + "full_path": "考勤假期 / 考勤管理 / 排班管理", + "url": "https://2haohr.com/attendance/work/roster", + "keep": 1, + "description": "排班表编制与发布。", + "understanding": "复杂班制的核心,支持轮班。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/02_排班管理.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "岗位", + "order": 1 + }, + { + "group": "", + "name": "排/休天数", + "order": 2 + }, + { + "group": "", + "name": "工号", + "order": 3 + }, + { + "group": "", + "name": "部门", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/work/rules", + "name": "考勤规则", + "group": "考勤管理", + "full_path": "考勤假期 / 考勤管理 / 考勤规则", + "url": "https://2haohr.com/attendance/work/rules", + "keep": 1, + "description": "上下班/加班/迟到等规则配置。", + "understanding": "考勤计算引擎的规则中心。", + "review_note": "知识库", + "screenshot": "screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "迟到", + "order": 0 + }, + { + "group": "", + "name": "早退", + "order": 1 + }, + { + "group": "", + "name": "缺卡", + "order": 2 + }, + { + "group": "", + "name": "旷工", + "order": 3 + }, + { + "group": "", + "name": "规则名称", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/work/mode", + "name": "打卡方式", + "group": "考勤管理", + "full_path": "考勤假期 / 考勤管理 / 打卡方式", + "url": "https://2haohr.com/attendance/work/mode", + "keep": 1, + "description": "GPS/WiFi/人脸等打卡方式配置。", + "understanding": "决定打卡合规与防作弊。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg", + "field_count": 4, + "fields": [ + { + "group": "", + "name": "打卡地址", + "order": 0 + }, + { + "group": "", + "name": "具体地址", + "order": 1 + }, + { + "group": "", + "name": "可打卡范围", + "order": 2 + }, + { + "group": "", + "name": "关联考勤组数", + "order": 3 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/work/settings", + "name": "考勤设置", + "group": "考勤管理", + "full_path": "考勤假期 / 考勤管理 / 考勤设置", + "url": "https://2haohr.com/attendance/work/settings", + "keep": 1, + "description": "考勤模块的其它设置。", + "understanding": "杂项配置。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/holiday/leaveRecords", + "name": "休假一览", + "group": "假期管理", + "full_path": "考勤假期 / 假期管理 / 休假一览", + "url": "https://2haohr.com/attendance/holiday/leaveRecords", + "keep": 1, + "description": "全员请假记录总览。", + "understanding": "假期使用监控。", + "review_note": "整个休假5个页面整合", + "screenshot": "screenshots/05_考勤假期/假期管理/01_休假一览.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/05_考勤假期/假期管理/01_休假一览__filter.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/holiday/adjust", + "name": "手动调整", + "group": "假期管理", + "full_path": "考勤假期 / 假期管理 / 手动调整", + "url": "https://2haohr.com/attendance/holiday/adjust", + "keep": 1, + "description": "手动调整假期余额/记录。", + "understanding": "异常修正入口。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/02_手动调整.jpg", + "field_count": 15, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "工号", + "order": 1 + }, + { + "group": "", + "name": "部门", + "order": 2 + }, + { + "group": "", + "name": "岗位", + "order": 3 + }, + { + "group": "", + "name": "考勤编号", + "order": 4 + }, + { + "group": "", + "name": "工作性质", + "order": 5 + }, + { + "group": "", + "name": "工作状态", + "order": 6 + }, + { + "group": "", + "name": "入职日期", + "order": 7 + }, + { + "group": "", + "name": "试用期", + "order": 8 + }, + { + "group": "", + "name": "转正日期", + "order": 9 + }, + { + "group": "", + "name": "离职日期", + "order": 10 + }, + { + "group": "", + "name": "工龄", + "order": 11 + }, + { + "group": "", + "name": "司龄", + "order": 12 + }, + { + "group": "", + "name": "合同公司", + "order": 13 + }, + { + "group": "", + "name": "工作地点", + "order": 14 + } + ], + "hidden_entries": [ + "单个发放", + "单个扣减", + "批量发放", + "批量扣减" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/holiday/balance", + "name": "假期余额", + "group": "假期管理", + "full_path": "考勤假期 / 假期管理 / 假期余额", + "url": "https://2haohr.com/attendance/holiday/balance", + "keep": 1, + "description": "各员工各类假期余额。", + "understanding": "请假审批的额度依据。", + "review_note": "", + "screenshot": "screenshots/05_考勤假期/假期管理/03_假期余额.jpg", + "field_count": 15, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "工号", + "order": 1 + }, + { + "group": "", + "name": "部门", + "order": 2 + }, + { + "group": "", + "name": "岗位", + "order": 3 + }, + { + "group": "", + "name": "考勤编号", + "order": 4 + }, + { + "group": "", + "name": "工作性质", + "order": 5 + }, + { + "group": "", + "name": "工作状态", + "order": 6 + }, + { + "group": "", + "name": "入职日期", + "order": 7 + }, + { + "group": "", + "name": "试用期", + "order": 8 + }, + { + "group": "", + "name": "转正日期", + "order": 9 + }, + { + "group": "", + "name": "离职日期", + "order": 10 + }, + { + "group": "", + "name": "工龄", + "order": 11 + }, + { + "group": "", + "name": "司龄", + "order": 12 + }, + { + "group": "", + "name": "合同公司", + "order": 13 + }, + { + "group": "", + "name": "工作地点", + "order": 14 + } + ], + "hidden_entries": [ + "导出余额", + "导出余额变更记录" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/holiday/rules", + "name": "假期方案", + "group": "假期管理", + "full_path": "考勤假期 / 假期管理 / 假期方案", + "url": "https://2haohr.com/attendance/holiday/rules", + "keep": 1, + "description": "年假/事病假等假期规则方案。", + "understanding": "假期计算的规则中心。", + "review_note": "知识库", + "screenshot": "screenshots/05_考勤假期/假期管理/04_假期方案.jpg", + "field_count": 8, + "fields": [ + { + "group": "", + "name": "假期类型", + "order": 0 + }, + { + "group": "", + "name": "请假规则", + "order": 1 + }, + { + "group": "", + "name": "发放规则", + "order": 2 + }, + { + "group": "", + "name": "扣减规则", + "order": 3 + }, + { + "group": "", + "name": "适用范围", + "order": 4 + }, + { + "group": "", + "name": "方案负责人", + "order": 5 + }, + { + "group": "", + "name": "方案创建人", + "order": 6 + }, + { + "group": "", + "name": "方案名称", + "order": 7 + } + ], + "hidden_entries": [ + "复制", + "删除" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/05_考勤假期/假期管理/04_假期方案__filter.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "考勤假期::/attendance/holiday/settings", + "name": "假期设置", + "group": "假期管理", + "full_path": "考勤假期 / 假期管理 / 假期设置", + "url": "https://2haohr.com/attendance/holiday/settings", + "keep": 1, + "description": "假期模块其它设置。", + "understanding": "杂项配置。", + "review_note": "知识库", + "screenshot": "screenshots/05_考勤假期/假期管理/05_假期设置.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "设置", + "删除" + ], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "薪酬", + "page_count": 9, + "field_pages": 3, + "pages": [ + { + "node_key": "薪酬::/payroll/salary/monthly", + "name": "月工资表", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 月工资表", + "url": "https://2haohr.com/payroll/salary/monthly", + "keep": 1, + "description": "按月生成的工资核算表。", + "understanding": "薪酬核算主表,支持公式与批量。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/01_月工资表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入历史工资", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "薪酬::/payroll/salary/payoff", + "name": "工资发放", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 工资发放", + "url": "https://2haohr.com/payroll/salary/payoff", + "keep": 1, + "description": "工资发放确认与银行代发。", + "understanding": "对接银行代发,资金安全关键。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/02_工资发放.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "薪酬::/payroll/salary/profiles", + "name": "员工薪资", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 员工薪资", + "url": "https://2haohr.com/payroll/salary/profiles", + "keep": 1, + "description": "员工薪资档案(基本工资/结构)。", + "understanding": "计薪基础数据。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入定薪", + "导入调薪", + "设置定薪模板", + "查看离职员工" + ], + "deep_shots": [], + "data_samples": [ + { + "file": "downloads/06_薪酬/薪酬管理/工资档案信息表-测试账号.xlsx", + "kind": "xlsx", + "size": 35840, + "sheet": "工资", + "total_rows": 418, + "total_cols": 21, + "headers": [ + "基本信息", + "试用期基本工资", + "基本工资", + "绩效工资", + "奖金", + "提成工资", + "职称工资" + ] + } + ] + }, + { + "node_key": "薪酬::/payroll/salary/report", + "name": "薪酬报表", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 薪酬报表", + "url": "https://2haohr.com/payroll/salary/report", + "keep": 1, + "description": "薪酬相关报表。", + "understanding": "成本与发放统计。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "薪酬::/payroll/salary/statistics", + "name": "薪酬分析", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 薪酬分析", + "url": "https://2haohr.com/payroll/salary/statistics", + "keep": 1, + "description": "薪酬多维分析。", + "understanding": "人力成本洞察。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "下载图片", + "导出数据表" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "薪酬::/payroll/salary/rule", + "name": "计薪规则", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 计薪规则", + "url": "https://2haohr.com/payroll/salary/rule", + "keep": 1, + "description": "计薪周期与规则配置。", + "understanding": "薪酬引擎规则。", + "review_note": "知识库", + "screenshot": "screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg", + "field_count": 6, + "fields": [ + { + "group": "", + "name": "工资表模板", + "order": 0 + }, + { + "group": "", + "name": "月计薪时长", + "order": 1 + }, + { + "group": "", + "name": "计薪公式", + "order": 2 + }, + { + "group": "", + "name": "计薪规则", + "order": 3 + }, + { + "group": "", + "name": "适用范围", + "order": 4 + }, + { + "group": "", + "name": "薪资组名称", + "order": 5 + } + ], + "hidden_entries": [ + "复制", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "薪酬::/payroll/salary/settings", + "name": "薪酬设置", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 薪酬设置", + "url": "https://2haohr.com/payroll/salary/settings", + "keep": 1, + "description": "薪酬模块设置。", + "understanding": "结构/权限配置。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg", + "field_count": 8, + "fields": [ + { + "group": "", + "name": "模板名称", + "order": 0 + }, + { + "group": "", + "name": "工资项", + "order": 1 + }, + { + "group": "", + "name": "适用薪资组", + "order": 2 + }, + { + "group": "", + "name": "备注", + "order": 3 + }, + { + "group": "", + "name": "姓名", + "order": 4 + }, + { + "group": "", + "name": "工号", + "order": 5 + }, + { + "group": "", + "name": "部门", + "order": 6 + }, + { + "group": "", + "name": "岗位", + "order": 7 + } + ], + "hidden_entries": [ + "预览", + "复制", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "薪酬::/payroll/salary/bonus", + "name": "年终奖计算", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 年终奖计算", + "url": "https://2haohr.com/payroll/salary/bonus", + "keep": 1, + "description": "年终奖专项计税计算。", + "understanding": "年度一次性奖金个税处理。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "薪酬::https://2haohr.com/payslip/home", + "name": "发送工资条", + "group": "薪酬管理", + "full_path": "薪酬 / 薪酬管理 / 发送工资条", + "url": "https://2haohr.com/payslip/home", + "keep": 1, + "description": "发送电子工资条(跳转电子工资条模块)。", + "understanding": "与电子工资条模块共用。", + "review_note": "", + "screenshot": "screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg", + "field_count": 6, + "fields": [ + { + "group": "", + "name": "所属月份", + "order": 0 + }, + { + "group": "", + "name": "总人数", + "order": 1 + }, + { + "group": "", + "name": "已发放", + "order": 2 + }, + { + "group": "", + "name": "操作人", + "order": 3 + }, + { + "group": "", + "name": "操作时间", + "order": 4 + }, + { + "group": "", + "name": "工资表名称", + "order": 5 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "审批", + "page_count": 6, + "field_pages": 5, + "pages": [ + { + "node_key": "审批::/approval/form/list", + "name": "审批表单", + "group": "常规", + "full_path": "审批 / 常规 / 审批表单", + "url": "https://2haohr.com/approval/form/list", + "keep": 1, + "description": "各类审批单据的发起与列表。", + "understanding": "通用审批入口。", + "review_note": "", + "screenshot": "screenshots/07_审批/常规/01_审批表单.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "停用", + "复制" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "审批::/approval/library/list", + "name": "审批模板库", + "group": "常规", + "full_path": "审批 / 常规 / 审批模板库", + "url": "https://2haohr.com/approval/library/list", + "keep": 1, + "description": "预置审批流程模板。", + "understanding": "快速套用标准流程。", + "review_note": "分类展示", + "screenshot": "screenshots/07_审批/常规/02_审批模板库.jpg", + "field_count": 2, + "fields": [ + { + "group": "", + "name": "审批模板名称", + "order": 0 + }, + { + "group": "", + "name": "模板说明", + "order": 1 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "审批::/approval/agent/list", + "name": "审批代理", + "group": "常规", + "full_path": "审批 / 常规 / 审批代理", + "url": "https://2haohr.com/approval/agent/list", + "keep": 1, + "description": "审批人不在时的代理设置。", + "understanding": "保障流程不中断。", + "review_note": "不建议", + "screenshot": "screenshots/07_审批/常规/03_审批代理.jpg", + "field_count": 6, + "fields": [ + { + "group": "", + "name": "被代理人", + "order": 0 + }, + { + "group": "", + "name": "代理人", + "order": 1 + }, + { + "group": "", + "name": "代理时间", + "order": 2 + }, + { + "group": "", + "name": "代理审批类型", + "order": 3 + }, + { + "group": "", + "name": "员工端代理人处理记录", + "order": 4 + }, + { + "group": "", + "name": "更新记录", + "order": 5 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "审批::/approval/record/list", + "name": "审批记录", + "group": "常规", + "full_path": "审批 / 常规 / 审批记录", + "url": "https://2haohr.com/approval/record/list", + "keep": 1, + "description": "历史审批记录查询。", + "understanding": "留痕与追溯。", + "review_note": "", + "screenshot": "screenshots/07_审批/常规/04_审批记录.jpg", + "field_count": 11, + "fields": [ + { + "group": "", + "name": "标题", + "order": 0 + }, + { + "group": "", + "name": "所在部门", + "order": 1 + }, + { + "group": "", + "name": "发起人", + "order": 2 + }, + { + "group": "", + "name": "发起时间", + "order": 3 + }, + { + "group": "", + "name": "摘要", + "order": 4 + }, + { + "group": "", + "name": "审批类型", + "order": 5 + }, + { + "group": "", + "name": "审批状态", + "order": 6 + }, + { + "group": "", + "name": "当前审批人", + "order": 7 + }, + { + "group": "", + "name": "历史审批人", + "order": 8 + }, + { + "group": "", + "name": "最近处理时间", + "order": 9 + }, + { + "group": "", + "name": "审批编号", + "order": 10 + } + ], + "hidden_entries": [ + "导出审批记录详情", + "批量下载", + "批量下载审批附件", + "批量删除", + "操作记录" + ], + "deep_shots": [ + { + "kind": "filter", + "kind_cn": "筛选面板", + "label": "filter", + "path": "screenshots/07_审批/常规/04_审批记录__filter.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "审批::/approval/abnormal", + "name": "审批交接", + "group": "常规", + "full_path": "审批 / 常规 / 审批交接", + "url": "https://2haohr.com/approval/abnormal", + "keep": 1, + "description": "审批任务交接处理。", + "understanding": "人员变动时的流程转交。", + "review_note": "不知道这个功能的用处??评估有没有必要", + "screenshot": "screenshots/07_审批/常规/05_审批交接.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "异常审批人", + "order": 0 + }, + { + "group": "", + "name": "异常类型", + "order": 1 + }, + { + "group": "", + "name": "未处理审批记录数量", + "order": 2 + }, + { + "group": "", + "name": "审批类型", + "order": 3 + }, + { + "group": "", + "name": "审批单", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "审批::/approval/log", + "name": "操作记录", + "group": "常规", + "full_path": "审批 / 常规 / 操作记录", + "url": "https://2haohr.com/approval/log", + "keep": 1, + "description": "审批模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/07_审批/常规/06_操作记录.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "操作时间", + "order": 0 + }, + { + "group": "", + "name": "用户IP", + "order": 1 + }, + { + "group": "", + "name": "操作人", + "order": 2 + }, + { + "group": "", + "name": "操作类型", + "order": 3 + }, + { + "group": "", + "name": "操作内容", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "培训学习", + "page_count": 15, + "field_pages": 9, + "pages": [ + { + "node_key": "培训学习::/training/manage/team", + "name": "培训计划", + "group": "线下培训", + "full_path": "培训学习 / 线下培训 / 培训计划", + "url": "https://2haohr.com/training/manage/team", + "keep": 1, + "description": "线下培训计划制定与管理。", + "understanding": "培训组织入口。", + "review_note": "整个培训模块打薄,压缩\n培训课程库、培训计划制定并推送、学习进度统计(要有报表)、题库测试、学员成绩", + "screenshot": "screenshots/08_培训学习/线下培训/01_培训计划.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入培训计划", + "导出培训计划信息", + "复制计划", + "删除计划" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增培训计划", + "path": "screenshots/08_培训学习/线下培训/01_培训计划__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/manage/schedule", + "name": "开课日程", + "group": "线下培训", + "full_path": "培训学习 / 线下培训 / 开课日程", + "url": "https://2haohr.com/training/manage/schedule", + "keep": 1, + "description": "培训课程排期日程。", + "understanding": "线下课程时间管理。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/线下培训/02_开课日程.jpg", + "field_count": 8, + "fields": [ + { + "group": "", + "name": "课程开始时间", + "order": 0 + }, + { + "group": "", + "name": "课程结束时间", + "order": 1 + }, + { + "group": "", + "name": "课程名称", + "order": 2 + }, + { + "group": "", + "name": "培训计划", + "order": 3 + }, + { + "group": "", + "name": "培训计划状态", + "order": 4 + }, + { + "group": "", + "name": "讲师", + "order": 5 + }, + { + "group": "", + "name": "课时", + "order": 6 + }, + { + "group": "", + "name": "地点", + "order": 7 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/manage/record/list", + "name": "培训记录", + "group": "线下培训", + "full_path": "培训学习 / 线下培训 / 培训记录", + "url": "https://2haohr.com/training/manage/record/list", + "keep": 1, + "description": "培训完成记录。", + "understanding": "回流员工培训经历。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/线下培训/03_培训记录.jpg", + "field_count": 14, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "所属组织", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "员工状态", + "order": 3 + }, + { + "group": "", + "name": "培训课程", + "order": 4 + }, + { + "group": "", + "name": "培训计划", + "order": 5 + }, + { + "group": "", + "name": "培训计划类型", + "order": 6 + }, + { + "group": "", + "name": "课程开始时间", + "order": 7 + }, + { + "group": "", + "name": "课程结束时间", + "order": 8 + }, + { + "group": "", + "name": "课时", + "order": 9 + }, + { + "group": "", + "name": "学分", + "order": 10 + }, + { + "group": "", + "name": "成绩", + "order": 11 + }, + { + "group": "", + "name": "类型", + "order": 12 + }, + { + "group": "", + "name": "姓名", + "order": 13 + } + ], + "hidden_entries": [ + "导出员工培训记录", + "批量删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/online/course/home", + "name": "课程库", + "group": "线上学习", + "full_path": "培训学习 / 线上学习 / 课程库", + "url": "https://2haohr.com/training/online/course/home", + "keep": 1, + "description": "在线课程资源库。", + "understanding": "LMS 内容中心。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/线上学习/01_课程库.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "批量新增", + "批量管理", + "课程申请单8", + "课程分发记录" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/online/learn-plan", + "name": "学习计划", + "group": "线上学习", + "full_path": "培训学习 / 线上学习 / 学习计划", + "url": "https://2haohr.com/training/online/learn-plan", + "keep": 1, + "description": "为员工指派学习计划。", + "understanding": "驱动在线学习。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/线上学习/02_学习计划.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增学习计划", + "path": "screenshots/08_培训学习/线上学习/02_学习计划__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/online/live-plan", + "name": "在线直播", + "group": "线上学习", + "full_path": "培训学习 / 线上学习 / 在线直播", + "url": "https://2haohr.com/training/online/live-plan", + "keep": 1, + "description": "在线直播课安排。", + "understanding": "远程培训能力。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/线上学习/03_在线直播.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "结束计划" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增直播计划", + "path": "screenshots/08_培训学习/线上学习/03_在线直播__add.jpg" + }, + { + "kind": "detail", + "kind_cn": "行详情/编辑", + "label": "查看详情", + "path": "screenshots/08_培训学习/线上学习/03_在线直播__detail.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/online/progress", + "name": "学习进度", + "group": "线上学习", + "full_path": "培训学习 / 线上学习 / 学习进度", + "url": "https://2haohr.com/training/online/progress", + "keep": 1, + "description": "员工学习进度跟踪。", + "understanding": "学习效果监控。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/线上学习/04_学习进度.jpg", + "field_count": 15, + "fields": [ + { + "group": "", + "name": "计划名称", + "order": 0 + }, + { + "group": "", + "name": "课程编号", + "order": 1 + }, + { + "group": "", + "name": "课程名称", + "order": 2 + }, + { + "group": "", + "name": "资源形式", + "order": 3 + }, + { + "group": "", + "name": "学习状态", + "order": 4 + }, + { + "group": "", + "name": "学习开始时间", + "order": 5 + }, + { + "group": "", + "name": "课程学习进度", + "order": 6 + }, + { + "group": "", + "name": "有效学习时长", + "order": 7 + }, + { + "group": "", + "name": "应打卡次数", + "order": 8 + }, + { + "group": "", + "name": "完成打卡次数", + "order": 9 + }, + { + "group": "", + "name": "姓名", + "order": 10 + }, + { + "group": "", + "name": "课程小节", + "order": 11 + }, + { + "group": "", + "name": "开始时间", + "order": 12 + }, + { + "group": "", + "name": "结束时间", + "order": 13 + }, + { + "group": "", + "name": "平台", + "order": 14 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/online/record", + "name": "学习记录", + "group": "线上学习", + "full_path": "培训学习 / 线上学习 / 学习记录", + "url": "https://2haohr.com/training/online/record", + "keep": 1, + "description": "在线学习历史记录。", + "understanding": "留痕与统计。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/线上学习/05_学习记录.jpg", + "field_count": 22, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "所属组织", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "计划名称", + "order": 3 + }, + { + "group": "", + "name": "课程编号", + "order": 4 + }, + { + "group": "", + "name": "课程名称", + "order": 5 + }, + { + "group": "", + "name": "讲师", + "order": 6 + }, + { + "group": "", + "name": "资源形式", + "order": 7 + }, + { + "group": "", + "name": "学习状态", + "order": 8 + }, + { + "group": "", + "name": "学习开始时间", + "order": 9 + }, + { + "group": "", + "name": "学习完成时间", + "order": 10 + }, + { + "group": "", + "name": "课程学习进度", + "order": 11 + }, + { + "group": "", + "name": "有效学习时长", + "order": 12 + }, + { + "group": "", + "name": "完成打卡次数", + "order": 13 + }, + { + "group": "", + "name": "课时", + "order": 14 + }, + { + "group": "", + "name": "考试成绩", + "order": 15 + }, + { + "group": "", + "name": "考试结果", + "order": 16 + }, + { + "group": "", + "name": "姓名", + "order": 17 + }, + { + "group": "", + "name": "课程小节", + "order": 18 + }, + { + "group": "", + "name": "开始时间", + "order": 19 + }, + { + "group": "", + "name": "结束时间", + "order": 20 + }, + { + "group": "", + "name": "平台", + "order": 21 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/examine/question-bank", + "name": "题库管理", + "group": "考试练习", + "full_path": "培训学习 / 考试练习 / 题库管理", + "url": "https://2haohr.com/training/examine/question-bank", + "keep": 1, + "description": "考试题目库维护。", + "understanding": "考试基础数据。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/考试练习/01_题库管理.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "题目", + "order": 0 + }, + { + "group": "", + "name": "所属分类", + "order": 1 + }, + { + "group": "", + "name": "题型", + "order": 2 + }, + { + "group": "", + "name": "创建人", + "order": 3 + }, + { + "group": "", + "name": "创建时间", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增试题", + "path": "screenshots/08_培训学习/考试练习/01_题库管理__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/examine/paper", + "name": "试卷管理", + "group": "考试练习", + "full_path": "培训学习 / 考试练习 / 试卷管理", + "url": "https://2haohr.com/training/examine/paper", + "keep": 1, + "description": "试卷组卷与管理。", + "understanding": "考试内容配置。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/考试练习/02_试卷管理.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/examine/record", + "name": "考试安排", + "group": "考试练习", + "full_path": "培训学习 / 考试练习 / 考试安排", + "url": "https://2haohr.com/training/examine/record", + "keep": 1, + "description": "考试计划安排。", + "understanding": "组织在线考试。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/考试练习/03_考试安排.jpg", + "field_count": 10, + "fields": [ + { + "group": "", + "name": "考试类型", + "order": 0 + }, + { + "group": "", + "name": "关联类型", + "order": 1 + }, + { + "group": "", + "name": "关联计划名称", + "order": 2 + }, + { + "group": "", + "name": "课程名称", + "order": 3 + }, + { + "group": "", + "name": "考试时间", + "order": 4 + }, + { + "group": "", + "name": "应考人数", + "order": 5 + }, + { + "group": "", + "name": "实考人数", + "order": 6 + }, + { + "group": "", + "name": "未考试人数", + "order": 7 + }, + { + "group": "", + "name": "待批阅人数", + "order": 8 + }, + { + "group": "", + "name": "考试名称", + "order": 9 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/examine/allExam", + "name": "考试记录", + "group": "考试练习", + "full_path": "培训学习 / 考试练习 / 考试记录", + "url": "https://2haohr.com/training/examine/allExam", + "keep": 1, + "description": "考试成绩记录。", + "understanding": "培训效果评估。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/考试练习/04_考试记录.jpg", + "field_count": 11, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "岗位", + "order": 1 + }, + { + "group": "", + "name": "考试名称", + "order": 2 + }, + { + "group": "", + "name": "考试类型", + "order": 3 + }, + { + "group": "", + "name": "关联计划名称", + "order": 4 + }, + { + "group": "", + "name": "关联课程名称", + "order": 5 + }, + { + "group": "", + "name": "答题得分", + "order": 6 + }, + { + "group": "", + "name": "答题时长", + "order": 7 + }, + { + "group": "", + "name": "考试结果", + "order": 8 + }, + { + "group": "", + "name": "考试时间", + "order": 9 + }, + { + "group": "", + "name": "姓名", + "order": 10 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/manage/teacher", + "name": "讲师设置", + "group": "培训设置", + "full_path": "培训学习 / 培训设置 / 讲师设置", + "url": "https://2haohr.com/training/manage/teacher", + "keep": 1, + "description": "培训讲师维护。", + "understanding": "线下培训资源。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/培训设置/01_讲师设置.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "所属组织", + "order": 1 + }, + { + "group": "", + "name": "专/兼职", + "order": 2 + }, + { + "group": "", + "name": "手机号码", + "order": 3 + }, + { + "group": "", + "name": "擅长课程", + "order": 4 + }, + { + "group": "", + "name": "是否开启试卷批阅权限", + "order": 5 + }, + { + "group": "", + "name": "是否启用", + "order": 6 + }, + { + "group": "", + "name": "点赞", + "order": 7 + }, + { + "group": "", + "name": "讲师姓名", + "order": 8 + } + ], + "hidden_entries": [ + "批量修改", + "批量删除", + "讲师授课记录", + "导出内部讲师" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加讲师", + "path": "screenshots/08_培训学习/培训设置/01_讲师设置__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/option/team", + "name": "团队设置", + "group": "培训设置", + "full_path": "培训学习 / 培训设置 / 团队设置", + "url": "https://2haohr.com/training/option/team", + "keep": 1, + "description": "培训管理团队设置。", + "understanding": "权限协作。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/培训设置/02_团队设置.jpg", + "field_count": 6, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "所属组织", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "工作性质", + "order": 3 + }, + { + "group": "", + "name": "入职日期", + "order": 4 + }, + { + "group": "", + "name": "姓名", + "order": 5 + } + ], + "hidden_entries": [ + "批量移除", + "导出团队学员" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "培训学习::/training/option/custom", + "name": "自定义设置", + "group": "培训设置", + "full_path": "培训学习 / 培训设置 / 自定义设置", + "url": "https://2haohr.com/training/option/custom", + "keep": 1, + "description": "培训模块自定义设置。", + "understanding": "杂项配置。", + "review_note": "", + "screenshot": "screenshots/08_培训学习/培训设置/03_自定义设置.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "绩效", + "page_count": 14, + "field_pages": 12, + "pages": [ + { + "node_key": "绩效::/performance-evaluation/desk", + "name": "概览", + "group": "常规", + "full_path": "绩效 / 常规 / 概览", + "url": "https://2haohr.com/performance-evaluation/desk", + "keep": 1, + "description": "绩效整体概览看板。", + "understanding": "绩效经理入口。", + "review_note": "", + "screenshot": "screenshots/09_绩效/常规/01_概览.jpg", + "field_count": 6, + "fields": [ + { + "group": "", + "name": "部门", + "order": 0 + }, + { + "group": "", + "name": "考核状态", + "order": 1 + }, + { + "group": "", + "name": "待处理人", + "order": 2 + }, + { + "group": "", + "name": "评分", + "order": 3 + }, + { + "group": "", + "name": "等级", + "order": 4 + }, + { + "group": "", + "name": "姓名", + "order": 5 + } + ], + "hidden_entries": [ + "绩效考核", + "试用期考核", + "晋升考核" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/manage/plan", + "name": "绩效考核", + "group": "考核管理", + "full_path": "绩效 / 考核管理 / 绩效考核", + "url": "https://2haohr.com/performance-evaluation/manage/plan", + "keep": 1, + "description": "发起与管理绩效考核方案。", + "understanding": "绩效核心,含指标与流程。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核管理/01_绩效考核.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "考核团队", + "order": 0 + }, + { + "group": "", + "name": "考核人数", + "order": 1 + }, + { + "group": "", + "name": "完成人数", + "order": 2 + }, + { + "group": "", + "name": "确认人数", + "order": 3 + }, + { + "group": "", + "name": "已面谈人数", + "order": 4 + }, + { + "group": "", + "name": "考核周期类型", + "order": 5 + }, + { + "group": "", + "name": "考核周期", + "order": 6 + }, + { + "group": "", + "name": "考核说明", + "order": 7 + }, + { + "group": "", + "name": "考核计划名称", + "order": 8 + } + ], + "hidden_entries": [ + "计划详情", + "查看设置", + "考核结果", + "成果概况", + "绩效面谈", + "复制", + "保存为模板", + "操作记录", + "删除" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增考核计划", + "path": "screenshots/09_绩效/考核管理/01_绩效考核__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/manage/history", + "name": "历史绩效考核", + "group": "考核管理", + "full_path": "绩效 / 考核管理 / 历史绩效考核", + "url": "https://2haohr.com/performance-evaluation/manage/history", + "keep": 1, + "description": "历史考核归档查询。", + "understanding": "结果追溯。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核管理/02_历史绩效考核.jpg", + "field_count": 8, + "fields": [ + { + "group": "", + "name": "考核团队", + "order": 0 + }, + { + "group": "", + "name": "考核人数", + "order": 1 + }, + { + "group": "", + "name": "已面谈人数", + "order": 2 + }, + { + "group": "", + "name": "考核周期类型", + "order": 3 + }, + { + "group": "", + "name": "考核周期", + "order": 4 + }, + { + "group": "", + "name": "来源", + "order": 5 + }, + { + "group": "", + "name": "考核计划说明", + "order": 6 + }, + { + "group": "", + "name": "考核计划名称", + "order": 7 + } + ], + "hidden_entries": [ + "查看设置", + "查看结果概况", + "查看绩效面谈", + "复制", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/manage/probation", + "name": "试用期考核", + "group": "考核管理", + "full_path": "绩效 / 考核管理 / 试用期考核", + "url": "https://2haohr.com/performance-evaluation/manage/probation", + "keep": 1, + "description": "试用期专项考核。", + "understanding": "与转正联动。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核管理/03_试用期考核.jpg", + "field_count": 11, + "fields": [ + { + "group": "", + "name": "部门", + "order": 0 + }, + { + "group": "", + "name": "岗位", + "order": 1 + }, + { + "group": "", + "name": "员工状态", + "order": 2 + }, + { + "group": "", + "name": "入职时间", + "order": 3 + }, + { + "group": "", + "name": "考核名称", + "order": 4 + }, + { + "group": "", + "name": "考核周期", + "order": 5 + }, + { + "group": "", + "name": "考核状态", + "order": 6 + }, + { + "group": "", + "name": "待处理人", + "order": 7 + }, + { + "group": "", + "name": "面谈次数", + "order": 8 + }, + { + "group": "", + "name": "考核评分", + "order": 9 + }, + { + "group": "", + "name": "姓名", + "order": 10 + } + ], + "hidden_entries": [ + "发起绩效面谈", + "下载为PDF", + "导入考核参考数据", + "查看设置", + "删除" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "发起试用期考核", + "path": "screenshots/09_绩效/考核管理/03_试用期考核__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/manage/promotion", + "name": "晋升考核", + "group": "考核管理", + "full_path": "绩效 / 考核管理 / 晋升考核", + "url": "https://2haohr.com/performance-evaluation/manage/promotion", + "keep": 1, + "description": "晋升评估考核。", + "understanding": "与职级晋升联动。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核管理/04_晋升考核.jpg", + "field_count": 11, + "fields": [ + { + "group": "", + "name": "部门", + "order": 0 + }, + { + "group": "", + "name": "岗位", + "order": 1 + }, + { + "group": "", + "name": "员工状态", + "order": 2 + }, + { + "group": "", + "name": "入职时间", + "order": 3 + }, + { + "group": "", + "name": "考核名称", + "order": 4 + }, + { + "group": "", + "name": "考核周期", + "order": 5 + }, + { + "group": "", + "name": "考核状态", + "order": 6 + }, + { + "group": "", + "name": "待处理人", + "order": 7 + }, + { + "group": "", + "name": "面谈次数", + "order": 8 + }, + { + "group": "", + "name": "考核评分", + "order": 9 + }, + { + "group": "", + "name": "姓名", + "order": 10 + } + ], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "发起晋升考核", + "path": "screenshots/09_绩效/考核管理/04_晋升考核__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/manage/group", + "name": "考核组管理", + "group": "考核管理", + "full_path": "绩效 / 考核管理 / 考核组管理", + "url": "https://2haohr.com/performance-evaluation/manage/group", + "keep": 1, + "description": "考核分组管理。", + "understanding": "按人群组织考核。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核管理/05_考核组管理.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "周期类型", + "order": 0 + }, + { + "group": "", + "name": "考核周期", + "order": 1 + }, + { + "group": "", + "name": "操作人", + "order": 2 + }, + { + "group": "", + "name": "操作时间", + "order": 3 + }, + { + "group": "", + "name": "考核组名称", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/result/archive", + "name": "员工绩效档案", + "group": "考核结果", + "full_path": "绩效 / 考核结果 / 员工绩效档案", + "url": "https://2haohr.com/performance-evaluation/result/archive", + "keep": 1, + "description": "员工历史绩效档案。", + "understanding": "绩效履历。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核结果/01_员工绩效档案.jpg", + "field_count": 10, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "部门", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "手机号", + "order": 3 + }, + { + "group": "", + "name": "员工状态", + "order": 4 + }, + { + "group": "", + "name": "最近考核计划", + "order": 5 + }, + { + "group": "", + "name": "最近绩效评分", + "order": 6 + }, + { + "group": "", + "name": "最近绩效等级", + "order": 7 + }, + { + "group": "", + "name": "考核次数", + "order": 8 + }, + { + "group": "", + "name": "姓名", + "order": 9 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/result/assessment", + "name": "绩效考核记录", + "group": "考核结果", + "full_path": "绩效 / 考核结果 / 绩效考核记录", + "url": "https://2haohr.com/performance-evaluation/result/assessment", + "keep": 1, + "description": "考核过程与结果记录。", + "understanding": "留痕。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核结果/02_绩效考核记录.jpg", + "field_count": 12, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "部门", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "员工状态", + "order": 3 + }, + { + "group": "", + "name": "考核计划", + "order": 4 + }, + { + "group": "", + "name": "考核状态", + "order": 5 + }, + { + "group": "", + "name": "待处理人", + "order": 6 + }, + { + "group": "", + "name": "评分", + "order": 7 + }, + { + "group": "", + "name": "等级", + "order": 8 + }, + { + "group": "", + "name": "结果确认状态", + "order": 9 + }, + { + "group": "", + "name": "面谈次数", + "order": 10 + }, + { + "group": "", + "name": "员工姓名", + "order": 11 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/result/interview", + "name": "绩效面谈记录", + "group": "考核结果", + "full_path": "绩效 / 考核结果 / 绩效面谈记录", + "url": "https://2haohr.com/performance-evaluation/result/interview", + "keep": 1, + "description": "绩效面谈内容记录。", + "understanding": "改进跟踪。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg", + "field_count": 10, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "部门", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "员工状态", + "order": 3 + }, + { + "group": "", + "name": "手机号", + "order": 4 + }, + { + "group": "", + "name": "所属考核计划", + "order": 5 + }, + { + "group": "", + "name": "面谈人", + "order": 6 + }, + { + "group": "", + "name": "面谈时间", + "order": 7 + }, + { + "group": "", + "name": "面谈状态", + "order": 8 + }, + { + "group": "", + "name": "姓名", + "order": 9 + } + ], + "hidden_entries": [ + "编辑", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/setting/indicators", + "name": "指标库", + "group": "考核设置", + "full_path": "绩效 / 考核设置 / 指标库", + "url": "https://2haohr.com/performance-evaluation/setting/indicators", + "keep": 1, + "description": "绩效指标(KPI/OKR)库。", + "understanding": "考核内容基础。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核设置/01_指标库.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "指标类型", + "order": 0 + }, + { + "group": "", + "name": "指标说明", + "order": 1 + }, + { + "group": "", + "name": "考核标准", + "order": 2 + }, + { + "group": "", + "name": "评分上限", + "order": 3 + }, + { + "group": "", + "name": "权重", + "order": 4 + }, + { + "group": "", + "name": "评分方式", + "order": 5 + }, + { + "group": "", + "name": "指标名称", + "order": 6 + }, + { + "group": "", + "name": "数据来源(单位)", + "order": 7 + }, + { + "group": "", + "name": "指标评分", + "order": 8 + } + ], + "hidden_entries": [ + "导入指标", + "导出指标", + "复制指标", + "移动指标", + "删除指标" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增指标", + "path": "screenshots/09_绩效/考核设置/01_指标库__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/setting/template", + "name": "考核模板库", + "group": "考核设置", + "full_path": "绩效 / 考核设置 / 考核模板库", + "url": "https://2haohr.com/performance-evaluation/setting/template", + "keep": 1, + "description": "考核表模板库。", + "understanding": "快速套用。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核设置/02_考核模板库.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "预览", + "复制考核模板", + "删除" + ], + "deep_shots": [ + { + "kind": "detail", + "kind_cn": "行详情/编辑", + "label": "编辑", + "path": "screenshots/09_绩效/考核设置/02_考核模板库__detail.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/setting/team", + "name": "考核团队", + "group": "考核设置", + "full_path": "绩效 / 考核设置 / 考核团队", + "url": "https://2haohr.com/performance-evaluation/setting/team", + "keep": 1, + "description": "绩效管理团队设置。", + "understanding": "权限协作。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核设置/03_考核团队.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "操作记录", + "删除考核团队" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "发起考核计划", + "path": "screenshots/09_绩效/考核设置/03_考核团队__add.jpg" + }, + { + "kind": "detail", + "kind_cn": "行详情/编辑", + "label": "详情", + "path": "screenshots/09_绩效/考核设置/03_考核团队__detail.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/setting/custom", + "name": "自定义设置", + "group": "考核设置", + "full_path": "绩效 / 考核设置 / 自定义设置", + "url": "https://2haohr.com/performance-evaluation/setting/custom", + "keep": 1, + "description": "绩效模块自定义设置。", + "understanding": "杂项配置。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核设置/04_自定义设置.jpg", + "field_count": 2, + "fields": [ + { + "group": "", + "name": "考核周期类型", + "order": 0 + }, + { + "group": "", + "name": "默认计薪月份", + "order": 1 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "绩效::/performance-evaluation/log", + "name": "操作记录", + "group": "考核设置", + "full_path": "绩效 / 考核设置 / 操作记录", + "url": "https://2haohr.com/performance-evaluation/log", + "keep": 1, + "description": "绩效模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/09_绩效/考核设置/05_操作记录.jpg", + "field_count": 4, + "fields": [ + { + "group": "", + "name": "操作时间", + "order": 0 + }, + { + "group": "", + "name": "用户IP", + "order": 1 + }, + { + "group": "", + "name": "操作人", + "order": 2 + }, + { + "group": "", + "name": "操作内容", + "order": 3 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "社保公积金", + "page_count": 6, + "field_pages": 2, + "pages": [ + { + "node_key": "社保公积金::/social-insurance/records", + "name": "参保账单", + "group": "常规", + "full_path": "社保公积金 / 常规 / 参保账单", + "url": "https://2haohr.com/social-insurance/records", + "keep": 1, + "description": "每月社保公积金参保账单。", + "understanding": "缴费核对入口。", + "review_note": "", + "screenshot": "screenshots/10_社保公积金/常规/01_参保账单.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入历史参保记录", + "修改名称", + "复制", + "删除" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加账单", + "path": "screenshots/10_社保公积金/常规/01_参保账单__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "社保公积金::/social-insurance/bill", + "name": "账单核对", + "group": "常规", + "full_path": "社保公积金 / 常规 / 账单核对", + "url": "https://2haohr.com/social-insurance/bill", + "keep": 1, + "description": "账单与实缴核对。", + "understanding": "差异排查。", + "review_note": "", + "screenshot": "screenshots/10_社保公积金/常规/02_账单核对.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "社保公积金::/social-insurance/archives", + "name": "参保档案", + "group": "常规", + "full_path": "社保公积金 / 常规 / 参保档案", + "url": "https://2haohr.com/social-insurance/archives", + "keep": 1, + "description": "员工参保档案。", + "understanding": "参保状态主数据。", + "review_note": "", + "screenshot": "screenshots/10_社保公积金/常规/03_参保档案.jpg", + "field_count": 12, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "试用期", + "order": 1 + }, + { + "group": "", + "name": "证件类型", + "order": 2 + }, + { + "group": "", + "name": "证件号码", + "order": 3 + }, + { + "group": "", + "name": "参保方案", + "order": 4 + }, + { + "group": "", + "name": "社保参保城市", + "order": 5 + }, + { + "group": "", + "name": "参保类型", + "order": 6 + }, + { + "group": "", + "name": "起始参保月份", + "order": 7 + }, + { + "group": "", + "name": "最新参保月份", + "order": 8 + }, + { + "group": "", + "name": "社保基数", + "order": 9 + }, + { + "group": "", + "name": "公积金基数", + "order": 10 + }, + { + "group": "", + "name": "姓名", + "order": 11 + } + ], + "hidden_entries": [ + "批量停保", + "批量补差", + "已停保人员参保档案", + "按参保月份倒序", + "停保", + "补差", + "补缴" + ], + "deep_shots": [], + "data_samples": [ + { + "file": "downloads/_任务中心/参保档案列表-已参保_20260717223201.xlsx", + "kind": "xlsx", + "size": 5782, + "sheet": "参保档案列表-已参保", + "total_rows": 25, + "total_cols": 13, + "headers": [ + "姓名", + "工号", + "试用期", + "证件类型", + "证件号码", + "参保方案", + "社保参保城市", + "参保类型", + "起始参保月份", + "最新参保月份", + "社保基数", + "公积金基数" + ] + } + ] + }, + { + "node_key": "社保公积金::/social-insurance/reports", + "name": "社保报表", + "group": "常规", + "full_path": "社保公积金 / 常规 / 社保报表", + "url": "https://2haohr.com/social-insurance/reports", + "keep": 1, + "description": "社保缴纳报表。", + "understanding": "上报与统计。", + "review_note": "", + "screenshot": "screenshots/10_社保公积金/常规/04_社保报表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "添加报表", + "path": "screenshots/10_社保公积金/常规/04_社保报表__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "社保公积金::/social-insurance/statistics", + "name": "社保分析", + "group": "常规", + "full_path": "社保公积金 / 常规 / 社保分析", + "url": "https://2haohr.com/social-insurance/statistics", + "keep": 1, + "description": "社保成本分析。", + "understanding": "成本洞察。", + "review_note": "", + "screenshot": "screenshots/10_社保公积金/常规/05_社保分析.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "社保公积金::/social-insurance/rules", + "name": "参保规则", + "group": "常规", + "full_path": "社保公积金 / 常规 / 参保规则", + "url": "https://2haohr.com/social-insurance/rules", + "keep": 1, + "description": "参保基数/比例规则。", + "understanding": "地区政策配置核心。", + "review_note": "", + "screenshot": "screenshots/10_社保公积金/常规/06_参保规则.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "社保参保城市", + "order": 0 + }, + { + "group": "", + "name": "参保类型", + "order": 1 + }, + { + "group": "", + "name": "使用人数", + "order": 2 + }, + { + "group": "", + "name": "设置方式", + "order": 3 + }, + { + "group": "", + "name": "个人社保", + "order": 4 + }, + { + "group": "", + "name": "企业社保", + "order": 5 + }, + { + "group": "", + "name": "个人公积金", + "order": 6 + }, + { + "group": "", + "name": "企业公积金", + "order": 7 + }, + { + "group": "", + "name": "方案名称", + "order": 8 + } + ], + "hidden_entries": [ + "社保统一设置", + "批量修改参保方案", + "按创建时间倒序", + "复制", + "删除" + ], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "行政管理", + "page_count": 10, + "field_pages": 7, + "pages": [ + { + "node_key": "行政管理::/oa/notice", + "name": "企业公告", + "group": "常规", + "full_path": "行政管理 / 常规 / 企业公告", + "url": "https://2haohr.com/oa/notice", + "keep": 1, + "description": "企业公告发布与阅读。", + "understanding": "全员触达。", + "review_note": "", + "screenshot": "screenshots/11_行政管理/常规/01_企业公告.jpg", + "field_count": 10, + "fields": [ + { + "group": "", + "name": "状态", + "order": 0 + }, + { + "group": "", + "name": "附件下载状态", + "order": 1 + }, + { + "group": "", + "name": "发布范围", + "order": 2 + }, + { + "group": "", + "name": "接收人", + "order": 3 + }, + { + "group": "", + "name": "已读", + "order": 4 + }, + { + "group": "", + "name": "已签收", + "order": 5 + }, + { + "group": "", + "name": "创建/更新时间", + "order": 6 + }, + { + "group": "", + "name": "发布时间", + "order": 7 + }, + { + "group": "", + "name": "下线时间", + "order": 8 + }, + { + "group": "", + "name": "标题", + "order": 9 + } + ], + "hidden_entries": [ + "查阅情况", + "置顶", + "下线" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新建公告", + "path": "screenshots/11_行政管理/常规/01_企业公告__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/regulation", + "name": "企业制度", + "group": "常规", + "full_path": "行政管理 / 常规 / 企业制度", + "url": "https://2haohr.com/oa/regulation", + "keep": 1, + "description": "企业规章制度发布。", + "understanding": "制度沉淀。", + "review_note": "知识库", + "screenshot": "screenshots/11_行政管理/常规/02_企业制度.jpg", + "field_count": 10, + "fields": [ + { + "group": "", + "name": "状态", + "order": 0 + }, + { + "group": "", + "name": "附件下载状态", + "order": 1 + }, + { + "group": "", + "name": "发布范围", + "order": 2 + }, + { + "group": "", + "name": "接收人", + "order": 3 + }, + { + "group": "", + "name": "已读", + "order": 4 + }, + { + "group": "", + "name": "已签收", + "order": 5 + }, + { + "group": "", + "name": "创建/更新时间", + "order": 6 + }, + { + "group": "", + "name": "发布时间", + "order": 7 + }, + { + "group": "", + "name": "下线时间", + "order": 8 + }, + { + "group": "", + "name": "标题", + "order": 9 + } + ], + "hidden_entries": [ + "批量移动", + "批量发布", + "批量下线", + "查阅情况", + "置顶", + "下线" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新建制度", + "path": "screenshots/11_行政管理/常规/02_企业制度__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/news", + "name": "新闻动态", + "group": "常规", + "full_path": "行政管理 / 常规 / 新闻动态", + "url": "https://2haohr.com/oa/news", + "keep": 1, + "description": "企业新闻动态。", + "understanding": "文化运营。", + "review_note": "删", + "screenshot": "screenshots/11_行政管理/常规/03_新闻动态.jpg", + "field_count": 7, + "fields": [ + { + "group": "", + "name": "状态", + "order": 0 + }, + { + "group": "", + "name": "阅读数", + "order": 1 + }, + { + "group": "", + "name": "点赞数", + "order": 2 + }, + { + "group": "", + "name": "创建/更新时间", + "order": 3 + }, + { + "group": "", + "name": "发布时间", + "order": 4 + }, + { + "group": "", + "name": "下线时间", + "order": 5 + }, + { + "group": "", + "name": "标题", + "order": 6 + } + ], + "hidden_entries": [ + "编辑", + "下线" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新建新闻", + "path": "screenshots/11_行政管理/常规/03_新闻动态__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/certificate", + "name": "开具证明", + "group": "常规", + "full_path": "行政管理 / 常规 / 开具证明", + "url": "https://2haohr.com/oa/certificate", + "keep": 1, + "description": "在职/收入等证明在线开具。", + "understanding": "员工自助高频需求。", + "review_note": "", + "screenshot": "screenshots/11_行政管理/常规/04_开具证明.jpg", + "field_count": 7, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "部门", + "order": 1 + }, + { + "group": "", + "name": "岗位", + "order": 2 + }, + { + "group": "", + "name": "申请时间", + "order": 3 + }, + { + "group": "", + "name": "申请证明类型", + "order": 4 + }, + { + "group": "", + "name": "申请理由", + "order": 5 + }, + { + "group": "", + "name": "操作记录", + "order": 6 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/meeting/reservation", + "name": "会议预定记录", + "group": "会议室预定", + "full_path": "行政管理 / 会议室预定 / 会议预定记录", + "url": "https://2haohr.com/oa/meeting/reservation", + "keep": 1, + "description": "会议室预定记录。", + "understanding": "资源使用查询。", + "review_note": "删", + "screenshot": "screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg", + "field_count": 7, + "fields": [ + { + "group": "", + "name": "会议室", + "order": 0 + }, + { + "group": "", + "name": "会议时间", + "order": 1 + }, + { + "group": "", + "name": "时长(分钟)", + "order": 2 + }, + { + "group": "", + "name": "会议状态", + "order": 3 + }, + { + "group": "", + "name": "预定人", + "order": 4 + }, + { + "group": "", + "name": "预定人部门", + "order": 5 + }, + { + "group": "", + "name": "会议名称", + "order": 6 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/meeting/meetingroom", + "name": "会议室管理", + "group": "会议室预定", + "full_path": "行政管理 / 会议室预定 / 会议室管理", + "url": "https://2haohr.com/oa/meeting/meetingroom", + "keep": 1, + "description": "会议室资源维护。", + "understanding": "行政资源管理。", + "review_note": "删", + "screenshot": "screenshots/11_行政管理/会议室预定/02_会议室管理.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "暂停预定", + "修改", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/meeting/record", + "name": "会议操作记录", + "group": "会议室预定", + "full_path": "行政管理 / 会议室预定 / 会议操作记录", + "url": "https://2haohr.com/oa/meeting/record", + "keep": 1, + "description": "会议室操作日志。", + "understanding": "留痕。", + "review_note": "删", + "screenshot": "screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg", + "field_count": 3, + "fields": [ + { + "group": "", + "name": "操作时间", + "order": 0 + }, + { + "group": "", + "name": "操作人", + "order": 1 + }, + { + "group": "", + "name": "操作内容", + "order": 2 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/survey/list", + "name": "问卷管理", + "group": "问卷调查", + "full_path": "行政管理 / 问卷调查 / 问卷管理", + "url": "https://2haohr.com/oa/survey/list", + "keep": 1, + "description": "企业问卷调查发起与统计。", + "understanding": "满意度/调研工具。", + "review_note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/01_问卷管理.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "删除问卷", + "复制问卷", + "预览问卷" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/survey/template", + "name": "问卷模板库", + "group": "问卷调查", + "full_path": "行政管理 / 问卷调查 / 问卷模板库", + "url": "https://2haohr.com/oa/survey/template", + "keep": 1, + "description": "问卷模板库。", + "understanding": "快速创建。", + "review_note": "ai模版库", + "screenshot": "screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "行政管理::/oa/survey/log", + "name": "问卷操作记录", + "group": "问卷调查", + "full_path": "行政管理 / 问卷调查 / 问卷操作记录", + "url": "https://2haohr.com/oa/survey/log", + "keep": 1, + "description": "问卷操作日志。", + "understanding": "留痕。", + "review_note": "", + "screenshot": "screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg", + "field_count": 3, + "fields": [ + { + "group": "", + "name": "操作时间", + "order": 0 + }, + { + "group": "", + "name": "操作人", + "order": 1 + }, + { + "group": "", + "name": "操作内容", + "order": 2 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "电子合同", + "page_count": 8, + "field_pages": 4, + "pages": [ + { + "node_key": "电子合同::/econtract/overview", + "name": "概览", + "group": "常规", + "full_path": "电子合同 / 常规 / 概览", + "url": "https://2haohr.com/econtract/overview", + "keep": 1, + "description": "电子合同数据概览。", + "understanding": "签署情况看板。", + "review_note": "出占比图。", + "screenshot": "screenshots/12_电子合同/常规/01_概览.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "设置常用模板" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子合同::/econtract/sign/signing", + "name": "签署中", + "group": "合同签署", + "full_path": "电子合同 / 合同签署 / 签署中", + "url": "https://2haohr.com/econtract/sign/signing", + "keep": 1, + "description": "签署流程进行中的合同。", + "understanding": "待办跟踪。", + "review_note": "优化字段", + "screenshot": "screenshots/12_电子合同/合同签署/01_签署中.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "合同名称", + "order": 0 + }, + { + "group": "", + "name": "合同编号", + "order": 1 + }, + { + "group": "", + "name": "合同类型", + "order": 2 + }, + { + "group": "", + "name": "签署方式", + "order": 3 + }, + { + "group": "", + "name": "签署状态", + "order": 4 + } + ], + "hidden_entries": [ + "批量发送签署通知", + "打包下载记录", + "批量发送记录", + "员工实名认证记录" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子合同::/econtract/sign/signed", + "name": "已签署", + "group": "合同签署", + "full_path": "电子合同 / 合同签署 / 已签署", + "url": "https://2haohr.com/econtract/sign/signed", + "keep": 1, + "description": "已完成签署合同。", + "understanding": "生效合同管理。", + "review_note": "优化字段", + "screenshot": "screenshots/12_电子合同/合同签署/02_已签署.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "合同名称", + "order": 0 + }, + { + "group": "", + "name": "合同编号", + "order": 1 + }, + { + "group": "", + "name": "合同类型", + "order": 2 + }, + { + "group": "", + "name": "签署方式", + "order": 3 + }, + { + "group": "", + "name": "签署状态", + "order": 4 + } + ], + "hidden_entries": [ + "打包下载记录", + "批量发送记录", + "员工实名认证记录" + ], + "deep_shots": [], + "data_samples": [ + { + "file": "downloads/_任务中心/已签署_电子合同签署记录_20260717223308.xlsx", + "kind": "xlsx", + "size": 5744, + "sheet": "Sheet1", + "total_rows": 1, + "total_cols": 13, + "headers": [ + "合同名称", + "合同编号", + "合同类型", + "签署状态", + "签署员工", + "身份证号", + "员工手机号", + "印章名称", + "签署的印章管理者", + "发起人", + "发起签署时间", + "最近处理时间", + "备注" + ] + } + ] + }, + { + "node_key": "电子合同::/econtract/sign/cancelled", + "name": "已作废", + "group": "合同签署", + "full_path": "电子合同 / 合同签署 / 已作废", + "url": "https://2haohr.com/econtract/sign/cancelled", + "keep": 1, + "description": "作废合同归档。", + "understanding": "留痕。", + "review_note": "优化字段,重点是体现合同名称、编号、签曙人、作废的原因、时间。", + "screenshot": "screenshots/12_电子合同/合同签署/03_已作废.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "合同名称", + "order": 0 + }, + { + "group": "", + "name": "合同编号", + "order": 1 + }, + { + "group": "", + "name": "合同类型", + "order": 2 + }, + { + "group": "", + "name": "签署方式", + "order": 3 + }, + { + "group": "", + "name": "签署状态", + "order": 4 + } + ], + "hidden_entries": [ + "打包下载记录", + "批量发送记录", + "员工实名认证记录" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子合同::/econtract/archive/home", + "name": "合同档案库", + "group": "合同签署", + "full_path": "电子合同 / 合同签署 / 合同档案库", + "url": "https://2haohr.com/econtract/archive/home", + "keep": 1, + "description": "电子合同档案库。", + "understanding": "集中存储与检索。", + "review_note": "", + "screenshot": "screenshots/12_电子合同/合同签署/04_合同档案库.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子合同::/econtract/settings/seal", + "name": "企业印章", + "group": "设置", + "full_path": "电子合同 / 设置 / 企业印章", + "url": "https://2haohr.com/econtract/settings/seal", + "keep": 1, + "description": "企业电子印章管理。", + "understanding": "签署授权核心。", + "review_note": "", + "screenshot": "screenshots/12_电子合同/设置/01_企业印章.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "编辑", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子合同::/econtract/settings/category", + "name": "合同模板", + "group": "设置", + "full_path": "电子合同 / 设置 / 合同模板", + "url": "https://2haohr.com/econtract/settings/category", + "keep": 1, + "description": "合同模板管理。", + "understanding": "标准化签署。", + "review_note": "", + "screenshot": "screenshots/12_电子合同/设置/02_合同模板.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "单个发起", + "批量发起", + "删除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子合同::/econtract/settings/package", + "name": "合同包", + "group": "设置", + "full_path": "电子合同 / 设置 / 合同包", + "url": "https://2haohr.com/econtract/settings/package", + "keep": 1, + "description": "合同套餐/额度包。", + "understanding": "计费额度管理。", + "review_note": "从合同模版里进行组合,发送员工电子签,只收一次费用。", + "screenshot": "screenshots/12_电子合同/设置/03_合同包.jpg", + "field_count": 3, + "fields": [ + { + "group": "", + "name": "合同包名称", + "order": 0 + }, + { + "group": "", + "name": "备注", + "order": 1 + }, + { + "group": "", + "name": "合同模板", + "order": 2 + } + ], + "hidden_entries": [], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增合同包", + "path": "screenshots/12_电子合同/设置/03_合同包__add.jpg" + } + ], + "data_samples": [] + } + ] + }, + { + "module": "背景调查", + "page_count": 1, + "field_pages": 0, + "pages": [ + { + "node_key": "背景调查::/hrService/background-investigation/entry", + "name": "背景调查服务", + "group": "", + "full_path": "背景调查 / 背景调查服务", + "url": "https://2haohr.com/hrService/background-investigation/entry", + "keep": 1, + "description": "背景调查模块下「背景调查服务」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "额外付费项目", + "screenshot": "screenshots/13_背景调查/背景调查服务.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "人才测评", + "page_count": 1, + "field_pages": 0, + "pages": [ + { + "node_key": "人才测评::/hrService/employee-assessment/", + "name": "人才测评服务", + "group": "", + "full_path": "人才测评 / 人才测评服务", + "url": "https://2haohr.com/hrService/employee-assessment/", + "keep": 1, + "description": "人才测评模块下「人才测评服务」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "免费服务,把九型、MBTI、星座等API接进去。同时把九型测评放在入职招聘模块。", + "screenshot": "screenshots/14_人才测评/人才测评服务.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "员工福利", + "page_count": 4, + "field_pages": 3, + "pages": [ + { + "node_key": "员工福利::/welfare/online-shop/overview", + "name": "员工福利概况", + "group": "常规", + "full_path": "员工福利 / 常规 / 员工福利概况", + "url": "https://2haohr.com/welfare/online-shop/overview", + "keep": 1, + "description": "福利运营数据概览。", + "understanding": "福利运营入口。", + "review_note": "福利品、发放方式、维护地址自动发放\n电子卡券\n线下发放的只在这里登记统计即可\n不搞积分,太复杂,还要配套一个积极规则兑换机制", + "screenshot": "screenshots/15_员工福利/常规/01_员工福利概况.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "员工福利::/welfare/online-shop/Integral", + "name": "员工积分管理", + "group": "常规", + "full_path": "员工福利 / 常规 / 员工积分管理", + "url": "https://2haohr.com/welfare/online-shop/Integral", + "keep": 1, + "description": "员工积分发放与管理。", + "understanding": "激励体系。", + "review_note": "", + "screenshot": "screenshots/15_员工福利/常规/02_员工积分管理.jpg", + "field_count": 7, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "员工状态", + "order": 1 + }, + { + "group": "", + "name": "手机号", + "order": 2 + }, + { + "group": "", + "name": "工号", + "order": 3 + }, + { + "group": "", + "name": "部门", + "order": 4 + }, + { + "group": "", + "name": "岗位", + "order": 5 + }, + { + "group": "", + "name": "累计发放积分", + "order": 6 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "员工福利::/welfare/online-shop/giftbag", + "name": "商品专区管理", + "group": "常规", + "full_path": "员工福利 / 常规 / 商品专区管理", + "url": "https://2haohr.com/welfare/online-shop/giftbag", + "keep": 1, + "description": "福利商城商品管理。", + "understanding": "福利兑换运营。", + "review_note": "", + "screenshot": "screenshots/15_员工福利/常规/03_商品专区管理.jpg", + "field_count": 4, + "fields": [ + { + "group": "", + "name": "专区名称", + "order": 0 + }, + { + "group": "", + "name": "商品数量", + "order": 1 + }, + { + "group": "", + "name": "兑换开始时间", + "order": 2 + }, + { + "group": "", + "name": "兑换结束时间", + "order": 3 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "员工福利::/welfare/pingan-doctor", + "name": "平安好医生", + "group": "常规", + "full_path": "员工福利 / 常规 / 平安好医生", + "url": "https://2haohr.com/welfare/pingan-doctor", + "keep": 1, + "description": "对接平安好医生健康服务。", + "understanding": "健康福利增值。", + "review_note": "", + "screenshot": "screenshots/15_员工福利/常规/04_平安好医生.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "工号", + "order": 1 + }, + { + "group": "", + "name": "员工状态", + "order": 2 + }, + { + "group": "", + "name": "部门", + "order": 3 + }, + { + "group": "", + "name": "岗位", + "order": 4 + }, + { + "group": "", + "name": "手机号", + "order": 5 + }, + { + "group": "", + "name": "累计发放总份数", + "order": 6 + }, + { + "group": "", + "name": "累计发放体检宝员工版份数", + "order": 7 + }, + { + "group": "", + "name": "累计发放体检宝高管版份数", + "order": 8 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "人事仪表盘", + "page_count": 2, + "field_pages": 0, + "pages": [ + { + "node_key": "人事仪表盘::/dashboard/board/home", + "name": "我的仪表盘", + "group": "常规", + "full_path": "人事仪表盘 / 常规 / 我的仪表盘", + "url": "https://2haohr.com/dashboard/board/home", + "keep": 1, + "description": "个人自定义数据看板。", + "understanding": "BI 自助看板。", + "review_note": "", + "screenshot": "screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "人事仪表盘::/dashboard/board/diyReport", + "name": "报告老板", + "group": "常规", + "full_path": "人事仪表盘 / 常规 / 报告老板", + "url": "https://2haohr.com/dashboard/board/diyReport", + "keep": 1, + "description": "面向管理层的经营人事报告。", + "understanding": "高层决策报告。", + "review_note": "AI生成", + "screenshot": "screenshots/16_人事仪表盘/常规/02_报告老板.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "第三方对接", + "page_count": 5, + "field_pages": 0, + "pages": [ + { + "node_key": "第三方对接::/third-party-apps/wework", + "name": "企业微信", + "group": "常规", + "full_path": "第三方对接 / 常规 / 企业微信", + "url": "https://2haohr.com/third-party-apps/wework", + "keep": 1, + "description": "对接企业微信(组织同步/消息)。", + "understanding": "生态集成。", + "review_note": "评估要不要预留API接口", + "screenshot": "screenshots/17_第三方对接/常规/01_企业微信.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "第三方对接::/third-party-apps/dingtalk", + "name": "钉钉", + "group": "常规", + "full_path": "第三方对接 / 常规 / 钉钉", + "url": "https://2haohr.com/third-party-apps/dingtalk", + "keep": 1, + "description": "对接钉钉。", + "understanding": "生态集成。", + "review_note": "", + "screenshot": "screenshots/17_第三方对接/常规/02_钉钉.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "第三方对接::/third-party-apps/new-feishu", + "name": "飞书", + "group": "常规", + "full_path": "第三方对接 / 常规 / 飞书", + "url": "https://2haohr.com/third-party-apps/new-feishu", + "keep": 1, + "description": "对接飞书。", + "understanding": "生态集成。", + "review_note": "", + "screenshot": "screenshots/17_第三方对接/常规/03_飞书.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "第三方对接::/third-party-apps/ctrip", + "name": "携程商旅", + "group": "常规", + "full_path": "第三方对接 / 常规 / 携程商旅", + "url": "https://2haohr.com/third-party-apps/ctrip", + "keep": 1, + "description": "对接携程商旅(差旅)。", + "understanding": "差旅报销联动。", + "review_note": "", + "screenshot": "screenshots/17_第三方对接/常规/04_携程商旅.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "第三方对接::/third-party-apps/record", + "name": "操作记录", + "group": "常规", + "full_path": "第三方对接 / 常规 / 操作记录", + "url": "https://2haohr.com/third-party-apps/record", + "keep": 1, + "description": "第三方对接模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/17_第三方对接/常规/05_操作记录.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "培训商城", + "page_count": 1, + "field_pages": 0, + "pages": [ + { + "node_key": "培训商城::/training-mall", + "name": "培训商城(外部课程采购)", + "group": "", + "full_path": "培训商城 / 培训商城(外部课程采购)", + "url": "https://2haohr.com/training-mall", + "keep": 1, + "description": "培训商城模块下「培训商城(外部课程采购)」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "删", + "screenshot": "screenshots/18_培训商城/培训商城(外部课程采购).jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "短信发送", + "page_count": 2, + "field_pages": 1, + "pages": [ + { + "node_key": "短信发送::/sms-manage/batch", + "name": "短信发送", + "group": "常规", + "full_path": "短信发送 / 常规 / 短信发送", + "url": "https://2haohr.com/sms-manage/batch", + "keep": 1, + "description": "批量发送短信通知。", + "understanding": "触达通道。", + "review_note": "考虑删除", + "screenshot": "screenshots/19_短信发送/常规/01_短信发送.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "短信发送::/sms-manage/sms-send/list", + "name": "发送记录", + "group": "常规", + "full_path": "短信发送 / 常规 / 发送记录", + "url": "https://2haohr.com/sms-manage/sms-send/list", + "keep": 1, + "description": "短信发送记录。", + "understanding": "留痕与计费。", + "review_note": "考虑删除,用服务号", + "screenshot": "screenshots/19_短信发送/常规/02_发送记录.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "短信模板", + "order": 0 + }, + { + "group": "", + "name": "发送人", + "order": 1 + }, + { + "group": "", + "name": "发送条数", + "order": 2 + }, + { + "group": "", + "name": "创建时间", + "order": 3 + }, + { + "group": "", + "name": "发送详情", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "电子工资条", + "page_count": 5, + "field_pages": 3, + "pages": [ + { + "node_key": "电子工资条::/payslip/home", + "name": "发送工资条", + "group": "常规", + "full_path": "电子工资条 / 常规 / 发送工资条", + "url": "https://2haohr.com/payslip/home", + "keep": 1, + "description": "发送电子工资条给员工。", + "understanding": "保密发放。", + "review_note": "", + "screenshot": "screenshots/20_电子工资条/常规/01_发送工资条.jpg", + "field_count": 6, + "fields": [ + { + "group": "", + "name": "所属月份", + "order": 0 + }, + { + "group": "", + "name": "总人数", + "order": 1 + }, + { + "group": "", + "name": "已发放", + "order": 2 + }, + { + "group": "", + "name": "操作人", + "order": 3 + }, + { + "group": "", + "name": "操作时间", + "order": 4 + }, + { + "group": "", + "name": "工资表名称", + "order": 5 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子工资条::/payslip/record", + "name": "发放记录", + "group": "常规", + "full_path": "电子工资条 / 常规 / 发放记录", + "url": "https://2haohr.com/payslip/record", + "keep": 1, + "description": "工资条发放记录。", + "understanding": "留痕。", + "review_note": "", + "screenshot": "screenshots/20_电子工资条/常规/02_发放记录.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "原始工资表", + "查看发放记录", + "删除发放记录" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子工资条::/payslip/feedback", + "name": "反馈记录", + "group": "常规", + "full_path": "电子工资条 / 常规 / 反馈记录", + "url": "https://2haohr.com/payslip/feedback", + "keep": 1, + "description": "员工对工资条的确认/异议。", + "understanding": "确认闭环。", + "review_note": "", + "screenshot": "screenshots/20_电子工资条/常规/03_反馈记录.jpg", + "field_count": 8, + "fields": [ + { + "group": "", + "name": "部门", + "order": 0 + }, + { + "group": "", + "name": "岗位", + "order": 1 + }, + { + "group": "", + "name": "月份", + "order": 2 + }, + { + "group": "", + "name": "工资表名称", + "order": 3 + }, + { + "group": "", + "name": "最新反馈内容", + "order": 4 + }, + { + "group": "", + "name": "处理状态", + "order": 5 + }, + { + "group": "", + "name": "最新反馈时间", + "order": 6 + }, + { + "group": "", + "name": "姓名", + "order": 7 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子工资条::/payslip/statistic", + "name": "统计分析", + "group": "常规", + "full_path": "电子工资条 / 常规 / 统计分析", + "url": "https://2haohr.com/payslip/statistic", + "keep": 1, + "description": "工资条发送与确认统计。", + "understanding": "触达率监控。", + "review_note": "有没有必要??", + "screenshot": "screenshots/20_电子工资条/常规/04_统计分析.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "电子工资条::/payslip/log", + "name": "操作记录", + "group": "常规", + "full_path": "电子工资条 / 常规 / 操作记录", + "url": "https://2haohr.com/payslip/log", + "keep": 1, + "description": "电子工资条模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/20_电子工资条/常规/05_操作记录.jpg", + "field_count": 3, + "fields": [ + { + "group": "", + "name": "操作时间", + "order": 0 + }, + { + "group": "", + "name": "IP", + "order": 1 + }, + { + "group": "", + "name": "操作记录", + "order": 2 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "智能薪酬", + "page_count": 15, + "field_pages": 9, + "pages": [ + { + "node_key": "智能薪酬::/salary/desk", + "name": "概览", + "group": "常规", + "full_path": "智能薪酬 / 常规 / 概览", + "url": "https://2haohr.com/salary/desk", + "keep": 1, + "description": "智能薪酬数据概览。", + "understanding": "薪酬看板。", + "review_note": "整个智能薪酬和薪酬合并,整合,优化", + "screenshot": "screenshots/21_智能薪酬/常规/01_概览.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "管理" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/calculate", + "name": "薪酬核算", + "group": "常规", + "full_path": "智能薪酬 / 常规 / 薪酬核算", + "url": "https://2haohr.com/salary/calculate", + "keep": 1, + "description": "智能化薪酬核算。", + "understanding": "核心核算引擎。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/常规/02_薪酬核算.jpg", + "field_count": 3, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "工号", + "order": 1 + }, + { + "group": "", + "name": "部门", + "order": 2 + } + ], + "hidden_entries": [ + "创建全新工资表", + "从以往核算方案创建", + "从工资表模板创建" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/data-collection/attendance", + "name": "员工考勤", + "group": "数据采集", + "full_path": "智能薪酬 / 数据采集 / 员工考勤", + "url": "https://2haohr.com/salary/data-collection/attendance", + "keep": 1, + "description": "采集考勤数据用于计薪。", + "understanding": "数据采集环节。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg", + "field_count": 4, + "fields": [ + { + "group": "", + "name": "姓名", + "order": 0 + }, + { + "group": "", + "name": "工号", + "order": 1 + }, + { + "group": "", + "name": "部门", + "order": 2 + }, + { + "group": "", + "name": "岗位", + "order": 3 + } + ], + "hidden_entries": [ + "自定义考勤字段", + "锁定每日考勤" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/data-collection/work-report", + "name": "业务提报", + "group": "数据采集", + "full_path": "智能薪酬 / 数据采集 / 业务提报", + "url": "https://2haohr.com/salary/data-collection/work-report", + "keep": 1, + "description": "采集业务提成/绩效等计薪数据。", + "understanding": "数据采集环节。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/数据采集/02_业务提报.jpg", + "field_count": 9, + "fields": [ + { + "group": "", + "name": "提报类型", + "order": 0 + }, + { + "group": "", + "name": "方案状态", + "order": 1 + }, + { + "group": "", + "name": "提报管理员", + "order": 2 + }, + { + "group": "", + "name": "最近提报时间", + "order": 3 + }, + { + "group": "", + "name": "创建时间", + "order": 4 + }, + { + "group": "", + "name": "创建人", + "order": 5 + }, + { + "group": "", + "name": "业务提报说明", + "order": 6 + }, + { + "group": "", + "name": "业务提报审批", + "order": 7 + }, + { + "group": "", + "name": "业务提报方案", + "order": 8 + } + ], + "hidden_entries": [ + "查看设置", + "停用方案", + "编辑方案", + "复制方案" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增提报方案", + "path": "screenshots/21_智能薪酬/数据采集/02_业务提报__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/data/archives", + "name": "薪酬档案", + "group": "薪酬数据", + "full_path": "智能薪酬 / 薪酬数据 / 薪酬档案", + "url": "https://2haohr.com/salary/data/archives", + "keep": 1, + "description": "员工薪酬档案。", + "understanding": "计薪基础。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg", + "field_count": 13, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "部门", + "order": 1 + }, + { + "group": "", + "name": "证件类型", + "order": 2 + }, + { + "group": "", + "name": "证件号码", + "order": 3 + }, + { + "group": "", + "name": "岗位", + "order": 4 + }, + { + "group": "", + "name": "职级", + "order": 5 + }, + { + "group": "", + "name": "发薪组织", + "order": 6 + }, + { + "group": "", + "name": "入职日期", + "order": 7 + }, + { + "group": "", + "name": "纳税单位", + "order": 8 + }, + { + "group": "", + "name": "是否发薪", + "order": 9 + }, + { + "group": "", + "name": "最近调薪时间", + "order": 10 + }, + { + "group": "", + "name": "合计", + "order": 11 + }, + { + "group": "", + "name": "姓名", + "order": 12 + } + ], + "hidden_entries": [ + "导入停薪记录", + "导入报税信息", + "调薪", + "修改发薪组织", + "查看报税信息", + "查看调薪记录" + ], + "deep_shots": [], + "data_samples": [ + { + "file": "downloads/_任务中心/薪酬档案导出_20260717172740.xlsx", + "kind": "xlsx", + "size": 9113, + "sheet": "Sheet1", + "total_rows": 1, + "total_cols": 1, + "headers": [] + } + ] + }, + { + "node_key": "智能薪酬::/salary/data/deduction-confirmation", + "name": "减除费用确认", + "group": "薪酬数据", + "full_path": "智能薪酬 / 薪酬数据 / 减除费用确认", + "url": "https://2haohr.com/salary/data/deduction-confirmation", + "keep": 1, + "description": "个税减除费用确认。", + "understanding": "个税计算前置。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg", + "field_count": 8, + "fields": [ + { + "group": "", + "name": "工号", + "order": 0 + }, + { + "group": "", + "name": "部门", + "order": 1 + }, + { + "group": "", + "name": "计税年份", + "order": 2 + }, + { + "group": "", + "name": "纳税单位", + "order": 3 + }, + { + "group": "", + "name": "证件类型", + "order": 4 + }, + { + "group": "", + "name": "证件号码", + "order": 5 + }, + { + "group": "", + "name": "是否直接按照全年6万元扣除", + "order": 6 + }, + { + "group": "", + "name": "姓名", + "order": 7 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/data/special-deductions", + "name": "税前扣除", + "group": "薪酬数据", + "full_path": "智能薪酬 / 薪酬数据 / 税前扣除", + "url": "https://2haohr.com/salary/data/special-deductions", + "keep": 1, + "description": "专项附加扣除等税前扣除。", + "understanding": "个税合规。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "使用上月税前扣除", + "使用其他月份数据", + "导入新的税前扣除" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/data/tax", + "name": "个税记录", + "group": "薪酬数据", + "full_path": "智能薪酬 / 薪酬数据 / 个税记录", + "url": "https://2haohr.com/salary/data/tax", + "keep": 1, + "description": "个税计算记录。", + "understanding": "代扣代缴留痕。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg", + "field_count": 55, + "fields": [ + { + "group": "", + "name": "岗位", + "order": 0 + }, + { + "group": "", + "name": "工作性质", + "order": 1 + }, + { + "group": "", + "name": "工作状态", + "order": 2 + }, + { + "group": "", + "name": "证件类型", + "order": 3 + }, + { + "group": "", + "name": "证件号码", + "order": 4 + }, + { + "group": "", + "name": "纳税单位", + "order": 5 + }, + { + "group": "", + "name": "税款所属期起", + "order": 6 + }, + { + "group": "", + "name": "税款所属期止", + "order": 7 + }, + { + "group": "", + "name": "所得项目", + "order": 8 + }, + { + "group": "", + "name": "本期收入", + "order": 9 + }, + { + "group": "", + "name": "本期免税收入", + "order": 10 + }, + { + "group": "", + "name": "本期费用", + "order": 11 + }, + { + "group": "", + "name": "基本养老保险费", + "order": 12 + }, + { + "group": "", + "name": "基本医疗保险费", + "order": 13 + }, + { + "group": "", + "name": "失业保险费", + "order": 14 + }, + { + "group": "", + "name": "住房公积金", + "order": 15 + }, + { + "group": "", + "name": "企业(职业)年金", + "order": 16 + }, + { + "group": "", + "name": "商业健康保险", + "order": 17 + }, + { + "group": "", + "name": "税延养老保险", + "order": 18 + }, + { + "group": "", + "name": "其他", + "order": 19 + }, + { + "group": "", + "name": "准予扣除的捐赠额", + "order": 20 + }, + { + "group": "", + "name": "允许扣除的税费", + "order": 21 + }, + { + "group": "", + "name": "展业成本", + "order": 22 + }, + { + "group": "", + "name": "应纳税所得额", + "order": 23 + }, + { + "group": "", + "name": "减除费用", + "order": 24 + }, + { + "group": "", + "name": "减免税额", + "order": 25 + }, + { + "group": "", + "name": "累计收入额", + "order": 26 + }, + { + "group": "", + "name": "累计免税收入", + "order": 27 + }, + { + "group": "", + "name": "累计减除费用", + "order": 28 + }, + { + "group": "", + "name": "累计专项扣除", + "order": 29 + }, + { + "group": "", + "name": "累计子女教育", + "order": 30 + }, + { + "group": "", + "name": "累计继续教育", + "order": 31 + }, + { + "group": "", + "name": "累计住房贷款利息", + "order": 32 + }, + { + "group": "", + "name": "累计住房租金", + "order": 33 + }, + { + "group": "", + "name": "累计赡养老人", + "order": 34 + }, + { + "group": "", + "name": "累计3岁以下婴幼儿照护", + "order": 35 + }, + { + "group": "", + "name": "累计个人养老金", + "order": 36 + }, + { + "group": "", + "name": "累计其他扣除", + "order": 37 + }, + { + "group": "", + "name": "累计准予扣除的捐赠", + "order": 38 + }, + { + "group": "", + "name": "累计应纳税所得额", + "order": 39 + }, + { + "group": "", + "name": "税率", + "order": 40 + }, + { + "group": "", + "name": "速算扣除", + "order": 41 + }, + { + "group": "", + "name": "累计应纳税额", + "order": 42 + }, + { + "group": "", + "name": "累计减免税额", + "order": 43 + }, + { + "group": "", + "name": "累计应扣缴税额", + "order": 44 + }, + { + "group": "", + "name": "累计已预缴税额", + "order": 45 + }, + { + "group": "", + "name": "累计应补(退)税额", + "order": 46 + }, + { + "group": "", + "name": "备注", + "order": 47 + }, + { + "group": "", + "name": "公务交通费用", + "order": 48 + }, + { + "group": "", + "name": "通讯费用", + "order": 49 + }, + { + "group": "", + "name": "律师办案费用", + "order": 50 + }, + { + "group": "", + "name": "西藏附加减除费用", + "order": 51 + }, + { + "group": "", + "name": "姓名", + "order": 52 + }, + { + "group": "", + "name": "工号", + "order": 53 + }, + { + "group": "", + "name": "部门", + "order": 54 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/data/cost", + "name": "成本明细", + "group": "薪酬数据", + "full_path": "智能薪酬 / 薪酬数据 / 成本明细", + "url": "https://2haohr.com/salary/data/cost", + "keep": 1, + "description": "人力成本明细。", + "understanding": "成本核算。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg", + "field_count": 14, + "fields": [ + { + "group": "", + "name": "人数", + "order": 0 + }, + { + "group": "", + "name": "人力成本", + "order": 1 + }, + { + "group": "", + "name": "应发工资", + "order": 2 + }, + { + "group": "", + "name": "实发工资", + "order": 3 + }, + { + "group": "", + "name": "绩效奖金", + "order": 4 + }, + { + "group": "", + "name": "业绩提成", + "order": 5 + }, + { + "group": "", + "name": "加班工资", + "order": 6 + }, + { + "group": "", + "name": "固定工资", + "order": 7 + }, + { + "group": "", + "name": "企业社保", + "order": 8 + }, + { + "group": "", + "name": "企业公积金", + "order": 9 + }, + { + "group": "", + "name": "提成", + "order": 10 + }, + { + "group": "", + "name": "1.5W基础工资", + "order": 11 + }, + { + "group": "", + "name": "计算时间", + "order": 12 + }, + { + "group": "", + "name": "成本中心", + "order": 13 + } + ], + "hidden_entries": [ + "查看薪酬预算", + "成本分摊设置" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增成本中心", + "path": "screenshots/21_智能薪酬/薪酬数据/05_成本明细__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/report/statistics", + "name": "薪酬报表", + "group": "报表中心", + "full_path": "智能薪酬 / 报表中心 / 薪酬报表", + "url": "https://2haohr.com/salary/report/statistics", + "keep": 1, + "description": "智能薪酬报表。", + "understanding": "统计。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/report/analysis", + "name": "薪酬分析", + "group": "报表中心", + "full_path": "智能薪酬 / 报表中心 / 薪酬分析", + "url": "https://2haohr.com/salary/report/analysis", + "keep": 1, + "description": "智能薪酬分析。", + "understanding": "成本洞察。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "编辑图表", + "移除图表" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/setting/structure", + "name": "薪酬结构", + "group": "薪酬设置", + "full_path": "智能薪酬 / 薪酬设置 / 薪酬结构", + "url": "https://2haohr.com/salary/setting/structure", + "keep": 1, + "description": "薪酬结构(薪资项)配置。", + "understanding": "计薪规则基础。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg", + "field_count": 15, + "fields": [ + { + "group": "", + "name": "项目分组", + "order": 0 + }, + { + "group": "", + "name": "状态", + "order": 1 + }, + { + "group": "", + "name": "取值方式", + "order": 2 + }, + { + "group": "", + "name": "取值来源", + "order": 3 + }, + { + "group": "", + "name": "数据类型", + "order": 4 + }, + { + "group": "", + "name": "展示小数位数", + "order": 5 + }, + { + "group": "", + "name": "日期格式", + "order": 6 + }, + { + "group": "", + "name": "个税项目", + "order": 7 + }, + { + "group": "", + "name": "公式", + "order": 8 + }, + { + "group": "", + "name": "公式说明", + "order": 9 + }, + { + "group": "", + "name": "允许修改计算结果", + "order": 10 + }, + { + "group": "", + "name": "描述", + "order": 11 + }, + { + "group": "", + "name": "最近修改时间", + "order": 12 + }, + { + "group": "", + "name": "最近操作人", + "order": 13 + }, + { + "group": "", + "name": "薪酬项目名称", + "order": 14 + } + ], + "hidden_entries": [ + "单个新增", + "批量导入" + ], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/setting/company", + "name": "基础设置", + "group": "薪酬设置", + "full_path": "智能薪酬 / 薪酬设置 / 基础设置", + "url": "https://2haohr.com/salary/setting/company", + "keep": 1, + "description": "智能薪酬基础设置。", + "understanding": "公司级配置。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/setting/cost", + "name": "成本设置", + "group": "薪酬设置", + "full_path": "智能薪酬 / 薪酬设置 / 成本设置", + "url": "https://2haohr.com/salary/setting/cost", + "keep": 1, + "description": "成本核算规则设置。", + "understanding": "成本分摊配置。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [ + "导入成本中心", + "导出", + "排序", + "停用", + "删除" + ], + "deep_shots": [ + { + "kind": "add", + "kind_cn": "主操作弹窗/表单", + "label": "新增成本中心", + "path": "screenshots/21_智能薪酬/薪酬设置/03_成本设置__add.jpg" + } + ], + "data_samples": [] + }, + { + "node_key": "智能薪酬::/salary/setting/log", + "name": "操作记录", + "group": "薪酬设置", + "full_path": "智能薪酬 / 薪酬设置 / 操作记录", + "url": "https://2haohr.com/salary/setting/log", + "keep": 1, + "description": "智能薪酬模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "操作时间", + "order": 0 + }, + { + "group": "", + "name": "用户IP", + "order": 1 + }, + { + "group": "", + "name": "操作人", + "order": 2 + }, + { + "group": "", + "name": "所属模块", + "order": 3 + }, + { + "group": "", + "name": "操作内容", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "个税对接", + "page_count": 4, + "field_pages": 0, + "pages": [ + { + "node_key": "个税对接::/tax/reporting", + "name": "人员信息报送", + "group": "常规", + "full_path": "个税对接 / 常规 / 人员信息报送", + "url": "https://2haohr.com/tax/reporting", + "keep": 1, + "description": "向税务报送人员信息。", + "understanding": "个税申报前置。", + "review_note": "只显示该页面,不做判断。需要评估", + "screenshot": "screenshots/22_个税对接/常规/01_人员信息报送.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "个税对接::/tax/declaration", + "name": "个税申报", + "group": "常规", + "full_path": "个税对接 / 常规 / 个税申报", + "url": "https://2haohr.com/tax/declaration", + "keep": 1, + "description": "个人所得税申报。", + "understanding": "合规刚需。", + "review_note": "", + "screenshot": "screenshots/22_个税对接/常规/02_个税申报.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "个税对接::/tax/message", + "name": "纳税单位管理", + "group": "常规", + "full_path": "个税对接 / 常规 / 纳税单位管理", + "url": "https://2haohr.com/tax/message", + "keep": 1, + "description": "纳税主体单位管理。", + "understanding": "多主体申报。", + "review_note": "", + "screenshot": "screenshots/22_个税对接/常规/03_纳税单位管理.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "个税对接::/tax/log", + "name": "操作记录", + "group": "常规", + "full_path": "个税对接 / 常规 / 操作记录", + "url": "https://2haohr.com/tax/log", + "keep": 1, + "description": "个税对接模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/22_个税对接/常规/04_操作记录.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "AI员工助手", + "page_count": 5, + "field_pages": 3, + "pages": [ + { + "node_key": "AI员工助手::/ai-assistant/chat", + "name": "AI员工助手", + "group": "常规", + "full_path": "AI员工助手 / 常规 / AI员工助手", + "url": "https://2haohr.com/ai-assistant/chat", + "keep": 1, + "description": "面向员工的 AI 问答助手。", + "understanding": "降低 HR 答疑成本。", + "review_note": "重点开发,搭建企业知识库", + "screenshot": "screenshots/23_AI员工助手/常规/01_AI员工助手.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "AI员工助手::/ai-assistant/knowledge-management", + "name": "知识库管理", + "group": "常规", + "full_path": "AI员工助手 / 常规 / 知识库管理", + "url": "https://2haohr.com/ai-assistant/knowledge-management", + "keep": 1, + "description": "AI 助手知识库维护。", + "understanding": "决定回答质量。", + "review_note": "", + "screenshot": "screenshots/23_AI员工助手/常规/02_知识库管理.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "可见范围", + "order": 0 + }, + { + "group": "", + "name": "备注", + "order": 1 + }, + { + "group": "", + "name": "更新人", + "order": 2 + }, + { + "group": "", + "name": "更新时间", + "order": 3 + }, + { + "group": "", + "name": "知识库名称", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "AI员工助手::/ai-assistant/assistant-settings", + "name": "员工助手设置", + "group": "常规", + "full_path": "AI员工助手 / 常规 / 员工助手设置", + "url": "https://2haohr.com/ai-assistant/assistant-settings", + "keep": 1, + "description": "AI 助手行为设置。", + "understanding": "配置。", + "review_note": "", + "screenshot": "screenshots/23_AI员工助手/常规/03_员工助手设置.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "AI员工助手::/ai-assistant/data-stats/usage-situation", + "name": "总体使用情况", + "group": "数据统计", + "full_path": "AI员工助手 / 数据统计 / 总体使用情况", + "url": "https://2haohr.com/ai-assistant/data-stats/usage-situation", + "keep": 1, + "description": "AI 助手使用统计。", + "understanding": "效果度量。", + "review_note": "", + "screenshot": "screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg", + "field_count": 5, + "fields": [ + { + "group": "", + "name": "知识库名称", + "order": 0 + }, + { + "group": "", + "name": "命中次数", + "order": 1 + }, + { + "group": "", + "name": "姓名", + "order": 2 + }, + { + "group": "", + "name": "部门", + "order": 3 + }, + { + "group": "", + "name": "提问次数", + "order": 4 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + }, + { + "node_key": "AI员工助手::/ai-assistant/log", + "name": "操作记录", + "group": "数据统计", + "full_path": "AI员工助手 / 数据统计 / 操作记录", + "url": "https://2haohr.com/ai-assistant/log", + "keep": 1, + "description": "AI员工助手模块下「操作记录」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "", + "screenshot": "screenshots/23_AI员工助手/数据统计/02_操作记录.jpg", + "field_count": 4, + "fields": [ + { + "group": "", + "name": "操作时间", + "order": 0 + }, + { + "group": "", + "name": "用户IP", + "order": 1 + }, + { + "group": "", + "name": "更新人", + "order": 2 + }, + { + "group": "", + "name": "操作内容", + "order": 3 + } + ], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + }, + { + "module": "应用管理", + "page_count": 1, + "field_pages": 0, + "pages": [ + { + "node_key": "应用管理::/application-manage/application/list", + "name": "应用管理", + "group": "", + "full_path": "应用管理 / 应用管理", + "url": "https://2haohr.com/application-manage/application/list", + "keep": 1, + "description": "应用管理模块下「应用管理」相关功能页。", + "understanding": "映射自侧边栏菜单,待补充细化。", + "review_note": "编缉模块的启用", + "screenshot": "screenshots/24_应用管理/应用管理.jpg", + "field_count": 0, + "fields": [], + "hidden_entries": [], + "deep_shots": [], + "data_samples": [] + } + ] + } + ], + "approval_templates": [ + { + "category": "人事审批", + "name": "录用", + "provider": "", + "description": "适用于新员工录入申请,审批通过自动进入待入职" + }, + { + "category": "人事审批", + "name": "转正", + "provider": "", + "description": "适用于试用期员工申请转正,审批通过可自动成为正式员工" + }, + { + "category": "人事审批", + "name": "离职", + "provider": "", + "description": "适用于员工本人申请离职,审批通过自动进入待离职" + }, + { + "category": "人事审批", + "name": "调岗", + "provider": "", + "description": "适用于员工申请岗位调动、部门调动或晋升" + }, + { + "category": "人事审批", + "name": "转全职", + "provider": "", + "description": "适用于实习生、社会兼职人员申请转为全职员工" + }, + { + "category": "人事审批", + "name": "调薪", + "provider": "", + "description": "适用于部门负责人或HR为员工申请调薪,调薪审批只做记录,不参与薪酬计算" + }, + { + "category": "人事审批", + "name": "重新入职", + "provider": "", + "description": "适用于离职员工重新入职申请" + }, + { + "category": "人事审批", + "name": "劳动合同签订", + "provider": "", + "description": "适用于员工劳动合同的签订申请" + }, + { + "category": "人事审批", + "name": "招聘需求", + "provider": "", + "description": "若需要招聘新的人员,可发起招聘需求审批" + }, + { + "category": "人事审批", + "name": "奖惩", + "provider": "", + "description": "适用于HR或员工申请奖惩,可同步至奖惩记录" + }, + { + "category": "考勤审批", + "name": "调班", + "provider": "", + "description": "需要与他人换班,或自己不同日期间调班" + }, + { + "category": "考勤审批", + "name": "请假", + "provider": "", + "description": "若因个人原因无法出勤,可提交如事假、短期病假等审批" + }, + { + "category": "考勤审批", + "name": "外出", + "provider": "", + "description": "若外出拜访客户,无法到公司打卡考勤,可提交外出审批" + }, + { + "category": "考勤审批", + "name": "出差", + "provider": "", + "description": "若因公到外地出差,无法到公司打卡考勤,可提交出差审批" + }, + { + "category": "考勤审批", + "name": "加班", + "provider": "", + "description": "若因某些原因延长了工作时间,可提交加班审批" + }, + { + "category": "考勤审批", + "name": "补卡", + "provider": "", + "description": "若工作日忘记打卡,可自助进行补卡" + }, + { + "category": "考勤审批", + "name": "销请假", + "provider": "", + "description": "员工提前结束请假返回公司上班,可以申请销请假" + }, + { + "category": "考勤审批", + "name": "销外出", + "provider": "", + "description": "员工提前结束外出返回公司上班,可以申请销外出" + }, + { + "category": "考勤审批", + "name": "销出差", + "provider": "", + "description": "员工提前结束出差返回公司上班,可以申请销出差" + }, + { + "category": "薪酬审批", + "name": "入职定薪", + "provider": "", + "description": "适用于新员工入职定薪申请,审批通过后自动同步至薪酬" + }, + { + "category": "薪酬审批", + "name": "薪资调整", + "provider": "", + "description": "适用于员工调薪申请,根据设置,审批通过后自动同步至薪酬" + }, + { + "category": "薪酬审批", + "name": "离职停薪", + "provider": "", + "description": "适用于离职员工的停薪申请,根据设置,审批通过后自动为员工停薪" + }, + { + "category": "薪酬审批", + "name": "薪资发放", + "provider": "", + "description": "适用于HR发起薪资发放的审批,根据审批发起方式,审批通过后自动同步至薪酬" + }, + { + "category": "薪酬审批", + "name": "入职定薪", + "provider": "", + "description": "适用于新员工入职定薪申请,审批通过后自动同步至智能薪酬" + }, + { + "category": "薪酬审批", + "name": "薪资调整", + "provider": "", + "description": "适用于员工调薪申请,根据设置,审批通过后自动同步至智能薪酬" + }, + { + "category": "薪酬审批", + "name": "薪资发放", + "provider": "", + "description": "适用于HR发起薪资发放的审批,根据审批发起方式,审批通过后自动同步至智能薪酬" + }, + { + "category": "智能薪酬审批", + "name": "业务提报", + "provider": "", + "description": "适用于业务部门提报计时计件、佣金提成等业务数据,审批通过后自动同步至智能薪酬" + }, + { + "category": "智能薪酬审批", + "name": "转正调薪", + "provider": "由人事&智能薪酬提供", + "description": "适用于试用期员工申请转正,审批通过可成为正式员工并同步调薪数据至智能薪酬" + }, + { + "category": "智能薪酬审批", + "name": "调岗调薪", + "provider": "由人事&智能薪酬提供", + "description": "适用于员工申请岗位调动、部门调动或晋升,审批通过可添加异动记录并同步调薪数据至智能薪酬" + }, + { + "category": "智能薪酬审批", + "name": "转全职调薪", + "provider": "由人事&智能薪酬提供", + "description": "适用于实习生、社会兼职人员申请转为全职员工,审批通过可添加异动记录并同步调薪数据至智能薪酬" + }, + { + "category": "行政审批", + "name": "用车申请", + "provider": "", + "description": "适用于员工因公使用车辆的申请" + }, + { + "category": "行政审批", + "name": "用印申请", + "provider": "", + "description": "适用于使用公司印章的申请" + }, + { + "category": "行政审批", + "name": "物品领用", + "provider": "", + "description": "适用于物品领用申请" + }, + { + "category": "行政审批", + "name": "物品维修", + "provider": "", + "description": "适用于物品维修的申请" + }, + { + "category": "行政审批", + "name": "会议室预定", + "provider": "", + "description": "适用于会议室预定" + }, + { + "category": "行政审批", + "name": "报销", + "provider": "", + "description": "适用于公司报销审批" + }, + { + "category": "行政审批", + "name": "费用", + "provider": "", + "description": "适用于企业各种费用申请审批,包括:差旅费、交通费、办公费等" + }, + { + "category": "行政审批", + "name": "付款申请", + "provider": "", + "description": "适用于付款审批" + }, + { + "category": "行政审批", + "name": "采购", + "provider": "", + "description": "适用于企业办公或所需材料的采购申请" + }, + { + "category": "其他", + "name": "证明", + "provider": "", + "description": "适用于员工申请开具证明,包括收入证明、工作证明、离职证明" + }, + { + "category": "其他", + "name": "通用审批", + "provider": "", + "description": "适用于通用审批" + }, + { + "category": "其他", + "name": "立项申请", + "provider": "", + "description": "适用于企业项目立项的申请" + }, + { + "category": "其他", + "name": "资质使用", + "provider": "", + "description": "适用于企业资质证件的使用审批,包括:营业执照、组织机构代码证等" + }, + { + "category": "其他", + "name": "合同审批", + "provider": "", + "description": "适用于草拟合同以后的审批" + } + ] +} \ No newline at end of file diff --git a/docs/功能树-勾选.html b/docs/功能树-勾选.html new file mode 100644 index 0000000..46e7643 --- /dev/null +++ b/docs/功能树-勾选.html @@ -0,0 +1,138 @@ + + + + + +2号人事部 · 功能调研树(第一阶段·管理员勾选) + + + +
+

2号人事部 · 功能调研树 第一阶段 · 管理员勾选(勾选=保留,取消=删除)

+
共 24 个模块 / 172 个功能页。勾选后点【导出勾选结果】保存 JSON,用于生成第二阶段开发需求文档。
+
+ + + + + + + (选择自动保存到浏览器本地) + 保留 0 / 0 项 +
+
+
+
×
+ + + diff --git a/docs/审核.html b/docs/审核.html new file mode 100644 index 0000000..66212b0 --- /dev/null +++ b/docs/审核.html @@ -0,0 +1,469 @@ + + + + + +2号人事部 · 功能审核(一页一功能) + + + +
+
+ +

2号人事部 · 功能审核 一页一功能 · 决策实时写入数据库

+
+
已审 0/0 · 保留 0 · 删除 0
+ + +
+
+
+ +
+
+
点击图片可放大 · 长图可在框内滚动
+
+ + +
+
+ +
+ +
+
×
+
+
+

📎 导出样本

×
+
+
+
+
+
+

📊 预览

×
+
+
+
+
+
+ + + diff --git a/docs/开发需求文档.md b/docs/开发需求文档.md new file mode 100644 index 0000000..c5c81c3 --- /dev/null +++ b/docs/开发需求文档.md @@ -0,0 +1,1588 @@ +# 2号人事部 · 功能仿写开发需求文档 + +> **数据来源**:https://2haohr.com 全站功能调研 +> +> **调研规模**:24 个一级模块 / 172 个功能页 +> +> **配套资产**:整页界面截图 `screenshots/`|真实导出数据样本 `downloads/`(51 个 Excel)|交互式审核+样本下载界面 `http://localhost:8777` +> +> **生成时间**:2026-07-17 23:10 + + +本文档用于**仿写开发**:每个功能页含【功能释义】【开发提示】【界面参考截图】,并在模块末尾附**真实导出数据的字段清单**(直接来自线上导出的 Excel 表头),可据此设计数据库表结构与列表字段。 + + +## 一、模块总览 + +| # | 模块 | 功能页数 | 抓取的数据样本 | +|---|------|:---:|:---:| +| 1 | 工作台 | 1 | — | +| 2 | 人事 | 18 | 35 个 | +| 3 | 组织 | 8 | — | +| 4 | 招聘 | 15 | 10 个 | +| 5 | 考勤假期 | 16 | 2 个 | +| 6 | 薪酬 | 9 | 1 个 | +| 7 | 审批 | 6 | — | +| 8 | 培训学习 | 15 | — | +| 9 | 绩效 | 14 | — | +| 10 | 社保公积金 | 6 | — | +| 11 | 行政管理 | 10 | — | +| 12 | 电子合同 | 8 | — | +| 13 | 背景调查 | 1 | — | +| 14 | 人才测评 | 1 | — | +| 15 | 员工福利 | 4 | — | +| 16 | 人事仪表盘 | 2 | — | +| 17 | 第三方对接 | 5 | — | +| 18 | 培训商城 | 1 | — | +| 19 | 短信发送 | 2 | — | +| 20 | 电子工资条 | 5 | — | +| 21 | 智能薪酬 | 15 | — | +| 22 | 个税对接 | 4 | — | +| 23 | AI员工助手 | 5 | — | +| 24 | 应用管理 | 1 | — | + +## 二、模块功能明细 + + +### 1. 工作台 + + +**工作台首页** +- `URL` https://2haohr.com/desk +- **功能释义**:工作台模块下「工作台首页」相关功能页。 +- **界面参考**:`screenshots/01_工作台/工作台首页.jpg` + + +### 2. 人事 + + +#### ▸ 员工管理 + + +**员工花名册** +- `URL` https://2haohr.com/personnel/employee/roster +- **功能释义**:全体员工的核心名册列表,支持按部门/状态筛选、字段自定义、批量导入导出。 +- **开发提示**:员工主数据入口,几乎所有人事操作从此发起;字段可配置是关键需求。 +- **界面参考**:`screenshots/02_人事/员工管理/01_员工花名册.jpg` + + +**员工档案库** +- `URL` https://2haohr.com/personnel/employee/archive +- **功能释义**:员工完整电子档案(证件/合同/学历/家庭等)的集中存储与调阅。 +- **开发提示**:360°档案,强调附件管理与字段完整率统计。 +- **界面参考**:`screenshots/02_人事/员工管理/02_员工档案库.jpg` + + +**统计分析** +- `URL` https://2haohr.com/personnel/employee/statistics +- **功能释义**:按维度对在职/结构/异动等人事数据的图表统计分析。 +- **开发提示**:偏 BI 图表,服务人事盘点。 +- **界面参考**:`screenshots/02_人事/员工管理/03_统计分析.jpg` + + +**人事报表** +- `URL` https://2haohr.com/personnel/employee/personnel-report +- **功能释义**:各类标准人事报表(在职、异动、合同到期等)的生成与导出。 +- **开发提示**:满足周期性上报需求,需支持自定义与导出。 +- **界面参考**:`screenshots/02_人事/员工管理/04_人事报表.jpg` + + +**万能人事表格** +- `URL` https://2haohr.com/personnel/employee/personnel-form +- **功能释义**:自定义字段与筛选组合生成任意人事数据表格。 +- **开发提示**:灵活取数工具,降低对开发出报表的依赖。 +- **界面参考**:`screenshots/02_人事/员工管理/05_万能人事表格.jpg` + + +**人事动态** +- `URL` https://2haohr.com/personnel/employee/dynamic +- **功能释义**:入职/转正/离职/生日等人事事件的动态时间线。 +- **开发提示**:事件流,可驱动关怀通知与提醒。 +- **界面参考**:`screenshots/02_人事/员工管理/06_人事动态.jpg` + + +#### ▸ 员工关系 + + +**入职管理** +- `URL` https://2haohr.com/personnel/relation/enrollment +- **功能释义**:待入职/入职办理流程,含入职登记、资料收集与开通账号。 +- **开发提示**:与招聘‘已入职’衔接;支持员工自助填写(AI 辅助)。 +- **界面参考**:`screenshots/02_人事/员工关系/01_入职管理.jpg` + + +**转正管理** +- `URL` https://2haohr.com/personnel/relation/probation +- **功能释义**:试用期到期提醒与转正申请/审批办理。 +- **开发提示**:与绩效试用期考核联动。 +- **界面参考**:`screenshots/02_人事/员工关系/02_转正管理.jpg` + + +**离职管理** +- `URL` https://2haohr.com/personnel/relation/departure +- **功能释义**:离职申请、离职办理、交接与离职档案。 +- **开发提示**:涉及权限回收、薪酬结算、社保停缴等联动。 +- **界面参考**:`screenshots/02_人事/员工关系/03_离职管理.jpg` + + +**人事异动** +- `URL` https://2haohr.com/personnel/relation/unusual-action +- **功能释义**:部门/岗位/职级调动等异动记录与审批。 +- **开发提示**:组织变动留痕,影响薪酬与汇报关系。 +- **界面参考**:`screenshots/02_人事/员工关系/04_人事异动.jpg` + + +**关怀通知** +- `URL` https://2haohr.com/personnel/relation/care +- **功能释义**:生日/周年/证件到期等关怀提醒与自动通知。 +- **开发提示**:员工体验运营,可配置触发规则与文案。 +- **界面参考**:`screenshots/02_人事/员工关系/05_关怀通知.jpg` + + +**合同管理** +- `URL` https://2haohr.com/personnel/relation/contract +- **功能释义**:劳动合同签订、续签、到期提醒与合同台账。 +- **开发提示**:与电子合同模块可打通;合同到期预警是刚需。 +- **界面参考**:`screenshots/02_人事/员工关系/06_合同管理.jpg` + + +**沟通记录** +- `URL` https://2haohr.com/personnel/relation/talk +- **功能释义**:HR 与员工的沟通/谈话记录留存。 +- **开发提示**:员工关系管理留痕,支撑争议处理。 +- **界面参考**:`screenshots/02_人事/员工关系/07_沟通记录.jpg` + + +**任职记录** +- `URL` https://2haohr.com/personnel/relation/office +- **功能释义**:员工历史任职(岗位/部门)变化记录。 +- **开发提示**:履历追溯,来源于人事异动。 +- **界面参考**:`screenshots/02_人事/员工关系/08_任职记录.jpg` + + +**培训经历** +- `URL` https://2haohr.com/personnel/relation/train +- **功能释义**:员工参加培训的经历记录。 +- **开发提示**:与培训模块数据互通。 +- **界面参考**:`screenshots/02_人事/员工关系/09_培训经历.jpg` + + +**奖惩记录** +- `URL` https://2haohr.com/personnel/relation/award +- **功能释义**:员工奖励与处罚记录管理。 +- **开发提示**:影响绩效与晋升评估。 +- **界面参考**:`screenshots/02_人事/员工关系/10_奖惩记录.jpg` + + +**考察期管理** +- `URL` https://2haohr.com/personnel/relation/inspect +- **功能释义**:特定员工考察期的设置与跟踪。 +- **开发提示**:试用/观察期管理的补充。 +- **界面参考**:`screenshots/02_人事/员工关系/11_考察期管理.jpg` + + +**实习生管理** +- `URL` https://2haohr.com/personnel/relation/internship +- **功能释义**:实习生专项档案与转正管理。 +- **开发提示**:针对实习用工的差异化流程。 +- **界面参考**:`screenshots/02_人事/员工关系/12_实习生管理.jpg` + + +> **📎 本模块真实导出数据样本(35 个)与字段:** + +> - **员工任职记录-2026071722354083149191**(16 字段):姓名、工号、部门、岗位、工作性质、任职开始日期、任职结束日期、曾任职部门、曾汇报上级、曾任职岗位、任职职级、任职合同公司、任职工作地点、任职备注、修改人、修改时间 +> - **员工培训经历-2026071722370355878239**(14 字段):姓名、工号、部门、岗位、工作性质、培训名称、培训开始时间、培训结束时间、培训时间、培训总学时、培训证书名称、培训备注、修改人、修改时间 +> - **员工异动记录表_20260717211551**(29 字段):姓名、工号、部门、岗位、工作性质、异动类型、异动原因、异动日期、异动详情、原部门、异动后部门、原岗位、异动后岗位、原职务、异动后职务、原职级、异动后职级、原汇报上级、异动后汇报上级、原工作地点、异动后工作地点、原合同公司、异动后合同公司、异动备注、审批单号、审批状态、修改人、修改时间、异动状态 +> - **员工谈话记录-2026-07-17 22_37_52**(12 字段):姓名、工号、部门、岗位、工作性质、员工状态、沟通类型、沟通日期、沟通负责人、沟通状态、修改人、修改时间 +> - **实习生情况记录表-20260717223640**(14 字段):姓名、工号、部门、岗位、年龄、入职日期、实习期、实习到期日、实习内容、实习导师、实习备注、实习评价、转全职审批编号、转全职审批状态 +> - **导出员工奖惩记录表-2026071721144322175195**(20 字段):姓名、工号、部门、岗位、工作性质、奖励/惩罚、奖惩类别、奖惩日期、奖惩内容、奖惩金额、奖惩原因、奖惩备注、奖惩所在部门、奖惩所在岗位、是否已撤销、撤销日期、撤销原因、撤销备注、修改人、修改时间 +> - **已签订合同人员列表_20260717_211338**(22 字段):姓名、工号、部门、岗位、入职日期、工作性质、员工状态、合同公司、工作地点、合同编号、合同类型、合同状态、合同期限、合同开始日期、合同结束日期、合同签约公司、合同签订日期、合同签订次数、审批单号、审批状态、修改人、修改时间 +> - **待入职人员列表-20260717211138**(16 字段):姓名、入职部门、入职岗位、预计入职日期、手机号码、入职登记、背景调查、人才测评、个人邮箱、添加人、汇报上级、offer状态、录用审批编号、录用审批状态、修改人、修改时间 +> - **待离职员工列表_20260717211236**(13 字段):姓名、工号、部门、岗位、工作性质、员工状态、入职日期、司龄、离职日期、离职类型、离职原因、离职审批编号、离职审批状态 +> - **试用期员工列表_20260717223514**(11 字段):姓名、工号、部门、岗位、工作性质、入职日期、试用期、转正日期、司龄、转正审批编号、转正审批状态 +> - **各部门人事档案统计-20260717185710**(5 字段):部门、员工重要信息完整率、人事材料存档率、在职人数(人)、人数占比 +> - **员工住址信息表-20260717185615**(6 字段):姓名、工号、部门、岗位、所在城市、现居住地 +> - **员工入离职情况统计表-20260717185744**(6 字段):月份、月初在职人数、当月入职人数、当月离职人数、当月入职率、当月离职率 +> - **员工劳动合同签订情况-20260717185601**(14 字段):合同类型、合同备注、姓名、工号、部门、岗位、合同期限、合同开始日期、合同结束日期、合同签订日期、合同状态、性别、证件类型、证件号码 +> - **员工学历统计表-20260717185730**(3 字段):学历、人数、比例 +> - **员工工作年限信息表-20260717185608**(12 字段):姓名、工号、部门、岗位、证件类型、证件号码、首次参加工作时间、工龄、工龄(天数)、入职日期、司龄、司龄(天数) +> - **员工工资卡信息表-20260717185758**(7 字段):姓名、工号、部门、岗位、工资卡卡号、工资卡开户城市、工资卡开户行 +> - **员工年龄段统计表-20260717185737**(3 字段):年龄段、人数、比例 +> - **员工生日信息表-20260717185622**(6 字段):姓名、性别、生日、工号、部门、岗位 +> - **员工社保公积金账号信息表-20260717185804**(6 字段):姓名、工号、部门、岗位、个人社保账号、个人公积金账号 +> - **员工证件信息表-20260717185751**(7 字段):姓名、工号、部门、岗位、证件类型、证件号码、健康证有效期 +> - **员工通讯录-20260717185554**(10 字段):姓名、工号、部门、岗位、手机号码、个人邮箱、工作电话、QQ号、微信号、分机号 +> - **员工通讯录-20260717185655**(10 字段):姓名、工号、部门、岗位、手机号码、个人邮箱、工作电话、QQ号、微信号、分机号 +> - **在职员工花名册-20260717185522**(59 字段):姓名、生日、性别、年龄、证件类型、证件号码、出生日期、是否已婚、生育情况、民族、政治面貌、户籍地址、户口性质、籍贯、户籍城市、首次参加工作时间、别名、健康证有效期、英文名、血型、服装尺寸、工号、部门、职务、岗位类别、岗位、职等、职级编号、所在城市、工作地点、合同公司、考勤编号、招聘渠道、工时制度、员工状态、工作性质、入职日期、试用期、转正日期、司龄开始日期 … +> - **在职员工花名册-20260717185644**(59 字段):姓名、性别、生日、年龄、证件类型、证件号码、出生日期、是否已婚、生育情况、民族、政治面貌、户籍地址、户口性质、籍贯、户籍城市、首次参加工作时间、别名、健康证有效期、英文名、血型、服装尺寸、工号、部门、职务、岗位类别、岗位、职等、职级编号、所在城市、工作地点、合同公司、考勤编号、招聘渠道、工时制度、员工状态、工作性质、入职日期、试用期、转正日期、司龄开始日期 … +> - **在职员工花名册(1)-20260717185544**(59 字段):姓名、性别、生日、年龄、证件类型、证件号码、出生日期、是否已婚、生育情况、民族、政治面貌、户籍地址、户口性质、籍贯、户籍城市、首次参加工作时间、别名、健康证有效期、英文名、血型、服装尺寸、工号、部门、职务、岗位类别、岗位、职等、职级编号、所在城市、工作地点、合同公司、考勤编号、招聘渠道、工时制度、员工状态、工作性质、入职日期、试用期、转正日期、司龄开始日期 … +> - **在职员工花名册(2)-20260717185533**(59 字段):姓名、性别、生日、年龄、证件类型、证件号码、出生日期、是否已婚、生育情况、民族、政治面貌、户籍地址、户口性质、籍贯、户籍城市、首次参加工作时间、别名、健康证有效期、英文名、血型、服装尺寸、工号、部门、职务、岗位类别、岗位、职等、职级编号、所在城市、工作地点、合同公司、考勤编号、招聘渠道、工时制度、员工状态、工作性质、入职日期、试用期、转正日期、司龄开始日期 … +> - **待入职人员流失率统计表-20260717185820**(5 字段):月份、当月放弃入职人数、当月离职人数、当月入职人数、待入职人员流失率 +> - **测试账号-员工个人证件照存档情况表-20260717185825**(8 字段):姓名、工号、部门、岗位、汇报上级、手机号码、工作邮箱、是否有证件照 +> - **测试账号_123-20260717185637**(字段未能解析,见文件) +> - **测试账号_月度人员进出一览表_20260717185702**(6 字段):总计(人)、新增(人)、离职(人)、总计(人)、新增(人)、离职(人) +> - **测试账号_月度人员进出一览表_20260717185723**(6 字段):总计(人)、新增(人)、离职(人)、总计(人)、新增(人)、离职(人) +> - **测试账号_月度人员进出明细表_20260717185716**(20 字段):月份、姓名、性别、入职日期、工作性质、部门、职务、岗位、职等、职级、工号、证件类型、证件号码、户籍城市、户口性质、手机号码、个人社保账号、个人公积金账号、工资卡开户行、工资卡卡号 +> - **测试账号企业-各部门离职情况表**(51 字段):部门名称、计划编制人数、月初人数、新招人数、调入人数、离职人数、调出人数、月末人数、离职率、家庭原因人数、身体原因人数、薪资原因人数、交通不便人数、工作压力人数、管理问题人数、无晋升机会人数、职业规划人数、合同到期放弃续签人数、其他个人原因人数、自动离职人数、不能胜任工作人数、回家照顾家人人数、个人创业人数、回家乡发展人数、不认同企业文化人数、学习深造人数、回家生小孩人数、试用期劝退人数、体检不合格人数、入职资料有问题人数、背景调查不通过人数、自离(不计薪资)人数、试用期内辞退人数、违反公司条例人数、组织调整/裁员人数、绩效不达标辞退人数、合同到期不续签人数、其他原因被动离职人数、严重违规违纪人数、造成重大损害人数 … +> - **离职员工信息表-20260717185628**(16 字段):姓名、首次参加工作时间、工龄、工号、部门、岗位、员工状态、工作性质、入职日期、司龄、离职日期、离职原因、离职原因说明、离职备注、离职去向、是否试用期内离职 + + +### 3. 组织 + + +#### ▸ 组织架构 + + +**组织管理** +- `URL` https://2haohr.com/org/dept/manage/home +- **功能释义**:部门树的增删改与部门负责人、编制等管理。 +- **开发提示**:组织主数据根节点,权限与审批的部门维度基础。 +- **界面参考**:`screenshots/03_组织/组织架构/01_组织管理.jpg` + + +**架构图** +- `URL` https://2haohr.com/org/dept/architecture +- **功能释义**:可视化组织架构图展示与调整。 +- **开发提示**:直观呈现汇报关系,支持导出。 +- **界面参考**:`screenshots/03_组织/组织架构/02_架构图.jpg` + + +**工作地点** +- `URL` https://2haohr.com/org/dept/work-place +- **功能释义**:企业办公/工作地点的维护。 +- **开发提示**:关联考勤打卡范围与员工工作城市。 +- **界面参考**:`screenshots/03_组织/组织架构/03_工作地点.jpg` + + +#### ▸ 岗位管理 + + +**岗位管理** +- `URL` https://2haohr.com/org/job/job-management +- **功能释义**:岗位设置、岗位职责与编制管理。 +- **开发提示**:岗位是招聘/薪酬/绩效的归属维度。 +- **界面参考**:`screenshots/03_组织/岗位管理/01_岗位管理.jpg` + + +**职务管理** +- `URL` https://2haohr.com/org/job-system/title +- **功能释义**:职务序列与职务信息管理。 +- **开发提示**:与职级配合构成职级体系。 +- **界面参考**:`screenshots/03_组织/岗位管理/02_职务管理.jpg` + + +**员工标签** +- `URL` https://2haohr.com/org/tag/emp-tags +- **功能释义**:为员工打自定义标签用于分组/筛选。 +- **开发提示**:灵活分群,服务精细化运营与权限。 +- **界面参考**:`screenshots/03_组织/岗位管理/03_员工标签.jpg` + + +**职级管理** +- `URL` https://2haohr.com/org/rank +- **功能释义**:职级/职等体系维护。 +- **开发提示**:薪酬带宽与晋升通道的基础。 +- **界面参考**:`screenshots/03_组织/岗位管理/04_职级管理.jpg` + + +**组织报表** +- `URL` https://2haohr.com/org/org-forms +- **功能释义**:组织维度(编制/人数/结构)的报表。 +- **开发提示**:支持组织盘点。 +- **界面参考**:`screenshots/03_组织/岗位管理/05_组织报表.jpg` + + +### 4. 招聘 + + +#### ▸ 常规 + + +**概览** +- `URL` https://2haohr.com/recruitment/overview +- **功能释义**:招聘整体数据概览(职位/候选人/面试等看板)。 +- **开发提示**:招聘经理入口页。 +- **界面参考**:`screenshots/04_招聘/常规/01_概览.jpg` + + +#### ▸ 候选人 + + +**招聘中** +- `URL` https://2haohr.com/recruitment/candidate/recruiting/list +- **功能释义**:处于招聘流程中的候选人列表与阶段管理。 +- **开发提示**:ATS 核心看板,支持阶段流转。 +- **界面参考**:`screenshots/04_招聘/候选人/01_招聘中.jpg` + + +**已入职** +- `URL` https://2haohr.com/recruitment/candidate/employed/list +- **功能释义**:已录用入职的候选人。 +- **开发提示**:与人事入职管理衔接。 +- **界面参考**:`screenshots/04_招聘/候选人/02_已入职.jpg` + + +**已淘汰** +- `URL` https://2haohr.com/recruitment/candidate/eliminated/list +- **功能释义**:被淘汰候选人归档。 +- **开发提示**:复用人才库,支持再激活。 +- **界面参考**:`screenshots/04_招聘/候选人/03_已淘汰.jpg` + + +**招聘职位** +- `URL` https://2haohr.com/recruitment/jobs +- **功能释义**:招聘岗位(JD)的发布与管理。 +- **开发提示**:对接招聘门户与渠道分发。 +- **界面参考**:`screenshots/04_招聘/候选人/04_招聘职位.jpg` + + +**招聘门户** +- `URL` https://2haohr.com/recruitment/wechat +- **功能释义**:企业招聘官网/微信招聘门户配置。 +- **开发提示**:候选人投递入口,支持自定义。 +- **界面参考**:`screenshots/04_招聘/候选人/05_招聘门户.jpg` + + +**面试日程** +- `URL` https://2haohr.com/recruitment/interviews +- **功能释义**:面试安排、通知与面试评价。 +- **开发提示**:支持面试官协同与日程提醒。 +- **界面参考**:`screenshots/04_招聘/候选人/06_面试日程.jpg` + + +**人才库** +- `URL` https://2haohr.com/recruitment/talent +- **功能释义**:企业人才储备库。 +- **开发提示**:沉淀历史候选人,降低复招成本。 +- **界面参考**:`screenshots/04_招聘/候选人/07_人才库.jpg` + + +#### ▸ 统计分析 + + +**招聘报表** +- `URL` https://2haohr.com/recruitment/stats/report +- **功能释义**:招聘漏斗/周期/渠道效果报表。 +- **开发提示**:衡量招聘效率。 +- **界面参考**:`screenshots/04_招聘/统计分析/01_招聘报表.jpg` + + +**招聘分析** +- `URL` https://2haohr.com/recruitment/stats/analysis +- **功能释义**:招聘数据多维分析。 +- **开发提示**:优化招聘策略。 +- **界面参考**:`screenshots/04_招聘/统计分析/02_招聘分析.jpg` + + +#### ▸ 设置 + + +**招聘团队** +- `URL` https://2haohr.com/recruitment/settings/team +- **功能释义**:招聘协作团队与角色权限设置。 +- **开发提示**:多角色协同招聘。 +- **界面参考**:`screenshots/04_招聘/设置/01_招聘团队.jpg` + + +**招聘工具** +- `URL` https://2haohr.com/recruitment/settings/tools +- **功能释义**:招聘相关工具(如筛选/AI)配置。 +- **开发提示**:提效工具集。 +- **界面参考**:`screenshots/04_招聘/设置/02_招聘工具.jpg` + + +**招聘渠道** +- `URL` https://2haohr.com/recruitment/settings/channels +- **功能释义**:招聘发布渠道与聚合配置。 +- **开发提示**:对接外部招聘网站。 +- **界面参考**:`screenshots/04_招聘/设置/03_招聘渠道.jpg` + + +**模板设置** +- `URL` https://2haohr.com/recruitment/settings/templates +- **功能释义**:招聘环节的邮件/短信/评价模板。 +- **开发提示**:标准化沟通。 +- **界面参考**:`screenshots/04_招聘/设置/04_模板设置.jpg` + + +**更多设置** +- `URL` https://2haohr.com/recruitment/settings/others +- **功能释义**:招聘模块其它设置项。 +- **开发提示**:杂项配置。 +- **界面参考**:`screenshots/04_招聘/设置/05_更多设置.jpg` + + +> **📎 本模块真实导出数据样本(10 个)与字段:** + +> - **Offer记录表**(13 字段):姓名、手机号码、招聘职位、关联岗位、候选人状态、入职部门、入职关联岗位、入职日期、Offer状态、候选人是否阅读、Offer有效期、Offer发送时间、Offer发送人 +> - **候选人Offer等待期统计表**(3 字段):等待期、人数、占比 +> - **候选人淘汰原因统计表**(8 字段):人数、贡献率、场数、贡献率、人数、贡献率、人数、贡献率 +> - **候选人面试等待期统计表**(12 字段):人数、占比、人数、占比、场数、占比、场数、占比、人数、占比、人数、占比 +> - **招聘工作量统计表**(4 字段):淘汰原因、人数、占比、累计占比 +> - **招聘趋势统计表**(3 字段):Offer等待期、人数、占比 +> - **招聘转化率统计表**(5 字段):用人部门、招聘人数、准时到岗人数、准时达成率、实际到岗日期 +> - **招聘进度统计表**(5 字段):用人部门、招聘人数、准时到岗人数、准时达成率、实际到岗日期 +> - **渠道贡献率统计表**(12 字段):人数、通过率、人数、安排面试率、人数、到面率、人数、通过率、人数、录用率、人数、到岗率 +> - **面试记录表**(5 字段):时间、新增候选人、安排面试、发offer、到岗 + + +### 5. 考勤假期 + + +#### ▸ 考勤统计 + + +**每日考勤** +- `URL` https://2haohr.com/attendance/stat/daily +- **功能释义**:按日展示全员打卡与异常。 +- **开发提示**:考勤日常监控入口。 +- **界面参考**:`screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg` + + +**月考勤表** +- `URL` https://2haohr.com/attendance/stat/monthly +- **功能释义**:按月汇总的考勤统计表。 +- **开发提示**:薪酬核算的考勤依据。 +- **界面参考**:`screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg` + + +**明细记录** +- `URL` https://2haohr.com/attendance/stat/records +- **功能释义**:原始打卡明细记录查询。 +- **开发提示**:异常核查与申诉依据。 +- **界面参考**:`screenshots/05_考勤假期/考勤统计/03_明细记录.jpg` + + +**考勤报表** +- `URL` https://2haohr.com/attendance/stat/report +- **功能释义**:考勤假期模块下「考勤报表」相关功能页。 +- **界面参考**:`screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg` + + +**字段管理** +- `URL` https://2haohr.com/attendance/stat/field-manage +- **功能释义**:考勤表字段自定义。 +- **开发提示**:适配企业统计口径。 +- **界面参考**:`screenshots/05_考勤假期/考勤统计/05_字段管理.jpg` + + +**考勤确认** +- `URL` https://2haohr.com/attendance/confirmation +- **功能释义**:月末考勤结果确认锁定。 +- **开发提示**:确认后进入薪酬核算。 +- **界面参考**:`screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg` + + +#### ▸ 考勤管理 + + +**考勤分组** +- `URL` https://2haohr.com/attendance/work/schedule +- **功能释义**:按人群划分考勤规则分组。 +- **开发提示**:不同班制人群差异化管理。 +- **界面参考**:`screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg` + + +**排班管理** +- `URL` https://2haohr.com/attendance/work/roster +- **功能释义**:排班表编制与发布。 +- **开发提示**:复杂班制的核心,支持轮班。 +- **界面参考**:`screenshots/05_考勤假期/考勤管理/02_排班管理.jpg` + + +**考勤规则** +- `URL` https://2haohr.com/attendance/work/rules +- **功能释义**:上下班/加班/迟到等规则配置。 +- **开发提示**:考勤计算引擎的规则中心。 +- **界面参考**:`screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg` + + +**打卡方式** +- `URL` https://2haohr.com/attendance/work/mode +- **功能释义**:GPS/WiFi/人脸等打卡方式配置。 +- **开发提示**:决定打卡合规与防作弊。 +- **界面参考**:`screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg` + + +**考勤设置** +- `URL` https://2haohr.com/attendance/work/settings +- **功能释义**:考勤模块的其它设置。 +- **开发提示**:杂项配置。 +- **界面参考**:`screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg` + + +#### ▸ 假期管理 + + +**休假一览** +- `URL` https://2haohr.com/attendance/holiday/leaveRecords +- **功能释义**:全员请假记录总览。 +- **开发提示**:假期使用监控。 +- **界面参考**:`screenshots/05_考勤假期/假期管理/01_休假一览.jpg` + + +**手动调整** +- `URL` https://2haohr.com/attendance/holiday/adjust +- **功能释义**:手动调整假期余额/记录。 +- **开发提示**:异常修正入口。 +- **界面参考**:`screenshots/05_考勤假期/假期管理/02_手动调整.jpg` + + +**假期余额** +- `URL` https://2haohr.com/attendance/holiday/balance +- **功能释义**:各员工各类假期余额。 +- **开发提示**:请假审批的额度依据。 +- **界面参考**:`screenshots/05_考勤假期/假期管理/03_假期余额.jpg` + + +**假期方案** +- `URL` https://2haohr.com/attendance/holiday/rules +- **功能释义**:年假/事病假等假期规则方案。 +- **开发提示**:假期计算的规则中心。 +- **界面参考**:`screenshots/05_考勤假期/假期管理/04_假期方案.jpg` + + +**假期设置** +- `URL` https://2haohr.com/attendance/holiday/settings +- **功能释义**:假期模块其它设置。 +- **开发提示**:杂项配置。 +- **界面参考**:`screenshots/05_考勤假期/假期管理/05_假期设置.jpg` + + +> **📎 本模块真实导出数据样本(2 个)与字段:** + +> - **2026年7月17日考勤明细**(20 字段):姓名、工号、部门、岗位、班次、打卡时间、第一段上班、第一段下班、第二段上班、第二段下班、第三段上班、第三段下班、迟到(分钟)、早退(分钟)、缺卡(次数)、旷工(天)、请假(小时)、加班(小时)、外出(小时)、出差(小时) +> - **打卡记录表-测试账号**(12 字段):序号、姓名、工号、部门、岗位、上班日期、班次、打卡时间、打卡来源、打卡设备、打卡地点、备注 + + +### 6. 薪酬 + + +#### ▸ 薪酬管理 + + +**月工资表** +- `URL` https://2haohr.com/payroll/salary/monthly +- **功能释义**:按月生成的工资核算表。 +- **开发提示**:薪酬核算主表,支持公式与批量。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/01_月工资表.jpg` + + +**工资发放** +- `URL` https://2haohr.com/payroll/salary/payoff +- **功能释义**:工资发放确认与银行代发。 +- **开发提示**:对接银行代发,资金安全关键。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/02_工资发放.jpg` + + +**员工薪资** +- `URL` https://2haohr.com/payroll/salary/profiles +- **功能释义**:员工薪资档案(基本工资/结构)。 +- **开发提示**:计薪基础数据。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg` + + +**薪酬报表** +- `URL` https://2haohr.com/payroll/salary/report +- **功能释义**:薪酬相关报表。 +- **开发提示**:成本与发放统计。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg` + + +**薪酬分析** +- `URL` https://2haohr.com/payroll/salary/statistics +- **功能释义**:薪酬多维分析。 +- **开发提示**:人力成本洞察。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg` + + +**计薪规则** +- `URL` https://2haohr.com/payroll/salary/rule +- **功能释义**:计薪周期与规则配置。 +- **开发提示**:薪酬引擎规则。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg` + + +**薪酬设置** +- `URL` https://2haohr.com/payroll/salary/settings +- **功能释义**:薪酬模块设置。 +- **开发提示**:结构/权限配置。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg` + + +**年终奖计算** +- `URL` https://2haohr.com/payroll/salary/bonus +- **功能释义**:年终奖专项计税计算。 +- **开发提示**:年度一次性奖金个税处理。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg` + + +**发送工资条** +- `URL` https://2haohr.com/payslip/home +- **功能释义**:发送电子工资条(跳转电子工资条模块)。 +- **开发提示**:与电子工资条模块共用。 +- **界面参考**:`screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg` + + +> **📎 本模块真实导出数据样本(1 个)与字段:** + +> - **工资档案信息表-测试账号**(7 字段):基本信息、试用期基本工资、基本工资、绩效工资、奖金、提成工资、职称工资 + + +### 7. 审批 + + +#### ▸ 常规 + + +**审批表单** +- `URL` https://2haohr.com/approval/form/list +- **功能释义**:各类审批单据的发起与列表。 +- **开发提示**:通用审批入口。 +- **界面参考**:`screenshots/07_审批/常规/01_审批表单.jpg` + + +**审批模板库** +- `URL` https://2haohr.com/approval/library/list +- **功能释义**:预置审批流程模板。 +- **开发提示**:快速套用标准流程。 +- **界面参考**:`screenshots/07_审批/常规/02_审批模板库.jpg` + + +**审批代理** +- `URL` https://2haohr.com/approval/agent/list +- **功能释义**:审批人不在时的代理设置。 +- **开发提示**:保障流程不中断。 +- **界面参考**:`screenshots/07_审批/常规/03_审批代理.jpg` + + +**审批记录** +- `URL` https://2haohr.com/approval/record/list +- **功能释义**:历史审批记录查询。 +- **开发提示**:留痕与追溯。 +- **界面参考**:`screenshots/07_审批/常规/04_审批记录.jpg` + + +**审批交接** +- `URL` https://2haohr.com/approval/abnormal +- **功能释义**:审批任务交接处理。 +- **开发提示**:人员变动时的流程转交。 +- **界面参考**:`screenshots/07_审批/常规/05_审批交接.jpg` + + +**操作记录** +- `URL` https://2haohr.com/approval/log +- **功能释义**:审批模块下「操作记录」相关功能页。 +- **界面参考**:`screenshots/07_审批/常规/06_操作记录.jpg` + + +### 8. 培训学习 + + +#### ▸ 线下培训 + + +**培训计划** +- `URL` https://2haohr.com/training/manage/team +- **功能释义**:线下培训计划制定与管理。 +- **开发提示**:培训组织入口。 +- **界面参考**:`screenshots/08_培训学习/线下培训/01_培训计划.jpg` + + +**开课日程** +- `URL` https://2haohr.com/training/manage/schedule +- **功能释义**:培训课程排期日程。 +- **开发提示**:线下课程时间管理。 +- **界面参考**:`screenshots/08_培训学习/线下培训/02_开课日程.jpg` + + +**培训记录** +- `URL` https://2haohr.com/training/manage/record/list +- **功能释义**:培训完成记录。 +- **开发提示**:回流员工培训经历。 +- **界面参考**:`screenshots/08_培训学习/线下培训/03_培训记录.jpg` + + +#### ▸ 线上学习 + + +**课程库** +- `URL` https://2haohr.com/training/online/course/home +- **功能释义**:在线课程资源库。 +- **开发提示**:LMS 内容中心。 +- **界面参考**:`screenshots/08_培训学习/线上学习/01_课程库.jpg` + + +**学习计划** +- `URL` https://2haohr.com/training/online/learn-plan +- **功能释义**:为员工指派学习计划。 +- **开发提示**:驱动在线学习。 +- **界面参考**:`screenshots/08_培训学习/线上学习/02_学习计划.jpg` + + +**在线直播** +- `URL` https://2haohr.com/training/online/live-plan +- **功能释义**:在线直播课安排。 +- **开发提示**:远程培训能力。 +- **界面参考**:`screenshots/08_培训学习/线上学习/03_在线直播.jpg` + + +**学习进度** +- `URL` https://2haohr.com/training/online/progress +- **功能释义**:员工学习进度跟踪。 +- **开发提示**:学习效果监控。 +- **界面参考**:`screenshots/08_培训学习/线上学习/04_学习进度.jpg` + + +**学习记录** +- `URL` https://2haohr.com/training/online/record +- **功能释义**:在线学习历史记录。 +- **开发提示**:留痕与统计。 +- **界面参考**:`screenshots/08_培训学习/线上学习/05_学习记录.jpg` + + +#### ▸ 考试练习 + + +**题库管理** +- `URL` https://2haohr.com/training/examine/question-bank +- **功能释义**:考试题目库维护。 +- **开发提示**:考试基础数据。 +- **界面参考**:`screenshots/08_培训学习/考试练习/01_题库管理.jpg` + + +**试卷管理** +- `URL` https://2haohr.com/training/examine/paper +- **功能释义**:试卷组卷与管理。 +- **开发提示**:考试内容配置。 +- **界面参考**:`screenshots/08_培训学习/考试练习/02_试卷管理.jpg` + + +**考试安排** +- `URL` https://2haohr.com/training/examine/record +- **功能释义**:考试计划安排。 +- **开发提示**:组织在线考试。 +- **界面参考**:`screenshots/08_培训学习/考试练习/03_考试安排.jpg` + + +**考试记录** +- `URL` https://2haohr.com/training/examine/allExam +- **功能释义**:考试成绩记录。 +- **开发提示**:培训效果评估。 +- **界面参考**:`screenshots/08_培训学习/考试练习/04_考试记录.jpg` + + +#### ▸ 培训设置 + + +**讲师设置** +- `URL` https://2haohr.com/training/manage/teacher +- **功能释义**:培训讲师维护。 +- **开发提示**:线下培训资源。 +- **界面参考**:`screenshots/08_培训学习/培训设置/01_讲师设置.jpg` + + +**团队设置** +- `URL` https://2haohr.com/training/option/team +- **功能释义**:培训管理团队设置。 +- **开发提示**:权限协作。 +- **界面参考**:`screenshots/08_培训学习/培训设置/02_团队设置.jpg` + + +**自定义设置** +- `URL` https://2haohr.com/training/option/custom +- **功能释义**:培训模块自定义设置。 +- **开发提示**:杂项配置。 +- **界面参考**:`screenshots/08_培训学习/培训设置/03_自定义设置.jpg` + + +### 9. 绩效 + + +#### ▸ 常规 + + +**概览** +- `URL` https://2haohr.com/performance-evaluation/desk +- **功能释义**:绩效整体概览看板。 +- **开发提示**:绩效经理入口。 +- **界面参考**:`screenshots/09_绩效/常规/01_概览.jpg` + + +#### ▸ 考核管理 + + +**绩效考核** +- `URL` https://2haohr.com/performance-evaluation/manage/plan +- **功能释义**:发起与管理绩效考核方案。 +- **开发提示**:绩效核心,含指标与流程。 +- **界面参考**:`screenshots/09_绩效/考核管理/01_绩效考核.jpg` + + +**历史绩效考核** +- `URL` https://2haohr.com/performance-evaluation/manage/history +- **功能释义**:历史考核归档查询。 +- **开发提示**:结果追溯。 +- **界面参考**:`screenshots/09_绩效/考核管理/02_历史绩效考核.jpg` + + +**试用期考核** +- `URL` https://2haohr.com/performance-evaluation/manage/probation +- **功能释义**:试用期专项考核。 +- **开发提示**:与转正联动。 +- **界面参考**:`screenshots/09_绩效/考核管理/03_试用期考核.jpg` + + +**晋升考核** +- `URL` https://2haohr.com/performance-evaluation/manage/promotion +- **功能释义**:晋升评估考核。 +- **开发提示**:与职级晋升联动。 +- **界面参考**:`screenshots/09_绩效/考核管理/04_晋升考核.jpg` + + +**考核组管理** +- `URL` https://2haohr.com/performance-evaluation/manage/group +- **功能释义**:考核分组管理。 +- **开发提示**:按人群组织考核。 +- **界面参考**:`screenshots/09_绩效/考核管理/05_考核组管理.jpg` + + +#### ▸ 考核结果 + + +**员工绩效档案** +- `URL` https://2haohr.com/performance-evaluation/result/archive +- **功能释义**:员工历史绩效档案。 +- **开发提示**:绩效履历。 +- **界面参考**:`screenshots/09_绩效/考核结果/01_员工绩效档案.jpg` + + +**绩效考核记录** +- `URL` https://2haohr.com/performance-evaluation/result/assessment +- **功能释义**:考核过程与结果记录。 +- **开发提示**:留痕。 +- **界面参考**:`screenshots/09_绩效/考核结果/02_绩效考核记录.jpg` + + +**绩效面谈记录** +- `URL` https://2haohr.com/performance-evaluation/result/interview +- **功能释义**:绩效面谈内容记录。 +- **开发提示**:改进跟踪。 +- **界面参考**:`screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg` + + +#### ▸ 考核设置 + + +**指标库** +- `URL` https://2haohr.com/performance-evaluation/setting/indicators +- **功能释义**:绩效指标(KPI/OKR)库。 +- **开发提示**:考核内容基础。 +- **界面参考**:`screenshots/09_绩效/考核设置/01_指标库.jpg` + + +**考核模板库** +- `URL` https://2haohr.com/performance-evaluation/setting/template +- **功能释义**:考核表模板库。 +- **开发提示**:快速套用。 +- **界面参考**:`screenshots/09_绩效/考核设置/02_考核模板库.jpg` + + +**考核团队** +- `URL` https://2haohr.com/performance-evaluation/setting/team +- **功能释义**:绩效管理团队设置。 +- **开发提示**:权限协作。 +- **界面参考**:`screenshots/09_绩效/考核设置/03_考核团队.jpg` + + +**自定义设置** +- `URL` https://2haohr.com/performance-evaluation/setting/custom +- **功能释义**:绩效模块自定义设置。 +- **开发提示**:杂项配置。 +- **界面参考**:`screenshots/09_绩效/考核设置/04_自定义设置.jpg` + + +**操作记录** +- `URL` https://2haohr.com/performance-evaluation/log +- **功能释义**:绩效模块下「操作记录」相关功能页。 +- **界面参考**:`screenshots/09_绩效/考核设置/05_操作记录.jpg` + + +### 10. 社保公积金 + + +#### ▸ 常规 + + +**参保账单** +- `URL` https://2haohr.com/social-insurance/records +- **功能释义**:每月社保公积金参保账单。 +- **开发提示**:缴费核对入口。 +- **界面参考**:`screenshots/10_社保公积金/常规/01_参保账单.jpg` + + +**账单核对** +- `URL` https://2haohr.com/social-insurance/bill +- **功能释义**:账单与实缴核对。 +- **开发提示**:差异排查。 +- **界面参考**:`screenshots/10_社保公积金/常规/02_账单核对.jpg` + + +**参保档案** +- `URL` https://2haohr.com/social-insurance/archives +- **功能释义**:员工参保档案。 +- **开发提示**:参保状态主数据。 +- **界面参考**:`screenshots/10_社保公积金/常规/03_参保档案.jpg` + + +**社保报表** +- `URL` https://2haohr.com/social-insurance/reports +- **功能释义**:社保缴纳报表。 +- **开发提示**:上报与统计。 +- **界面参考**:`screenshots/10_社保公积金/常规/04_社保报表.jpg` + + +**社保分析** +- `URL` https://2haohr.com/social-insurance/statistics +- **功能释义**:社保成本分析。 +- **开发提示**:成本洞察。 +- **界面参考**:`screenshots/10_社保公积金/常规/05_社保分析.jpg` + + +**参保规则** +- `URL` https://2haohr.com/social-insurance/rules +- **功能释义**:参保基数/比例规则。 +- **开发提示**:地区政策配置核心。 +- **界面参考**:`screenshots/10_社保公积金/常规/06_参保规则.jpg` + + +### 11. 行政管理 + + +#### ▸ 常规 + + +**企业公告** +- `URL` https://2haohr.com/oa/notice +- **功能释义**:企业公告发布与阅读。 +- **开发提示**:全员触达。 +- **界面参考**:`screenshots/11_行政管理/常规/01_企业公告.jpg` + + +**企业制度** +- `URL` https://2haohr.com/oa/regulation +- **功能释义**:企业规章制度发布。 +- **开发提示**:制度沉淀。 +- **界面参考**:`screenshots/11_行政管理/常规/02_企业制度.jpg` + + +**新闻动态** +- `URL` https://2haohr.com/oa/news +- **功能释义**:企业新闻动态。 +- **开发提示**:文化运营。 +- **界面参考**:`screenshots/11_行政管理/常规/03_新闻动态.jpg` + + +**开具证明** +- `URL` https://2haohr.com/oa/certificate +- **功能释义**:在职/收入等证明在线开具。 +- **开发提示**:员工自助高频需求。 +- **界面参考**:`screenshots/11_行政管理/常规/04_开具证明.jpg` + + +#### ▸ 会议室预定 + + +**会议预定记录** +- `URL` https://2haohr.com/oa/meeting/reservation +- **功能释义**:会议室预定记录。 +- **开发提示**:资源使用查询。 +- **界面参考**:`screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg` + + +**会议室管理** +- `URL` https://2haohr.com/oa/meeting/meetingroom +- **功能释义**:会议室资源维护。 +- **开发提示**:行政资源管理。 +- **界面参考**:`screenshots/11_行政管理/会议室预定/02_会议室管理.jpg` + + +**会议操作记录** +- `URL` https://2haohr.com/oa/meeting/record +- **功能释义**:会议室操作日志。 +- **开发提示**:留痕。 +- **界面参考**:`screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg` + + +#### ▸ 问卷调查 + + +**问卷管理** +- `URL` https://2haohr.com/oa/survey/list +- **功能释义**:企业问卷调查发起与统计。 +- **开发提示**:满意度/调研工具。 +- **界面参考**:`screenshots/11_行政管理/问卷调查/01_问卷管理.jpg` + + +**问卷模板库** +- `URL` https://2haohr.com/oa/survey/template +- **功能释义**:问卷模板库。 +- **开发提示**:快速创建。 +- **界面参考**:`screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg` + + +**问卷操作记录** +- `URL` https://2haohr.com/oa/survey/log +- **功能释义**:问卷操作日志。 +- **开发提示**:留痕。 +- **界面参考**:`screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg` + + +### 12. 电子合同 + + +#### ▸ 常规 + + +**概览** +- `URL` https://2haohr.com/econtract/overview +- **功能释义**:电子合同数据概览。 +- **开发提示**:签署情况看板。 +- **界面参考**:`screenshots/12_电子合同/常规/01_概览.jpg` + + +#### ▸ 合同签署 + + +**签署中** +- `URL` https://2haohr.com/econtract/sign/signing +- **功能释义**:签署流程进行中的合同。 +- **开发提示**:待办跟踪。 +- **界面参考**:`screenshots/12_电子合同/合同签署/01_签署中.jpg` + + +**已签署** +- `URL` https://2haohr.com/econtract/sign/signed +- **功能释义**:已完成签署合同。 +- **开发提示**:生效合同管理。 +- **界面参考**:`screenshots/12_电子合同/合同签署/02_已签署.jpg` + + +**已作废** +- `URL` https://2haohr.com/econtract/sign/cancelled +- **功能释义**:作废合同归档。 +- **开发提示**:留痕。 +- **界面参考**:`screenshots/12_电子合同/合同签署/03_已作废.jpg` + + +**合同档案库** +- `URL` https://2haohr.com/econtract/archive/home +- **功能释义**:电子合同档案库。 +- **开发提示**:集中存储与检索。 +- **界面参考**:`screenshots/12_电子合同/合同签署/04_合同档案库.jpg` + + +#### ▸ 设置 + + +**企业印章** +- `URL` https://2haohr.com/econtract/settings/seal +- **功能释义**:企业电子印章管理。 +- **开发提示**:签署授权核心。 +- **界面参考**:`screenshots/12_电子合同/设置/01_企业印章.jpg` + + +**合同模板** +- `URL` https://2haohr.com/econtract/settings/category +- **功能释义**:合同模板管理。 +- **开发提示**:标准化签署。 +- **界面参考**:`screenshots/12_电子合同/设置/02_合同模板.jpg` + + +**合同包** +- `URL` https://2haohr.com/econtract/settings/package +- **功能释义**:合同套餐/额度包。 +- **开发提示**:计费额度管理。 +- **界面参考**:`screenshots/12_电子合同/设置/03_合同包.jpg` + + +### 13. 背景调查 + + +**背景调查服务** +- `URL` https://2haohr.com/hrService/background-investigation/entry +- **功能释义**:背景调查模块下「背景调查服务」相关功能页。 +- **界面参考**:`screenshots/13_背景调查/背景调查服务.jpg` + + +### 14. 人才测评 + + +**人才测评服务** +- `URL` https://2haohr.com/hrService/employee-assessment/ +- **功能释义**:人才测评模块下「人才测评服务」相关功能页。 +- **界面参考**:`screenshots/14_人才测评/人才测评服务.jpg` + + +### 15. 员工福利 + + +#### ▸ 常规 + + +**员工福利概况** +- `URL` https://2haohr.com/welfare/online-shop/overview +- **功能释义**:福利运营数据概览。 +- **开发提示**:福利运营入口。 +- **界面参考**:`screenshots/15_员工福利/常规/01_员工福利概况.jpg` + + +**员工积分管理** +- `URL` https://2haohr.com/welfare/online-shop/Integral +- **功能释义**:员工积分发放与管理。 +- **开发提示**:激励体系。 +- **界面参考**:`screenshots/15_员工福利/常规/02_员工积分管理.jpg` + + +**商品专区管理** +- `URL` https://2haohr.com/welfare/online-shop/giftbag +- **功能释义**:福利商城商品管理。 +- **开发提示**:福利兑换运营。 +- **界面参考**:`screenshots/15_员工福利/常规/03_商品专区管理.jpg` + + +**平安好医生** +- `URL` https://2haohr.com/welfare/pingan-doctor +- **功能释义**:对接平安好医生健康服务。 +- **开发提示**:健康福利增值。 +- **界面参考**:`screenshots/15_员工福利/常规/04_平安好医生.jpg` + + +### 16. 人事仪表盘 + + +#### ▸ 常规 + + +**我的仪表盘** +- `URL` https://2haohr.com/dashboard/board/home +- **功能释义**:个人自定义数据看板。 +- **开发提示**:BI 自助看板。 +- **界面参考**:`screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg` + + +**报告老板** +- `URL` https://2haohr.com/dashboard/board/diyReport +- **功能释义**:面向管理层的经营人事报告。 +- **开发提示**:高层决策报告。 +- **界面参考**:`screenshots/16_人事仪表盘/常规/02_报告老板.jpg` + + +### 17. 第三方对接 + + +#### ▸ 常规 + + +**企业微信** +- `URL` https://2haohr.com/third-party-apps/wework +- **功能释义**:对接企业微信(组织同步/消息)。 +- **开发提示**:生态集成。 +- **界面参考**:`screenshots/17_第三方对接/常规/01_企业微信.jpg` + + +**钉钉** +- `URL` https://2haohr.com/third-party-apps/dingtalk +- **功能释义**:对接钉钉。 +- **开发提示**:生态集成。 +- **界面参考**:`screenshots/17_第三方对接/常规/02_钉钉.jpg` + + +**飞书** +- `URL` https://2haohr.com/third-party-apps/new-feishu +- **功能释义**:对接飞书。 +- **开发提示**:生态集成。 +- **界面参考**:`screenshots/17_第三方对接/常规/03_飞书.jpg` + + +**携程商旅** +- `URL` https://2haohr.com/third-party-apps/ctrip +- **功能释义**:对接携程商旅(差旅)。 +- **开发提示**:差旅报销联动。 +- **界面参考**:`screenshots/17_第三方对接/常规/04_携程商旅.jpg` + + +**操作记录** +- `URL` https://2haohr.com/third-party-apps/record +- **功能释义**:第三方对接模块下「操作记录」相关功能页。 +- **界面参考**:`screenshots/17_第三方对接/常规/05_操作记录.jpg` + + +### 18. 培训商城 + + +**培训商城(外部课程采购)** +- `URL` https://2haohr.com/training-mall +- **功能释义**:培训商城模块下「培训商城(外部课程采购)」相关功能页。 +- **界面参考**:`screenshots/18_培训商城/培训商城(外部课程采购).jpg` + + +### 19. 短信发送 + + +#### ▸ 常规 + + +**短信发送** +- `URL` https://2haohr.com/sms-manage/batch +- **功能释义**:批量发送短信通知。 +- **开发提示**:触达通道。 +- **界面参考**:`screenshots/19_短信发送/常规/01_短信发送.jpg` + + +**发送记录** +- `URL` https://2haohr.com/sms-manage/sms-send/list +- **功能释义**:短信发送记录。 +- **开发提示**:留痕与计费。 +- **界面参考**:`screenshots/19_短信发送/常规/02_发送记录.jpg` + + +### 20. 电子工资条 + + +#### ▸ 常规 + + +**发送工资条** +- `URL` https://2haohr.com/payslip/home +- **功能释义**:发送电子工资条给员工。 +- **开发提示**:保密发放。 +- **界面参考**:`screenshots/20_电子工资条/常规/01_发送工资条.jpg` + + +**发放记录** +- `URL` https://2haohr.com/payslip/record +- **功能释义**:工资条发放记录。 +- **开发提示**:留痕。 +- **界面参考**:`screenshots/20_电子工资条/常规/02_发放记录.jpg` + + +**反馈记录** +- `URL` https://2haohr.com/payslip/feedback +- **功能释义**:员工对工资条的确认/异议。 +- **开发提示**:确认闭环。 +- **界面参考**:`screenshots/20_电子工资条/常规/03_反馈记录.jpg` + + +**统计分析** +- `URL` https://2haohr.com/payslip/statistic +- **功能释义**:工资条发送与确认统计。 +- **开发提示**:触达率监控。 +- **界面参考**:`screenshots/20_电子工资条/常规/04_统计分析.jpg` + + +**操作记录** +- `URL` https://2haohr.com/payslip/log +- **功能释义**:电子工资条模块下「操作记录」相关功能页。 +- **界面参考**:`screenshots/20_电子工资条/常规/05_操作记录.jpg` + + +### 21. 智能薪酬 + + +#### ▸ 常规 + + +**概览** +- `URL` https://2haohr.com/salary/desk +- **功能释义**:智能薪酬数据概览。 +- **开发提示**:薪酬看板。 +- **界面参考**:`screenshots/21_智能薪酬/常规/01_概览.jpg` + + +**薪酬核算** +- `URL` https://2haohr.com/salary/calculate +- **功能释义**:智能化薪酬核算。 +- **开发提示**:核心核算引擎。 +- **界面参考**:`screenshots/21_智能薪酬/常规/02_薪酬核算.jpg` + + +#### ▸ 数据采集 + + +**员工考勤** +- `URL` https://2haohr.com/salary/data-collection/attendance +- **功能释义**:采集考勤数据用于计薪。 +- **开发提示**:数据采集环节。 +- **界面参考**:`screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg` + + +**业务提报** +- `URL` https://2haohr.com/salary/data-collection/work-report +- **功能释义**:采集业务提成/绩效等计薪数据。 +- **开发提示**:数据采集环节。 +- **界面参考**:`screenshots/21_智能薪酬/数据采集/02_业务提报.jpg` + + +#### ▸ 薪酬数据 + + +**薪酬档案** +- `URL` https://2haohr.com/salary/data/archives +- **功能释义**:员工薪酬档案。 +- **开发提示**:计薪基础。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg` + + +**减除费用确认** +- `URL` https://2haohr.com/salary/data/deduction-confirmation +- **功能释义**:个税减除费用确认。 +- **开发提示**:个税计算前置。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg` + + +**税前扣除** +- `URL` https://2haohr.com/salary/data/special-deductions +- **功能释义**:专项附加扣除等税前扣除。 +- **开发提示**:个税合规。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg` + + +**个税记录** +- `URL` https://2haohr.com/salary/data/tax +- **功能释义**:个税计算记录。 +- **开发提示**:代扣代缴留痕。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg` + + +**成本明细** +- `URL` https://2haohr.com/salary/data/cost +- **功能释义**:人力成本明细。 +- **开发提示**:成本核算。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg` + + +#### ▸ 报表中心 + + +**薪酬报表** +- `URL` https://2haohr.com/salary/report/statistics +- **功能释义**:智能薪酬报表。 +- **开发提示**:统计。 +- **界面参考**:`screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg` + + +**薪酬分析** +- `URL` https://2haohr.com/salary/report/analysis +- **功能释义**:智能薪酬分析。 +- **开发提示**:成本洞察。 +- **界面参考**:`screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg` + + +#### ▸ 薪酬设置 + + +**薪酬结构** +- `URL` https://2haohr.com/salary/setting/structure +- **功能释义**:薪酬结构(薪资项)配置。 +- **开发提示**:计薪规则基础。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg` + + +**基础设置** +- `URL` https://2haohr.com/salary/setting/company +- **功能释义**:智能薪酬基础设置。 +- **开发提示**:公司级配置。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg` + + +**成本设置** +- `URL` https://2haohr.com/salary/setting/cost +- **功能释义**:成本核算规则设置。 +- **开发提示**:成本分摊配置。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg` + + +**操作记录** +- `URL` https://2haohr.com/salary/setting/log +- **功能释义**:智能薪酬模块下「操作记录」相关功能页。 +- **界面参考**:`screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg` + + +### 22. 个税对接 + + +#### ▸ 常规 + + +**人员信息报送** +- `URL` https://2haohr.com/tax/reporting +- **功能释义**:向税务报送人员信息。 +- **开发提示**:个税申报前置。 +- **界面参考**:`screenshots/22_个税对接/常规/01_人员信息报送.jpg` + + +**个税申报** +- `URL` https://2haohr.com/tax/declaration +- **功能释义**:个人所得税申报。 +- **开发提示**:合规刚需。 +- **界面参考**:`screenshots/22_个税对接/常规/02_个税申报.jpg` + + +**纳税单位管理** +- `URL` https://2haohr.com/tax/message +- **功能释义**:纳税主体单位管理。 +- **开发提示**:多主体申报。 +- **界面参考**:`screenshots/22_个税对接/常规/03_纳税单位管理.jpg` + + +**操作记录** +- `URL` https://2haohr.com/tax/log +- **功能释义**:个税对接模块下「操作记录」相关功能页。 +- **界面参考**:`screenshots/22_个税对接/常规/04_操作记录.jpg` + + +### 23. AI员工助手 + + +#### ▸ 常规 + + +**AI员工助手** +- `URL` https://2haohr.com/ai-assistant/chat +- **功能释义**:面向员工的 AI 问答助手。 +- **开发提示**:降低 HR 答疑成本。 +- **界面参考**:`screenshots/23_AI员工助手/常规/01_AI员工助手.jpg` + + +**知识库管理** +- `URL` https://2haohr.com/ai-assistant/knowledge-management +- **功能释义**:AI 助手知识库维护。 +- **开发提示**:决定回答质量。 +- **界面参考**:`screenshots/23_AI员工助手/常规/02_知识库管理.jpg` + + +**员工助手设置** +- `URL` https://2haohr.com/ai-assistant/assistant-settings +- **功能释义**:AI 助手行为设置。 +- **开发提示**:配置。 +- **界面参考**:`screenshots/23_AI员工助手/常规/03_员工助手设置.jpg` + + +#### ▸ 数据统计 + + +**总体使用情况** +- `URL` https://2haohr.com/ai-assistant/data-stats/usage-situation +- **功能释义**:AI 助手使用统计。 +- **开发提示**:效果度量。 +- **界面参考**:`screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg` + + +**操作记录** +- `URL` https://2haohr.com/ai-assistant/log +- **功能释义**:AI员工助手模块下「操作记录」相关功能页。 +- **界面参考**:`screenshots/23_AI员工助手/数据统计/02_操作记录.jpg` + + +### 24. 应用管理 + + +**应用管理** +- `URL` https://2haohr.com/application-manage/application/list +- **功能释义**:应用管理模块下「应用管理」相关功能页。 +- **界面参考**:`screenshots/24_应用管理/应用管理.jpg` + + +## 三、异步导出样本(任务中心生成) + +> 以下报表在页面点击导出后由服务端异步生成,经“任务中心”收割: + +> - **参保档案列表-已参保_20260717223201**:姓名、工号、试用期、证件类型、证件号码、参保方案、社保参保城市、参保类型、起始参保月份、最新参保月份、社保基数、公积金基数 +> - **已签署_电子合同签署记录_20260717223308**:合同名称、合同编号、合同类型、签署状态、签署员工、身份证号、员工手机号、印章名称、签署的印章管理者、发起人、发起签署时间、最近处理时间、备注 +> - **薪酬档案导出_20260717172740** + + +## 四、审批模板库清单(预置审批流程) + +> 来自 `审批 / 常规 / 审批模板库`(44 个预置流程模板)。这些是**审批流程模板**(点“使用”实例化为审批表单),非数据表,无导出文件;仿写时可据此设计审批流程配置。 + + +#### ▸ 人事审批(10) + +| 模板 | 提供方 | 说明 | +|------|------|------| +| 录用 | — | 适用于新员工录入申请,审批通过自动进入待入职 | +| 转正 | — | 适用于试用期员工申请转正,审批通过可自动成为正式员工 | +| 离职 | — | 适用于员工本人申请离职,审批通过自动进入待离职 | +| 调岗 | — | 适用于员工申请岗位调动、部门调动或晋升 | +| 转全职 | — | 适用于实习生、社会兼职人员申请转为全职员工 | +| 调薪 | — | 适用于部门负责人或HR为员工申请调薪,调薪审批只做记录,不参与薪酬计算 | +| 重新入职 | — | 适用于离职员工重新入职申请 | +| 劳动合同签订 | — | 适用于员工劳动合同的签订申请 | +| 招聘需求 | — | 若需要招聘新的人员,可发起招聘需求审批 | +| 奖惩 | — | 适用于HR或员工申请奖惩,可同步至奖惩记录 | + +#### ▸ 考勤审批(9) + +| 模板 | 提供方 | 说明 | +|------|------|------| +| 调班 | — | 需要与他人换班,或自己不同日期间调班 | +| 请假 | — | 若因个人原因无法出勤,可提交如事假、短期病假等审批 | +| 外出 | — | 若外出拜访客户,无法到公司打卡考勤,可提交外出审批 | +| 出差 | — | 若因公到外地出差,无法到公司打卡考勤,可提交出差审批 | +| 加班 | — | 若因某些原因延长了工作时间,可提交加班审批 | +| 补卡 | — | 若工作日忘记打卡,可自助进行补卡 | +| 销请假 | — | 员工提前结束请假返回公司上班,可以申请销请假 | +| 销外出 | — | 员工提前结束外出返回公司上班,可以申请销外出 | +| 销出差 | — | 员工提前结束出差返回公司上班,可以申请销出差 | + +#### ▸ 薪酬审批(7) + +| 模板 | 提供方 | 说明 | +|------|------|------| +| 入职定薪 | — | 适用于新员工入职定薪申请,审批通过后自动同步至薪酬 | +| 薪资调整 | — | 适用于员工调薪申请,根据设置,审批通过后自动同步至薪酬 | +| 离职停薪 | — | 适用于离职员工的停薪申请,根据设置,审批通过后自动为员工停薪 | +| 薪资发放 | — | 适用于HR发起薪资发放的审批,根据审批发起方式,审批通过后自动同步至薪酬 | +| 入职定薪 | — | 适用于新员工入职定薪申请,审批通过后自动同步至智能薪酬 | +| 薪资调整 | — | 适用于员工调薪申请,根据设置,审批通过后自动同步至智能薪酬 | +| 薪资发放 | — | 适用于HR发起薪资发放的审批,根据审批发起方式,审批通过后自动同步至智能薪酬 | + +#### ▸ 智能薪酬审批(4) + +| 模板 | 提供方 | 说明 | +|------|------|------| +| 业务提报 | — | 适用于业务部门提报计时计件、佣金提成等业务数据,审批通过后自动同步至智能薪酬 | +| 转正调薪 | 由人事&智能薪酬提供 | 适用于试用期员工申请转正,审批通过可成为正式员工并同步调薪数据至智能薪酬 | +| 调岗调薪 | 由人事&智能薪酬提供 | 适用于员工申请岗位调动、部门调动或晋升,审批通过可添加异动记录并同步调薪数据至智能薪酬 | +| 转全职调薪 | 由人事&智能薪酬提供 | 适用于实习生、社会兼职人员申请转为全职员工,审批通过可添加异动记录并同步调薪数据至智能薪酬 | + +#### ▸ 行政审批(9) + +| 模板 | 提供方 | 说明 | +|------|------|------| +| 用车申请 | — | 适用于员工因公使用车辆的申请 | +| 用印申请 | — | 适用于使用公司印章的申请 | +| 物品领用 | — | 适用于物品领用申请 | +| 物品维修 | — | 适用于物品维修的申请 | +| 会议室预定 | — | 适用于会议室预定 | +| 报销 | — | 适用于公司报销审批 | +| 费用 | — | 适用于企业各种费用申请审批,包括:差旅费、交通费、办公费等 | +| 付款申请 | — | 适用于付款审批 | +| 采购 | — | 适用于企业办公或所需材料的采购申请 | + +#### ▸ 其他(5) + +| 模板 | 提供方 | 说明 | +|------|------|------| +| 证明 | — | 适用于员工申请开具证明,包括收入证明、工作证明、离职证明 | +| 通用审批 | — | 适用于通用审批 | +| 立项申请 | — | 适用于企业项目立项的申请 | +| 资质使用 | — | 适用于企业资质证件的使用审批,包括:营业执照、组织机构代码证等 | +| 合同审批 | — | 适用于草拟合同以后的审批 | + + +--- + +*本文档由调研数据自动汇编。功能释义/开发提示可在 `http://localhost:8777` 审核界面逐条修订后重新生成;字段清单来自线上真实导出 Excel 的表头,为一手数据。* diff --git a/downloads/.DS_Store b/downloads/.DS_Store new file mode 100644 index 0000000..8517cb1 Binary files /dev/null and b/downloads/.DS_Store differ diff --git a/downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx b/downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx new file mode 100644 index 0000000..7646053 Binary files /dev/null and b/downloads/02_人事/员工关系/员工任职记录-2026071722354083149191.xlsx differ diff --git a/downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx b/downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx new file mode 100644 index 0000000..020d697 Binary files /dev/null and b/downloads/02_人事/员工关系/员工培训经历-2026071722370355878239.xlsx differ diff --git a/downloads/02_人事/员工关系/员工异动记录表_20260717211551.xlsx b/downloads/02_人事/员工关系/员工异动记录表_20260717211551.xlsx new file mode 100644 index 0000000..8692569 Binary files /dev/null and b/downloads/02_人事/员工关系/员工异动记录表_20260717211551.xlsx differ diff --git a/downloads/02_人事/员工关系/员工谈话记录-2026-07-17 22_37_52.xlsx b/downloads/02_人事/员工关系/员工谈话记录-2026-07-17 22_37_52.xlsx new file mode 100644 index 0000000..d437bfa Binary files /dev/null and b/downloads/02_人事/员工关系/员工谈话记录-2026-07-17 22_37_52.xlsx differ diff --git a/downloads/02_人事/员工关系/实习生情况记录表-20260717223640.xlsx b/downloads/02_人事/员工关系/实习生情况记录表-20260717223640.xlsx new file mode 100644 index 0000000..4847008 Binary files /dev/null and b/downloads/02_人事/员工关系/实习生情况记录表-20260717223640.xlsx differ diff --git a/downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx b/downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx new file mode 100644 index 0000000..2e2cdc7 Binary files /dev/null and b/downloads/02_人事/员工关系/导出员工奖惩记录表-2026071721144322175195.xlsx differ diff --git a/downloads/02_人事/员工关系/已签订合同人员列表_20260717_211338.xlsx b/downloads/02_人事/员工关系/已签订合同人员列表_20260717_211338.xlsx new file mode 100644 index 0000000..308a84a Binary files /dev/null and b/downloads/02_人事/员工关系/已签订合同人员列表_20260717_211338.xlsx differ diff --git a/downloads/02_人事/员工关系/待入职人员列表-20260717211138.xlsx b/downloads/02_人事/员工关系/待入职人员列表-20260717211138.xlsx new file mode 100644 index 0000000..6316d62 Binary files /dev/null and b/downloads/02_人事/员工关系/待入职人员列表-20260717211138.xlsx differ diff --git a/downloads/02_人事/员工关系/待离职员工列表_20260717211236.xlsx b/downloads/02_人事/员工关系/待离职员工列表_20260717211236.xlsx new file mode 100644 index 0000000..d072e87 Binary files /dev/null and b/downloads/02_人事/员工关系/待离职员工列表_20260717211236.xlsx differ diff --git a/downloads/02_人事/员工关系/试用期员工列表_20260717223514.xlsx b/downloads/02_人事/员工关系/试用期员工列表_20260717223514.xlsx new file mode 100644 index 0000000..adbd5c8 Binary files /dev/null and b/downloads/02_人事/员工关系/试用期员工列表_20260717223514.xlsx differ diff --git a/downloads/02_人事/员工管理/02_员工档案库.pdf b/downloads/02_人事/员工管理/02_员工档案库.pdf new file mode 100644 index 0000000..2df9e52 Binary files /dev/null and b/downloads/02_人事/员工管理/02_员工档案库.pdf differ diff --git a/downloads/02_人事/员工管理/03_统计分析.pdf b/downloads/02_人事/员工管理/03_统计分析.pdf new file mode 100644 index 0000000..3763bc1 Binary files /dev/null and b/downloads/02_人事/员工管理/03_统计分析.pdf differ diff --git a/downloads/02_人事/员工管理/04_人事报表.pdf b/downloads/02_人事/员工管理/04_人事报表.pdf new file mode 100644 index 0000000..c15fe0a Binary files /dev/null and b/downloads/02_人事/员工管理/04_人事报表.pdf differ diff --git a/downloads/02_人事/员工管理/各部门人事档案统计-20260717185710.xlsx b/downloads/02_人事/员工管理/各部门人事档案统计-20260717185710.xlsx new file mode 100644 index 0000000..140d821 Binary files /dev/null and b/downloads/02_人事/员工管理/各部门人事档案统计-20260717185710.xlsx differ diff --git a/downloads/02_人事/员工管理/员工住址信息表-20260717185615.xlsx b/downloads/02_人事/员工管理/员工住址信息表-20260717185615.xlsx new file mode 100644 index 0000000..44d78bc Binary files /dev/null and b/downloads/02_人事/员工管理/员工住址信息表-20260717185615.xlsx differ diff --git a/downloads/02_人事/员工管理/员工入离职情况统计表-20260717185744.xlsx b/downloads/02_人事/员工管理/员工入离职情况统计表-20260717185744.xlsx new file mode 100644 index 0000000..9669280 Binary files /dev/null and b/downloads/02_人事/员工管理/员工入离职情况统计表-20260717185744.xlsx differ diff --git a/downloads/02_人事/员工管理/员工劳动合同签订情况-20260717185601.xlsx b/downloads/02_人事/员工管理/员工劳动合同签订情况-20260717185601.xlsx new file mode 100644 index 0000000..ec5c470 Binary files /dev/null and b/downloads/02_人事/员工管理/员工劳动合同签订情况-20260717185601.xlsx differ diff --git a/downloads/02_人事/员工管理/员工学历统计表-20260717185730.xlsx b/downloads/02_人事/员工管理/员工学历统计表-20260717185730.xlsx new file mode 100644 index 0000000..0c09e3d Binary files /dev/null and b/downloads/02_人事/员工管理/员工学历统计表-20260717185730.xlsx differ diff --git a/downloads/02_人事/员工管理/员工工作年限信息表-20260717185608.xlsx b/downloads/02_人事/员工管理/员工工作年限信息表-20260717185608.xlsx new file mode 100644 index 0000000..38b86cd Binary files /dev/null and b/downloads/02_人事/员工管理/员工工作年限信息表-20260717185608.xlsx differ diff --git a/downloads/02_人事/员工管理/员工工资卡信息表-20260717185758.xlsx b/downloads/02_人事/员工管理/员工工资卡信息表-20260717185758.xlsx new file mode 100644 index 0000000..cc8a3f5 Binary files /dev/null and b/downloads/02_人事/员工管理/员工工资卡信息表-20260717185758.xlsx differ diff --git a/downloads/02_人事/员工管理/员工年龄段统计表-20260717185737.xlsx b/downloads/02_人事/员工管理/员工年龄段统计表-20260717185737.xlsx new file mode 100644 index 0000000..e315f9f Binary files /dev/null and b/downloads/02_人事/员工管理/员工年龄段统计表-20260717185737.xlsx differ diff --git a/downloads/02_人事/员工管理/员工生日信息表-20260717185622.xlsx b/downloads/02_人事/员工管理/员工生日信息表-20260717185622.xlsx new file mode 100644 index 0000000..2b477a1 Binary files /dev/null and b/downloads/02_人事/员工管理/员工生日信息表-20260717185622.xlsx differ diff --git a/downloads/02_人事/员工管理/员工社保公积金账号信息表-20260717185804.xlsx b/downloads/02_人事/员工管理/员工社保公积金账号信息表-20260717185804.xlsx new file mode 100644 index 0000000..cf40ec5 Binary files /dev/null and b/downloads/02_人事/员工管理/员工社保公积金账号信息表-20260717185804.xlsx differ diff --git a/downloads/02_人事/员工管理/员工证件信息表-20260717185751.xlsx b/downloads/02_人事/员工管理/员工证件信息表-20260717185751.xlsx new file mode 100644 index 0000000..5ad471a Binary files /dev/null and b/downloads/02_人事/员工管理/员工证件信息表-20260717185751.xlsx differ diff --git a/downloads/02_人事/员工管理/员工通讯录-20260717185554.xlsx b/downloads/02_人事/员工管理/员工通讯录-20260717185554.xlsx new file mode 100644 index 0000000..c4ea1dc Binary files /dev/null and b/downloads/02_人事/员工管理/员工通讯录-20260717185554.xlsx differ diff --git a/downloads/02_人事/员工管理/员工通讯录-20260717185655.xlsx b/downloads/02_人事/员工管理/员工通讯录-20260717185655.xlsx new file mode 100644 index 0000000..4c11771 Binary files /dev/null and b/downloads/02_人事/员工管理/员工通讯录-20260717185655.xlsx differ diff --git a/downloads/02_人事/员工管理/在职员工花名册-20260717185522.xlsx b/downloads/02_人事/员工管理/在职员工花名册-20260717185522.xlsx new file mode 100644 index 0000000..f41d3fa Binary files /dev/null and b/downloads/02_人事/员工管理/在职员工花名册-20260717185522.xlsx differ diff --git a/downloads/02_人事/员工管理/在职员工花名册-20260717185644.xlsx b/downloads/02_人事/员工管理/在职员工花名册-20260717185644.xlsx new file mode 100644 index 0000000..09a3cf8 Binary files /dev/null and b/downloads/02_人事/员工管理/在职员工花名册-20260717185644.xlsx differ diff --git a/downloads/02_人事/员工管理/在职员工花名册(1)-20260717185544.xlsx b/downloads/02_人事/员工管理/在职员工花名册(1)-20260717185544.xlsx new file mode 100644 index 0000000..23ef8c3 Binary files /dev/null and b/downloads/02_人事/员工管理/在职员工花名册(1)-20260717185544.xlsx differ diff --git a/downloads/02_人事/员工管理/在职员工花名册(2)-20260717185533.xlsx b/downloads/02_人事/员工管理/在职员工花名册(2)-20260717185533.xlsx new file mode 100644 index 0000000..52e1719 Binary files /dev/null and b/downloads/02_人事/员工管理/在职员工花名册(2)-20260717185533.xlsx differ diff --git a/downloads/02_人事/员工管理/待入职人员流失率统计表-20260717185820.xlsx b/downloads/02_人事/员工管理/待入职人员流失率统计表-20260717185820.xlsx new file mode 100644 index 0000000..6e06393 Binary files /dev/null and b/downloads/02_人事/员工管理/待入职人员流失率统计表-20260717185820.xlsx differ diff --git a/downloads/02_人事/员工管理/测试账号-员工个人证件照存档情况表-20260717185825.xlsx b/downloads/02_人事/员工管理/测试账号-员工个人证件照存档情况表-20260717185825.xlsx new file mode 100644 index 0000000..eaedbe5 Binary files /dev/null and b/downloads/02_人事/员工管理/测试账号-员工个人证件照存档情况表-20260717185825.xlsx differ diff --git a/downloads/02_人事/员工管理/测试账号_123-20260717185637.xlsx b/downloads/02_人事/员工管理/测试账号_123-20260717185637.xlsx new file mode 100644 index 0000000..8235581 Binary files /dev/null and b/downloads/02_人事/员工管理/测试账号_123-20260717185637.xlsx differ diff --git a/downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185702.xlsx b/downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185702.xlsx new file mode 100644 index 0000000..4a79826 Binary files /dev/null and b/downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185702.xlsx differ diff --git a/downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185723.xlsx b/downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185723.xlsx new file mode 100644 index 0000000..574eb82 Binary files /dev/null and b/downloads/02_人事/员工管理/测试账号_月度人员进出一览表_20260717185723.xlsx differ diff --git a/downloads/02_人事/员工管理/测试账号_月度人员进出明细表_20260717185716.xlsx b/downloads/02_人事/员工管理/测试账号_月度人员进出明细表_20260717185716.xlsx new file mode 100644 index 0000000..b3f0ad5 Binary files /dev/null and b/downloads/02_人事/员工管理/测试账号_月度人员进出明细表_20260717185716.xlsx differ diff --git a/downloads/02_人事/员工管理/测试账号企业-各部门离职情况表.xlsx b/downloads/02_人事/员工管理/测试账号企业-各部门离职情况表.xlsx new file mode 100644 index 0000000..0690366 Binary files /dev/null and b/downloads/02_人事/员工管理/测试账号企业-各部门离职情况表.xlsx differ diff --git a/downloads/02_人事/员工管理/离职员工信息表-20260717185628.xlsx b/downloads/02_人事/员工管理/离职员工信息表-20260717185628.xlsx new file mode 100644 index 0000000..60671f8 Binary files /dev/null and b/downloads/02_人事/员工管理/离职员工信息表-20260717185628.xlsx differ diff --git a/downloads/03_组织/岗位管理/05_组织报表.pdf b/downloads/03_组织/岗位管理/05_组织报表.pdf new file mode 100644 index 0000000..97fe3df Binary files /dev/null and b/downloads/03_组织/岗位管理/05_组织报表.pdf differ diff --git a/downloads/04_招聘/统计分析/01_招聘报表.pdf b/downloads/04_招聘/统计分析/01_招聘报表.pdf new file mode 100644 index 0000000..0def265 Binary files /dev/null and b/downloads/04_招聘/统计分析/01_招聘报表.pdf differ diff --git a/downloads/04_招聘/统计分析/02_招聘分析.pdf b/downloads/04_招聘/统计分析/02_招聘分析.pdf new file mode 100644 index 0000000..23204fc Binary files /dev/null and b/downloads/04_招聘/统计分析/02_招聘分析.pdf differ diff --git a/downloads/04_招聘/统计分析/招聘报表/Offer记录表.xls b/downloads/04_招聘/统计分析/招聘报表/Offer记录表.xls new file mode 100644 index 0000000..34e9241 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/Offer记录表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/候选人Offer等待期统计表.xls b/downloads/04_招聘/统计分析/招聘报表/候选人Offer等待期统计表.xls new file mode 100644 index 0000000..4c11692 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/候选人Offer等待期统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/候选人淘汰原因统计表.xls b/downloads/04_招聘/统计分析/招聘报表/候选人淘汰原因统计表.xls new file mode 100644 index 0000000..d34ebae Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/候选人淘汰原因统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/候选人面试等待期统计表.xls b/downloads/04_招聘/统计分析/招聘报表/候选人面试等待期统计表.xls new file mode 100644 index 0000000..61894d6 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/候选人面试等待期统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/招聘工作量统计表.xls b/downloads/04_招聘/统计分析/招聘报表/招聘工作量统计表.xls new file mode 100644 index 0000000..519c347 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/招聘工作量统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/招聘趋势统计表.xls b/downloads/04_招聘/统计分析/招聘报表/招聘趋势统计表.xls new file mode 100644 index 0000000..2d20e14 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/招聘趋势统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/招聘转化率统计表.xls b/downloads/04_招聘/统计分析/招聘报表/招聘转化率统计表.xls new file mode 100644 index 0000000..4ce1d03 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/招聘转化率统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/招聘进度统计表.xls b/downloads/04_招聘/统计分析/招聘报表/招聘进度统计表.xls new file mode 100644 index 0000000..4ce1d03 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/招聘进度统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/渠道贡献率统计表.xls b/downloads/04_招聘/统计分析/招聘报表/渠道贡献率统计表.xls new file mode 100644 index 0000000..01fc0a2 Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/渠道贡献率统计表.xls differ diff --git a/downloads/04_招聘/统计分析/招聘报表/面试记录表.xls b/downloads/04_招聘/统计分析/招聘报表/面试记录表.xls new file mode 100644 index 0000000..22084fa Binary files /dev/null and b/downloads/04_招聘/统计分析/招聘报表/面试记录表.xls differ diff --git a/downloads/04_招聘/设置/04_模板设置.pdf b/downloads/04_招聘/设置/04_模板设置.pdf new file mode 100644 index 0000000..37be74c Binary files /dev/null and b/downloads/04_招聘/设置/04_模板设置.pdf differ diff --git a/downloads/04_考勤假期/考勤统计/2026年7月17日考勤明细.xlsx b/downloads/04_考勤假期/考勤统计/2026年7月17日考勤明细.xlsx new file mode 100644 index 0000000..f10dd7a Binary files /dev/null and b/downloads/04_考勤假期/考勤统计/2026年7月17日考勤明细.xlsx differ diff --git a/downloads/04_考勤假期/考勤统计/打卡记录表-测试账号.xlsx b/downloads/04_考勤假期/考勤统计/打卡记录表-测试账号.xlsx new file mode 100644 index 0000000..1e04bd3 Binary files /dev/null and b/downloads/04_考勤假期/考勤统计/打卡记录表-测试账号.xlsx differ diff --git a/downloads/05_考勤假期/考勤统计/01_每日考勤.pdf b/downloads/05_考勤假期/考勤统计/01_每日考勤.pdf new file mode 100644 index 0000000..0d138b4 Binary files /dev/null and b/downloads/05_考勤假期/考勤统计/01_每日考勤.pdf differ diff --git a/downloads/05_考勤假期/考勤统计/02_月考勤表.pdf b/downloads/05_考勤假期/考勤统计/02_月考勤表.pdf new file mode 100644 index 0000000..74798e4 Binary files /dev/null and b/downloads/05_考勤假期/考勤统计/02_月考勤表.pdf differ diff --git a/downloads/05_考勤假期/考勤统计/03_明细记录.pdf b/downloads/05_考勤假期/考勤统计/03_明细记录.pdf new file mode 100644 index 0000000..a6d2339 Binary files /dev/null and b/downloads/05_考勤假期/考勤统计/03_明细记录.pdf differ diff --git a/downloads/05_考勤假期/考勤统计/04_考勤报表.pdf b/downloads/05_考勤假期/考勤统计/04_考勤报表.pdf new file mode 100644 index 0000000..e7527fb Binary files /dev/null and b/downloads/05_考勤假期/考勤统计/04_考勤报表.pdf differ diff --git a/downloads/05_考勤假期/考勤统计/05_字段管理.pdf b/downloads/05_考勤假期/考勤统计/05_字段管理.pdf new file mode 100644 index 0000000..692092f Binary files /dev/null and b/downloads/05_考勤假期/考勤统计/05_字段管理.pdf differ diff --git a/downloads/05_考勤假期/考勤统计/06_考勤确认.pdf b/downloads/05_考勤假期/考勤统计/06_考勤确认.pdf new file mode 100644 index 0000000..778831c Binary files /dev/null and b/downloads/05_考勤假期/考勤统计/06_考勤确认.pdf differ diff --git a/downloads/06_薪酬/薪酬管理/04_薪酬报表.pdf b/downloads/06_薪酬/薪酬管理/04_薪酬报表.pdf new file mode 100644 index 0000000..ef870dd Binary files /dev/null and b/downloads/06_薪酬/薪酬管理/04_薪酬报表.pdf differ diff --git a/downloads/06_薪酬/薪酬管理/05_薪酬分析.pdf b/downloads/06_薪酬/薪酬管理/05_薪酬分析.pdf new file mode 100644 index 0000000..ac0ad0e Binary files /dev/null and b/downloads/06_薪酬/薪酬管理/05_薪酬分析.pdf differ diff --git a/downloads/06_薪酬/薪酬管理/工资档案信息表-测试账号.xlsx b/downloads/06_薪酬/薪酬管理/工资档案信息表-测试账号.xlsx new file mode 100644 index 0000000..598c7ea Binary files /dev/null and b/downloads/06_薪酬/薪酬管理/工资档案信息表-测试账号.xlsx differ diff --git a/downloads/07_审批/常规/02_审批模板库.pdf b/downloads/07_审批/常规/02_审批模板库.pdf new file mode 100644 index 0000000..15e4a6c Binary files /dev/null and b/downloads/07_审批/常规/02_审批模板库.pdf differ diff --git a/downloads/09_绩效/考核结果/01_员工绩效档案.pdf b/downloads/09_绩效/考核结果/01_员工绩效档案.pdf new file mode 100644 index 0000000..d5e3b1f Binary files /dev/null and b/downloads/09_绩效/考核结果/01_员工绩效档案.pdf differ diff --git a/downloads/09_绩效/考核设置/02_考核模板库.pdf b/downloads/09_绩效/考核设置/02_考核模板库.pdf new file mode 100644 index 0000000..7fa9402 Binary files /dev/null and b/downloads/09_绩效/考核设置/02_考核模板库.pdf differ diff --git a/downloads/10_社保公积金/常规/03_参保档案.pdf b/downloads/10_社保公积金/常规/03_参保档案.pdf new file mode 100644 index 0000000..ed5c530 Binary files /dev/null and b/downloads/10_社保公积金/常规/03_参保档案.pdf differ diff --git a/downloads/10_社保公积金/常规/04_社保报表.pdf b/downloads/10_社保公积金/常规/04_社保报表.pdf new file mode 100644 index 0000000..d51e3b4 Binary files /dev/null and b/downloads/10_社保公积金/常规/04_社保报表.pdf differ diff --git a/downloads/10_社保公积金/常规/05_社保分析.pdf b/downloads/10_社保公积金/常规/05_社保分析.pdf new file mode 100644 index 0000000..5546912 Binary files /dev/null and b/downloads/10_社保公积金/常规/05_社保分析.pdf differ diff --git a/downloads/11_行政管理/常规/01_企业公告.pdf b/downloads/11_行政管理/常规/01_企业公告.pdf new file mode 100644 index 0000000..c62ca66 Binary files /dev/null and b/downloads/11_行政管理/常规/01_企业公告.pdf differ diff --git a/downloads/11_行政管理/常规/02_企业制度.pdf b/downloads/11_行政管理/常规/02_企业制度.pdf new file mode 100644 index 0000000..8c84f86 Binary files /dev/null and b/downloads/11_行政管理/常规/02_企业制度.pdf differ diff --git a/downloads/11_行政管理/常规/04_开具证明.pdf b/downloads/11_行政管理/常规/04_开具证明.pdf new file mode 100644 index 0000000..165c7d4 Binary files /dev/null and b/downloads/11_行政管理/常规/04_开具证明.pdf differ diff --git a/downloads/11_行政管理/问卷调查/02_问卷模板库.pdf b/downloads/11_行政管理/问卷调查/02_问卷模板库.pdf new file mode 100644 index 0000000..e06c6e3 Binary files /dev/null and b/downloads/11_行政管理/问卷调查/02_问卷模板库.pdf differ diff --git a/downloads/12_电子合同/合同签署/04_合同档案库.pdf b/downloads/12_电子合同/合同签署/04_合同档案库.pdf new file mode 100644 index 0000000..6070fa1 Binary files /dev/null and b/downloads/12_电子合同/合同签署/04_合同档案库.pdf differ diff --git a/downloads/12_电子合同/设置/02_合同模板.pdf b/downloads/12_电子合同/设置/02_合同模板.pdf new file mode 100644 index 0000000..7f5c82d Binary files /dev/null and b/downloads/12_电子合同/设置/02_合同模板.pdf differ diff --git a/downloads/16_人事仪表盘/常规/01_我的仪表盘.pdf b/downloads/16_人事仪表盘/常规/01_我的仪表盘.pdf new file mode 100644 index 0000000..c4223ee Binary files /dev/null and b/downloads/16_人事仪表盘/常规/01_我的仪表盘.pdf differ diff --git a/downloads/16_人事仪表盘/常规/02_报告老板.pdf b/downloads/16_人事仪表盘/常规/02_报告老板.pdf new file mode 100644 index 0000000..0eefd96 Binary files /dev/null and b/downloads/16_人事仪表盘/常规/02_报告老板.pdf differ diff --git a/downloads/20_电子工资条/常规/04_统计分析.pdf b/downloads/20_电子工资条/常规/04_统计分析.pdf new file mode 100644 index 0000000..233c30b Binary files /dev/null and b/downloads/20_电子工资条/常规/04_统计分析.pdf differ diff --git a/downloads/21_智能薪酬/报表中心/01_薪酬报表.pdf b/downloads/21_智能薪酬/报表中心/01_薪酬报表.pdf new file mode 100644 index 0000000..4f38143 Binary files /dev/null and b/downloads/21_智能薪酬/报表中心/01_薪酬报表.pdf differ diff --git a/downloads/21_智能薪酬/报表中心/02_薪酬分析.pdf b/downloads/21_智能薪酬/报表中心/02_薪酬分析.pdf new file mode 100644 index 0000000..bcbe5cf Binary files /dev/null and b/downloads/21_智能薪酬/报表中心/02_薪酬分析.pdf differ diff --git a/downloads/21_智能薪酬/薪酬数据/01_薪酬档案.pdf b/downloads/21_智能薪酬/薪酬数据/01_薪酬档案.pdf new file mode 100644 index 0000000..ff71acd Binary files /dev/null and b/downloads/21_智能薪酬/薪酬数据/01_薪酬档案.pdf differ diff --git a/downloads/23_AI员工助手/数据统计/01_总体使用情况.pdf b/downloads/23_AI员工助手/数据统计/01_总体使用情况.pdf new file mode 100644 index 0000000..88e42f8 Binary files /dev/null and b/downloads/23_AI员工助手/数据统计/01_总体使用情况.pdf differ diff --git a/downloads/_任务中心/参保档案列表-已参保_20260717223201.xlsx b/downloads/_任务中心/参保档案列表-已参保_20260717223201.xlsx new file mode 100644 index 0000000..67e46a1 Binary files /dev/null and b/downloads/_任务中心/参保档案列表-已参保_20260717223201.xlsx differ diff --git a/downloads/_任务中心/已签署_电子合同签署记录_20260717223308.xlsx b/downloads/_任务中心/已签署_电子合同签署记录_20260717223308.xlsx new file mode 100644 index 0000000..d06b706 Binary files /dev/null and b/downloads/_任务中心/已签署_电子合同签署记录_20260717223308.xlsx differ diff --git a/downloads/_任务中心/薪酬档案导出_20260717172740.xlsx b/downloads/_任务中心/薪酬档案导出_20260717172740.xlsx new file mode 100644 index 0000000..208bccf Binary files /dev/null and b/downloads/_任务中心/薪酬档案导出_20260717172740.xlsx differ diff --git a/screenshots/.DS_Store b/screenshots/.DS_Store new file mode 100644 index 0000000..2e376ed Binary files /dev/null and b/screenshots/.DS_Store differ diff --git a/screenshots/01_工作台/工作台首页.jpg b/screenshots/01_工作台/工作台首页.jpg new file mode 100644 index 0000000..08724ab Binary files /dev/null and b/screenshots/01_工作台/工作台首页.jpg differ diff --git a/screenshots/02_人事/.DS_Store b/screenshots/02_人事/.DS_Store new file mode 100644 index 0000000..4c2734f Binary files /dev/null and b/screenshots/02_人事/.DS_Store differ diff --git a/screenshots/02_人事/员工关系/01_入职管理.jpg b/screenshots/02_人事/员工关系/01_入职管理.jpg new file mode 100644 index 0000000..8a77855 Binary files /dev/null and b/screenshots/02_人事/员工关系/01_入职管理.jpg differ diff --git a/screenshots/02_人事/员工关系/01_入职管理__filter.jpg b/screenshots/02_人事/员工关系/01_入职管理__filter.jpg new file mode 100644 index 0000000..dc4a2ea Binary files /dev/null and b/screenshots/02_人事/员工关系/01_入职管理__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/02_转正管理.jpg b/screenshots/02_人事/员工关系/02_转正管理.jpg new file mode 100644 index 0000000..2c7b396 Binary files /dev/null and b/screenshots/02_人事/员工关系/02_转正管理.jpg differ diff --git a/screenshots/02_人事/员工关系/02_转正管理__filter.jpg b/screenshots/02_人事/员工关系/02_转正管理__filter.jpg new file mode 100644 index 0000000..77625b9 Binary files /dev/null and b/screenshots/02_人事/员工关系/02_转正管理__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/03_离职管理.jpg b/screenshots/02_人事/员工关系/03_离职管理.jpg new file mode 100644 index 0000000..3cfa757 Binary files /dev/null and b/screenshots/02_人事/员工关系/03_离职管理.jpg differ diff --git a/screenshots/02_人事/员工关系/03_离职管理__columns.jpg b/screenshots/02_人事/员工关系/03_离职管理__columns.jpg new file mode 100644 index 0000000..5256324 Binary files /dev/null and b/screenshots/02_人事/员工关系/03_离职管理__columns.jpg differ diff --git a/screenshots/02_人事/员工关系/03_离职管理__filter.jpg b/screenshots/02_人事/员工关系/03_离职管理__filter.jpg new file mode 100644 index 0000000..29505b2 Binary files /dev/null and b/screenshots/02_人事/员工关系/03_离职管理__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/04_人事异动.jpg b/screenshots/02_人事/员工关系/04_人事异动.jpg new file mode 100644 index 0000000..f539e8a Binary files /dev/null and b/screenshots/02_人事/员工关系/04_人事异动.jpg differ diff --git a/screenshots/02_人事/员工关系/04_人事异动__columns.jpg b/screenshots/02_人事/员工关系/04_人事异动__columns.jpg new file mode 100644 index 0000000..2faa8a8 Binary files /dev/null and b/screenshots/02_人事/员工关系/04_人事异动__columns.jpg differ diff --git a/screenshots/02_人事/员工关系/05_关怀通知.jpg b/screenshots/02_人事/员工关系/05_关怀通知.jpg new file mode 100644 index 0000000..d5effac Binary files /dev/null and b/screenshots/02_人事/员工关系/05_关怀通知.jpg differ diff --git a/screenshots/02_人事/员工关系/05_关怀通知__add.jpg b/screenshots/02_人事/员工关系/05_关怀通知__add.jpg new file mode 100644 index 0000000..59c4801 Binary files /dev/null and b/screenshots/02_人事/员工关系/05_关怀通知__add.jpg differ diff --git a/screenshots/02_人事/员工关系/06_合同管理.jpg b/screenshots/02_人事/员工关系/06_合同管理.jpg new file mode 100644 index 0000000..87a1bbc Binary files /dev/null and b/screenshots/02_人事/员工关系/06_合同管理.jpg differ diff --git a/screenshots/02_人事/员工关系/06_合同管理__filter.jpg b/screenshots/02_人事/员工关系/06_合同管理__filter.jpg new file mode 100644 index 0000000..72ea583 Binary files /dev/null and b/screenshots/02_人事/员工关系/06_合同管理__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/07_沟通记录.jpg b/screenshots/02_人事/员工关系/07_沟通记录.jpg new file mode 100644 index 0000000..ff33309 Binary files /dev/null and b/screenshots/02_人事/员工关系/07_沟通记录.jpg differ diff --git a/screenshots/02_人事/员工关系/07_沟通记录__add.jpg b/screenshots/02_人事/员工关系/07_沟通记录__add.jpg new file mode 100644 index 0000000..c2d8039 Binary files /dev/null and b/screenshots/02_人事/员工关系/07_沟通记录__add.jpg differ diff --git a/screenshots/02_人事/员工关系/07_沟通记录__filter.jpg b/screenshots/02_人事/员工关系/07_沟通记录__filter.jpg new file mode 100644 index 0000000..4e843c0 Binary files /dev/null and b/screenshots/02_人事/员工关系/07_沟通记录__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/08_任职记录.jpg b/screenshots/02_人事/员工关系/08_任职记录.jpg new file mode 100644 index 0000000..e1074c1 Binary files /dev/null and b/screenshots/02_人事/员工关系/08_任职记录.jpg differ diff --git a/screenshots/02_人事/员工关系/08_任职记录__add.jpg b/screenshots/02_人事/员工关系/08_任职记录__add.jpg new file mode 100644 index 0000000..a70f330 Binary files /dev/null and b/screenshots/02_人事/员工关系/08_任职记录__add.jpg differ diff --git a/screenshots/02_人事/员工关系/08_任职记录__columns.jpg b/screenshots/02_人事/员工关系/08_任职记录__columns.jpg new file mode 100644 index 0000000..9562db6 Binary files /dev/null and b/screenshots/02_人事/员工关系/08_任职记录__columns.jpg differ diff --git a/screenshots/02_人事/员工关系/08_任职记录__filter.jpg b/screenshots/02_人事/员工关系/08_任职记录__filter.jpg new file mode 100644 index 0000000..e10fe17 Binary files /dev/null and b/screenshots/02_人事/员工关系/08_任职记录__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/09_培训经历.jpg b/screenshots/02_人事/员工关系/09_培训经历.jpg new file mode 100644 index 0000000..80b9875 Binary files /dev/null and b/screenshots/02_人事/员工关系/09_培训经历.jpg differ diff --git a/screenshots/02_人事/员工关系/09_培训经历__columns.jpg b/screenshots/02_人事/员工关系/09_培训经历__columns.jpg new file mode 100644 index 0000000..f90c400 Binary files /dev/null and b/screenshots/02_人事/员工关系/09_培训经历__columns.jpg differ diff --git a/screenshots/02_人事/员工关系/09_培训经历__filter.jpg b/screenshots/02_人事/员工关系/09_培训经历__filter.jpg new file mode 100644 index 0000000..9d83b26 Binary files /dev/null and b/screenshots/02_人事/员工关系/09_培训经历__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/10_奖惩记录.jpg b/screenshots/02_人事/员工关系/10_奖惩记录.jpg new file mode 100644 index 0000000..81b532b Binary files /dev/null and b/screenshots/02_人事/员工关系/10_奖惩记录.jpg differ diff --git a/screenshots/02_人事/员工关系/10_奖惩记录__add.jpg b/screenshots/02_人事/员工关系/10_奖惩记录__add.jpg new file mode 100644 index 0000000..25ccd14 Binary files /dev/null and b/screenshots/02_人事/员工关系/10_奖惩记录__add.jpg differ diff --git a/screenshots/02_人事/员工关系/10_奖惩记录__columns.jpg b/screenshots/02_人事/员工关系/10_奖惩记录__columns.jpg new file mode 100644 index 0000000..099d81a Binary files /dev/null and b/screenshots/02_人事/员工关系/10_奖惩记录__columns.jpg differ diff --git a/screenshots/02_人事/员工关系/11_考察期管理.jpg b/screenshots/02_人事/员工关系/11_考察期管理.jpg new file mode 100644 index 0000000..5c60b51 Binary files /dev/null and b/screenshots/02_人事/员工关系/11_考察期管理.jpg differ diff --git a/screenshots/02_人事/员工关系/11_考察期管理__add.jpg b/screenshots/02_人事/员工关系/11_考察期管理__add.jpg new file mode 100644 index 0000000..17ec84f Binary files /dev/null and b/screenshots/02_人事/员工关系/11_考察期管理__add.jpg differ diff --git a/screenshots/02_人事/员工关系/11_考察期管理__columns.jpg b/screenshots/02_人事/员工关系/11_考察期管理__columns.jpg new file mode 100644 index 0000000..e3580eb Binary files /dev/null and b/screenshots/02_人事/员工关系/11_考察期管理__columns.jpg differ diff --git a/screenshots/02_人事/员工关系/11_考察期管理__filter.jpg b/screenshots/02_人事/员工关系/11_考察期管理__filter.jpg new file mode 100644 index 0000000..80a98d5 Binary files /dev/null and b/screenshots/02_人事/员工关系/11_考察期管理__filter.jpg differ diff --git a/screenshots/02_人事/员工关系/12_实习生管理.jpg b/screenshots/02_人事/员工关系/12_实习生管理.jpg new file mode 100644 index 0000000..b9875d6 Binary files /dev/null and b/screenshots/02_人事/员工关系/12_实习生管理.jpg differ diff --git a/screenshots/02_人事/员工关系/12_实习生管理__add.jpg b/screenshots/02_人事/员工关系/12_实习生管理__add.jpg new file mode 100644 index 0000000..d86a5cc Binary files /dev/null and b/screenshots/02_人事/员工关系/12_实习生管理__add.jpg differ diff --git a/screenshots/02_人事/员工关系/12_实习生管理__columns.jpg b/screenshots/02_人事/员工关系/12_实习生管理__columns.jpg new file mode 100644 index 0000000..ae737cd Binary files /dev/null and b/screenshots/02_人事/员工关系/12_实习生管理__columns.jpg differ diff --git a/screenshots/02_人事/员工关系/12_实习生管理__filter.jpg b/screenshots/02_人事/员工关系/12_实习生管理__filter.jpg new file mode 100644 index 0000000..d2b7f19 Binary files /dev/null and b/screenshots/02_人事/员工关系/12_实习生管理__filter.jpg differ diff --git a/screenshots/02_人事/员工管理/01_员工花名册.jpg b/screenshots/02_人事/员工管理/01_员工花名册.jpg new file mode 100644 index 0000000..71d225c Binary files /dev/null and b/screenshots/02_人事/员工管理/01_员工花名册.jpg differ diff --git a/screenshots/02_人事/员工管理/01_员工花名册__add.jpg b/screenshots/02_人事/员工管理/01_员工花名册__add.jpg new file mode 100644 index 0000000..aaa365a Binary files /dev/null and b/screenshots/02_人事/员工管理/01_员工花名册__add.jpg differ diff --git a/screenshots/02_人事/员工管理/01_员工花名册__columns.jpg b/screenshots/02_人事/员工管理/01_员工花名册__columns.jpg new file mode 100644 index 0000000..79e96a7 Binary files /dev/null and b/screenshots/02_人事/员工管理/01_员工花名册__columns.jpg differ diff --git a/screenshots/02_人事/员工管理/01_员工花名册__filter.jpg b/screenshots/02_人事/员工管理/01_员工花名册__filter.jpg new file mode 100644 index 0000000..1dabe66 Binary files /dev/null and b/screenshots/02_人事/员工管理/01_员工花名册__filter.jpg differ diff --git a/screenshots/02_人事/员工管理/02_员工档案库.jpg b/screenshots/02_人事/员工管理/02_员工档案库.jpg new file mode 100644 index 0000000..b0ed329 Binary files /dev/null and b/screenshots/02_人事/员工管理/02_员工档案库.jpg differ diff --git a/screenshots/02_人事/员工管理/03_统计分析.jpg b/screenshots/02_人事/员工管理/03_统计分析.jpg new file mode 100644 index 0000000..a612773 Binary files /dev/null and b/screenshots/02_人事/员工管理/03_统计分析.jpg differ diff --git a/screenshots/02_人事/员工管理/04_人事报表.jpg b/screenshots/02_人事/员工管理/04_人事报表.jpg new file mode 100644 index 0000000..058bed9 Binary files /dev/null and b/screenshots/02_人事/员工管理/04_人事报表.jpg differ diff --git a/screenshots/02_人事/员工管理/04_人事报表__add.jpg b/screenshots/02_人事/员工管理/04_人事报表__add.jpg new file mode 100644 index 0000000..199c773 Binary files /dev/null and b/screenshots/02_人事/员工管理/04_人事报表__add.jpg differ diff --git a/screenshots/02_人事/员工管理/05_万能人事表格.jpg b/screenshots/02_人事/员工管理/05_万能人事表格.jpg new file mode 100644 index 0000000..480dee8 Binary files /dev/null and b/screenshots/02_人事/员工管理/05_万能人事表格.jpg differ diff --git a/screenshots/02_人事/员工管理/06_人事动态.jpg b/screenshots/02_人事/员工管理/06_人事动态.jpg new file mode 100644 index 0000000..4232c95 Binary files /dev/null and b/screenshots/02_人事/员工管理/06_人事动态.jpg differ diff --git a/screenshots/03_组织/.DS_Store b/screenshots/03_组织/.DS_Store new file mode 100644 index 0000000..bf0d6b2 Binary files /dev/null and b/screenshots/03_组织/.DS_Store differ diff --git a/screenshots/03_组织/岗位管理/01_岗位管理.jpg b/screenshots/03_组织/岗位管理/01_岗位管理.jpg new file mode 100644 index 0000000..a751a49 Binary files /dev/null and b/screenshots/03_组织/岗位管理/01_岗位管理.jpg differ diff --git a/screenshots/03_组织/岗位管理/01_岗位管理__add.jpg b/screenshots/03_组织/岗位管理/01_岗位管理__add.jpg new file mode 100644 index 0000000..76b03c2 Binary files /dev/null and b/screenshots/03_组织/岗位管理/01_岗位管理__add.jpg differ diff --git a/screenshots/03_组织/岗位管理/01_岗位管理__filter.jpg b/screenshots/03_组织/岗位管理/01_岗位管理__filter.jpg new file mode 100644 index 0000000..eb60d50 Binary files /dev/null and b/screenshots/03_组织/岗位管理/01_岗位管理__filter.jpg differ diff --git a/screenshots/03_组织/岗位管理/02_职务管理.jpg b/screenshots/03_组织/岗位管理/02_职务管理.jpg new file mode 100644 index 0000000..a233458 Binary files /dev/null and b/screenshots/03_组织/岗位管理/02_职务管理.jpg differ diff --git a/screenshots/03_组织/岗位管理/03_员工标签.jpg b/screenshots/03_组织/岗位管理/03_员工标签.jpg new file mode 100644 index 0000000..a61976b Binary files /dev/null and b/screenshots/03_组织/岗位管理/03_员工标签.jpg differ diff --git a/screenshots/03_组织/岗位管理/04_职级管理.jpg b/screenshots/03_组织/岗位管理/04_职级管理.jpg new file mode 100644 index 0000000..5b32499 Binary files /dev/null and b/screenshots/03_组织/岗位管理/04_职级管理.jpg differ diff --git a/screenshots/03_组织/岗位管理/05_组织报表.jpg b/screenshots/03_组织/岗位管理/05_组织报表.jpg new file mode 100644 index 0000000..1680639 Binary files /dev/null and b/screenshots/03_组织/岗位管理/05_组织报表.jpg differ diff --git a/screenshots/03_组织/组织架构/01_组织管理.jpg b/screenshots/03_组织/组织架构/01_组织管理.jpg new file mode 100644 index 0000000..43ba381 Binary files /dev/null and b/screenshots/03_组织/组织架构/01_组织管理.jpg differ diff --git a/screenshots/03_组织/组织架构/01_组织管理__add.jpg b/screenshots/03_组织/组织架构/01_组织管理__add.jpg new file mode 100644 index 0000000..3cb5688 Binary files /dev/null and b/screenshots/03_组织/组织架构/01_组织管理__add.jpg differ diff --git a/screenshots/03_组织/组织架构/01_组织管理__filter.jpg b/screenshots/03_组织/组织架构/01_组织管理__filter.jpg new file mode 100644 index 0000000..948ae0a Binary files /dev/null and b/screenshots/03_组织/组织架构/01_组织管理__filter.jpg differ diff --git a/screenshots/03_组织/组织架构/02_架构图.jpg b/screenshots/03_组织/组织架构/02_架构图.jpg new file mode 100644 index 0000000..18b3a7a Binary files /dev/null and b/screenshots/03_组织/组织架构/02_架构图.jpg differ diff --git a/screenshots/03_组织/组织架构/03_工作地点.jpg b/screenshots/03_组织/组织架构/03_工作地点.jpg new file mode 100644 index 0000000..34c3418 Binary files /dev/null and b/screenshots/03_组织/组织架构/03_工作地点.jpg differ diff --git a/screenshots/04_招聘/.DS_Store b/screenshots/04_招聘/.DS_Store new file mode 100644 index 0000000..c85f9ac Binary files /dev/null and b/screenshots/04_招聘/.DS_Store differ diff --git a/screenshots/04_招聘/候选人/01_招聘中.jpg b/screenshots/04_招聘/候选人/01_招聘中.jpg new file mode 100644 index 0000000..ac4efb8 Binary files /dev/null and b/screenshots/04_招聘/候选人/01_招聘中.jpg differ diff --git a/screenshots/04_招聘/候选人/02_已入职.jpg b/screenshots/04_招聘/候选人/02_已入职.jpg new file mode 100644 index 0000000..fb2a162 Binary files /dev/null and b/screenshots/04_招聘/候选人/02_已入职.jpg differ diff --git a/screenshots/04_招聘/候选人/03_已淘汰.jpg b/screenshots/04_招聘/候选人/03_已淘汰.jpg new file mode 100644 index 0000000..b791658 Binary files /dev/null and b/screenshots/04_招聘/候选人/03_已淘汰.jpg differ diff --git a/screenshots/04_招聘/候选人/04_招聘职位.jpg b/screenshots/04_招聘/候选人/04_招聘职位.jpg new file mode 100644 index 0000000..0111af9 Binary files /dev/null and b/screenshots/04_招聘/候选人/04_招聘职位.jpg differ diff --git a/screenshots/04_招聘/候选人/05_招聘门户.jpg b/screenshots/04_招聘/候选人/05_招聘门户.jpg new file mode 100644 index 0000000..5a56229 Binary files /dev/null and b/screenshots/04_招聘/候选人/05_招聘门户.jpg differ diff --git a/screenshots/04_招聘/候选人/05_招聘门户__add.jpg b/screenshots/04_招聘/候选人/05_招聘门户__add.jpg new file mode 100644 index 0000000..513f878 Binary files /dev/null and b/screenshots/04_招聘/候选人/05_招聘门户__add.jpg differ diff --git a/screenshots/04_招聘/候选人/05_招聘门户__detail.jpg b/screenshots/04_招聘/候选人/05_招聘门户__detail.jpg new file mode 100644 index 0000000..9b3d335 Binary files /dev/null and b/screenshots/04_招聘/候选人/05_招聘门户__detail.jpg differ diff --git a/screenshots/04_招聘/候选人/06_面试日程.jpg b/screenshots/04_招聘/候选人/06_面试日程.jpg new file mode 100644 index 0000000..5e5ac5b Binary files /dev/null and b/screenshots/04_招聘/候选人/06_面试日程.jpg differ diff --git a/screenshots/04_招聘/候选人/07_人才库.jpg b/screenshots/04_招聘/候选人/07_人才库.jpg new file mode 100644 index 0000000..efe5134 Binary files /dev/null and b/screenshots/04_招聘/候选人/07_人才库.jpg differ diff --git a/screenshots/04_招聘/候选人/07_人才库__add.jpg b/screenshots/04_招聘/候选人/07_人才库__add.jpg new file mode 100644 index 0000000..540d3b2 Binary files /dev/null and b/screenshots/04_招聘/候选人/07_人才库__add.jpg differ diff --git a/screenshots/04_招聘/常规/01_概览.jpg b/screenshots/04_招聘/常规/01_概览.jpg new file mode 100644 index 0000000..f345318 Binary files /dev/null and b/screenshots/04_招聘/常规/01_概览.jpg differ diff --git a/screenshots/04_招聘/统计分析/01_招聘报表.jpg b/screenshots/04_招聘/统计分析/01_招聘报表.jpg new file mode 100644 index 0000000..6b821b8 Binary files /dev/null and b/screenshots/04_招聘/统计分析/01_招聘报表.jpg differ diff --git a/screenshots/04_招聘/统计分析/01_招聘报表__add.jpg b/screenshots/04_招聘/统计分析/01_招聘报表__add.jpg new file mode 100644 index 0000000..d096723 Binary files /dev/null and b/screenshots/04_招聘/统计分析/01_招聘报表__add.jpg differ diff --git a/screenshots/04_招聘/统计分析/02_招聘分析.jpg b/screenshots/04_招聘/统计分析/02_招聘分析.jpg new file mode 100644 index 0000000..b90be53 Binary files /dev/null and b/screenshots/04_招聘/统计分析/02_招聘分析.jpg differ diff --git a/screenshots/04_招聘/设置/01_招聘团队.jpg b/screenshots/04_招聘/设置/01_招聘团队.jpg new file mode 100644 index 0000000..ae72d02 Binary files /dev/null and b/screenshots/04_招聘/设置/01_招聘团队.jpg differ diff --git a/screenshots/04_招聘/设置/02_招聘工具.jpg b/screenshots/04_招聘/设置/02_招聘工具.jpg new file mode 100644 index 0000000..f707d37 Binary files /dev/null and b/screenshots/04_招聘/设置/02_招聘工具.jpg differ diff --git a/screenshots/04_招聘/设置/03_招聘渠道.jpg b/screenshots/04_招聘/设置/03_招聘渠道.jpg new file mode 100644 index 0000000..2581e6b Binary files /dev/null and b/screenshots/04_招聘/设置/03_招聘渠道.jpg differ diff --git a/screenshots/04_招聘/设置/04_模板设置.jpg b/screenshots/04_招聘/设置/04_模板设置.jpg new file mode 100644 index 0000000..52d5f01 Binary files /dev/null and b/screenshots/04_招聘/设置/04_模板设置.jpg differ diff --git a/screenshots/04_招聘/设置/05_更多设置.jpg b/screenshots/04_招聘/设置/05_更多设置.jpg new file mode 100644 index 0000000..9a8667f Binary files /dev/null and b/screenshots/04_招聘/设置/05_更多设置.jpg differ diff --git a/screenshots/05_考勤假期/.DS_Store b/screenshots/05_考勤假期/.DS_Store new file mode 100644 index 0000000..5178117 Binary files /dev/null and b/screenshots/05_考勤假期/.DS_Store differ diff --git a/screenshots/05_考勤假期/假期管理/01_休假一览.jpg b/screenshots/05_考勤假期/假期管理/01_休假一览.jpg new file mode 100644 index 0000000..039909c Binary files /dev/null and b/screenshots/05_考勤假期/假期管理/01_休假一览.jpg differ diff --git a/screenshots/05_考勤假期/假期管理/01_休假一览__filter.jpg b/screenshots/05_考勤假期/假期管理/01_休假一览__filter.jpg new file mode 100644 index 0000000..2cf5abe Binary files /dev/null and b/screenshots/05_考勤假期/假期管理/01_休假一览__filter.jpg differ diff --git a/screenshots/05_考勤假期/假期管理/02_手动调整.jpg b/screenshots/05_考勤假期/假期管理/02_手动调整.jpg new file mode 100644 index 0000000..636e84a Binary files /dev/null and b/screenshots/05_考勤假期/假期管理/02_手动调整.jpg differ diff --git a/screenshots/05_考勤假期/假期管理/03_假期余额.jpg b/screenshots/05_考勤假期/假期管理/03_假期余额.jpg new file mode 100644 index 0000000..36630fe Binary files /dev/null and b/screenshots/05_考勤假期/假期管理/03_假期余额.jpg differ diff --git a/screenshots/05_考勤假期/假期管理/04_假期方案.jpg b/screenshots/05_考勤假期/假期管理/04_假期方案.jpg new file mode 100644 index 0000000..0a38446 Binary files /dev/null and b/screenshots/05_考勤假期/假期管理/04_假期方案.jpg differ diff --git a/screenshots/05_考勤假期/假期管理/04_假期方案__filter.jpg b/screenshots/05_考勤假期/假期管理/04_假期方案__filter.jpg new file mode 100644 index 0000000..482b65d Binary files /dev/null and b/screenshots/05_考勤假期/假期管理/04_假期方案__filter.jpg differ diff --git a/screenshots/05_考勤假期/假期管理/05_假期设置.jpg b/screenshots/05_考勤假期/假期管理/05_假期设置.jpg new file mode 100644 index 0000000..bcb549f Binary files /dev/null and b/screenshots/05_考勤假期/假期管理/05_假期设置.jpg differ diff --git a/screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg b/screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg new file mode 100644 index 0000000..ec7acb8 Binary files /dev/null and b/screenshots/05_考勤假期/考勤管理/01_考勤分组.jpg differ diff --git a/screenshots/05_考勤假期/考勤管理/02_排班管理.jpg b/screenshots/05_考勤假期/考勤管理/02_排班管理.jpg new file mode 100644 index 0000000..9f956d1 Binary files /dev/null and b/screenshots/05_考勤假期/考勤管理/02_排班管理.jpg differ diff --git a/screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg b/screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg new file mode 100644 index 0000000..3abe3ae Binary files /dev/null and b/screenshots/05_考勤假期/考勤管理/03_考勤规则.jpg differ diff --git a/screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg b/screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg new file mode 100644 index 0000000..c7c4a8b Binary files /dev/null and b/screenshots/05_考勤假期/考勤管理/04_打卡方式.jpg differ diff --git a/screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg b/screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg new file mode 100644 index 0000000..c03f4ba Binary files /dev/null and b/screenshots/05_考勤假期/考勤管理/05_考勤设置.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg b/screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg new file mode 100644 index 0000000..4c5a4de Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/01_每日考勤.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/01_每日考勤__columns.jpg b/screenshots/05_考勤假期/考勤统计/01_每日考勤__columns.jpg new file mode 100644 index 0000000..a92677b Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/01_每日考勤__columns.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/01_每日考勤__filter.jpg b/screenshots/05_考勤假期/考勤统计/01_每日考勤__filter.jpg new file mode 100644 index 0000000..8819362 Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/01_每日考勤__filter.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg b/screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg new file mode 100644 index 0000000..61d8e02 Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/02_月考勤表.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/02_月考勤表__filter.jpg b/screenshots/05_考勤假期/考勤统计/02_月考勤表__filter.jpg new file mode 100644 index 0000000..8b3ff33 Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/02_月考勤表__filter.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/03_明细记录.jpg b/screenshots/05_考勤假期/考勤统计/03_明细记录.jpg new file mode 100644 index 0000000..851676a Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/03_明细记录.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/03_明细记录__filter.jpg b/screenshots/05_考勤假期/考勤统计/03_明细记录__filter.jpg new file mode 100644 index 0000000..6b70e6c Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/03_明细记录__filter.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg b/screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg new file mode 100644 index 0000000..5565db5 Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/04_考勤报表.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/04_考勤报表__add.jpg b/screenshots/05_考勤假期/考勤统计/04_考勤报表__add.jpg new file mode 100644 index 0000000..894adcc Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/04_考勤报表__add.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/05_字段管理.jpg b/screenshots/05_考勤假期/考勤统计/05_字段管理.jpg new file mode 100644 index 0000000..1b38ab3 Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/05_字段管理.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/05_字段管理__filter.jpg b/screenshots/05_考勤假期/考勤统计/05_字段管理__filter.jpg new file mode 100644 index 0000000..8dc3746 Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/05_字段管理__filter.jpg differ diff --git a/screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg b/screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg new file mode 100644 index 0000000..9ee54cc Binary files /dev/null and b/screenshots/05_考勤假期/考勤统计/06_考勤确认.jpg differ diff --git a/screenshots/06_薪酬/.DS_Store b/screenshots/06_薪酬/.DS_Store new file mode 100644 index 0000000..1e38a9c Binary files /dev/null and b/screenshots/06_薪酬/.DS_Store differ diff --git a/screenshots/06_薪酬/薪酬管理/01_月工资表.jpg b/screenshots/06_薪酬/薪酬管理/01_月工资表.jpg new file mode 100644 index 0000000..ecb4e5d Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/01_月工资表.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/02_工资发放.jpg b/screenshots/06_薪酬/薪酬管理/02_工资发放.jpg new file mode 100644 index 0000000..165823d Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/02_工资发放.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg b/screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg new file mode 100644 index 0000000..5b8f70a Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/03_员工薪资.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg b/screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg new file mode 100644 index 0000000..b7112a5 Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/04_薪酬报表.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg b/screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg new file mode 100644 index 0000000..7bfd1a0 Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/05_薪酬分析.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg b/screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg new file mode 100644 index 0000000..dcab19d Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/06_计薪规则.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg b/screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg new file mode 100644 index 0000000..c5a1526 Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/07_薪酬设置.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg b/screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg new file mode 100644 index 0000000..ee7cf9f Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/08_年终奖计算.jpg differ diff --git a/screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg b/screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg new file mode 100644 index 0000000..0364f78 Binary files /dev/null and b/screenshots/06_薪酬/薪酬管理/09_发送工资条.jpg differ diff --git a/screenshots/07_审批/.DS_Store b/screenshots/07_审批/.DS_Store new file mode 100644 index 0000000..0a5a3ed Binary files /dev/null and b/screenshots/07_审批/.DS_Store differ diff --git a/screenshots/07_审批/常规/01_审批表单.jpg b/screenshots/07_审批/常规/01_审批表单.jpg new file mode 100644 index 0000000..7b116a1 Binary files /dev/null and b/screenshots/07_审批/常规/01_审批表单.jpg differ diff --git a/screenshots/07_审批/常规/02_审批模板库.jpg b/screenshots/07_审批/常规/02_审批模板库.jpg new file mode 100644 index 0000000..f36e4ca Binary files /dev/null and b/screenshots/07_审批/常规/02_审批模板库.jpg differ diff --git a/screenshots/07_审批/常规/03_审批代理.jpg b/screenshots/07_审批/常规/03_审批代理.jpg new file mode 100644 index 0000000..1829cea Binary files /dev/null and b/screenshots/07_审批/常规/03_审批代理.jpg differ diff --git a/screenshots/07_审批/常规/04_审批记录.jpg b/screenshots/07_审批/常规/04_审批记录.jpg new file mode 100644 index 0000000..9064aaa Binary files /dev/null and b/screenshots/07_审批/常规/04_审批记录.jpg differ diff --git a/screenshots/07_审批/常规/04_审批记录__filter.jpg b/screenshots/07_审批/常规/04_审批记录__filter.jpg new file mode 100644 index 0000000..4cdbe6c Binary files /dev/null and b/screenshots/07_审批/常规/04_审批记录__filter.jpg differ diff --git a/screenshots/07_审批/常规/05_审批交接.jpg b/screenshots/07_审批/常规/05_审批交接.jpg new file mode 100644 index 0000000..c455eaa Binary files /dev/null and b/screenshots/07_审批/常规/05_审批交接.jpg differ diff --git a/screenshots/07_审批/常规/06_操作记录.jpg b/screenshots/07_审批/常规/06_操作记录.jpg new file mode 100644 index 0000000..1077ed1 Binary files /dev/null and b/screenshots/07_审批/常规/06_操作记录.jpg differ diff --git a/screenshots/08_培训学习/.DS_Store b/screenshots/08_培训学习/.DS_Store new file mode 100644 index 0000000..c5ea9e0 Binary files /dev/null and b/screenshots/08_培训学习/.DS_Store differ diff --git a/screenshots/08_培训学习/培训设置/01_讲师设置.jpg b/screenshots/08_培训学习/培训设置/01_讲师设置.jpg new file mode 100644 index 0000000..9232776 Binary files /dev/null and b/screenshots/08_培训学习/培训设置/01_讲师设置.jpg differ diff --git a/screenshots/08_培训学习/培训设置/01_讲师设置__add.jpg b/screenshots/08_培训学习/培训设置/01_讲师设置__add.jpg new file mode 100644 index 0000000..57be623 Binary files /dev/null and b/screenshots/08_培训学习/培训设置/01_讲师设置__add.jpg differ diff --git a/screenshots/08_培训学习/培训设置/02_团队设置.jpg b/screenshots/08_培训学习/培训设置/02_团队设置.jpg new file mode 100644 index 0000000..389d809 Binary files /dev/null and b/screenshots/08_培训学习/培训设置/02_团队设置.jpg differ diff --git a/screenshots/08_培训学习/培训设置/03_自定义设置.jpg b/screenshots/08_培训学习/培训设置/03_自定义设置.jpg new file mode 100644 index 0000000..276492d Binary files /dev/null and b/screenshots/08_培训学习/培训设置/03_自定义设置.jpg differ diff --git a/screenshots/08_培训学习/线上学习/01_课程库.jpg b/screenshots/08_培训学习/线上学习/01_课程库.jpg new file mode 100644 index 0000000..c782cde Binary files /dev/null and b/screenshots/08_培训学习/线上学习/01_课程库.jpg differ diff --git a/screenshots/08_培训学习/线上学习/02_学习计划.jpg b/screenshots/08_培训学习/线上学习/02_学习计划.jpg new file mode 100644 index 0000000..5e98a1f Binary files /dev/null and b/screenshots/08_培训学习/线上学习/02_学习计划.jpg differ diff --git a/screenshots/08_培训学习/线上学习/02_学习计划__add.jpg b/screenshots/08_培训学习/线上学习/02_学习计划__add.jpg new file mode 100644 index 0000000..14d6ba9 Binary files /dev/null and b/screenshots/08_培训学习/线上学习/02_学习计划__add.jpg differ diff --git a/screenshots/08_培训学习/线上学习/03_在线直播.jpg b/screenshots/08_培训学习/线上学习/03_在线直播.jpg new file mode 100644 index 0000000..3e29791 Binary files /dev/null and b/screenshots/08_培训学习/线上学习/03_在线直播.jpg differ diff --git a/screenshots/08_培训学习/线上学习/03_在线直播__add.jpg b/screenshots/08_培训学习/线上学习/03_在线直播__add.jpg new file mode 100644 index 0000000..115e560 Binary files /dev/null and b/screenshots/08_培训学习/线上学习/03_在线直播__add.jpg differ diff --git a/screenshots/08_培训学习/线上学习/03_在线直播__detail.jpg b/screenshots/08_培训学习/线上学习/03_在线直播__detail.jpg new file mode 100644 index 0000000..a3b2422 Binary files /dev/null and b/screenshots/08_培训学习/线上学习/03_在线直播__detail.jpg differ diff --git a/screenshots/08_培训学习/线上学习/04_学习进度.jpg b/screenshots/08_培训学习/线上学习/04_学习进度.jpg new file mode 100644 index 0000000..a633f05 Binary files /dev/null and b/screenshots/08_培训学习/线上学习/04_学习进度.jpg differ diff --git a/screenshots/08_培训学习/线上学习/05_学习记录.jpg b/screenshots/08_培训学习/线上学习/05_学习记录.jpg new file mode 100644 index 0000000..40789a2 Binary files /dev/null and b/screenshots/08_培训学习/线上学习/05_学习记录.jpg differ diff --git a/screenshots/08_培训学习/线下培训/01_培训计划.jpg b/screenshots/08_培训学习/线下培训/01_培训计划.jpg new file mode 100644 index 0000000..6c833ab Binary files /dev/null and b/screenshots/08_培训学习/线下培训/01_培训计划.jpg differ diff --git a/screenshots/08_培训学习/线下培训/01_培训计划__add.jpg b/screenshots/08_培训学习/线下培训/01_培训计划__add.jpg new file mode 100644 index 0000000..852a3a6 Binary files /dev/null and b/screenshots/08_培训学习/线下培训/01_培训计划__add.jpg differ diff --git a/screenshots/08_培训学习/线下培训/02_开课日程.jpg b/screenshots/08_培训学习/线下培训/02_开课日程.jpg new file mode 100644 index 0000000..300946c Binary files /dev/null and b/screenshots/08_培训学习/线下培训/02_开课日程.jpg differ diff --git a/screenshots/08_培训学习/线下培训/03_培训记录.jpg b/screenshots/08_培训学习/线下培训/03_培训记录.jpg new file mode 100644 index 0000000..31628cd Binary files /dev/null and b/screenshots/08_培训学习/线下培训/03_培训记录.jpg differ diff --git a/screenshots/08_培训学习/考试练习/01_题库管理.jpg b/screenshots/08_培训学习/考试练习/01_题库管理.jpg new file mode 100644 index 0000000..684306c Binary files /dev/null and b/screenshots/08_培训学习/考试练习/01_题库管理.jpg differ diff --git a/screenshots/08_培训学习/考试练习/01_题库管理__add.jpg b/screenshots/08_培训学习/考试练习/01_题库管理__add.jpg new file mode 100644 index 0000000..d50141a Binary files /dev/null and b/screenshots/08_培训学习/考试练习/01_题库管理__add.jpg differ diff --git a/screenshots/08_培训学习/考试练习/02_试卷管理.jpg b/screenshots/08_培训学习/考试练习/02_试卷管理.jpg new file mode 100644 index 0000000..77a78dc Binary files /dev/null and b/screenshots/08_培训学习/考试练习/02_试卷管理.jpg differ diff --git a/screenshots/08_培训学习/考试练习/03_考试安排.jpg b/screenshots/08_培训学习/考试练习/03_考试安排.jpg new file mode 100644 index 0000000..caf40d9 Binary files /dev/null and b/screenshots/08_培训学习/考试练习/03_考试安排.jpg differ diff --git a/screenshots/08_培训学习/考试练习/04_考试记录.jpg b/screenshots/08_培训学习/考试练习/04_考试记录.jpg new file mode 100644 index 0000000..7d7eb9d Binary files /dev/null and b/screenshots/08_培训学习/考试练习/04_考试记录.jpg differ diff --git a/screenshots/09_绩效/.DS_Store b/screenshots/09_绩效/.DS_Store new file mode 100644 index 0000000..23be793 Binary files /dev/null and b/screenshots/09_绩效/.DS_Store differ diff --git a/screenshots/09_绩效/常规/01_概览.jpg b/screenshots/09_绩效/常规/01_概览.jpg new file mode 100644 index 0000000..9a7ddd7 Binary files /dev/null and b/screenshots/09_绩效/常规/01_概览.jpg differ diff --git a/screenshots/09_绩效/考核管理/01_绩效考核.jpg b/screenshots/09_绩效/考核管理/01_绩效考核.jpg new file mode 100644 index 0000000..dc64aab Binary files /dev/null and b/screenshots/09_绩效/考核管理/01_绩效考核.jpg differ diff --git a/screenshots/09_绩效/考核管理/01_绩效考核__add.jpg b/screenshots/09_绩效/考核管理/01_绩效考核__add.jpg new file mode 100644 index 0000000..ad0b84d Binary files /dev/null and b/screenshots/09_绩效/考核管理/01_绩效考核__add.jpg differ diff --git a/screenshots/09_绩效/考核管理/02_历史绩效考核.jpg b/screenshots/09_绩效/考核管理/02_历史绩效考核.jpg new file mode 100644 index 0000000..01d362a Binary files /dev/null and b/screenshots/09_绩效/考核管理/02_历史绩效考核.jpg differ diff --git a/screenshots/09_绩效/考核管理/03_试用期考核.jpg b/screenshots/09_绩效/考核管理/03_试用期考核.jpg new file mode 100644 index 0000000..23246e2 Binary files /dev/null and b/screenshots/09_绩效/考核管理/03_试用期考核.jpg differ diff --git a/screenshots/09_绩效/考核管理/03_试用期考核__add.jpg b/screenshots/09_绩效/考核管理/03_试用期考核__add.jpg new file mode 100644 index 0000000..337a788 Binary files /dev/null and b/screenshots/09_绩效/考核管理/03_试用期考核__add.jpg differ diff --git a/screenshots/09_绩效/考核管理/04_晋升考核.jpg b/screenshots/09_绩效/考核管理/04_晋升考核.jpg new file mode 100644 index 0000000..e3e6a79 Binary files /dev/null and b/screenshots/09_绩效/考核管理/04_晋升考核.jpg differ diff --git a/screenshots/09_绩效/考核管理/04_晋升考核__add.jpg b/screenshots/09_绩效/考核管理/04_晋升考核__add.jpg new file mode 100644 index 0000000..95ca3c7 Binary files /dev/null and b/screenshots/09_绩效/考核管理/04_晋升考核__add.jpg differ diff --git a/screenshots/09_绩效/考核管理/05_考核组管理.jpg b/screenshots/09_绩效/考核管理/05_考核组管理.jpg new file mode 100644 index 0000000..acfb389 Binary files /dev/null and b/screenshots/09_绩效/考核管理/05_考核组管理.jpg differ diff --git a/screenshots/09_绩效/考核结果/01_员工绩效档案.jpg b/screenshots/09_绩效/考核结果/01_员工绩效档案.jpg new file mode 100644 index 0000000..856d334 Binary files /dev/null and b/screenshots/09_绩效/考核结果/01_员工绩效档案.jpg differ diff --git a/screenshots/09_绩效/考核结果/02_绩效考核记录.jpg b/screenshots/09_绩效/考核结果/02_绩效考核记录.jpg new file mode 100644 index 0000000..3a8e407 Binary files /dev/null and b/screenshots/09_绩效/考核结果/02_绩效考核记录.jpg differ diff --git a/screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg b/screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg new file mode 100644 index 0000000..2cdc26a Binary files /dev/null and b/screenshots/09_绩效/考核结果/03_绩效面谈记录.jpg differ diff --git a/screenshots/09_绩效/考核设置/01_指标库.jpg b/screenshots/09_绩效/考核设置/01_指标库.jpg new file mode 100644 index 0000000..e3429ab Binary files /dev/null and b/screenshots/09_绩效/考核设置/01_指标库.jpg differ diff --git a/screenshots/09_绩效/考核设置/01_指标库__add.jpg b/screenshots/09_绩效/考核设置/01_指标库__add.jpg new file mode 100644 index 0000000..8f2aca0 Binary files /dev/null and b/screenshots/09_绩效/考核设置/01_指标库__add.jpg differ diff --git a/screenshots/09_绩效/考核设置/02_考核模板库.jpg b/screenshots/09_绩效/考核设置/02_考核模板库.jpg new file mode 100644 index 0000000..d04fe05 Binary files /dev/null and b/screenshots/09_绩效/考核设置/02_考核模板库.jpg differ diff --git a/screenshots/09_绩效/考核设置/02_考核模板库__detail.jpg b/screenshots/09_绩效/考核设置/02_考核模板库__detail.jpg new file mode 100644 index 0000000..577a062 Binary files /dev/null and b/screenshots/09_绩效/考核设置/02_考核模板库__detail.jpg differ diff --git a/screenshots/09_绩效/考核设置/03_考核团队.jpg b/screenshots/09_绩效/考核设置/03_考核团队.jpg new file mode 100644 index 0000000..41da9e8 Binary files /dev/null and b/screenshots/09_绩效/考核设置/03_考核团队.jpg differ diff --git a/screenshots/09_绩效/考核设置/03_考核团队__add.jpg b/screenshots/09_绩效/考核设置/03_考核团队__add.jpg new file mode 100644 index 0000000..47dc6cc Binary files /dev/null and b/screenshots/09_绩效/考核设置/03_考核团队__add.jpg differ diff --git a/screenshots/09_绩效/考核设置/03_考核团队__detail.jpg b/screenshots/09_绩效/考核设置/03_考核团队__detail.jpg new file mode 100644 index 0000000..8b2327f Binary files /dev/null and b/screenshots/09_绩效/考核设置/03_考核团队__detail.jpg differ diff --git a/screenshots/09_绩效/考核设置/04_自定义设置.jpg b/screenshots/09_绩效/考核设置/04_自定义设置.jpg new file mode 100644 index 0000000..26741c4 Binary files /dev/null and b/screenshots/09_绩效/考核设置/04_自定义设置.jpg differ diff --git a/screenshots/09_绩效/考核设置/05_操作记录.jpg b/screenshots/09_绩效/考核设置/05_操作记录.jpg new file mode 100644 index 0000000..4aac96d Binary files /dev/null and b/screenshots/09_绩效/考核设置/05_操作记录.jpg differ diff --git a/screenshots/10_社保公积金/.DS_Store b/screenshots/10_社保公积金/.DS_Store new file mode 100644 index 0000000..bbf52e5 Binary files /dev/null and b/screenshots/10_社保公积金/.DS_Store differ diff --git a/screenshots/10_社保公积金/常规/01_参保账单.jpg b/screenshots/10_社保公积金/常规/01_参保账单.jpg new file mode 100644 index 0000000..c128dd7 Binary files /dev/null and b/screenshots/10_社保公积金/常规/01_参保账单.jpg differ diff --git a/screenshots/10_社保公积金/常规/01_参保账单__add.jpg b/screenshots/10_社保公积金/常规/01_参保账单__add.jpg new file mode 100644 index 0000000..d3c1e89 Binary files /dev/null and b/screenshots/10_社保公积金/常规/01_参保账单__add.jpg differ diff --git a/screenshots/10_社保公积金/常规/02_账单核对.jpg b/screenshots/10_社保公积金/常规/02_账单核对.jpg new file mode 100644 index 0000000..de93384 Binary files /dev/null and b/screenshots/10_社保公积金/常规/02_账单核对.jpg differ diff --git a/screenshots/10_社保公积金/常规/03_参保档案.jpg b/screenshots/10_社保公积金/常规/03_参保档案.jpg new file mode 100644 index 0000000..4cfe7cd Binary files /dev/null and b/screenshots/10_社保公积金/常规/03_参保档案.jpg differ diff --git a/screenshots/10_社保公积金/常规/04_社保报表.jpg b/screenshots/10_社保公积金/常规/04_社保报表.jpg new file mode 100644 index 0000000..af5eb68 Binary files /dev/null and b/screenshots/10_社保公积金/常规/04_社保报表.jpg differ diff --git a/screenshots/10_社保公积金/常规/04_社保报表__add.jpg b/screenshots/10_社保公积金/常规/04_社保报表__add.jpg new file mode 100644 index 0000000..1bcf17d Binary files /dev/null and b/screenshots/10_社保公积金/常规/04_社保报表__add.jpg differ diff --git a/screenshots/10_社保公积金/常规/05_社保分析.jpg b/screenshots/10_社保公积金/常规/05_社保分析.jpg new file mode 100644 index 0000000..3ecab6c Binary files /dev/null and b/screenshots/10_社保公积金/常规/05_社保分析.jpg differ diff --git a/screenshots/10_社保公积金/常规/06_参保规则.jpg b/screenshots/10_社保公积金/常规/06_参保规则.jpg new file mode 100644 index 0000000..5a097ce Binary files /dev/null and b/screenshots/10_社保公积金/常规/06_参保规则.jpg differ diff --git a/screenshots/11_行政管理/.DS_Store b/screenshots/11_行政管理/.DS_Store new file mode 100644 index 0000000..36fa86b Binary files /dev/null and b/screenshots/11_行政管理/.DS_Store differ diff --git a/screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg b/screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg new file mode 100644 index 0000000..4e68e36 Binary files /dev/null and b/screenshots/11_行政管理/会议室预定/01_会议预定记录.jpg differ diff --git a/screenshots/11_行政管理/会议室预定/02_会议室管理.jpg b/screenshots/11_行政管理/会议室预定/02_会议室管理.jpg new file mode 100644 index 0000000..9c76dc9 Binary files /dev/null and b/screenshots/11_行政管理/会议室预定/02_会议室管理.jpg differ diff --git a/screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg b/screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg new file mode 100644 index 0000000..ae19434 Binary files /dev/null and b/screenshots/11_行政管理/会议室预定/03_会议操作记录.jpg differ diff --git a/screenshots/11_行政管理/常规/01_企业公告.jpg b/screenshots/11_行政管理/常规/01_企业公告.jpg new file mode 100644 index 0000000..6846890 Binary files /dev/null and b/screenshots/11_行政管理/常规/01_企业公告.jpg differ diff --git a/screenshots/11_行政管理/常规/01_企业公告__add.jpg b/screenshots/11_行政管理/常规/01_企业公告__add.jpg new file mode 100644 index 0000000..5c58579 Binary files /dev/null and b/screenshots/11_行政管理/常规/01_企业公告__add.jpg differ diff --git a/screenshots/11_行政管理/常规/02_企业制度.jpg b/screenshots/11_行政管理/常规/02_企业制度.jpg new file mode 100644 index 0000000..c0c75da Binary files /dev/null and b/screenshots/11_行政管理/常规/02_企业制度.jpg differ diff --git a/screenshots/11_行政管理/常规/02_企业制度__add.jpg b/screenshots/11_行政管理/常规/02_企业制度__add.jpg new file mode 100644 index 0000000..5f97e0f Binary files /dev/null and b/screenshots/11_行政管理/常规/02_企业制度__add.jpg differ diff --git a/screenshots/11_行政管理/常规/03_新闻动态.jpg b/screenshots/11_行政管理/常规/03_新闻动态.jpg new file mode 100644 index 0000000..5a9ef3a Binary files /dev/null and b/screenshots/11_行政管理/常规/03_新闻动态.jpg differ diff --git a/screenshots/11_行政管理/常规/03_新闻动态__add.jpg b/screenshots/11_行政管理/常规/03_新闻动态__add.jpg new file mode 100644 index 0000000..97a6613 Binary files /dev/null and b/screenshots/11_行政管理/常规/03_新闻动态__add.jpg differ diff --git a/screenshots/11_行政管理/常规/04_开具证明.jpg b/screenshots/11_行政管理/常规/04_开具证明.jpg new file mode 100644 index 0000000..9dc5b9b Binary files /dev/null and b/screenshots/11_行政管理/常规/04_开具证明.jpg differ diff --git a/screenshots/11_行政管理/问卷调查/01_问卷管理.jpg b/screenshots/11_行政管理/问卷调查/01_问卷管理.jpg new file mode 100644 index 0000000..fd6af4f Binary files /dev/null and b/screenshots/11_行政管理/问卷调查/01_问卷管理.jpg differ diff --git a/screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg b/screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg new file mode 100644 index 0000000..2a9fd9a Binary files /dev/null and b/screenshots/11_行政管理/问卷调查/02_问卷模板库.jpg differ diff --git a/screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg b/screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg new file mode 100644 index 0000000..cf9d12e Binary files /dev/null and b/screenshots/11_行政管理/问卷调查/03_问卷操作记录.jpg differ diff --git a/screenshots/12_电子合同/.DS_Store b/screenshots/12_电子合同/.DS_Store new file mode 100644 index 0000000..b91f09c Binary files /dev/null and b/screenshots/12_电子合同/.DS_Store differ diff --git a/screenshots/12_电子合同/合同签署/01_签署中.jpg b/screenshots/12_电子合同/合同签署/01_签署中.jpg new file mode 100644 index 0000000..7df643f Binary files /dev/null and b/screenshots/12_电子合同/合同签署/01_签署中.jpg differ diff --git a/screenshots/12_电子合同/合同签署/02_已签署.jpg b/screenshots/12_电子合同/合同签署/02_已签署.jpg new file mode 100644 index 0000000..2d39025 Binary files /dev/null and b/screenshots/12_电子合同/合同签署/02_已签署.jpg differ diff --git a/screenshots/12_电子合同/合同签署/03_已作废.jpg b/screenshots/12_电子合同/合同签署/03_已作废.jpg new file mode 100644 index 0000000..cc4f279 Binary files /dev/null and b/screenshots/12_电子合同/合同签署/03_已作废.jpg differ diff --git a/screenshots/12_电子合同/合同签署/04_合同档案库.jpg b/screenshots/12_电子合同/合同签署/04_合同档案库.jpg new file mode 100644 index 0000000..f573e43 Binary files /dev/null and b/screenshots/12_电子合同/合同签署/04_合同档案库.jpg differ diff --git a/screenshots/12_电子合同/常规/01_概览.jpg b/screenshots/12_电子合同/常规/01_概览.jpg new file mode 100644 index 0000000..7ab8f96 Binary files /dev/null and b/screenshots/12_电子合同/常规/01_概览.jpg differ diff --git a/screenshots/12_电子合同/设置/01_企业印章.jpg b/screenshots/12_电子合同/设置/01_企业印章.jpg new file mode 100644 index 0000000..e205597 Binary files /dev/null and b/screenshots/12_电子合同/设置/01_企业印章.jpg differ diff --git a/screenshots/12_电子合同/设置/02_合同模板.jpg b/screenshots/12_电子合同/设置/02_合同模板.jpg new file mode 100644 index 0000000..faf5210 Binary files /dev/null and b/screenshots/12_电子合同/设置/02_合同模板.jpg differ diff --git a/screenshots/12_电子合同/设置/03_合同包.jpg b/screenshots/12_电子合同/设置/03_合同包.jpg new file mode 100644 index 0000000..d298f6a Binary files /dev/null and b/screenshots/12_电子合同/设置/03_合同包.jpg differ diff --git a/screenshots/12_电子合同/设置/03_合同包__add.jpg b/screenshots/12_电子合同/设置/03_合同包__add.jpg new file mode 100644 index 0000000..cd37753 Binary files /dev/null and b/screenshots/12_电子合同/设置/03_合同包__add.jpg differ diff --git a/screenshots/13_背景调查/背景调查服务.jpg b/screenshots/13_背景调查/背景调查服务.jpg new file mode 100644 index 0000000..51e2606 Binary files /dev/null and b/screenshots/13_背景调查/背景调查服务.jpg differ diff --git a/screenshots/14_人才测评/人才测评服务.jpg b/screenshots/14_人才测评/人才测评服务.jpg new file mode 100644 index 0000000..99222f1 Binary files /dev/null and b/screenshots/14_人才测评/人才测评服务.jpg differ diff --git a/screenshots/15_员工福利/.DS_Store b/screenshots/15_员工福利/.DS_Store new file mode 100644 index 0000000..43bf4e4 Binary files /dev/null and b/screenshots/15_员工福利/.DS_Store differ diff --git a/screenshots/15_员工福利/常规/01_员工福利概况.jpg b/screenshots/15_员工福利/常规/01_员工福利概况.jpg new file mode 100644 index 0000000..6d6175a Binary files /dev/null and b/screenshots/15_员工福利/常规/01_员工福利概况.jpg differ diff --git a/screenshots/15_员工福利/常规/02_员工积分管理.jpg b/screenshots/15_员工福利/常规/02_员工积分管理.jpg new file mode 100644 index 0000000..e81ce20 Binary files /dev/null and b/screenshots/15_员工福利/常规/02_员工积分管理.jpg differ diff --git a/screenshots/15_员工福利/常规/03_商品专区管理.jpg b/screenshots/15_员工福利/常规/03_商品专区管理.jpg new file mode 100644 index 0000000..a5e8dc5 Binary files /dev/null and b/screenshots/15_员工福利/常规/03_商品专区管理.jpg differ diff --git a/screenshots/15_员工福利/常规/04_平安好医生.jpg b/screenshots/15_员工福利/常规/04_平安好医生.jpg new file mode 100644 index 0000000..7362011 Binary files /dev/null and b/screenshots/15_员工福利/常规/04_平安好医生.jpg differ diff --git a/screenshots/16_人事仪表盘/.DS_Store b/screenshots/16_人事仪表盘/.DS_Store new file mode 100644 index 0000000..4669ee1 Binary files /dev/null and b/screenshots/16_人事仪表盘/.DS_Store differ diff --git a/screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg b/screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg new file mode 100644 index 0000000..f59bf05 Binary files /dev/null and b/screenshots/16_人事仪表盘/常规/01_我的仪表盘.jpg differ diff --git a/screenshots/16_人事仪表盘/常规/02_报告老板.jpg b/screenshots/16_人事仪表盘/常规/02_报告老板.jpg new file mode 100644 index 0000000..555a558 Binary files /dev/null and b/screenshots/16_人事仪表盘/常规/02_报告老板.jpg differ diff --git a/screenshots/17_第三方对接/.DS_Store b/screenshots/17_第三方对接/.DS_Store new file mode 100644 index 0000000..2b313da Binary files /dev/null and b/screenshots/17_第三方对接/.DS_Store differ diff --git a/screenshots/17_第三方对接/常规/01_企业微信.jpg b/screenshots/17_第三方对接/常规/01_企业微信.jpg new file mode 100644 index 0000000..4a1d490 Binary files /dev/null and b/screenshots/17_第三方对接/常规/01_企业微信.jpg differ diff --git a/screenshots/17_第三方对接/常规/02_钉钉.jpg b/screenshots/17_第三方对接/常规/02_钉钉.jpg new file mode 100644 index 0000000..84a287f Binary files /dev/null and b/screenshots/17_第三方对接/常规/02_钉钉.jpg differ diff --git a/screenshots/17_第三方对接/常规/03_飞书.jpg b/screenshots/17_第三方对接/常规/03_飞书.jpg new file mode 100644 index 0000000..7611526 Binary files /dev/null and b/screenshots/17_第三方对接/常规/03_飞书.jpg differ diff --git a/screenshots/17_第三方对接/常规/04_携程商旅.jpg b/screenshots/17_第三方对接/常规/04_携程商旅.jpg new file mode 100644 index 0000000..54c2b4f Binary files /dev/null and b/screenshots/17_第三方对接/常规/04_携程商旅.jpg differ diff --git a/screenshots/17_第三方对接/常规/05_操作记录.jpg b/screenshots/17_第三方对接/常规/05_操作记录.jpg new file mode 100644 index 0000000..e60c734 Binary files /dev/null and b/screenshots/17_第三方对接/常规/05_操作记录.jpg differ diff --git a/screenshots/18_培训商城/培训商城(外部课程采购).jpg b/screenshots/18_培训商城/培训商城(外部课程采购).jpg new file mode 100644 index 0000000..6df3bdd Binary files /dev/null and b/screenshots/18_培训商城/培训商城(外部课程采购).jpg differ diff --git a/screenshots/19_短信发送/.DS_Store b/screenshots/19_短信发送/.DS_Store new file mode 100644 index 0000000..8d579b7 Binary files /dev/null and b/screenshots/19_短信发送/.DS_Store differ diff --git a/screenshots/19_短信发送/常规/01_短信发送.jpg b/screenshots/19_短信发送/常规/01_短信发送.jpg new file mode 100644 index 0000000..5890474 Binary files /dev/null and b/screenshots/19_短信发送/常规/01_短信发送.jpg differ diff --git a/screenshots/19_短信发送/常规/02_发送记录.jpg b/screenshots/19_短信发送/常规/02_发送记录.jpg new file mode 100644 index 0000000..241010c Binary files /dev/null and b/screenshots/19_短信发送/常规/02_发送记录.jpg differ diff --git a/screenshots/20_电子工资条/.DS_Store b/screenshots/20_电子工资条/.DS_Store new file mode 100644 index 0000000..cbd1b09 Binary files /dev/null and b/screenshots/20_电子工资条/.DS_Store differ diff --git a/screenshots/20_电子工资条/常规/01_发送工资条.jpg b/screenshots/20_电子工资条/常规/01_发送工资条.jpg new file mode 100644 index 0000000..0364f78 Binary files /dev/null and b/screenshots/20_电子工资条/常规/01_发送工资条.jpg differ diff --git a/screenshots/20_电子工资条/常规/02_发放记录.jpg b/screenshots/20_电子工资条/常规/02_发放记录.jpg new file mode 100644 index 0000000..5c044da Binary files /dev/null and b/screenshots/20_电子工资条/常规/02_发放记录.jpg differ diff --git a/screenshots/20_电子工资条/常规/03_反馈记录.jpg b/screenshots/20_电子工资条/常规/03_反馈记录.jpg new file mode 100644 index 0000000..e2c4e3a Binary files /dev/null and b/screenshots/20_电子工资条/常规/03_反馈记录.jpg differ diff --git a/screenshots/20_电子工资条/常规/04_统计分析.jpg b/screenshots/20_电子工资条/常规/04_统计分析.jpg new file mode 100644 index 0000000..51bccc2 Binary files /dev/null and b/screenshots/20_电子工资条/常规/04_统计分析.jpg differ diff --git a/screenshots/20_电子工资条/常规/05_操作记录.jpg b/screenshots/20_电子工资条/常规/05_操作记录.jpg new file mode 100644 index 0000000..f1a2d84 Binary files /dev/null and b/screenshots/20_电子工资条/常规/05_操作记录.jpg differ diff --git a/screenshots/21_智能薪酬/.DS_Store b/screenshots/21_智能薪酬/.DS_Store new file mode 100644 index 0000000..bbdeffa Binary files /dev/null and b/screenshots/21_智能薪酬/.DS_Store differ diff --git a/screenshots/21_智能薪酬/常规/01_概览.jpg b/screenshots/21_智能薪酬/常规/01_概览.jpg new file mode 100644 index 0000000..0504677 Binary files /dev/null and b/screenshots/21_智能薪酬/常规/01_概览.jpg differ diff --git a/screenshots/21_智能薪酬/常规/02_薪酬核算.jpg b/screenshots/21_智能薪酬/常规/02_薪酬核算.jpg new file mode 100644 index 0000000..cbcf083 Binary files /dev/null and b/screenshots/21_智能薪酬/常规/02_薪酬核算.jpg differ diff --git a/screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg b/screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg new file mode 100644 index 0000000..9630a45 Binary files /dev/null and b/screenshots/21_智能薪酬/报表中心/01_薪酬报表.jpg differ diff --git a/screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg b/screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg new file mode 100644 index 0000000..6f095f3 Binary files /dev/null and b/screenshots/21_智能薪酬/报表中心/02_薪酬分析.jpg differ diff --git a/screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg b/screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg new file mode 100644 index 0000000..3daaeae Binary files /dev/null and b/screenshots/21_智能薪酬/数据采集/01_员工考勤.jpg differ diff --git a/screenshots/21_智能薪酬/数据采集/02_业务提报.jpg b/screenshots/21_智能薪酬/数据采集/02_业务提报.jpg new file mode 100644 index 0000000..f8d8bad Binary files /dev/null and b/screenshots/21_智能薪酬/数据采集/02_业务提报.jpg differ diff --git a/screenshots/21_智能薪酬/数据采集/02_业务提报__add.jpg b/screenshots/21_智能薪酬/数据采集/02_业务提报__add.jpg new file mode 100644 index 0000000..87d6202 Binary files /dev/null and b/screenshots/21_智能薪酬/数据采集/02_业务提报__add.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg b/screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg new file mode 100644 index 0000000..174d65e Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬数据/01_薪酬档案.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg b/screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg new file mode 100644 index 0000000..f435196 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬数据/02_减除费用确认.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg b/screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg new file mode 100644 index 0000000..510fb24 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬数据/03_税前扣除.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg b/screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg new file mode 100644 index 0000000..bed63d3 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬数据/04_个税记录.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg b/screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg new file mode 100644 index 0000000..cc78613 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬数据/05_成本明细.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬数据/05_成本明细__add.jpg b/screenshots/21_智能薪酬/薪酬数据/05_成本明细__add.jpg new file mode 100644 index 0000000..177b90e Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬数据/05_成本明细__add.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg b/screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg new file mode 100644 index 0000000..fb55459 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬设置/01_薪酬结构.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg b/screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg new file mode 100644 index 0000000..9e63105 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬设置/02_基础设置.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg b/screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg new file mode 100644 index 0000000..d3e4d08 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬设置/03_成本设置.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬设置/03_成本设置__add.jpg b/screenshots/21_智能薪酬/薪酬设置/03_成本设置__add.jpg new file mode 100644 index 0000000..0be36c9 Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬设置/03_成本设置__add.jpg differ diff --git a/screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg b/screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg new file mode 100644 index 0000000..5875f6a Binary files /dev/null and b/screenshots/21_智能薪酬/薪酬设置/04_操作记录.jpg differ diff --git a/screenshots/22_个税对接/.DS_Store b/screenshots/22_个税对接/.DS_Store new file mode 100644 index 0000000..a38053d Binary files /dev/null and b/screenshots/22_个税对接/.DS_Store differ diff --git a/screenshots/22_个税对接/常规/01_人员信息报送.jpg b/screenshots/22_个税对接/常规/01_人员信息报送.jpg new file mode 100644 index 0000000..5d87b37 Binary files /dev/null and b/screenshots/22_个税对接/常规/01_人员信息报送.jpg differ diff --git a/screenshots/22_个税对接/常规/02_个税申报.jpg b/screenshots/22_个税对接/常规/02_个税申报.jpg new file mode 100644 index 0000000..5d87b37 Binary files /dev/null and b/screenshots/22_个税对接/常规/02_个税申报.jpg differ diff --git a/screenshots/22_个税对接/常规/03_纳税单位管理.jpg b/screenshots/22_个税对接/常规/03_纳税单位管理.jpg new file mode 100644 index 0000000..5d87b37 Binary files /dev/null and b/screenshots/22_个税对接/常规/03_纳税单位管理.jpg differ diff --git a/screenshots/22_个税对接/常规/04_操作记录.jpg b/screenshots/22_个税对接/常规/04_操作记录.jpg new file mode 100644 index 0000000..5d87b37 Binary files /dev/null and b/screenshots/22_个税对接/常规/04_操作记录.jpg differ diff --git a/screenshots/23_AI员工助手/.DS_Store b/screenshots/23_AI员工助手/.DS_Store new file mode 100644 index 0000000..3f827dc Binary files /dev/null and b/screenshots/23_AI员工助手/.DS_Store differ diff --git a/screenshots/23_AI员工助手/常规/01_AI员工助手.jpg b/screenshots/23_AI员工助手/常规/01_AI员工助手.jpg new file mode 100644 index 0000000..bdee4dc Binary files /dev/null and b/screenshots/23_AI员工助手/常规/01_AI员工助手.jpg differ diff --git a/screenshots/23_AI员工助手/常规/02_知识库管理.jpg b/screenshots/23_AI员工助手/常规/02_知识库管理.jpg new file mode 100644 index 0000000..f2d5859 Binary files /dev/null and b/screenshots/23_AI员工助手/常规/02_知识库管理.jpg differ diff --git a/screenshots/23_AI员工助手/常规/03_员工助手设置.jpg b/screenshots/23_AI员工助手/常规/03_员工助手设置.jpg new file mode 100644 index 0000000..fc0d970 Binary files /dev/null and b/screenshots/23_AI员工助手/常规/03_员工助手设置.jpg differ diff --git a/screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg b/screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg new file mode 100644 index 0000000..cdd2562 Binary files /dev/null and b/screenshots/23_AI员工助手/数据统计/01_总体使用情况.jpg differ diff --git a/screenshots/23_AI员工助手/数据统计/02_操作记录.jpg b/screenshots/23_AI员工助手/数据统计/02_操作记录.jpg new file mode 100644 index 0000000..5ed7ed0 Binary files /dev/null and b/screenshots/23_AI员工助手/数据统计/02_操作记录.jpg differ diff --git a/screenshots/24_应用管理/应用管理.jpg b/screenshots/24_应用管理/应用管理.jpg new file mode 100644 index 0000000..d834793 Binary files /dev/null and b/screenshots/24_应用管理/应用管理.jpg differ diff --git a/scripts/.DS_Store b/scripts/.DS_Store new file mode 100644 index 0000000..fa0cea7 Binary files /dev/null and b/scripts/.DS_Store differ diff --git a/scripts/__pycache__/capture_full.cpython-313.pyc b/scripts/__pycache__/capture_full.cpython-313.pyc new file mode 100644 index 0000000..d2c35ec Binary files /dev/null and b/scripts/__pycache__/capture_full.cpython-313.pyc differ diff --git a/scripts/__pycache__/collect_fields.cpython-313.pyc b/scripts/__pycache__/collect_fields.cpython-313.pyc new file mode 100644 index 0000000..ccd145d Binary files /dev/null and b/scripts/__pycache__/collect_fields.cpython-313.pyc differ diff --git a/scripts/__pycache__/dl_export.cpython-313.pyc b/scripts/__pycache__/dl_export.cpython-313.pyc new file mode 100644 index 0000000..6e3ca81 Binary files /dev/null and b/scripts/__pycache__/dl_export.cpython-313.pyc differ diff --git a/scripts/__pycache__/dl_report.cpython-313.pyc b/scripts/__pycache__/dl_report.cpython-313.pyc new file mode 100644 index 0000000..23d8779 Binary files /dev/null and b/scripts/__pycache__/dl_report.cpython-313.pyc differ diff --git a/scripts/__pycache__/rewalk.cpython-313.pyc b/scripts/__pycache__/rewalk.cpython-313.pyc new file mode 100644 index 0000000..f98f0d4 Binary files /dev/null and b/scripts/__pycache__/rewalk.cpython-313.pyc differ diff --git a/scripts/_probe.py b/scripts/_probe.py new file mode 100644 index 0000000..fa3c86c --- /dev/null +++ b/scripts/_probe.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""干净验证:报表页点下载 -> 捕获CDN直链 -> 页面内同步XHR取字节 -> base64回传 -> 落盘。""" +import json, urllib.request, base64, time, os + +D = "http://127.0.0.1:10086/command"; S = "2haohr" + +def call(a, args, timeout=120): + b = json.dumps({"action": a, "args": args, "session": S}).encode() + r = urllib.request.Request(D, data=b, headers={"Content-Type": "application/json"}) + return json.loads(urllib.request.urlopen(r, timeout=timeout).read().decode()) + +def ev(code): + return call("evaluate", {"code": code}).get("data", {}).get("value") + +# 单一、幂等的 hook(navigate 后页面重载,hook 会被清) +HOOK = r"""(()=>{ + if(window.__H)return 'already'; + window.__H=1; window.__cap=[]; + const ac=HTMLAnchorElement.prototype.click; + HTMLAnchorElement.prototype.click=function(){ + try{const h=this.href||'';const d=this.getAttribute('download')||''; + if(h && (/prv-cdn|attname=|\.xlsx|\.xls|\.docx|\.doc|\.zip|\.pdf/i.test(h)||d)) + window.__cap.push(h);}catch(e){} + return ac.apply(this,arguments); + }; + return 'hooked'; +})()""" + +CLICK_DL = r"""(()=>{const cand=['直接下载','下载','生成excel','导出Excel','导出']; + for(const t of cand){const b=[...document.querySelectorAll('button,a,[role=button]')] + .find(x=>(x.innerText||'').trim()===t && x.getBoundingClientRect().width>0); + if(b){b.click();return t;}}return 'no-btn';})()""" + +# 弹窗里确认导出(选择部门后 生成excel/确定/下载) +CONFIRM = r"""(()=>{const cand=['生成excel','确定','下载','导出','确认']; + const ms=[...document.querySelectorAll('[class*=modal],[class*=Modal],[role=dialog],[class*=dialog],[class*=drawer]')]; + for(const m of ms){const r=m.getBoundingClientRect(); + if(r.width>200&&r.height>100&&getComputedStyle(m).display!=='none'){ + for(const t of cand){const b=[...m.querySelectorAll('button,a')] + .find(x=>(x.innerText||'').trim()===t); + if(b){b.click();return 'modal:'+t;}}}}return 'no-modal';})()""" + +FETCH_B64 = r"""(()=>{try{ + if(!window.__cap.length)return 'NO_HREF'; + const u=window.__cap[window.__cap.length-1]; + const x=new XMLHttpRequest();x.open('GET',u,false); + x.overrideMimeType('text/plain;charset=x-user-defined');x.send(); + if(x.status!==200)return 'HTTP'+x.status; + const s=x.responseText;let out='';const CH=8192; + for(let i=0;i{let n=0;document.querySelectorAll('button,a,[role=button]').forEach(x=>{const t=(x.innerText||'').trim();if(['直接下载','下载','生成excel','导出Excel','导出'].includes(t)&&x.getBoundingClientRect().width>0)n++;});return n;})()""" + for i in range(15): + time.sleep(2) + c = ev(COUNT) + print(" wait btn count=", c) + if isinstance(c, int) and c > 0: + break + print("hook:", ev(HOOK)) + print("click:", ev(CLICK_DL)) + time.sleep(2.5) + print("confirm:", ev(CONFIRM)) + time.sleep(2.5) + meta = ev(FETCH_B64) + print("fetch:", meta) + if isinstance(meta, str) and meta.startswith("{"): + info = json.loads(meta) + b64 = ev("window.__b64") + data = base64.b64decode(b64) + os.makedirs("downloads/_test", exist_ok=True) + out = "downloads/_test/probe_" + info["name"] + open(out, "wb").write(data) + print("落盘:", out, len(data), "bytes") + +if __name__ == "__main__": + main() diff --git a/scripts/_probe2.py b/scripts/_probe2.py new file mode 100644 index 0000000..4223050 --- /dev/null +++ b/scripts/_probe2.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""代码级探测:在代表性报表/文档页扫描下载入口的 DOM 特征,并观察点击后的生成过程。 +不落盘,只输出发现,用于设计正式下载器。""" +import json, urllib.request, time + +D = "http://127.0.0.1:10086/command"; S = "2haohr" + +def call(a, args, timeout=120): + b = json.dumps({"action": a, "args": args, "session": S}).encode() + r = urllib.request.Request(D, data=b, headers={"Content-Type": "application/json"}) + return json.loads(urllib.request.urlopen(r, timeout=timeout).read().decode()) + +def ev(code, timeout=120): + try: + return call("evaluate", {"code": code}, timeout).get("data", {}).get("value") + except Exception as e: + return "EXC:" + str(e)[:80] + +# 增强 hook:捕获 a.click / window.open / location 赋值 / blob URL / fetch(下载类) +HOOK = r"""(()=>{ + window.__cap=[]; window.__evt=[]; + const push=(t,v)=>{try{window.__cap.push({t:t,v:(''+v).slice(0,220)});}catch(e){}}; + const ac=HTMLAnchorElement.prototype.click; + HTMLAnchorElement.prototype.click=function(){try{const h=this.href||'';const d=this.getAttribute('download')||''; + if(h&&(/prv-cdn|attname=|\.xlsx|\.xls|\.docx|\.doc|\.zip|blob:/i.test(h)||d))push('a.click',h);}catch(e){} + return ac.apply(this,arguments);}; + const wo=window.open;window.open=function(u){if(u)push('open',u);return wo.apply(this,arguments);}; + const oc=URL.createObjectURL;URL.createObjectURL=function(b){try{push('blob','size='+(b&&b.size)+' type='+(b&&b.type));}catch(e){}return oc.apply(this,arguments);}; + const of=window.fetch;window.fetch=function(u,o){const s=''+(u&&u.url||u);if(/export|download|excel|report|generate|create.*task/i.test(s))push('fetch',s);return of.apply(this,arguments);}; + const os=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(m,u){const s=''+u;if(/export|download|excel|report|generate/i.test(s))push('xhr',s);return os.apply(this,arguments);}; + return 'hooked'; +})()""" + +# 代码级扫描:不依赖可见文字,扫 title/aria-label/class/svg use/data-* +SCAN = r"""(()=>{ + const KW=/下载|导出|excel|xlsx|导表|生成表|report|download|export/i; + const out=[];const seen=new Set(); + const els=document.querySelectorAll('button,a,[role=button],i,span,div,[class*=icon],[class*=download],[class*=export],[class*=btn]'); + els.forEach(el=>{ + const t=(el.innerText||'').trim(); + const g=n=>el.getAttribute?(el.getAttribute(n)||''):''; + const title=g('title')||g('aria-label')||g('data-title')||g('alt'); + let cls='';try{cls=(el.className&&el.className.baseVal!==undefined)?el.className.baseVal:(el.className||'');}catch(e){} + const useEl=el.querySelector&&el.querySelector('use,svg'); + let use='';if(useEl){use=useEl.getAttribute('xlink:href')||useEl.getAttribute('href')||useEl.getAttribute('data-icon')||'';} + const hit=KW.test(t)||KW.test(title)||KW.test(''+cls)||KW.test(use); + if(!hit)return; + const r=el.getBoundingClientRect();if(r.width<=0||r.height<=0)return; + const key=el.tagName+'|'+t.slice(0,8)+'|'+title.slice(0,10)+'|'+(''+cls).slice(0,24); + if(seen.has(key))return;seen.add(key); + out.push({tag:el.tagName,txt:t.slice(0,12),title:(''+title).slice(0,18),cls:(''+cls).slice(0,44),use:(''+use).slice(0,26),xy:[Math.round(r.x),Math.round(r.y)]}); + }); + return JSON.stringify(out.slice(0,50)); +})()""" + +# 观察 toast/loading 文案(生成过程提示) +TOAST = r"""(()=>{const a=[];document.querySelectorAll('[class*=message],[class*=Message],[class*=toast],[class*=Toast],[class*=notify],[class*=loading],[class*=Loading],[class*=tip]').forEach(el=>{const t=(el.innerText||'').trim();if(t&&t.length<40&&el.getBoundingClientRect().width>0)a.push(t);});return JSON.stringify([...new Set(a)].slice(0,10));})()""" + +def probe(url, label): + print("\n" + "=" * 70) + print("PAGE:", label, url) + call("navigate", {"url": url, "newTab": False}) + time.sleep(7) + print("scan-entries:", ev(SCAN)) + print("hook:", ev(HOOK)) + +def main(): + call("find_tab", {"url": "2haohr.com"}) + targets = [ + ("https://2haohr.com/attendance/stat/monthly", "月考勤表(整表导出)"), + ("https://2haohr.com/social-insurance/reports", "社保报表"), + ("https://2haohr.com/oa/regulation", "企业制度(文档)"), + ] + for url, label in targets: + probe(url, label) + +if __name__ == "__main__": + main() diff --git a/scripts/_probe3.py b/scripts/_probe3.py new file mode 100644 index 0000000..787e0fb --- /dev/null +++ b/scripts/_probe3.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""探测任务中心(taskCenter):结构、任务项状态、下载链路。并测试整表页的导出图标(hover tooltip)。""" +import json, urllib.request, base64, time, os + +D = "http://127.0.0.1:10086/command"; S = "2haohr" + +def call(a, args, timeout=120): + b = json.dumps({"action": a, "args": args, "session": S}).encode() + r = urllib.request.Request(D, data=b, headers={"Content-Type": "application/json"}) + return json.loads(urllib.request.urlopen(r, timeout=timeout).read().decode()) + +def ev(code, timeout=120): + try: + return call("evaluate", {"code": code}, timeout).get("data", {}).get("value") + except Exception as e: + return "EXC:" + str(e)[:80] + +HOOK = r"""(()=>{window.__cap=[];const ac=HTMLAnchorElement.prototype.click; + HTMLAnchorElement.prototype.click=function(){try{const h=this.href||'';if(h&&/prv-cdn|attname=|\.xlsx|\.xls|\.docx|\.doc|\.zip/i.test(h))window.__cap.push(h);}catch(e){}return ac.apply(this,arguments);};return 'ok';})()""" + +# 读取任务中心:定位 taskCenter 容器,列出每个任务项(名称/状态/是否有下载) +TASKS = r"""(()=>{ + const tc=document.querySelector('[class*=taskCenter]'); + if(!tc)return 'NO_TASKCENTER'; + const items=[]; + // 任务项通常是含 info_ 名称 + right_ 状态 的行 + tc.querySelectorAll('[class*=info_]').forEach(info=>{ + const row=info.closest('[class*=item],li,tr')||info.parentElement; + const name=(info.innerText||'').replace(/\n+/g,' ').trim().slice(0,40); + let dl='';const a=row&&row.querySelector('a'); + const stat=row?(row.innerText||'').replace(/\n+/g,'|').slice(0,40):''; + items.push({name:name,row:stat}); + }); + return JSON.stringify({open:getComputedStyle(tc).display,cnt:items.length,items:items.slice(0,10)}); +})()""" + +# 点击任务中心里第 idx 个“下载”链接 +CLICK_TASK_DL = r"""(function(idx){ + const tc=document.querySelector('[class*=taskCenter]');if(!tc)return 'NO_TC'; + const dls=[...tc.querySelectorAll('a')].filter(a=>(a.innerText||'').trim()==='下载'); + if(idx>=dls.length)return 'IDX_OOB len='+dls.length; + dls[idx].click();return 'clicked '+idx+'/'+dls.length; +})(%d)""" + +FETCH_LAST = r"""(()=>{try{if(!window.__cap.length)return 'NO_HREF'; + const u=window.__cap[window.__cap.length-1];const x=new XMLHttpRequest();x.open('GET',u,false); + x.overrideMimeType('text/plain;charset=x-user-defined');x.send();if(x.status!==200)return 'HTTP'+x.status; + const s=x.responseText;let out='';const CH=8192;for(let i=0;i 看参数窗内容 -> 确定 -> 观察 toast/任务中心出现与完成。""" +import json, urllib.request, time +D = "http://127.0.0.1:10086/command"; S = "2haohr" +def call(a, args, t=90): + b = json.dumps({"action": a, "args": args, "session": S}).encode() + r = urllib.request.Request(D, data=b, headers={"Content-Type": "application/json"}) + return json.loads(urllib.request.urlopen(r, timeout=t).read().decode()) +def ev(c): + try: return call("evaluate", {"code": c}).get("data", {}).get("value") + except Exception as e: return "EXC:" + str(e)[:80] + +HOOK = r"""(()=>{window.__cap=window.__cap||[];if(!HTMLAnchorElement.prototype.__hk){const ac=HTMLAnchorElement.prototype.click; + HTMLAnchorElement.prototype.click=function(){try{const h=this.href||'';if(h&&/-cdn\.2haohr|attname=|\.xlsx|\.xls|\.docx/i.test(h))window.__cap.push(h);}catch(e){}return ac.apply(this,arguments);};HTMLAnchorElement.prototype.__hk=1;}return 'ok';})()""" +CLICK_ICON = r"""(()=>{const us=[...document.querySelectorAll('use')].filter(u=>(u.getAttribute('xlink:href')||u.getAttribute('href'))==='#icon-download'); + for(const u of us){const b=u.closest('button,a,[role=button]');if(b){b.click();return 'ok';}}return 'none';})()""" +# 参数窗全文 + 按钮列表 +MODAL = r"""(()=>{const ms=[...document.querySelectorAll('[class*=modal],[class*=Modal],[role=dialog],[class*=dialog],[class*=drawer],[class*=Drawer]')]; + const vis=ms.filter(m=>{const r=m.getBoundingClientRect();return r.width>200&&r.height>80&&getComputedStyle(m).display!=='none';}); + if(!vis.length)return 'NO_MODAL';const m=vis[vis.length-1]; + const btns=[...m.querySelectorAll('button,a')].map(b=>(b.innerText||'').trim()).filter(t=>t&&t.length<10); + return JSON.stringify({text:(m.innerText||'').replace(/\n{2,}/g,'\n').slice(0,400),btns:[...new Set(btns)]});})()""" +CONFIRM = r"""(()=>{const ms=[...document.querySelectorAll('[class*=modal],[class*=Modal],[role=dialog],[class*=dialog],[class*=drawer],[class*=Drawer]')]; + const vis=ms.filter(m=>{const r=m.getBoundingClientRect();return r.width>200&&r.height>80&&getComputedStyle(m).display!=='none';}); + if(!vis.length)return 'NO_MODAL';const m=vis[vis.length-1]; + for(const t of ['确定','确认','下载','导出','生成']){const b=[...m.querySelectorAll('button,a')].find(x=>(x.innerText||'').trim()===t&&x.getBoundingClientRect().width>0);if(b){b.click();return 'click:'+t;}}return 'noconfirm';})()""" +TOAST = r"""(()=>{const a=[];document.querySelectorAll('[class*=message],[class*=Message],[class*=toast],[class*=notify],[class*=Notification]').forEach(el=>{const t=(el.innerText||'').trim();if(t&&t.length<60&&el.getBoundingClientRect().width>0)a.push(t);});return JSON.stringify([...new Set(a)]);})()""" +TC = r"""(()=>{const tc=document.querySelector('[class*=taskCenter]');if(!tc)return 'NO_TC'; + const dls=[...tc.querySelectorAll('a')].filter(a=>(a.innerText||'').trim()==='下载'); + return JSON.stringify({dl:dls.length,text:(tc.innerText||'').replace(/\n{2,}/g,'\n').slice(0,300)});})()""" + +def main(): + call("find_tab", {"url": "2haohr.com"}) + call("navigate", {"url": "https://2haohr.com/recruit/statistics/recruit-report", "newTab": False}) + time.sleep(7) + ev(HOOK) + print("icon click:", ev(CLICK_ICON)) + time.sleep(2) + print("MODAL:", ev(MODAL)) + print("confirm:", ev(CONFIRM)) + # 观察生成过程 + for i in range(10): + time.sleep(3) + cap = ev("(window.__cap&&window.__cap.length)||0") + print(" t+%ds cap=%s toast=%s" % (3*(i+1), cap, ev(TOAST))) + if isinstance(cap, int) and cap > 0: + print(" >>> 捕获直链!"); break + print("TASK_CENTER:", ev(TC)) + +if __name__ == "__main__": + main() diff --git a/scripts/_probe_struct.py b/scripts/_probe_struct.py new file mode 100644 index 0000000..7c96242 --- /dev/null +++ b/scripts/_probe_struct.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""快速判定“无导出入口”报表页的真实结构:等待15s后统计 #icon-download / 文字下载按钮 / 是否需先查询。""" +import json, urllib.request, time +D = "http://127.0.0.1:10086/command"; S = "2haohr" +def call(a, args, t=90): + b = json.dumps({"action": a, "args": args, "session": S}).encode() + r = urllib.request.Request(D, data=b, headers={"Content-Type": "application/json"}) + return json.loads(urllib.request.urlopen(r, timeout=t).read().decode()) +def ev(c): + try: return call("evaluate", {"code": c}).get("data", {}).get("value") + except Exception as e: return "EXC:" + str(e)[:80] + +STAT = r"""(()=>{ + let icon=0;document.querySelectorAll('use').forEach(u=>{const h=u.getAttribute('xlink:href')||u.getAttribute('href');if(h==='#icon-download')icon++;}); + const btns=[...document.querySelectorAll('button,a,[role=button]')].map(b=>(b.innerText||'').trim()).filter(t=>t&&t.length<12&&/下载|导出|生成|查询|搜索|excel/i.test(t)); + const bcnt={};btns.forEach(t=>bcnt[t]=(bcnt[t]||0)+1); + // 是否存在数据表格 + const tbl=document.querySelectorAll('table,[class*=table],[class*=Table]').length; + const empty=/暂无数据|请选择|请先|no data/i.test(document.body.innerText||''); + return JSON.stringify({icon_download:icon,dl_btns:bcnt,tables:tbl,has_empty_hint:empty});})()""" + +def probe(url, label): + call("navigate", {"url": url, "newTab": False}) + time.sleep(15) + print("[%s] %s" % (label, url)) + print(" ", ev(STAT)) + +def main(): + call("find_tab", {"url": "2haohr.com"}) + for url, label in [ + ("https://2haohr.com/attendance/stat/monthly", "月考勤表"), + ("https://2haohr.com/attendance/stat/report", "考勤报表"), + ("https://2haohr.com/social-insurance/reports", "社保报表"), + ("https://2haohr.com/org/org-forms", "组织报表"), + ("https://2haohr.com/payroll/salary/report", "薪酬报表"), + ]: + probe(url, label) + +if __name__ == "__main__": + main() diff --git a/scripts/_test_one.py b/scripts/_test_one.py new file mode 100644 index 0000000..05c52b5 --- /dev/null +++ b/scripts/_test_one.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""单页验证:仅对人事报表页跑 process_page,确认 CONFIRM 修复后能产出真实报表 Excel。""" +import dl_export as X + +def main(): + X.ensure() + X.call("find_tab", {"url": "2haohr.com"}) + p = { + "full_path": "02_人事 / 人事报表", + "url": "https://2haohr.com/personnel/employee/personnel-report/home", + "node_key": "test_personnel_report", + "screenshot_path": None, + } + n = X.process_page(p, 1, 1) + X.log("单页测试产出: %d 个文件, SAVED=%d" % (n, len(X.SAVED))) + +if __name__ == "__main__": + main() diff --git a/scripts/build_tree.py b/scripts/build_tree.py new file mode 100644 index 0000000..b984d46 --- /dev/null +++ b/scripts/build_tree.py @@ -0,0 +1,306 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +读取 db/menu_map.json, 结合领域释义, 构建功能树写入 SQLite(features 表)。 +层级: level0=顶层模块, level1=分组, level2=菜单页(叶子) +并为每个叶子分配期望截图路径 screenshots/<序号_模块>/<分组>/<名称>.jpg +""" +import json, os, re, sqlite3 + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +MAP = os.path.join(BASE, "db", "menu_map.json") +DB = os.path.join(BASE, "db", "research.db") +ORIGIN = "https://2haohr.com" + +# ---- 模块级 释义/理解 ---- +MOD = { + "工作台": ("HR 登录后的首页驾驶舱,聚合日程、待办、招聘/考勤/入离职概况、快捷入口、人事提醒与常用工具。", "系统门户与导航中枢,是使用频率最高的页面;开发时应做成可配置卡片式仪表盘。"), + "人事": ("员工全生命周期管理中心,含员工档案、花名册、入转调离、合同、奖惩等员工关系事务。", "HR 系统的核心主数据模块,其它模块(薪酬/考勤/社保)都依赖此处的员工主数据。"), + "组织": ("企业组织架构管理,含部门、岗位、职务、职级、工作地点、员工标签等组织主数据。", "组织与岗位主数据是权限、审批流、薪酬绩效归属的基础,须优先建设。"), + "招聘": ("从职位发布、简历/候选人管理、面试到入职的全流程招聘管理(ATS)。", "可独立成招聘子系统;与人事入职管理衔接形成招录闭环。"), + "考勤假期": ("考勤打卡、排班、考勤统计与假期(休假/余额/方案)管理。", "规则复杂度高(排班/加班/假期计算),是薪酬核算的关键数据来源。"), + "薪酬": ("工资表核算、发放、员工薪资档案、计薪规则与薪酬报表分析。", "涉及资金与个税,准确性与权限要求最高;依赖考勤与社保数据。"), + "审批": ("企业内各类事务的审批流引擎,含表单、模板库、代理、记录与交接。", "是贯穿全系统的通用能力(入职/请假/报销等都走审批),应做成可配置工作流平台。"), + "培训学习": ("线下培训、在线学习(课程/直播)、考试练习一体化的企业培训管理。", "偏 LMS 学习管理系统,可作为增值模块,与绩效/晋升联动。"), + "绩效": ("绩效考核方案、试用期/晋升考核、绩效档案与面谈记录管理。", "考核模板与指标库配置复杂;结果可回流薪酬(绩效工资)与人事(晋升)。"), + "社保公积金": ("参保账单、账单核对、参保档案与社保报表分析。", "地区政策差异大;数据对接社保代理或电子税务局,与薪酬个税强相关。"), + "行政管理": ("企业公告、制度、新闻、证明开具、会议室预定、问卷调查等行政 OA 事务。", "轻量 OA 能力,提升全员协作体验,非 HR 核心但常用。"), + "电子合同": ("劳动合同在线签署、合同档案库、印章与合同模板管理。", "需对接第三方 CA/电子签名平台,具法律效力,替代纸质合同。"), + "背景调查": ("入职前的第三方背景调查服务入口(学历/工作履历/征信等核验)。", "属增值付费服务,通常对接外部背调供应商,单页服务入口。"), + "人才测评": ("岗位胜任力/性格等人才测评的第三方服务入口。", "增值付费服务,对接外部测评供应商,用于招聘与人才盘点。"), + "员工福利": ("员工福利商城、积分管理、商品专区与健康(平安好医生)等福利运营。", "员工激励与福利发放渠道,偏运营,可作为增值模块。"), + "人事仪表盘": ("自定义人事数据看板与面向管理层的经营报告。", "BI 可视化能力,聚合各模块指标,服务决策。"), + "第三方对接": ("与企业微信、钉钉、飞书、携程商旅等外部平台的对接配置。", "集成能力,实现组织同步/消息推送/差旅等,是生态打通的关键。"), + "培训商城": ("外部培训课程商城入口(采购付费课程)。", "疑似外部商城,映射异常;实际为付费课程采购入口,按单页外链处理。"), + "短信发送": ("批量短信发送与发送记录查询。", "通知触达通道,需短信通道额度,常被审批/考勤等模块调用。"), + "电子工资条": ("工资条在线发送、员工确认反馈、发放记录与统计。", "解决工资条保密发放与确认留痕,依赖薪酬工资表数据。"), + "智能薪酬": ("新一代薪酬核算平台:数据采集、薪酬档案、个税、成本、报表全流程。", "比传统‘薪酬’模块更完整,含数据采集与成本分析,是薪酬能力的升级版。"), + "个税对接": ("人员信息报送、个税申报、纳税单位管理,对接自然人电子税务局。", "合规刚需,与薪酬核算联动完成代扣代缴。"), + "AI员工助手": ("面向员工的 AI 问答助手、知识库管理与使用统计。", "AI 能力,降低 HR 重复答疑成本;知识库质量决定效果。"), + "应用管理": ("企业已开通应用/增值服务的管理与开通入口。", "应用中心/权限开关,管理各功能模块的启用状态。"), +} + +# 单页模块(无侧边栏)——给它们补一个叶子指向落地页 +SINGLE_PAGE = { + "工作台": ("工作台首页", "/desk"), + "背景调查": ("背景调查服务", "/hrService/background-investigation/entry"), + "人才测评": ("人才测评服务", "/hrService/employee-assessment/"), + "应用管理": ("应用管理", "/application-manage/application/list"), + "培训商城": ("培训商城(外部课程采购)", "/training-mall"), +} +# 映射异常需忽略其抓到的错误分组的模块 +FORCE_SINGLE = {"培训商城"} + +# ---- 叶子级 释义/理解, 键: "名称" 或 "模块/名称"(消歧) ---- +DESC = { + # 人事/员工管理 + "员工花名册": ("全体员工的核心名册列表,支持按部门/状态筛选、字段自定义、批量导入导出。", "员工主数据入口,几乎所有人事操作从此发起;字段可配置是关键需求。"), + "员工档案库": ("员工完整电子档案(证件/合同/学历/家庭等)的集中存储与调阅。", "360°档案,强调附件管理与字段完整率统计。"), + "人事/统计分析": ("按维度对在职/结构/异动等人事数据的图表统计分析。", "偏 BI 图表,服务人事盘点。"), + "人事报表": ("各类标准人事报表(在职、异动、合同到期等)的生成与导出。", "满足周期性上报需求,需支持自定义与导出。"), + "万能人事表格": ("自定义字段与筛选组合生成任意人事数据表格。", "灵活取数工具,降低对开发出报表的依赖。"), + "人事动态": ("入职/转正/离职/生日等人事事件的动态时间线。", "事件流,可驱动关怀通知与提醒。"), + "入职管理": ("待入职/入职办理流程,含入职登记、资料收集与开通账号。", "与招聘‘已入职’衔接;支持员工自助填写(AI 辅助)。"), + "转正管理": ("试用期到期提醒与转正申请/审批办理。", "与绩效试用期考核联动。"), + "离职管理": ("离职申请、离职办理、交接与离职档案。", "涉及权限回收、薪酬结算、社保停缴等联动。"), + "人事异动": ("部门/岗位/职级调动等异动记录与审批。", "组织变动留痕,影响薪酬与汇报关系。"), + "关怀通知": ("生日/周年/证件到期等关怀提醒与自动通知。", "员工体验运营,可配置触发规则与文案。"), + "人事/合同管理": ("劳动合同签订、续签、到期提醒与合同台账。", "与电子合同模块可打通;合同到期预警是刚需。"), + "沟通记录": ("HR 与员工的沟通/谈话记录留存。", "员工关系管理留痕,支撑争议处理。"), + "任职记录": ("员工历史任职(岗位/部门)变化记录。", "履历追溯,来源于人事异动。"), + "培训经历": ("员工参加培训的经历记录。", "与培训模块数据互通。"), + "奖惩记录": ("员工奖励与处罚记录管理。", "影响绩效与晋升评估。"), + "考察期管理": ("特定员工考察期的设置与跟踪。", "试用/观察期管理的补充。"), + "实习生管理": ("实习生专项档案与转正管理。", "针对实习用工的差异化流程。"), + # 组织 + "组织管理": ("部门树的增删改与部门负责人、编制等管理。", "组织主数据根节点,权限与审批的部门维度基础。"), + "架构图": ("可视化组织架构图展示与调整。", "直观呈现汇报关系,支持导出。"), + "工作地点": ("企业办公/工作地点的维护。", "关联考勤打卡范围与员工工作城市。"), + "岗位管理": ("岗位设置、岗位职责与编制管理。", "岗位是招聘/薪酬/绩效的归属维度。"), + "职务管理": ("职务序列与职务信息管理。", "与职级配合构成职级体系。"), + "员工标签": ("为员工打自定义标签用于分组/筛选。", "灵活分群,服务精细化运营与权限。"), + "职级管理": ("职级/职等体系维护。", "薪酬带宽与晋升通道的基础。"), + "组织报表": ("组织维度(编制/人数/结构)的报表。", "支持组织盘点。"), + # 招聘 + "招聘/概览": ("招聘整体数据概览(职位/候选人/面试等看板)。", "招聘经理入口页。"), + "招聘中": ("处于招聘流程中的候选人列表与阶段管理。", "ATS 核心看板,支持阶段流转。"), + "已入职": ("已录用入职的候选人。", "与人事入职管理衔接。"), + "已淘汰": ("被淘汰候选人归档。", "复用人才库,支持再激活。"), + "招聘职位": ("招聘岗位(JD)的发布与管理。", "对接招聘门户与渠道分发。"), + "招聘门户": ("企业招聘官网/微信招聘门户配置。", "候选人投递入口,支持自定义。"), + "面试日程": ("面试安排、通知与面试评价。", "支持面试官协同与日程提醒。"), + "人才库": ("企业人才储备库。", "沉淀历史候选人,降低复招成本。"), + "招聘报表": ("招聘漏斗/周期/渠道效果报表。", "衡量招聘效率。"), + "招聘分析": ("招聘数据多维分析。", "优化招聘策略。"), + "招聘团队": ("招聘协作团队与角色权限设置。", "多角色协同招聘。"), + "招聘工具": ("招聘相关工具(如筛选/AI)配置。", "提效工具集。"), + "招聘渠道": ("招聘发布渠道与聚合配置。", "对接外部招聘网站。"), + "招聘/模板设置": ("招聘环节的邮件/短信/评价模板。", "标准化沟通。"), + "更多设置": ("招聘模块其它设置项。", "杂项配置。"), + # 考勤 + "每日考勤": ("按日展示全员打卡与异常。", "考勤日常监控入口。"), + "月考勤表": ("按月汇总的考勤统计表。", "薪酬核算的考勤依据。"), + "明细记录": ("原始打卡明细记录查询。", "异常核查与申诉依据。"), + "考勤/考勤报表": ("各类考勤统计报表。", "周期性考勤上报。"), + "字段管理": ("考勤表字段自定义。", "适配企业统计口径。"), + "考勤确认": ("月末考勤结果确认锁定。", "确认后进入薪酬核算。"), + "考勤分组": ("按人群划分考勤规则分组。", "不同班制人群差异化管理。"), + "排班管理": ("排班表编制与发布。", "复杂班制的核心,支持轮班。"), + "考勤规则": ("上下班/加班/迟到等规则配置。", "考勤计算引擎的规则中心。"), + "打卡方式": ("GPS/WiFi/人脸等打卡方式配置。", "决定打卡合规与防作弊。"), + "考勤设置": ("考勤模块的其它设置。", "杂项配置。"), + "休假一览": ("全员请假记录总览。", "假期使用监控。"), + "手动调整": ("手动调整假期余额/记录。", "异常修正入口。"), + "假期余额": ("各员工各类假期余额。", "请假审批的额度依据。"), + "假期方案": ("年假/事病假等假期规则方案。", "假期计算的规则中心。"), + "假期设置": ("假期模块其它设置。", "杂项配置。"), + # 薪酬(传统) + "月工资表": ("按月生成的工资核算表。", "薪酬核算主表,支持公式与批量。"), + "工资发放": ("工资发放确认与银行代发。", "对接银行代发,资金安全关键。"), + "员工薪资": ("员工薪资档案(基本工资/结构)。", "计薪基础数据。"), + "薪酬/薪酬报表": ("薪酬相关报表。", "成本与发放统计。"), + "薪酬/薪酬分析": ("薪酬多维分析。", "人力成本洞察。"), + "计薪规则": ("计薪周期与规则配置。", "薪酬引擎规则。"), + "薪酬/薪酬设置": ("薪酬模块设置。", "结构/权限配置。"), + "年终奖计算": ("年终奖专项计税计算。", "年度一次性奖金个税处理。"), + "发送工资条": ("发送电子工资条(跳转电子工资条模块)。", "与电子工资条模块共用。"), + # 审批 + "审批表单": ("各类审批单据的发起与列表。", "通用审批入口。"), + "审批模板库": ("预置审批流程模板。", "快速套用标准流程。"), + "审批代理": ("审批人不在时的代理设置。", "保障流程不中断。"), + "审批记录": ("历史审批记录查询。", "留痕与追溯。"), + "审批交接": ("审批任务交接处理。", "人员变动时的流程转交。"), + # 培训 + "培训计划": ("线下培训计划制定与管理。", "培训组织入口。"), + "开课日程": ("培训课程排期日程。", "线下课程时间管理。"), + "培训记录": ("培训完成记录。", "回流员工培训经历。"), + "课程库": ("在线课程资源库。", "LMS 内容中心。"), + "学习计划": ("为员工指派学习计划。", "驱动在线学习。"), + "在线直播": ("在线直播课安排。", "远程培训能力。"), + "学习进度": ("员工学习进度跟踪。", "学习效果监控。"), + "学习记录": ("在线学习历史记录。", "留痕与统计。"), + "题库管理": ("考试题目库维护。", "考试基础数据。"), + "试卷管理": ("试卷组卷与管理。", "考试内容配置。"), + "考试安排": ("考试计划安排。", "组织在线考试。"), + "考试记录": ("考试成绩记录。", "培训效果评估。"), + "讲师设置": ("培训讲师维护。", "线下培训资源。"), + "团队设置": ("培训管理团队设置。", "权限协作。"), + "培训学习/自定义设置": ("培训模块自定义设置。", "杂项配置。"), + # 绩效 + "绩效/概览": ("绩效整体概览看板。", "绩效经理入口。"), + "绩效考核": ("发起与管理绩效考核方案。", "绩效核心,含指标与流程。"), + "历史绩效考核": ("历史考核归档查询。", "结果追溯。"), + "试用期考核": ("试用期专项考核。", "与转正联动。"), + "晋升考核": ("晋升评估考核。", "与职级晋升联动。"), + "考核组管理": ("考核分组管理。", "按人群组织考核。"), + "员工绩效档案": ("员工历史绩效档案。", "绩效履历。"), + "绩效考核记录": ("考核过程与结果记录。", "留痕。"), + "绩效面谈记录": ("绩效面谈内容记录。", "改进跟踪。"), + "指标库": ("绩效指标(KPI/OKR)库。", "考核内容基础。"), + "考核模板库": ("考核表模板库。", "快速套用。"), + "考核团队": ("绩效管理团队设置。", "权限协作。"), + "绩效/自定义设置": ("绩效模块自定义设置。", "杂项配置。"), + # 社保 + "参保账单": ("每月社保公积金参保账单。", "缴费核对入口。"), + "账单核对": ("账单与实缴核对。", "差异排查。"), + "参保档案": ("员工参保档案。", "参保状态主数据。"), + "社保报表": ("社保缴纳报表。", "上报与统计。"), + "社保分析": ("社保成本分析。", "成本洞察。"), + "参保规则": ("参保基数/比例规则。", "地区政策配置核心。"), + # 行政 + "企业公告": ("企业公告发布与阅读。", "全员触达。"), + "企业制度": ("企业规章制度发布。", "制度沉淀。"), + "新闻动态": ("企业新闻动态。", "文化运营。"), + "开具证明": ("在职/收入等证明在线开具。", "员工自助高频需求。"), + "会议预定记录": ("会议室预定记录。", "资源使用查询。"), + "会议室管理": ("会议室资源维护。", "行政资源管理。"), + "会议操作记录": ("会议室操作日志。", "留痕。"), + "问卷管理": ("企业问卷调查发起与统计。", "满意度/调研工具。"), + "问卷模板库": ("问卷模板库。", "快速创建。"), + "问卷操作记录": ("问卷操作日志。", "留痕。"), + # 电子合同 + "电子合同/概览": ("电子合同数据概览。", "签署情况看板。"), + "签署中": ("签署流程进行中的合同。", "待办跟踪。"), + "已签署": ("已完成签署合同。", "生效合同管理。"), + "已作废": ("作废合同归档。", "留痕。"), + "合同档案库": ("电子合同档案库。", "集中存储与检索。"), + "企业印章": ("企业电子印章管理。", "签署授权核心。"), + "合同模板": ("合同模板管理。", "标准化签署。"), + "合同包": ("合同套餐/额度包。", "计费额度管理。"), + # 员工福利 + "员工福利概况": ("福利运营数据概览。", "福利运营入口。"), + "员工积分管理": ("员工积分发放与管理。", "激励体系。"), + "商品专区管理": ("福利商城商品管理。", "福利兑换运营。"), + "平安好医生": ("对接平安好医生健康服务。", "健康福利增值。"), + # 仪表盘 + "我的仪表盘": ("个人自定义数据看板。", "BI 自助看板。"), + "报告老板": ("面向管理层的经营人事报告。", "高层决策报告。"), + # 第三方对接 + "企业微信": ("对接企业微信(组织同步/消息)。", "生态集成。"), + "钉钉": ("对接钉钉。", "生态集成。"), + "飞书": ("对接飞书。", "生态集成。"), + "携程商旅": ("对接携程商旅(差旅)。", "差旅报销联动。"), + # 短信 + "短信发送": ("批量发送短信通知。", "触达通道。"), + "发送记录": ("短信发送记录。", "留痕与计费。"), + # 电子工资条 + "电子工资条/发送工资条": ("发送电子工资条给员工。", "保密发放。"), + "发放记录": ("工资条发放记录。", "留痕。"), + "反馈记录": ("员工对工资条的确认/异议。", "确认闭环。"), + "电子工资条/统计分析": ("工资条发送与确认统计。", "触达率监控。"), + # 智能薪酬 + "智能薪酬/概览": ("智能薪酬数据概览。", "薪酬看板。"), + "薪酬核算": ("智能化薪酬核算。", "核心核算引擎。"), + "员工考勤": ("采集考勤数据用于计薪。", "数据采集环节。"), + "业务提报": ("采集业务提成/绩效等计薪数据。", "数据采集环节。"), + "薪酬档案": ("员工薪酬档案。", "计薪基础。"), + "减除费用确认": ("个税减除费用确认。", "个税计算前置。"), + "税前扣除": ("专项附加扣除等税前扣除。", "个税合规。"), + "个税记录": ("个税计算记录。", "代扣代缴留痕。"), + "成本明细": ("人力成本明细。", "成本核算。"), + "薪酬报表": ("智能薪酬报表。", "统计。"), + "薪酬分析": ("智能薪酬分析。", "成本洞察。"), + "薪酬结构": ("薪酬结构(薪资项)配置。", "计薪规则基础。"), + "基础设置": ("智能薪酬基础设置。", "公司级配置。"), + "成本设置": ("成本核算规则设置。", "成本分摊配置。"), + # 个税 + "人员信息报送": ("向税务报送人员信息。", "个税申报前置。"), + "个税申报": ("个人所得税申报。", "合规刚需。"), + "纳税单位管理": ("纳税主体单位管理。", "多主体申报。"), + # AI + "AI员工助手/AI员工助手": ("面向员工的 AI 问答助手。", "降低 HR 答疑成本。"), + "知识库管理": ("AI 助手知识库维护。", "决定回答质量。"), + "员工助手设置": ("AI 助手行为设置。", "配置。"), + "总体使用情况": ("AI 助手使用统计。", "效果度量。"), +} + +def desc_for(module, group, name): + for k in (f"{module}/{name}", name): + if k in DESC: + return DESC[k] + return (f"{module}模块下「{name}」相关功能页。", "映射自侧边栏菜单,待补充细化。") + +def sanitize(s): + s = re.sub(r'[\\/:*?"<>|]', "_", s).strip() + return s[:40] or "page" + +def main(): + data = json.load(open(MAP)) + conn = sqlite3.connect(DB); conn.row_factory = sqlite3.Row + cur = conn.cursor() + # 先清空(可重复执行) + cur.execute("DELETE FROM features") + + def up(obj): + keys = list(obj.keys()); cols = ",".join(keys); ph = ",".join(["?"]*len(keys)) + cur.execute(f"INSERT OR REPLACE INTO features ({cols}) VALUES ({ph})", [obj[k] for k in keys]) + + mod_order = list(data.keys()) + for mi, module in enumerate(mod_order, 1): + v = data[module] + md, mu = MOD.get(module, (f"{module}模块。", "")) + mod_key = f"mod::{module}" + seq_mod = f"{mi:02d}_{sanitize(module)}" + up(dict(node_key=mod_key, parent_key="", level=0, name=module, + full_path=module, url=v.get("loc",""), description=md, understanding=mu, + sort_order=mi, keep=1)) + groups = v.get("groups", []) + if module in FORCE_SINGLE: + groups = [] + # 单页模块补叶子 + if not groups and module in SINGLE_PAGE: + nm, path = SINGLE_PAGE[module] + d, u = desc_for(module, "", nm) + leaf_key = f"{module}::{path}" + rel = f"screenshots/{seq_mod}/{sanitize(nm)}.jpg" + up(dict(node_key=leaf_key, parent_key=mod_key, level=2, name=nm, + full_path=f"{module} / {nm}", url=ORIGIN+path if path.startswith('/') else path, + description=d, understanding=u, screenshot_path=rel, sort_order=1, keep=1)) + continue + gi = 0 + for g in groups: + gtitle = g.get("title") or "常规" + gi += 1 + grp_key = f"{mod_key}::grp::{gi}_{gtitle}" + up(dict(node_key=grp_key, parent_key=mod_key, level=1, name=gtitle, + full_path=f"{module} / {gtitle}", url="", description=f"{module}模块下「{gtitle}」功能分组。", + understanding="", sort_order=gi, keep=1)) + for ii, it in enumerate(g["items"], 1): + nm = it["name"]; href = it["href"] + url = href if href.startswith("http") else ORIGIN + href + d, u = desc_for(module, gtitle, nm) + leaf_key = f"{module}::{href}" + rel = f"screenshots/{seq_mod}/{sanitize(gtitle)}/{ii:02d}_{sanitize(nm)}.jpg" + up(dict(node_key=leaf_key, parent_key=grp_key, level=2, name=nm, + full_path=f"{module} / {gtitle} / {nm}", url=url, + description=d, understanding=u, screenshot_path=rel, sort_order=ii, keep=1)) + conn.commit() + # 统计 + for lv in (0,1,2): + n = cur.execute("SELECT COUNT(*) FROM features WHERE level=?", (lv,)).fetchone()[0] + print(f"level{lv}: {n}") + print("total:", cur.execute("SELECT COUNT(*) FROM features").fetchone()[0]) + conn.close() + +if __name__ == "__main__": + main() diff --git a/scripts/capture_full.py b/scripts/capture_full.py new file mode 100644 index 0000000..16ef1e1 --- /dev/null +++ b/scripts/capture_full.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +整页滚动截图 (scroll & stitch) —— 针对 2号人事部 window 整页滚动 + fixed 顶栏 + +用法: + python3 capture_full.py [max_tiles] + +原理: + 1. 隐藏帮助/反馈/AI助手/购买浮层等固定挂件, 避免遮挡 + 2. 读取滚动指标, 探测顶部 fixed 顶栏高度 + 3. 逐屏滚动截图(视口图), 除首屏外裁掉与固定顶栏重复的部分 + 4. 纵向拼接为整页长图 +依赖: PIL(Pillow), 通过 daemon(127.0.0.1:10086) 调用 evaluate / screenshot +""" +import sys, os, json, time, base64, io, urllib.request + +DAEMON = "http://127.0.0.1:10086/command" +_OPENER = urllib.request.build_opener(urllib.request.ProxyHandler({})) + +def call(action, args, session): + body = json.dumps({"action": action, "args": args, "session": session}).encode() + req = urllib.request.Request(DAEMON, data=body, headers={"Content-Type": "application/json"}) + with _OPENER.open(req, timeout=40) as resp: + return json.loads(resp.read().decode()) + +def ev(code, session): + r = call("evaluate", {"code": code}, session) + return r.get("data", {}).get("value") + +def shot(session): + r = call("screenshot", {"format": "jpeg", "quality": 70}, session) + b64 = r.get("data", {}).get("data") + if not b64: + raise RuntimeError("no screenshot data: " + json.dumps(r)[:200]) + from PIL import Image + return Image.open(io.BytesIO(base64.b64decode(b64))).convert("RGB") + +HIDE_JS = r""" +(()=>{ + const sels = ['[class*="helpBox"]','[class*="aiAssistant"]','[class*="product_"]', + '[class*="feedback"]','[class*="Feedback"]','[class*="floatBar"]', + '[class*="sideBar"]','[class*="robot"]','[class*="advert"]']; + let n=0; + sels.forEach(s=>document.querySelectorAll(s).forEach(el=>{ + const r=el.getBoundingClientRect(); + if(r.width<600 && getComputedStyle(el).position==='fixed'){el.style.setProperty('display','none','important');n++;} + })); + // 反馈竖条 + document.querySelectorAll('div,a,button').forEach(el=>{ + if(el.children.length<=3 && /^反\s*馈$/.test((el.innerText||'').replace(/\s/g,'')) && getComputedStyle(el).position==='fixed'){el.style.setProperty('display','none','important');n++;} + }); + return n; +})() +""" + +METRICS_JS = r""" +(()=>{ + let hdr=0; + const walk=(el,d)=>{ if(d>5)return; for(const c of el.children){ const s=getComputedStyle(c); const r=c.getBoundingClientRect(); + if((s.position==='fixed'||s.position==='sticky') && r.top<=1 && r.height>10 && r.height<200 && r.width>window.innerWidth*0.6){ if(r.height>hdr)hdr=r.height; } + walk(c,d+1);} }; + walk(document.body,0); + return JSON.stringify({winH:window.innerHeight, winW:window.innerWidth, + docH:Math.max(document.documentElement.scrollHeight,document.body.scrollHeight), hdr:Math.round(hdr)}); +})() +""" + +def scroll_to(y, session): + ev(f"(()=>{{window.scrollTo(0,{y});return window.scrollY;}})()", session) + time.sleep(0.35) + return ev("(()=>window.scrollY)()", session) + +# 探测主内容区的内部滚动容器(表格/列表在固定高度面板内自行滚动的情况) +DETECT_SCROLLER_JS = r""" +(()=>{ + const W=innerWidth,H=innerHeight; let best=null,score=0; + document.querySelectorAll('div,main,section,ul').forEach(el=>{ + const s=getComputedStyle(el); const oy=s.overflowY; + if(oy!=='auto'&&oy!=='scroll') return; + const extra=el.scrollHeight-el.clientHeight; if(extra<40) return; + const r=el.getBoundingClientRect(); + if(r.widthH*0.85) return; + const sc=r.width*r.height+extra*300; + if(sc>score){score=sc;best=el;} + }); + if(!best) return JSON.stringify({found:false}); + document.querySelectorAll('[data-capscroll]').forEach(e=>e.removeAttribute('data-capscroll')); + best.setAttribute('data-capscroll','1'); + const r=best.getBoundingClientRect(); + let hs=0; + best.querySelectorAll(':scope>*,:scope>*>*,:scope>*>*>*').forEach(c=>{ + const cs=getComputedStyle(c); const cr=c.getBoundingClientRect(); + if((cs.position==='sticky'||cs.position==='fixed')&&cr.top<=r.top+3&&cr.height>10&&cr.height<160&&cr.width>r.width*0.5){ if(cr.height>hs)hs=cr.height; } + }); + return JSON.stringify({found:true,left:Math.round(r.left),top:Math.round(r.top), + width:Math.round(r.width),height:Math.round(r.height), + scrollHeight:best.scrollHeight,clientHeight:best.clientHeight,hdr:Math.round(hs)}); +})() +""" + +def scroll_inner(y, session): + return ev("(()=>{const e=document.querySelector('[data-capscroll]');if(!e)return 0;e.scrollTop=%d;return Math.round(e.scrollTop);})()" % int(y), session) + + +def _inner_stitch(session, sc, scale, max_tiles): + """对内部滚动容器逐屏滚动 -> 裁剪容器区域 -> 纵向拼接(含粘性表头去重)。""" + from PIL import Image + left, top = sc["left"], sc["top"] + width, height = sc["width"], sc["height"] + hs = sc.get("hdr", 0) or 0 + maxScroll = max(0, sc["scrollHeight"] - sc["clientHeight"]) + box = (int(round(left * scale)), int(round(top * scale)), + int(round((left + width) * scale)), int(round((top + height) * scale))) + + def tile(): + return shot(session).crop(box) + + scroll_inner(0, session); time.sleep(0.35) + first = tile() + parts = [first] + prev_bottom = height + target = height - hs + guard = 0 + while guard < max_tiles: + guard += 1 + actualY = int(scroll_inner(target, session) or 0); time.sleep(0.3) + img = tile() + crop_logical = prev_bottom - actualY + if crop_logical < 0: + crop_logical = 0 + crop_px = int(round(crop_logical * scale)) + if crop_px >= img.height: + crop_px = int(round(hs * scale)) + parts.append(img.crop((0, crop_px, img.width, img.height))) + prev_bottom = actualY + height + if actualY >= maxScroll - 1: + break + target = prev_bottom - hs + total_h = sum(p.height for p in parts) + stitched = Image.new("RGB", (first.width, total_h), (255, 255, 255)) + y = 0 + for p in parts: + stitched.paste(p, (0, y)); y += p.height + scroll_inner(0, session) + return stitched, guard + 1 + +def capture(session, out_path, max_tiles=14): + from PIL import Image + + ev(HIDE_JS, session) + m = json.loads(ev(METRICS_JS, session)) + winH, winW, docH = m["winH"], m["winW"], m["docH"] + hdr = m["hdr"] or 0 + maxY = max(0, docH - winH) + + # 首屏 + scroll_to(0, session) + first = shot(session) + scale = first.width / winW # 物理/逻辑 + hdr_px = int(round(hdr * scale)) + + tiles = [(first, 0, first.height)] # (img, cropTop_px, used content bottom logical) + prev_bottom = winH # 已覆盖内容底部(逻辑) + ntiles = 1 + mode = "single" + + if docH <= winH + 4: + # window 不滚动: 尝试内部滚动容器(表格/列表页) + sc = {} + try: + sc = json.loads(ev(DETECT_SCROLLER_JS, session) or "{}") + except Exception: + sc = {} + if sc.get("found") and (sc["scrollHeight"] - sc["clientHeight"]) > 40: + stitched, ntiles = _inner_stitch(session, sc, scale, max_tiles) + mode = "inner" + else: + stitched = first + else: + parts = [first] + target = winH - hdr + guard = 0 + last_y = 0 + while guard < max_tiles: + guard += 1 + actualY = scroll_to(target, session) + # 页面实际没有继续前进(虚拟网格/内滚容器/滚动被重置): 停止, 避免重复拼接同一屏 + if actualY <= last_y + 8: + break + img = shot(session) + crop_logical = prev_bottom - actualY + if crop_logical < 0: + crop_logical = 0 + crop_px = int(round(crop_logical * scale)) + if crop_px >= img.height: + crop_px = hdr_px + parts.append(img.crop((0, crop_px, img.width, img.height))) + prev_bottom = actualY + winH + last_y = actualY + if actualY >= maxY - 1: + break + target = prev_bottom - hdr + total_h = sum(p.height for p in parts) + stitched = Image.new("RGB", (first.width, total_h), (255, 255, 255)) + y = 0 + for p in parts: + stitched.paste(p, (0, y)); y += p.height + ntiles = len(parts) + mode = "window" if len(parts) > 1 else "single" + + scroll_to(0, session) + os.makedirs(os.path.dirname(out_path), exist_ok=True) + stitched.save(out_path, "JPEG", quality=78) + print(json.dumps({"path": out_path, "size": [stitched.width, stitched.height], + "tiles": ntiles, "mode": mode, + "docH": docH, "winH": winH, "hdr": hdr}, ensure_ascii=False)) + +if __name__ == "__main__": + _session = sys.argv[1] + _out = sys.argv[2] + _mt = int(sys.argv[3]) if len(sys.argv) > 3 else 14 + capture(_session, _out, _mt) diff --git a/scripts/collect_fields.py b/scripts/collect_fields.py new file mode 100644 index 0000000..b5a0b66 --- /dev/null +++ b/scripts/collect_fields.py @@ -0,0 +1,239 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""全站列表页深度采集器 (任务1 + 任务3)。 +对每个有 URL 的叶子功能页: + 1) 点「更多/更多操作」等入口, 抓取下拉菜单里的隐藏功能项(发现之前未扫描到的界面); + 2) 点「自定义列/设置字段/选择表头」(#icon-custom-columns 或文字)弹窗, 抓取全部可选字段 + (含"系统字段/自定义字段"分组), 远超截图与导出Excel的可见字段; + 3) 兜底: 抓取默认渲染出的可见列头。 +结果写 SQLite: page_extras(隐藏入口) + field_specs(完整字段字典)。 +复用非均匀拟人间隔与登录态检测。""" +import json, urllib.request, time, os, random, sqlite3, collections + +D = "http://127.0.0.1:10086/command"; S = "2haohr" +DB = "db/research.db"; LOG = "db/collect_fields.log" + + +def call(a, args, t=90): + b = json.dumps({"action": a, "args": args, "session": S}).encode() + r = urllib.request.Request(D, data=b, headers={"Content-Type": "application/json"}) + return json.loads(urllib.request.urlopen(r, timeout=t).read().decode()) + + +def ev(code, t=90): + try: + return call("evaluate", {"code": code}, t).get("data", {}).get("value") + except Exception as e: + return "EXC:" + str(e)[:80] + + +def log(m): + line = time.strftime("%H:%M:%S ") + m + print(line, flush=True) + with open(LOG, "a") as f: + f.write(line + "\n") + + +def db(): + c = sqlite3.connect(DB); c.row_factory = sqlite3.Row; return c + + +def ensure(): + c = db() + c.execute("""CREATE TABLE IF NOT EXISTS page_extras( + id INTEGER PRIMARY KEY AUTOINCREMENT, node_key TEXT, full_path TEXT, url TEXT, + kind TEXT, label TEXT, ts TEXT)""") + c.execute("""CREATE TABLE IF NOT EXISTS field_specs( + id INTEGER PRIMARY KEY AUTOINCREMENT, node_key TEXT, full_path TEXT, url TEXT, + field TEXT, field_group TEXT, source TEXT, sort_order INTEGER, ts TEXT)""") + c.execute("PRAGMA journal_mode=DELETE") + c.commit(); c.close() + + +def clear_page(nk): + c = db() + c.execute("DELETE FROM page_extras WHERE node_key=?", (nk,)) + c.execute("DELETE FROM field_specs WHERE node_key=?", (nk,)) + c.commit(); c.close() + + +def save_extras(nk, fp, url, items): + c = db(); ts = time.strftime("%Y-%m-%d %H:%M:%S") + for kind, label in items: + c.execute("INSERT INTO page_extras(node_key,full_path,url,kind,label,ts) VALUES(?,?,?,?,?,?)", + (nk, fp, url, kind, label, ts)) + c.commit(); c.close() + + +def save_fields(nk, fp, url, fields, source): + c = db(); ts = time.strftime("%Y-%m-%d %H:%M:%S") + for i, (grp, name) in enumerate(fields): + c.execute("INSERT INTO field_specs(node_key,full_path,url,field,field_group,source,sort_order,ts)" + " VALUES(?,?,?,?,?,?,?,?)", (nk, fp, url, name, grp, source, i, ts)) + c.commit(); c.close() + + +def human_delay(kind="page"): + r = random.random() + if kind == "page": + d = random.uniform(3.5, 8.0) if r < 0.7 else random.uniform(8.0, 18.0) + else: + d = random.uniform(1.0, 3.0) if r < 0.75 else random.uniform(3.0, 7.0) + d = max(0.7, d + random.gauss(0, 0.4)) + time.sleep(d); return d + + +def logged_out(): + h = ev("location.href") + return isinstance(h, str) and "/login" in h + + +# ---- JS 片段 ---- +CLICK_MORE = r"""(()=>{const kws=['更多','更多操作','更多设置']; + const b=[...document.querySelectorAll('button,a,span,div')].find(x=>x.childElementCount===0&&kws.includes((x.innerText||'').trim())&&x.getBoundingClientRect().width>0); + if(!b)return 'no-more';b.click();return 'clicked';})()""" + +# 抓取下拉/浮层菜单里的操作项: 限 dropdown/popper/menu/popover 容器(可见), +# 且单容器项数<=15(超过则为筛选/树选择面板, 非操作菜单, 丢弃) +MENU_ITEMS = r"""(()=>{const BAD=/搜索|条\/页|进入员工端|进入官网|退出登录|个性化设置|按.*排序|升序|降序|排在前|排在后|帮助/; + const boxes=[...document.querySelectorAll('[class*=dropdown],[class*=Dropdown],[class*=popper],[class*=popover],[class*=Popover],[role=menu]')] + .filter(m=>{const r=m.getBoundingClientRect();return r.width>0&&r.height>0;}); + let out=[]; + for(const box of boxes){ + const its=[...box.querySelectorAll('li,[role=menuitem],[class*=item],[class*=option]')] + .map(e=>(e.innerText||'').replace(/\s+/g,'').trim()).filter(t=>t&&t.length>1&&t.length<16&&!BAD.test(t)); + const uniq=[...new Set(its)]; + if(uniq.length>=1&&uniq.length<=15)out=out.concat(uniq); // 超过15视为筛选面板污染, 丢弃 + } + return JSON.stringify([...new Set(out)]);})()""" + +# 点自定义列/设置字段/选择表头 入口(图标或文字) +CLICK_COLSET = r"""(()=>{ + const u=[...document.querySelectorAll('use')].find(u=>{const h=(u.getAttribute('xlink:href')||u.getAttribute('href')||'');return h==='#icon-custom-columns'||h==='#icon-setting'&&false;}); + if(u){const b=u.closest('button,a,[role=button],span,div');if(b){b.click();return 'icon';}} + const kw=/^(自定义列|设置字段|字段设置|选择表头|表头设置|设置花名册字段|列设置|自定义字段)$/; + const t=[...document.querySelectorAll('button,a,span,div,li')].find(x=>x.childElementCount===0&&kw.test((x.innerText||'').trim())&&x.getBoundingClientRect().width>0); + if(t){t.click();return 'txt';} + return 'none';})()""" + +# 从"选择表头/自定义列"弹窗按顺序抓字段(复选框标签法, 已验证=花名册81字段干净) +# 限定弹窗容器(含"选择表头|已选"且checkbox>3且宽180-700高>200), walk遍历childNodes: +# text节点匹配GRPS作分组标题, LABEL标签作字段, NOISE集过滤噪音 +GRAB_FIELDS = r"""(()=>{ + const pop=[...document.querySelectorAll('div,aside,section')].find(m=>{const t=m.innerText||'';const r=m.getBoundingClientRect(); + return r.width>180&&r.width<700&&r.height>200&&/选择表头|已选/.test(t)&&m.querySelectorAll('input[type=checkbox]').length>3;}); + if(!pop)return 'no-modal'; + const GRPS=['系统字段','自定义字段','基础字段','常用字段','其他字段','个人信息','工作信息','合同信息']; + const NOISE=new Set(['选择表头','没有搜索到相关内容','全部','清除','取消','确定','恢复默认','重置','搜索','已选']); + let seq=[],cur=''; + const walk=el=>{for(const c of el.childNodes){ + if(c.nodeType===3){const t=(c.textContent||'').trim();if(t&&t.length<15){if(GRPS.includes(t))cur=t;else if(!NOISE.has(t)&&!/^已选/.test(t))seq.push([cur,t]);}} + else if(c.nodeType===1){if(c.tagName==='LABEL'){const t=(c.innerText||'').trim();if(t&&t.length<15&&!NOISE.has(t))seq.push([cur,t]);}else walk(c);}}}; + walk(pop); + const seen=new Set(),out=[];for(const [g,n] of seq){if(seen.has(n))continue;seen.add(n);out.push([g,n]);} + return JSON.stringify(out);})()""" + +# 处理"页面内容已过期, 请点击 立即刷新"横幅(标签闲置后出现) +REFRESH = r"""(()=>{const b=[...document.querySelectorAll('a,button,span')].find(x=>x.childElementCount===0&&/立即刷新/.test((x.innerText||'').trim())&&x.getBoundingClientRect().width>0);if(b){b.click();return 'refreshed';}return 'none';})()""" + +CLOSE_MODAL = r"""(()=>{const b=[...document.querySelectorAll('button,a')].find(x=>{const t=(x.innerText||'').trim();return (t==='取消'||t==='关闭')&&x.getBoundingClientRect().width>0;}); + if(b){b.click();return 'closed';}document.body.click();return 'bodyclick';})()""" + +# 兜底: 默认渲染的可见列头(过滤 操作/序号/全选/日期列等非字段噪音) +VISIBLE_COLS = r"""(()=>{const BAD=/^(操作|序号|全选|选择|处理)$|^\d+日|^\d+$/; + const heads=[...document.querySelectorAll('[role=columnheader],th,[class*=headerCell],[class*=header_] [class*=cell_],[class*=thead] [class*=cell]')] + .map(e=>(e.innerText||'').replace(/\s+/g,'').trim()).filter(t=>t&&t.length<20&&!BAD.test(t)); + return JSON.stringify([...new Set(heads)]);})()""" + + +def process(p, idx, total): + fp, url, nk = p["full_path"], p["url"], p["node_key"] + log("[%d/%d] %s" % (idx, total, fp)) + call("navigate", {"url": url, "newTab": False}) + time.sleep(4) + for _ in range(4): + if not logged_out(): + break + time.sleep(2) + if logged_out(): + log(" !! 登录态失效, 中止"); return -1 + # 处理"页面内容已过期"横幅(标签闲置后出现) + if ev(REFRESH) == "refreshed": + time.sleep(3) + clear_page(nk) + + # ---- 任务1: 更多菜单隐藏入口(菜单渲染有时滞后, 重试抓取) ---- + extras = [] + for attempt in range(3): + if ev(CLICK_MORE) != "clicked": + break + time.sleep(1.2 + attempt * 0.8) + try: + items = json.loads(ev(MENU_ITEMS)) + except Exception: + items = [] + if items: + for it in items: + extras.append(("more_menu", it)) + ev(CLOSE_MODAL); time.sleep(0.5) + break + ev(CLOSE_MODAL); time.sleep(0.4) + if extras: + save_extras(nk, fp, url, extras) + log(" 更多菜单项: %d 个 -> %s" % (len(extras), "、".join(x[1] for x in extras[:8]))) + + # ---- 任务3: 完整字段 ---- + fields = []; source = "" + if ev(CLICK_COLSET) != "none": + time.sleep(1.5) + raw = ev(GRAB_FIELDS) + if isinstance(raw, str) and raw.startswith("["): + try: + fields = json.loads(raw) + except Exception: + fields = [] + source = "custom_columns" + ev(CLOSE_MODAL); time.sleep(0.5) + if not fields: + # 兜底可见列 + try: + cols = json.loads(ev(VISIBLE_COLS)) + except Exception: + cols = [] + fields = [("", c) for c in cols] + source = "visible_cols" + if fields: + save_fields(nk, fp, url, fields, source) + log(" 字段: %d 个 (来源=%s) -> %s" % (len(fields), source, "、".join(f[1] for f in fields[:10]))) + else: + log(" 无字段入口(可能非表格页)") + return len(fields) + + +def main(): + ensure() + call("find_tab", {"url": "2haohr.com"}) + c = db() + rows = [dict(r) for r in c.execute("SELECT node_key,parent_key,name,full_path,url FROM features")] + c.close() + kids = collections.defaultdict(int) + for r in rows: + if r["parent_key"]: + kids[r["parent_key"]] += 1 + leaves = [r for r in rows if kids.get(r["node_key"], 0) == 0 and r["url"]] + log("=== 全站字段采集, 共 %d 个叶子页 ===" % len(leaves)) + total_f = 0 + for i, p in enumerate(leaves, 1): + try: + n = process(p, i, len(leaves)) + if n == -1: + log("=== 中止 ==="); break + total_f += max(0, n) + except Exception as e: + log(" 页面异常: %s" % str(e)[:100]) + human_delay("page") + log("=== DONE 累计字段=%d ===" % total_f) + + +if __name__ == "__main__": + main() diff --git a/scripts/crawl_shots.py b/scripts/crawl_shots.py new file mode 100644 index 0000000..7c64979 --- /dev/null +++ b/scripts/crawl_shots.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +阶段2: 逐页整页截图爬取。 +从 SQLite 读取所有 level2 叶子(url + screenshot_path), 依次: + 随机 5-15s 延时 -> 导航到 url -> 等待加载 -> 整页滚动拼接截图 -> 保存到树形目录 +支持断点续跑(已存在截图文件则跳过)。进度写 db/crawl_progress.log +用法: python3 crawl_shots.py [start_index] +""" +import os, sys, json, time, random, sqlite3, urllib.request +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from capture_full import capture, ev + +DAEMON = "http://127.0.0.1:10086/command" +SESSION = "2haohr" +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +LOG = os.path.join(BASE, "db", "crawl_progress.log") + +def navigate(url): + body = json.dumps({"action": "navigate", "args": {"url": url, "newTab": False}, "session": SESSION}).encode() + req = urllib.request.Request(DAEMON, data=body, headers={"Content-Type": "application/json"}) + with urllib.request.urlopen(req, timeout=45) as resp: + return json.loads(resp.read().decode()) + +def wait_ready(max_wait=8): + """等待页面加载完成(readyState + 主内容出现)""" + t0 = time.time() + while time.time() - t0 < max_wait: + try: + rs = ev("(()=>document.readyState)()", SESSION) + if rs == "complete": + time.sleep(1.2) + return True + except Exception: + pass + time.sleep(0.6) + return False + +def log(msg): + line = time.strftime("%H:%M:%S ") + msg + print(line, flush=True) + with open(LOG, "a") as f: + f.write(line + "\n") + +def main(): + start = int(sys.argv[1]) if len(sys.argv) > 1 else 0 + conn = sqlite3.connect(DB); conn.row_factory = sqlite3.Row + rows = conn.execute( + "SELECT node_key,name,full_path,url,screenshot_path FROM features WHERE level=2 ORDER BY sort_order, id" + ).fetchall() + # 稳定顺序: 按 full_path + rows = sorted(rows, key=lambda r: r["full_path"] or "") + conn.close() + total = len(rows) + log(f"=== crawl start, total={total}, start_index={start} ===") + done = 0; skipped = 0; failed = 0 + for i, r in enumerate(rows): + if i < start: + continue + rel = r["screenshot_path"] + out = os.path.join(BASE, rel) + if os.path.exists(out) and os.path.getsize(out) > 3000: + skipped += 1 + continue + delay = random.uniform(5, 15) + log(f"[{i+1}/{total}] wait {delay:.1f}s -> {r['full_path']}") + time.sleep(delay) + try: + navigate(r["url"]) + wait_ready() + time.sleep(random.uniform(0.8, 2.0)) # 额外抖动 + res = capture(SESSION, out, 16) + done += 1 + log(f" OK {r['name']} -> {rel}") + except Exception as e: + failed += 1 + log(f" FAIL {r['name']} url={r['url']} err={str(e)[:150]}") + log(f"=== DONE done={done} skipped={skipped} failed={failed} total={total} ===") + +if __name__ == "__main__": + main() diff --git a/scripts/dbtool.py b/scripts/dbtool.py new file mode 100644 index 0000000..08d2609 --- /dev/null +++ b/scripts/dbtool.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +2号人事部 功能调研 —— SQLite 数据存取工具 + +用法: + python3 dbtool.py init 初始化数据库表结构 + python3 dbtool.py add 新增/更新一个功能节点(传入JSON对象) + python3 dbtool.py addmany 批量新增/更新(传入JSON数组) + python3 dbtool.py setshot 设置某节点的截图路径 + python3 dbtool.py get 查询单个节点 + python3 dbtool.py tree 以树形结构打印(JSON) + python3 dbtool.py stats 统计各层级节点数 + +节点字段: + node_key 唯一键(建议用 URL 或 path 组合, 用于去重更新) + parent_key 父节点的 node_key (顶层为空) + level 0=顶层模块 1=分组 2=菜单页 3=子页/Tab + name 功能名称 + full_path 全路径名称(面包屑, 如 "人事 / 员工管理 / 员工花名册") + url 页面URL + description 释义(功能是做什么的) + understanding 我理解的信息(交互/字段/价值等) + screenshot_path 截图相对路径 + sort_order 排序 + keep 是否保留(供管理员勾选, 默认1=保留) +""" +import sqlite3, sys, json, os + +DB_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "db", "research.db") + +SCHEMA = """ +CREATE TABLE IF NOT EXISTS features ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + node_key TEXT UNIQUE NOT NULL, + parent_key TEXT, + level INTEGER NOT NULL DEFAULT 0, + name TEXT NOT NULL, + full_path TEXT, + url TEXT, + description TEXT, + understanding TEXT, + screenshot_path TEXT, + sort_order INTEGER DEFAULT 0, + keep INTEGER DEFAULT 1, + created_at TEXT DEFAULT (datetime('now','localtime')), + updated_at TEXT DEFAULT (datetime('now','localtime')) +); +CREATE INDEX IF NOT EXISTS idx_parent ON features(parent_key); +CREATE INDEX IF NOT EXISTS idx_level ON features(level); +""" + +FIELDS = ["node_key","parent_key","level","name","full_path","url", + "description","understanding","screenshot_path","sort_order","keep"] + +def conn(): + os.makedirs(os.path.dirname(DB_PATH), exist_ok=True) + c = sqlite3.connect(DB_PATH) + c.row_factory = sqlite3.Row + return c + +def init(): + c = conn() + c.executescript(SCHEMA) + c.commit(); c.close() + print("DB initialized at", DB_PATH) + +def upsert(c, obj): + keys = [k for k in FIELDS if k in obj] + placeholders = ",".join(["?"]*len(keys)) + cols = ",".join(keys) + updates = ",".join([f"{k}=excluded.{k}" for k in keys if k != "node_key"]) + sql = f"INSERT INTO features ({cols}) VALUES ({placeholders}) " \ + f"ON CONFLICT(node_key) DO UPDATE SET {updates}, updated_at=datetime('now','localtime')" + c.execute(sql, [obj[k] for k in keys]) + +def add(obj): + c = conn(); upsert(c, obj); c.commit(); c.close() + print("ok:", obj.get("node_key")) + +def addmany(arr): + c = conn() + for obj in arr: + upsert(c, obj) + c.commit(); c.close() + print("ok addmany:", len(arr)) + +def setshot(node_key, path): + c = conn() + c.execute("UPDATE features SET screenshot_path=?, updated_at=datetime('now','localtime') WHERE node_key=?", (path, node_key)) + c.commit(); n = c.total_changes; c.close() + print("updated" if n else "not found", node_key) + +def get(node_key): + c = conn() + r = c.execute("SELECT * FROM features WHERE node_key=?", (node_key,)).fetchone() + c.close() + print(json.dumps(dict(r), ensure_ascii=False) if r else "null") + +def stats(): + c = conn() + rows = c.execute("SELECT level, COUNT(*) n FROM features GROUP BY level ORDER BY level").fetchall() + total = c.execute("SELECT COUNT(*) n FROM features").fetchone()["n"] + shots = c.execute("SELECT COUNT(*) n FROM features WHERE screenshot_path IS NOT NULL AND screenshot_path<>''").fetchone()["n"] + c.close() + for r in rows: + print(f"level {r['level']}: {r['n']}") + print(f"total: {total}, with_screenshot: {shots}") + +def tree(): + c = conn() + rows = [dict(r) for r in c.execute("SELECT * FROM features ORDER BY level, sort_order, id").fetchall()] + c.close() + by_parent = {} + for r in rows: + by_parent.setdefault(r["parent_key"] or "", []).append(r) + def build(pk): + out = [] + for r in by_parent.get(pk, []): + node = {k: r[k] for k in ("node_key","name","level","url","description","understanding","screenshot_path","keep")} + node["children"] = build(r["node_key"]) + out.append(node) + return out + print(json.dumps(build(""), ensure_ascii=False)) + +if __name__ == "__main__": + cmd = sys.argv[1] if len(sys.argv) > 1 else "" + if cmd == "init": init() + elif cmd == "add": add(json.loads(sys.argv[2])) + elif cmd == "addmany": addmany(json.loads(sys.argv[2])) + elif cmd == "setshot": setshot(sys.argv[2], sys.argv[3]) + elif cmd == "get": get(sys.argv[2]) + elif cmd == "stats": stats() + elif cmd == "tree": tree() + else: + print(__doc__) + sys.exit(1) diff --git a/scripts/dl_biz.py b/scripts/dl_biz.py new file mode 100644 index 0000000..dab855a --- /dev/null +++ b/scripts/dl_biz.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""业务数据列表页导出深挖:各模块有真实数据的列表页(花名册/工资表/账单/考勤明细等) +触发导出(类型B: #icon-export / 文字“导出”) -> 异步任务中心 -> 统一收割落盘。 +复用 dl_export 的安全逻辑(防登出授权处理 + 非均匀拟人间隔 + 四类入口)。""" +import sys, time +sys.path.insert(0, "scripts") +import dl_export as X + +# (保存路径 full_path, url, node_key) —— 各模块有真实数据的业务列表页 +DATA = [ + ("02_人事 / 员工管理 / 员工花名册", "https://2haohr.com/personnel/employee/roster", "biz_roster"), + ("02_人事 / 员工管理 / 员工档案库", "https://2haohr.com/personnel/employee/archive", "biz_arch"), + ("02_人事 / 员工管理 / 万能人事表格", "https://2haohr.com/personnel/employee/personnel-form", "biz_form"), + ("02_人事 / 员工关系 / 入职管理", "https://2haohr.com/personnel/relation/enrollment", "biz_enroll"), + ("02_人事 / 员工关系 / 离职管理", "https://2haohr.com/personnel/relation/departure", "biz_depart"), + ("02_人事 / 员工关系 / 合同管理", "https://2haohr.com/personnel/relation/contract", "biz_contract"), + ("02_人事 / 员工关系 / 奖惩记录", "https://2haohr.com/personnel/relation/award", "biz_award"), + ("02_人事 / 员工关系 / 人事异动", "https://2haohr.com/personnel/relation/unusual-action", "biz_unusual"), + ("06_薪酬 / 薪酬管理 / 月工资表", "https://2haohr.com/payroll/salary/monthly", "biz_monthly"), + ("06_薪酬 / 薪酬管理 / 员工薪资", "https://2haohr.com/payroll/salary/profiles", "biz_profiles"), + ("06_薪酬 / 薪酬管理 / 工资发放", "https://2haohr.com/payroll/salary/payoff", "biz_payoff"), + ("05_社保公积金 / 常规 / 参保账单", "https://2haohr.com/social-insurance/records", "biz_sirec"), + ("05_社保公积金 / 常规 / 账单核对", "https://2haohr.com/social-insurance/bill", "biz_sibill"), + ("04_考勤假期 / 考勤统计 / 月考勤表", "https://2haohr.com/attendance/stat/monthly", "biz_kqmonth"), + ("04_考勤假期 / 考勤统计 / 明细记录", "https://2haohr.com/attendance/stat/records", "biz_kqrec"), + ("04_考勤假期 / 考勤统计 / 每日考勤", "https://2haohr.com/attendance/stat/daily", "biz_kqday"), + ("04_考勤假期 / 假期管理 / 休假一览", "https://2haohr.com/attendance/holiday/leaveRecords", "biz_leave"), + ("04_考勤假期 / 假期管理 / 假期余额", "https://2haohr.com/attendance/holiday/balance", "biz_balance"), + ("03_组织 / 岗位管理 / 员工标签", "https://2haohr.com/org/tag/emp-tags", "biz_tag"), + ("07_绩效 / 考核结果 / 绩效考核记录", "https://2haohr.com/performance-evaluation/result/assessment", "biz_perfrec"), +] + + +def main(): + X.ensure() + X.call("find_tab", {"url": "2haohr.com"}) + pages = [{"full_path": a, "url": b, "node_key": c, "screenshot_path": None} for a, b, c in DATA] + X.log("=== BIZ 业务列表页深挖, 共 %d 页 ===" % len(pages)) + aborted = False + for i, p in enumerate(pages, 1): + try: + n = X.process_page(p, i, len(pages)) + if n == -1: + X.log("=== 登录态失效, 中止 ===") + aborted = True + break + except Exception as e: + X.log(" 页面异常: %s" % str(e)[:100]) + X.human_delay("page") + if not aborted: + X.log("=== 收割任务中心 stage2=%d ===" % X.harvest_task_center()) + X.log("=== BIZ DONE 累计文件=%d ===" % len(X.SAVED)) + + +if __name__ == "__main__": + main() diff --git a/scripts/dl_biz2.py b/scripts/dl_biz2.py new file mode 100644 index 0000000..dea229d --- /dev/null +++ b/scripts/dl_biz2.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""第二批业务列表页深挖(补充未深挖模块):组织/审批/电子合同/电子工资条/ +社保参保档案/人事关系子表/绩效档案/培训记录/行政公告。 +复用 dl_export 的四类入口 + 防登出授权 + 非均匀拟人间隔 + 任务中心收割。""" +import sys +sys.path.insert(0, "scripts") +import dl_export as X + +# (保存路径 full_path, url, node_key) —— 大概率有真实数据+导出入口的业务列表页 +DATA = [ + ("03_组织 / 部门管理 / 组织管理", "https://2haohr.com/org/dept/manage/home", "biz2_dept"), + ("03_组织 / 岗位管理 / 岗位管理", "https://2haohr.com/org/job/job-management", "biz2_job"), + ("03_组织 / 岗位管理 / 职务管理", "https://2haohr.com/org/job-system/title", "biz2_title"), + ("03_组织 / 岗位管理 / 职级管理", "https://2haohr.com/org/rank", "biz2_rank"), + ("08_审批 / 记录 / 审批记录", "https://2haohr.com/approval/record/list", "biz2_apprec"), + ("05_社保公积金 / 常规 / 参保档案", "https://2haohr.com/social-insurance/archives", "biz2_siarch"), + ("12_电子合同 / 合同签署 / 已签署", "https://2haohr.com/econtract/sign/signed", "biz2_signed"), + ("12_电子合同 / 合同签署 / 合同档案库", "https://2haohr.com/econtract/archive/home", "biz2_econarch"), + ("20_电子工资条 / 常规 / 发放记录", "https://2haohr.com/payslip/record", "biz2_payslip"), + ("02_人事 / 员工关系 / 转正管理", "https://2haohr.com/personnel/relation/probation", "biz2_probation"), + ("02_人事 / 员工关系 / 任职记录", "https://2haohr.com/personnel/relation/office", "biz2_office"), + ("02_人事 / 员工关系 / 实习生管理", "https://2haohr.com/personnel/relation/internship", "biz2_intern"), + ("02_人事 / 员工关系 / 培训经历", "https://2haohr.com/personnel/relation/train", "biz2_train"), + ("02_人事 / 员工关系 / 沟通记录", "https://2haohr.com/personnel/relation/talk", "biz2_talk"), + ("09_绩效 / 考核结果 / 员工绩效档案", "https://2haohr.com/performance-evaluation/result/archive", "biz2_perfarch"), + ("09_绩效 / 考核结果 / 绩效面谈记录", "https://2haohr.com/performance-evaluation/result/interview", "biz2_interview"), + ("13_培训学习 / 培训管理 / 培训记录", "https://2haohr.com/training/manage/record/list", "biz2_trainrec"), + ("11_行政管理 / 常规 / 企业公告", "https://2haohr.com/oa/notice", "biz2_notice"), +] + + +def main(): + X.ensure() + X.call("find_tab", {"url": "2haohr.com"}) + pages = [{"full_path": a, "url": b, "node_key": c, "screenshot_path": None} for a, b, c in DATA] + X.log("=== BIZ2 补充业务列表页深挖, 共 %d 页 ===" % len(pages)) + aborted = False + for i, p in enumerate(pages, 1): + try: + n = X.process_page(p, i, len(pages)) + if n == -1: + X.log("=== 登录态失效, 中止 ===") + aborted = True + break + except Exception as e: + X.log(" 页面异常: %s" % str(e)[:100]) + X.human_delay("page") + if not aborted: + X.log("=== 收割任务中心 stage2=%d ===" % X.harvest_task_center()) + X.log("=== BIZ2 DONE 累计文件=%d ===" % len(X.SAVED)) + + +if __name__ == "__main__": + main() diff --git a/scripts/dl_export.py b/scripts/dl_export.py new file mode 100644 index 0000000..6937af9 --- /dev/null +++ b/scripts/dl_export.py @@ -0,0 +1,313 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +报表/文档导出下载器(Excel/Word 为主)。完整链路(已逐环节实测验证): + 入口:svg use[xlink:href=#icon-download] 图标(无文字,代码级定位)+ 文字“下载/生成excel”兜底; + 生成:点图标 -> 弹“下载报表/导出”参数窗 -> 点“确定”(默认参数) -> 异步生成; + 捕获:hook HTMLAnchorElement.prototype.click 捕获 rpt-cdn/prv-cdn 带 token 直链; + 落盘:页面内同步 XHR 取字节 -> base64 回传 -> 写 workspace(绕过 macOS ~/Downloads 的 TCC 限制)。 +阶段2:任务中心(taskCenter)收割兜底。产出真实 .xlsx/.docx,写 SQLite downloads 表; +页面间随机 5-15s;断点续跑(同名>2000字节跳过)。 +""" +import json, urllib.request, base64, time, os, random, sqlite3, re, collections + +D = "http://127.0.0.1:10086/command"; S = "2haohr" +DB = "db/research.db"; LOG = "db/dl_export.log" +KW = ['报表', '分析', '仪表盘', '统计', '档案', '模板', '文档', '制度', '公告', '证明'] +TXT_BTN = ['直接下载', '生成excel', '导出Excel', '导出报表', '批量导出'] # 文字入口(不含裸“下载/导出”避免误点导航) + +def call(a, args, timeout=120): + b = json.dumps({"action": a, "args": args, "session": S}).encode() + r = urllib.request.Request(D, data=b, headers={"Content-Type": "application/json"}) + return json.loads(urllib.request.urlopen(r, timeout=timeout).read().decode()) + +def ev(code, timeout=120): + try: + return call("evaluate", {"code": code}, timeout).get("data", {}).get("value") + except Exception as e: + return "EXC:" + str(e)[:80] + +def log(m): + line = time.strftime("%H:%M:%S ") + m + print(line, flush=True) + with open(LOG, "a") as f: + f.write(line + "\n") + +HOOK = r"""(()=>{window.__cap=window.__cap||[]; + if(!HTMLAnchorElement.prototype.__hk){const ac=HTMLAnchorElement.prototype.click; + HTMLAnchorElement.prototype.click=function(){try{const h=this.href||''; + if(h&&/-cdn\.2haohr|prv-cdn|rpt-cdn|attname=|\.xlsx|\.xls|\.docx|\.doc|\.zip/i.test(h))window.__cap.push(h);}catch(e){} + return ac.apply(this,arguments);};HTMLAnchorElement.prototype.__hk=1;} + return 'ok';})()""" + +# 未处理的 #icon-download 数量 +COUNT_ICON = r"""(()=>{let n=0;document.querySelectorAll('use').forEach(u=>{ + const h=u.getAttribute('xlink:href')||u.getAttribute('href'); + if(h==='#icon-download'){const b=u.closest('button,a,[role=button]');if(b&&!b.hasAttribute('data-dl'))n++;}});return n;})()""" + +# 点击下一个未处理的 #icon-download +CLICK_ICON = r"""(()=>{const us=[...document.querySelectorAll('use')].filter(u=>(u.getAttribute('xlink:href')||u.getAttribute('href'))==='#icon-download'); + for(const u of us){const b=u.closest('button,a,[role=button]');if(b&&!b.hasAttribute('data-dl')){b.setAttribute('data-dl','1');b.click();return 'ok';}} + return 'none';})()""" + +# 文字入口 +COUNT_TXT = (r"""(()=>{const T=%s;let n=0;document.querySelectorAll('button,a,[role=button]').forEach(x=>{""" + r"""const t=(x.innerText||'').trim();if(T.includes(t)&&x.getBoundingClientRect().width>0&&!x.hasAttribute('data-dl'))n++;});return n;})()""") % json.dumps(TXT_BTN) +CLICK_TXT = (r"""(()=>{const T=%s;for(const t of T){const b=[...document.querySelectorAll('button,a,[role=button]')]""" + r""".find(x=>(x.innerText||'').trim()===t&&x.getBoundingClientRect().width>0&&!x.hasAttribute('data-dl'));""" + r"""if(b){b.setAttribute('data-dl','1');b.click();return t;}}return 'none';})()""") % json.dumps(TXT_BTN) + +# 参数窗“确定/下载/导出”——关键词精确定位“下载报表/导出”参数窗(避免误点其它弹层) +KWWIN = r"下载报表|导出|下载|部门|员工排序|工作性质|字段|范围|格式|参数|排序|在职" +CONFIRM = (r"""(()=>{const cand=['确定','确认','下载','导出','生成excel','生成','立即导出','立即下载']; + const KW=/%s/; + const ms=[...document.querySelectorAll('[class*=modal],[class*=Modal],[role=dialog],[class*=dialog],[class*=drawer],[class*=Drawer]')]; + const vis=ms.filter(m=>{const r=m.getBoundingClientRect();return r.width>200&&r.height>80&&getComputedStyle(m).display!=='none'&&getComputedStyle(m).visibility!=='hidden';}); + // 优先带关键词的参数窗, 再退化到任意可见弹层 + const ranked=[...vis.filter(m=>KW.test(m.innerText||'')),...vis]; + for(const m of ranked){ + for(const t of cand){const b=[...m.querySelectorAll('button,a')].find(x=>(x.innerText||'').trim()===t&&x.getBoundingClientRect().width>0); + if(b){b.click();return 'modal:'+t;}}} + return vis.length?'modal:noconfirm':'nomodal';})()""") % KWWIN + +CLOSE = r"""(()=>{const ms=[...document.querySelectorAll('[class*=modal],[class*=Modal],[role=dialog],[class*=dialog],[class*=drawer]')]; + for(const m of ms){const r=m.getBoundingClientRect();if(r.width>200&&r.height>80&&getComputedStyle(m).display!=='none'){ + const c=[...m.querySelectorAll('button,a,[class*=close],[class*=Close]')] + .find(x=>{const t=(x.innerText||'').trim();return t==='取消'||t==='关闭'||(x.className+'').toLowerCase().includes('close');}); + if(c){c.click();return 'closed';}}}return 'none';})()""" + +# 数据授权/协议窗:只点“知情并同意”,绝不点“不同意并退出登录”(之前登出的元凶) +AGREE = r"""(()=>{const bad=/退出登录|不同意/;const ok=['知情并同意','同意并继续','我已阅读并同意','同意']; + const ms=[...document.querySelectorAll('[class*=modal],[class*=Modal],[role=dialog],[class*=dialog],[class*=drawer],[class*=Drawer]')] + .filter(m=>{const r=m.getBoundingClientRect();return r.width>200&&r.height>60&&getComputedStyle(m).display!=='none';}); + for(const m of ms){const txt=m.innerText||'';if(!/协议|授权|同意|条款|隐私/.test(txt))continue; + for(const t of ok){const b=[...m.querySelectorAll('button,a')].find(x=>(x.innerText||'').trim()===t&&!bad.test(x.innerText||'')); + if(b){b.click();return 'agree:'+t;}}} + return 'none';})()""" + +BAD = r"退出登录|不同意|立即购买|预约演示|我要更多功能" +# 类型B 数据列表导出入口: #icon-export 或 主内容区文字“导出”(排除导航/任务中心/黑名单) +CLICK_EXPORT = (r"""(()=>{const BAD=/%s/; + const inNav=e=>!!e.closest('nav,[class*=navBar],[class*=sideMenu],[class*=taskCenter]'); + const us=[...document.querySelectorAll('use')].filter(u=>(u.getAttribute('xlink:href')||u.getAttribute('href'))==='#icon-export'); + for(const u of us){const b=u.closest('button,a,[role=button]');if(b&&!b.hasAttribute('data-dl')&&!inNav(b)){b.setAttribute('data-dl','1');b.click();return 'icon-export';}} + const b=[...document.querySelectorAll('button,a,[role=button]')].find(x=>{const t=(x.innerText||'').trim();return t==='导出'&&x.getBoundingClientRect().width>0&&!x.hasAttribute('data-dl')&&!inNav(x)&&!BAD.test(t);}); + if(b){b.setAttribute('data-dl','1');b.click();return 'txt-导出';} + return 'none';})()""") % BAD + +# 类型A 报表中心卡片导出: 生成excel/直接下载/下载(排除导航/任务中心/黑名单) +CARD_BTN = ['生成excel', '直接下载', '导出Excel', '导出报表', '批量导出', '下载'] +CLICK_CARD = (r"""(()=>{const T=%s;const BAD=/%s/; + const inNav=e=>!!e.closest('nav,[class*=navBar],[class*=sideMenu],[class*=taskCenter]'); + for(const t of T){const b=[...document.querySelectorAll('button,a,[role=button]')].find(x=>(x.innerText||'').trim()===t&&x.getBoundingClientRect().width>0&&!x.hasAttribute('data-dl')&&!inNav(x)&&!BAD.test(x.innerText||'')); + if(b){b.setAttribute('data-dl','1');b.click();return t;}} + return 'none';})()""") % (json.dumps(CARD_BTN), BAD) + +FETCH_LAST = r"""(()=>{try{if(!window.__cap||!window.__cap.length)return 'NO_HREF'; + const u=window.__cap[window.__cap.length-1];const x=new XMLHttpRequest();x.open('GET',u,false); + x.overrideMimeType('text/plain;charset=x-user-defined');x.send();if(x.status!==200)return 'HTTP'+x.status; + const s=x.responseText;let out='';const CH=8192;for(let i=0;i{const tc=document.querySelector('[class*=taskCenter]');if(!tc)return '[]'; + const dls=[...tc.querySelectorAll('a')].filter(a=>(a.innerText||'').trim()==='下载'); + const names=dls.map(a=>{const row=a.closest('[class*=item],li,div');const info=row&&row.querySelector('[class*=info_]'); + return info?(info.innerText||'').replace(/\n+/g,' ').trim().slice(0,50):'';}); + return JSON.stringify(names);})()""" +TC_CLICK = r"""(function(i){const tc=document.querySelector('[class*=taskCenter]');if(!tc)return 'NO_TC'; + const dls=[...tc.querySelectorAll('a')].filter(a=>(a.innerText||'').trim()==='下载'); + if(i>=dls.length)return 'OOB';dls[i].click();return 'ok';})(%d)""" + +def db(): + c = sqlite3.connect(DB); c.row_factory = sqlite3.Row; return c + +def ensure(): + c = db(); c.execute("""CREATE TABLE IF NOT EXISTS downloads( + id INTEGER PRIMARY KEY AUTOINCREMENT, node_key TEXT, full_path TEXT, url TEXT, + kind TEXT, file_path TEXT, status TEXT, size INTEGER, note TEXT, ts TEXT)"""); c.commit(); c.close() + +def rec(nk, fp, url, kind, path, status, size, note): + c = db(); c.execute("INSERT INTO downloads(node_key,full_path,url,kind,file_path,status,size,note,ts) VALUES(?,?,?,?,?,?,?,?,?)", + (nk, fp, url, kind, path, status, size, note, time.strftime("%Y-%m-%d %H:%M:%S"))); c.commit(); c.close() + +def safe(s): + return re.sub(r'[\\/:*?"<>|]', '_', (s or "").strip())[:90] + +def out_dir(shot, full_path): + if shot and shot.startswith("screenshots/"): + return os.path.dirname(shot.replace("screenshots/", "downloads/", 1)) + parts = [safe(p) for p in (full_path or "").split(" / ") if p.strip()] + return os.path.join("downloads", *parts[:-1]) if len(parts) > 1 else "downloads/misc" + +def load_pages(): + c = db(); rows = [dict(r) for r in c.execute( + "SELECT node_key,parent_key,name,full_path,url,screenshot_path FROM features").fetchall()] + kids = collections.defaultdict(int) + for r in rows: + if r["parent_key"]: + kids[r["parent_key"]] += 1 + c.close() + leaves = [r for r in rows if kids.get(r["node_key"], 0) == 0] + return [r for r in leaves if r["url"] and any(k in (r["full_path"] or "") + (r["name"] or "") for k in KW)] + +SAVED = set() + +def grab_and_save(odir, nk, fp, url, note): + meta = ev(FETCH_LAST) + if not (isinstance(meta, str) and meta.startswith("{")): + return False, str(meta)[:40] + info = json.loads(meta); name = safe(info["name"]); ev("window.__cap=[]") + if name in SAVED: + return False, "dup" + try: + data = base64.b64decode(ev("window.__b64||''")) + except Exception: + data = b"" + if len(data) <= 200: + return False, "empty" + os.makedirs(odir, exist_ok=True); dst = os.path.join(odir, name) + if os.path.exists(dst) and os.path.getsize(dst) > 2000: + SAVED.add(name); return True, name + "(exists)" + open(dst, "wb").write(data); SAVED.add(name) + low = name.lower() + kind = "xlsx" if low.endswith((".xlsx", ".xls")) else ("docx" if low.endswith((".docx", ".doc")) else ( + "pdf" if low.endswith(".pdf") else ("zip" if low.endswith(".zip") else "file"))) + rec(nk, fp, url, kind, dst, "ok", len(data), note) + log(" OK %s (%d bytes) -> %s" % (kind, len(data), dst)) + return True, name + +def wait_capture(seconds=25): + t0 = time.time() + while time.time() - t0 < seconds: + time.sleep(2) + n = ev("(window.__cap&&window.__cap.length)||0") + if isinstance(n, int) and n > 0: + return True + return False + +def human_delay(kind="page"): + """非均匀拟人间隔:大部分短、少量中、偶尔长停顿 + 高斯抖动。""" + r = random.random() + if kind == "page": + if r < 0.60: d = random.uniform(4.0, 9.0) + elif r < 0.88: d = random.uniform(9.0, 20.0) + else: d = random.uniform(20.0, 42.0) + else: # 同页内相邻点击 + if r < 0.68: d = random.uniform(1.4, 4.0) + elif r < 0.93: d = random.uniform(4.0, 9.0) + else: d = random.uniform(9.0, 16.0) + d = max(0.8, d + random.gauss(0, 0.5)) + time.sleep(d) + return d + +def logged_out(): + href = ev("location.href") + return isinstance(href, str) and "/login" in href + +def done_nodes(): + c = db() + rows = c.execute("SELECT DISTINCT node_key FROM downloads WHERE status='ok' AND node_key<>''").fetchall() + c.close() + return {r[0] for r in rows} + +def do_click_cycle(clicked_label, odir, nk, fp, url): + """点击入口后:持续处理授权窗/参数窗(可能异步慢加载)并确认, 同时检测直链; 兑底走任务中心。""" + ev("window.__cap=[]") + got = False + # 最多 ~30s: 参数窗可能异步加载, 持续 AGREE+CONFIRM 并检测直链 + for _ in range(20): + time.sleep(1.5) + ev(AGREE) + ev(CONFIRM) + n = ev("(window.__cap&&window.__cap.length)||0") + if isinstance(n, int) and n > 0: + got = True + break + if got: + ok, name = grab_and_save(odir, nk, fp, url, "阶段1 " + clicked_label) + if not ok: + log(" [%s] 抓取失败: %s" % (clicked_label, name)) + result = ok + else: + log(" [%s] 未产出直链(需必选参数/异步未完成, 待任务中心收割)" % clicked_label) + rec(nk, fp, url, "pending", "", "skip", 0, clicked_label) + result = False + ev(CLOSE) + return result + +def process_page(p, idx, total): + fp, url, nk = p["full_path"], p["url"], p["node_key"] + odir = out_dir(p["screenshot_path"], fp) + log("[%d/%d] %s" % (idx, total, fp)) + call("navigate", {"url": url, "newTab": False}) + # 等页面加载 + 登录态检测 + for k in range(6): + time.sleep(2) + if k == 1 and logged_out(): + log(" !! 检测到登录态失效, 中止本轮") + return -1 + if logged_out(): + log(" !! 检测到登录态失效, 中止本轮") + return -1 + ev(HOOK) + ev(AGREE) # 若有数据授权协议窗, 先“知情并同意” + saved = 0 + hit = False + # 四类入口: 图标下载/文字/类型B导出/类型A报表卡片 + for label, code in (("icon-download", CLICK_ICON), ("txt", CLICK_TXT), + ("export", CLICK_EXPORT), ("card", CLICK_CARD)): + for _ in range(8): + c = ev(code) + if c == "none": + break + hit = True + if do_click_cycle(label + "=" + str(c), odir, nk, fp, url): + saved += 1 + human_delay("click") + if not hit: + log(" 无导出入口, skip") + rec(nk, fp, url, "none", "", "skip", 0, "无导出入口") + else: + log(" 本页触发导出入口, 落盘=%d (其余走任务中心)" % saved) + return saved + +def harvest_task_center(): + log("=== 阶段2: 收割任务中心 ===") + ev(HOOK) + odir = "downloads/_任务中心"; total = 0 + try: + arr = json.loads(ev(TC_LIST)) + except Exception: + arr = [] + log("任务中心可下载任务: %d" % len(arr)) + for i, nm in enumerate(arr): + ev("window.__cap=[]") + if ev(TC_CLICK % i) != "ok": + continue + if wait_capture(20): + ok, _ = grab_and_save(odir, "", "任务中心 / " + (nm or ""), "", "阶段2 任务=" + (nm or "")) + if ok: + total += 1 + time.sleep(random.uniform(2, 4)) + return total + +def main(): + ensure() + call("find_tab", {"url": "2haohr.com"}) + pages = load_pages() + log("=== 开始导出下载, 共 %d 页 ===" % len(pages)) + stage1 = 0 + for i, p in enumerate(pages, 1): + try: + stage1 += process_page(p, i, len(pages)) + except Exception as e: + log(" 页面异常: %s" % str(e)[:100]) + rec(p["node_key"], p["full_path"], p["url"], "err", "", "fail", 0, str(e)[:80]) + time.sleep(random.uniform(5, 15)) + stage2 = harvest_task_center() + log("=== DONE 阶段1=%d 阶段2=%d 累计文件=%d ===" % (stage1, stage2, len(SAVED))) + +if __name__ == "__main__": + main() diff --git a/scripts/dl_report.py b/scripts/dl_report.py new file mode 100644 index 0000000..3ce42cc --- /dev/null +++ b/scripts/dl_report.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""招聘报表专用下载器。 +报表页(/recruitment/stats/report/list)为逐行报表, 每行 hover 出「预览/下载」, +点「下载」-> 弹参数窗(默认参数) -> 点「确认」-> 服务端异步生成 -> 进任务中心。 +本脚本: 触发报表列表区全部「下载」并确认参数窗, 随后按招聘关键词白名单从任务中心 +收割新生成的 Excel(避免误收历史的电子合同/参保/薪酬任务), 落盘到 04_招聘/统计分析。 +复用 dl_export 的 hook/同步XHR落盘/AGREE防登出/非均匀拟人间隔。""" +import sys, time, json, os, base64 +sys.path.insert(0, "scripts") +import dl_export as X + +REPORT_URL = "https://2haohr.com/recruitment/stats/report" +NODE = "招聘::/recruitment/stats/report" +FP = "招聘 / 统计分析 / 招聘报表" +ODIR = "downloads/04_招聘/统计分析/招聘报表" +# 只收割任务名命中这些招聘特征词的新任务(历史的电子合同/参保档案/薪酬档案不含) +REPORT_KW = ["招聘", "候选人", "面试", "offer", "渠道", "淘汰", "门户", + "趋势", "进度", "转化", "工作量", "时效", "等待期", "贡献"] + +# 报表列表区(排除任务中心浮层)未处理的「下载」计数/点击 +COUNT_DL = r"""(()=>{return [...document.querySelectorAll('span,a,button')].filter(x=>x.childElementCount===0&&(x.innerText||'').trim()==='下载'&&!x.closest('[class*=taskCenter]')&&!x.hasAttribute('data-dl')).length;})()""" +CLICK_DL = r"""(()=>{const d=[...document.querySelectorAll('span,a,button')].find(x=>x.childElementCount===0&&(x.innerText||'').trim()==='下载'&&!x.closest('[class*=taskCenter]')&&!x.hasAttribute('data-dl'));if(!d)return 'none';d.setAttribute('data-dl','1');d.scrollIntoView({block:'center'});d.click();return 'ok';})()""" + + +def match_kw(name): + n = (name or "").lower() + return any(k.lower() in n for k in REPORT_KW) + + +def trigger_all(): + """逐个点报表「下载」并确认参数窗, 返回触发数量。""" + fired = 0 + total = X.ev(COUNT_DL) + X.log("报表列表区可下载报表: %s" % total) + for _ in range(30): + if X.ev(COUNT_DL) in (0, "0"): + break + if X.ev(CLICK_DL) != "ok": + break + fired += 1 + # 参数窗异步加载, 循环 AGREE(防登出) + CONFIRM(默认参数确认) + confirmed = False + for _ in range(12): + time.sleep(1.2) + X.ev(X.AGREE) + r = X.ev(X.CONFIRM) + if isinstance(r, str) and r.startswith("modal:") and r != "modal:noconfirm" and r != "modal:nomodal": + confirmed = True + break + X.log(" 触发报表#%d 确认=%s" % (fired, confirmed)) + X.ev(X.CLOSE) + X.human_delay("click") + return fired + + +def harvest_reports(): + """逐个点任务中心下载, 用捕获到的真实文件名做招聘白名单过滤(历史的 + 电子合同/参保/薪酬文件名不命中自动跳过), 命中则落盘到招聘目录。""" + X.ev(X.HOOK) + try: + n = len(json.loads(X.ev(X.TC_LIST))) + except Exception: + n = 0 + X.log("任务中心任务: %d" % n) + got = 0 + for i in range(n): + X.ev("window.__cap=[]") + if X.ev(X.TC_CLICK % i) != "ok": + continue + if not X.wait_capture(20): + continue + meta = X.ev(X.FETCH_LAST) + if not (isinstance(meta, str) and meta.startswith("{")): + continue + name = X.safe(json.loads(meta)["name"]) + if not match_kw(name): + X.log(" 跳过(非招聘报表): %s" % name) + X.ev("window.__cap=[]"); continue + if name in X.SAVED: + X.ev("window.__cap=[]"); continue + try: + data = base64.b64decode(X.ev("window.__b64||''")) + except Exception: + data = b"" + if len(data) <= 200: + continue + os.makedirs(ODIR, exist_ok=True) + dst = os.path.join(ODIR, name) + if os.path.exists(dst) and os.path.getsize(dst) > 2000: + X.SAVED.add(name); got += 1; continue + open(dst, "wb").write(data); X.SAVED.add(name) + kind = "xlsx" if name.lower().endswith((".xlsx", ".xls")) else ( + "docx" if name.lower().endswith((".docx", ".doc")) else "file") + X.rec(NODE, FP, REPORT_URL, kind, dst, "ok", len(data), "招聘报表 " + name) + X.log(" 收割: %s (%d bytes)" % (name, len(data))) + got += 1 + time.sleep(2.5) + return got + + +def main(): + X.ensure() + X.call("find_tab", {"url": "2haohr.com"}) + X.call("navigate", {"url": REPORT_URL, "newTab": False}) + time.sleep(6) + if X.logged_out(): + X.log("!! 登录态失效, 中止"); return + X.ev(X.HOOK) + X.ev(X.AGREE) + X.log("=== 招聘报表导出: 触发阶段 ===") + fired = trigger_all() + X.log("=== 已触发 %d 个报表, 等待服务端生成 ===" % fired) + time.sleep(25) + X.log("=== 招聘报表导出: 收割阶段 ===") + got = harvest_reports() + # 二次收割(有的报表生成较慢) + if fired > got: + time.sleep(20) + got += harvest_reports() + X.log("=== REPORT DONE 触发=%d 收割=%d ===" % (fired, got)) + + +if __name__ == "__main__": + main() diff --git a/scripts/dl_reports.py b/scripts/dl_reports.py new file mode 100644 index 0000000..aa6f76f --- /dev/null +++ b/scripts/dl_reports.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +报表/文档下载器 (独立后台进程)。 +从 SQLite 选出 35 个报表/文档类页面, 逐个: + 随机 5-15s 延时 -> 导航 -> 等待加载 -> 隐藏浮层 -> save_as_pdf 按结构归档 + -> 若存在"明确的导出按钮且点击后未弹出需选参数的弹窗", 顺带把导出的 Excel 归集 +所有结果写入 SQLite downloads 表; 进度写 db/dl_progress.log。支持断点续跑(PDF已存在则跳过)。 +用法: python3 scripts/dl_reports.py +""" +import os, sys, json, time, random, shutil, sqlite3, urllib.request, glob + +D = "http://127.0.0.1:10086/command" +S = "2haohr" +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +LOG = os.path.join(BASE, "db", "dl_progress.log") +PDF_TMP = "/tmp/kimi-webbridge-pdfs" +DOWNLOADS = os.path.expanduser("~/Downloads") +KW = ['报表', '分析', '仪表盘', '统计', '档案', '模板', '文档', '制度', '公告', '证明'] +EXPORT_TEXTS = ('导出', '导出Excel', '导出报表', '下载', '批量导出', '导出全部') + + +def call(action, args, timeout=90): + body = json.dumps({"action": action, "args": args, "session": S}).encode() + req = urllib.request.Request(D, data=body, headers={"Content-Type": "application/json"}) + with urllib.request.urlopen(req, timeout=timeout) as resp: + return json.loads(resp.read().decode()) + + +def ev(code): + return call("evaluate", {"code": code}).get("data", {}).get("value") + + +def log(msg): + line = time.strftime("%H:%M:%S ") + msg + print(line, flush=True) + with open(LOG, "a") as f: + f.write(line + "\n") + + +def reconnect(): + r = call("find_tab", {"url": "2haohr.com", "active": True}) + return r.get("ok") + + +def wait_ready(max_wait=10): + t0 = time.time() + while time.time() - t0 < max_wait: + try: + if ev("document.readyState") == "complete": + time.sleep(1.5) + return True + except Exception: + pass + time.sleep(0.6) + return False + + +HIDE_JS = r"""(()=>{const sels=['[class*="helpBox"]','[class*="aiAssistant"]','[class*="product_"]','[class*="feedback"]','[class*="Feedback"]','[class*="floatBar"]','[class*="robot"]','[class*="advert"]'];let n=0;sels.forEach(s=>document.querySelectorAll(s).forEach(el=>{const r=el.getBoundingClientRect();if(r.width<600&&getComputedStyle(el).position==='fixed'){el.style.setProperty('display','none','important');n++;}}));return n;})()""" + +# 找一个"明确的"导出按钮(可见、文案精确、非下拉触发器) +FIND_EXPORT_JS = r"""(()=>{const texts=%s;const els=[...document.querySelectorAll('button,a,[role=button]')];for(const el of els){const t=(el.innerText||'').trim();if(t.length>0&&t.length<=8&&texts.includes(t)){const r=el.getBoundingClientRect();if(r.width>0&&r.height>0&&getComputedStyle(el).display!=='none'){el.setAttribute('data-dlmark','1');return t;}}}return '';})()""" % json.dumps(list(EXPORT_TEXTS)) + +# 点击已标记的导出按钮 +CLICK_EXPORT_JS = r"""(()=>{const el=document.querySelector('[data-dlmark="1"]');if(!el)return false;el.click();el.removeAttribute('data-dlmark');return true;})()""" + +# 检测是否弹出了需要选参数的弹窗(modal/dialog) +MODAL_JS = r"""(()=>{const ms=[...document.querySelectorAll('[class*="modal"],[class*="Modal"],[role="dialog"],[class*="dialog"],[class*="Dialog"]')];for(const m of ms){const r=m.getBoundingClientRect();if(r.width>200&&r.height>120&&getComputedStyle(m).display!=='none'&&getComputedStyle(m).visibility!=='hidden')return true;}return false;})()""" + +CLOSE_MODAL_JS = r"""document.activeElement&&document.activeElement.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));""" + + +def snapshot_downloads(): + """当前 ~/Downloads 下的文件集合(忽略 .crdownload 临时文件)""" + return set(p for p in glob.glob(os.path.join(DOWNLOADS, "*")) + if not p.endswith(".crdownload")) + + +def wait_new_download(before, max_wait=12): + """等待新下载文件出现且完成(无 .crdownload)。返回新文件路径或 None""" + t0 = time.time() + while time.time() - t0 < max_wait: + time.sleep(1.0) + # 仍有下载中的临时文件则继续等 + if glob.glob(os.path.join(DOWNLOADS, "*.crdownload")): + continue + now = snapshot_downloads() + new = now - before + if new: + # 取最新的一个 + return max(new, key=lambda p: os.path.getmtime(p)) + return None + + +def rec(conn, node_key, full_path, url, kind, file_path, status, size, note): + conn.execute( + "INSERT INTO downloads(node_key,full_path,url,kind,file_path,status,size,note,ts) " + "VALUES(?,?,?,?,?,?,?,?,?)", + (node_key, full_path, url, kind, file_path, status, size, note, + time.strftime("%Y-%m-%d %H:%M:%S"))) + conn.commit() + + +def main(): + conn = sqlite3.connect(DB) + rows = conn.execute( + "SELECT node_key,full_path,url,screenshot_path FROM features WHERE level=2").fetchall() + targets = [r for r in rows if any(k in (r[1] or "") for k in KW)] + targets.sort(key=lambda r: r[3] or "") + total = len(targets) + log(f"=== 报表/文档下载开始, 目标 {total} 页 ===") + if not reconnect(): + log("!! 无法连接浏览器标签, 退出"); return + okp = okx = fail = skip = 0 + for i, (nk, fp, url, sp) in enumerate(targets): + rel_pdf = (sp or "").replace("screenshots/", "downloads/").rsplit(".", 1)[0] + ".pdf" + out_pdf = os.path.join(BASE, rel_pdf) + if os.path.exists(out_pdf) and os.path.getsize(out_pdf) > 5000: + skip += 1 + continue + os.makedirs(os.path.dirname(out_pdf), exist_ok=True) + delay = random.uniform(5, 15) + log(f"[{i+1}/{total}] wait {delay:.1f}s -> {fp}") + time.sleep(delay) + try: + call("navigate", {"url": url, "newTab": False}) + wait_ready() + time.sleep(random.uniform(1.0, 2.5)) + try: + ev(HIDE_JS) + except Exception: + pass + # --- 存 PDF --- + fname = os.path.basename(rel_pdf)[:-4] + r = call("save_as_pdf", {"paper_format": "a4", "print_background": True, + "file_name": fname}, timeout=120) + tmp = r.get("data", {}).get("path") + size = r.get("data", {}).get("sizeBytes", 0) + if tmp and os.path.exists(tmp): + shutil.move(tmp, out_pdf) + okp += 1 + rec(conn, nk, fp, url, "pdf", rel_pdf, "ok", size, "") + log(f" PDF ok {size//1024}KB -> {rel_pdf}") + else: + fail += 1 + rec(conn, nk, fp, url, "pdf", rel_pdf, "fail", 0, json.dumps(r)[:150]) + log(f" PDF FAIL -> {json.dumps(r)[:150]}") + # --- 尝试导出 Excel(仅当有明确按钮且不弹参数窗) --- + try: + btn = ev(FIND_EXPORT_JS) + if btn: + before = snapshot_downloads() + ev(CLICK_EXPORT_JS) + time.sleep(2.0) + if ev(MODAL_JS): + ev(CLOSE_MODAL_JS) + rec(conn, nk, fp, url, "xlsx", "", "skip", 0, f"按钮[{btn}]触发弹窗,跳过") + log(f" Excel skip (弹窗需选参数, 按钮={btn})") + else: + newf = wait_new_download(before) + if newf: + ext = os.path.splitext(newf)[1] or ".xlsx" + dst = out_pdf[:-4] + ext + shutil.move(newf, dst) + okx += 1 + rel_x = os.path.relpath(dst, BASE) + rec(conn, nk, fp, url, "xlsx", rel_x, "ok", + os.path.getsize(dst), f"按钮={btn}") + log(f" Excel ok -> {rel_x}") + else: + rec(conn, nk, fp, url, "xlsx", "", "skip", 0, f"按钮[{btn}]点击无文件") + log(f" Excel none (点击无下载, 按钮={btn})") + except Exception as e: + log(f" Excel err {str(e)[:120]}") + except Exception as e: + fail += 1 + rec(conn, nk, fp, url, "pdf", rel_pdf, "fail", 0, str(e)[:150]) + log(f" FAIL {fp} err={str(e)[:150]}") + try: + reconnect() + except Exception: + pass + log(f"=== DONE pdf_ok={okp} xlsx_ok={okx} skip={skip} fail={fail} total={total} ===") + conn.close() + + +if __name__ == "__main__": + main() diff --git a/scripts/gen_devdoc.py b/scripts/gen_devdoc.py new file mode 100644 index 0000000..9a9b70d --- /dev/null +++ b/scripts/gen_devdoc.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""生成《2号人事部·功能仿写开发需求文档》(Markdown)。 +数据来源: SQLite features(172功能页释义/开发提示) + downloads(41个真实导出Excel, 提取表头做字段字典) + + screenshots(整页界面参考)。 +输出: docs/开发需求文档.md +""" +import os, sqlite3, collections, re, datetime + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +DL_ROOT = os.path.join(BASE, "downloads") +OUT = os.path.join(BASE, "docs", "开发需求文档.md") +EXCEL_EXT = (".xlsx", ".xls") + +def db(): + c = sqlite3.connect(DB) + c.row_factory = sqlite3.Row + return c + + +def load_tree(): + c = db() + rows = [dict(r) for r in c.execute( + "SELECT node_key,parent_key,level,name,full_path,url,description,understanding," + "screenshot_path,keep,sort_order FROM features ORDER BY sort_order,id")] + c.close() + by = collections.defaultdict(list) + for r in rows: + by[r["parent_key"] or ""].append(r) + return by + + +def excel_headers(path, max_scan=6): + """读取 Excel(.xlsx 用 openpyxl / .xls 用 xlrd), 返回识别出的表头字段列表 + (取前若干行中非空单元格最多的一行)。""" + try: + if path.lower().endswith(".xls"): + import xlrd, warnings + warnings.filterwarnings("ignore") + wb = xlrd.open_workbook(path) + ws = wb.sheet_by_index(0) + best, best_cnt = [], 0 + for r in range(min(max_scan, ws.nrows)): + vals = [str(ws.cell_value(r, cc)).strip() for cc in range(ws.ncols) + if str(ws.cell_value(r, cc)).strip()] + if len(vals) > best_cnt: + best, best_cnt = vals, len(vals) + return [] if best_cnt == 1 else best + import openpyxl + wb = openpyxl.load_workbook(path, read_only=True, data_only=True) + ws = wb.active + best, best_cnt = [], 0 + for row in ws.iter_rows(min_row=1, max_row=max_scan): + vals = [str(c.value).strip() for c in row if c.value is not None and str(c.value).strip()] + if len(vals) > best_cnt: + best, best_cnt = vals, len(vals) + wb.close() + # 去掉过长(可能是合并标题)的单格行 + if best_cnt == 1: + return [] + return best + except Exception as e: + return [] + + +def scan_downloads(): + """返回 {module_name: [(dir, filename, headers[])]}。module_name 已去数字前缀。""" + out = collections.defaultdict(list) + files = [] + for root, _, fs in os.walk(DL_ROOT): + for f in sorted(fs): + if f.lower().endswith(EXCEL_EXT): + files.append((root, f)) + for root, f in files: + rel = os.path.relpath(root, DL_ROOT) + segs = [] if rel == "." else rel.split(os.sep) + seg0 = segs[0] if segs else "" + module = "任务中心(异步导出)" if seg0.startswith("_任务") else re.sub(r"^\d+_", "", seg0) + headers = excel_headers(os.path.join(root, f)) + out[module].append((rel.replace(os.sep, "/"), f, headers)) + return out + + +def slug(s): + return re.sub(r"[^\w\u4e00-\u9fa5]+", "-", s or "").strip("-") + + +def load_approval_templates(): + """读取审批模板库清单(若表不存在返回空)。""" + try: + c = db() + rows = [dict(r) for r in c.execute( + "SELECT name,category,provider,description FROM approval_templates ORDER BY sort_order,id")] + c.close() + return rows + except Exception: + return [] + + +def main(): + by = load_tree() + dl = scan_downloads() + total_files = sum(len(v) for v in dl.values()) + + modules = by.get("", []) + leaves_count = 0 + + def count_leaves(pk): + n = 0 + for r in by.get(pk, []): + if by.get(r["node_key"]): + n += count_leaves(r["node_key"]) + else: + n += 1 + return n + + L = [] + w = L.append + now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") + w("# 2号人事部 · 功能仿写开发需求文档\n") + w("> **数据来源**:https://2haohr.com 全站功能调研\n>") + w("> **调研规模**:%d 个一级模块 / %d 个功能页\n>" % (len(modules), sum(count_leaves(m["node_key"]) for m in modules))) + w("> **配套资产**:整页界面截图 `screenshots/`|真实导出数据样本 `downloads/`(%d 个 Excel)|交互式审核+样本下载界面 `http://localhost:8777`\n>" % total_files) + w("> **生成时间**:%s\n" % now) + w("\n本文档用于**仿写开发**:每个功能页含【功能释义】【开发提示】【界面参考截图】," + "并在模块末尾附**真实导出数据的字段清单**(直接来自线上导出的 Excel 表头),可据此设计数据库表结构与列表字段。\n") + + # 概述表 + w("\n## 一、模块总览\n") + w("| # | 模块 | 功能页数 | 抓取的数据样本 |") + w("|---|------|:---:|:---:|") + for i, m in enumerate(modules, 1): + nm = m["name"] + cnt = count_leaves(m["node_key"]) + samp = len(dl.get(nm, [])) + w("| %d | %s | %d | %s |" % (i, nm, cnt, (str(samp) + " 个" if samp else "—"))) + + # 明细 + w("\n## 二、模块功能明细\n") + for mi, m in enumerate(modules, 1): + w("\n### %d. %s\n" % (mi, m["name"])) + + def walk(pk, depth): + for r in by.get(pk, []): + children = by.get(r["node_key"]) + if children: + if r["level"] >= 1: + w("\n#### ▸ %s\n" % r["name"]) + walk(r["node_key"], depth + 1) + else: + nonlocal leaves_count + leaves_count += 1 + keep = "" if r["keep"] in (None, 1) else " ~~(审核标记删除)~~" + w("\n**%s**%s" % (r["name"], keep)) + if r["url"]: + w("- `URL` %s" % r["url"]) + if r["description"]: + w("- **功能释义**:%s" % r["description"]) + if r["understanding"] and "待补充细化" not in r["understanding"]: + w("- **开发提示**:%s" % r["understanding"]) + if r["screenshot_path"]: + w("- **界面参考**:`%s`" % r["screenshot_path"]) + w("") + + walk(m["node_key"], 0) + + # 模块导出样本字段 + samples = dl.get(m["name"], []) + if samples: + w("\n> **📎 本模块真实导出数据样本(%d 个)与字段:**\n" % len(samples)) + for rel, fn, headers in samples: + name = os.path.splitext(fn)[0] + if headers: + fields = "、".join(headers[:40]) + more = " …" if len(headers) > 40 else "" + w("> - **%s**(%d 字段):%s%s" % (name, len(headers), fields, more)) + else: + w("> - **%s**(字段未能解析,见文件)" % name) + w("") + + # 附: 任务中心异步导出 + if dl.get("任务中心(异步导出)"): + w("\n## 三、异步导出样本(任务中心生成)\n") + w("> 以下报表在页面点击导出后由服务端异步生成,经“任务中心”收割:\n") + for rel, fn, headers in dl["任务中心(异步导出)"]: + name = os.path.splitext(fn)[0] + fields = (":" + "、".join(headers[:40])) if headers else "" + w("> - **%s**%s" % (name, fields)) + w("") + + # 附: 审批模板库清单 + tpls = load_approval_templates() + if tpls: + w("\n## 四、审批模板库清单(预置审批流程)\n") + w("> 来自 `审批 / 常规 / 审批模板库`(%d 个预置流程模板)。这些是**审批流程模板**" + "(点“使用”实例化为审批表单),非数据表,无导出文件;仿写时可据此设计审批流程配置。\n" % len(tpls)) + bycat = collections.OrderedDict() + for t in tpls: + bycat.setdefault(t["category"] or "其他", []).append(t) + for cat, items in bycat.items(): + w("\n#### ▸ %s(%d)\n" % (cat, len(items))) + w("| 模板 | 提供方 | 说明 |") + w("|------|------|------|") + for t in items: + w("| %s | %s | %s |" % (t["name"], t["provider"] or "—", t["description"] or "")) + w("") + + + w("\n---\n") + w("*本文档由调研数据自动汇编。功能释义/开发提示可在 `http://localhost:8777` 审核界面逐条修订后重新生成;" + "字段清单来自线上真实导出 Excel 的表头,为一手数据。*\n") + + os.makedirs(os.path.dirname(OUT), exist_ok=True) + with open(OUT, "w", encoding="utf-8") as f: + f.write("\n".join(L)) + print("written:", OUT) + print("modules:", len(modules), "leaves:", leaves_count, "sample files:", total_files) + + +if __name__ == "__main__": + main() diff --git a/scripts/gen_review_html.py b/scripts/gen_review_html.py new file mode 100644 index 0000000..3926a20 --- /dev/null +++ b/scripts/gen_review_html.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +从 SQLite 生成"带复选框的交互式功能树" HTML (阶段3 交付物)。 +管理员可勾选保留/删除, 支持展开折叠、搜索、查看截图、导出勾选结果 JSON。 +输出: docs/功能树-勾选.html 及 docs/selection-template.json +""" +import os, json, sqlite3 + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +OUT = os.path.join(BASE, "docs", "功能树-勾选.html") + +def build_tree(): + conn = sqlite3.connect(DB); conn.row_factory = sqlite3.Row + rows = [dict(r) for r in conn.execute( + "SELECT node_key,parent_key,level,name,full_path,url,description,understanding,screenshot_path,sort_order,keep " + "FROM features ORDER BY level,sort_order,id").fetchall()] + conn.close() + by_parent = {} + for r in rows: + by_parent.setdefault(r["parent_key"] or "", []).append(r) + def build(pk): + out = [] + for r in by_parent.get(pk, []): + n = dict(r) + # 截图相对 docs/ 的路径 + sp = r.get("screenshot_path") + n["shot"] = ("../" + sp) if sp else "" + n["children"] = build(r["node_key"]) + out.append(n) + return out + return build("") + +HTML = r""" + + + + +2号人事部 · 功能调研树(第一阶段·管理员勾选) + + + +
+

2号人事部 · 功能调研树 第一阶段 · 管理员勾选(勾选=保留,取消=删除)

+
共 __MODN__ 个模块 / __LEAFN__ 个功能页。勾选后点【导出勾选结果】保存 JSON,用于生成第二阶段开发需求文档。
+
+ + + + + + + (选择自动保存到浏览器本地) + 保留 0 / 0 项 +
+
+
+
×
+ + + +""" + +def main(): + tree = build_tree() + modn = len(tree) + leafn = sum(1 for _ in _iter_leaves(tree)) + html = (HTML.replace("__DATA__", json.dumps(tree, ensure_ascii=False)) + .replace("__MODN__", str(modn)).replace("__LEAFN__", str(leafn))) + os.makedirs(os.path.dirname(OUT), exist_ok=True) + open(OUT, "w").write(html) + print("written:", OUT, "modules:", modn, "leaves:", leafn) + +def _iter_leaves(nodes): + for n in nodes: + if not n["children"]: + yield n + else: + yield from _iter_leaves(n["children"]) + +if __name__ == "__main__": + main() diff --git a/scripts/gen_spec.py b/scripts/gen_spec.py new file mode 100644 index 0000000..7fe4075 --- /dev/null +++ b/scripts/gen_spec.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +任务4: 生成结构化开发规格 docs/spec.json (机器可直接消费)。 +把审核决策(features.keep/note) + 完整字段字典(field_specs) + 隐藏入口(page_extras) ++ 真实导出样本(downloads, 含表头/行列预览) + 审批模板库(approval_templates) +汇总为一份"按模块->功能页"组织的结构化规格, 供下一步开发直接读取。 + +输出结构: +{ + meta, stats, + modules: [ { module, page_count, pages: [ { + node_key, name, group, full_path, url, keep, + description, understanding, review_note, screenshot, + field_count, fields:[{group,name,order}], + hidden_entries:[...], # "更多"菜单发现的隐藏功能界面 + data_samples:[{file,kind,size,sheet,headers,preview_rows,total_rows}] + } ] } ], + approval_templates: [ {category,name,provider,description} ] +} +""" +import os, json, sqlite3, time, re, collections, warnings + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +OUT = os.path.join(BASE, "docs", "spec.json") +warnings.filterwarnings("ignore") + + +def db(): + c = sqlite3.connect(DB); c.row_factory = sqlite3.Row; return c + + +def excel_preview(relpath, max_scan=6, max_head=40): + """读导出文件表头 + 前几行预览。.xls 用 xlrd, .xlsx 用 openpyxl。""" + p = os.path.join(BASE, relpath) + if not os.path.isfile(p): + return None + low = p.lower() + try: + if low.endswith(".xls"): + import xlrd + wb = xlrd.open_workbook(p); ws = wb.sheet_by_index(0) + rows = [] + for r in range(min(max_scan, ws.nrows)): + rows.append([str(ws.cell_value(r, c)).strip() for c in range(min(max_head, ws.ncols))]) + return {"sheet": ws.name, "total_rows": ws.nrows, "total_cols": ws.ncols, "rows": rows} + if low.endswith(".xlsx"): + import openpyxl + wb = openpyxl.load_workbook(p, read_only=True, data_only=True); ws = wb.active + rows = [] + for i, row in enumerate(ws.iter_rows(values_only=True)): + if i >= max_scan: + break + rows.append([("" if v is None else str(v)).strip() for v in row[:max_head]]) + r = {"sheet": ws.title, "total_rows": ws.max_row, "total_cols": ws.max_column, "rows": rows} + wb.close(); return r + except Exception as e: + return {"error": str(e)[:120]} + return None + + +def best_header(rows): + """从前几行里挑字段数最多的一行作为表头(过滤单格标题行)。""" + if not rows: + return [] + best, cnt = [], 0 + for r in rows: + vals = [v for v in r if v] + if len(vals) > cnt: + best, cnt = vals, len(vals) + return [] if cnt <= 1 else best + + +def load_leaves(): + c = db() + rows = [dict(r) for r in c.execute( + "SELECT node_key,parent_key,level,name,full_path,url,description," + "understanding,screenshot_path,keep,note,sort_order FROM features ORDER BY sort_order,id")] + c.close() + by_parent = {} + for r in rows: + by_parent.setdefault(r["parent_key"] or "", []).append(r) + leaves = [] + + def dfs(pk, module, group): + for r in by_parent.get(pk, []): + m = r["name"] if r["level"] == 0 else module + g = r["name"] if r["level"] == 1 else group + kids = by_parent.get(r["node_key"]) + if kids: + dfs(r["node_key"], m, g) + else: + r["_module"] = m + r["_group"] = g if g and g != r["name"] else "" + leaves.append(r) + + dfs("", "", "") + return leaves + + +def load_fields(): + c = db(); out = collections.defaultdict(list) + try: + for r in c.execute("SELECT node_key,field,field_group,source,sort_order " + "FROM field_specs ORDER BY node_key,sort_order"): + out[r["node_key"]].append({"group": r["field_group"] or "", "name": r["field"], + "order": r["sort_order"], "source": r["source"]}) + except sqlite3.OperationalError: + pass + c.close(); return out + + +def load_extras(): + c = db(); out = collections.defaultdict(list) + try: + for r in c.execute("SELECT node_key,label FROM page_extras ORDER BY node_key,id"): + out[r["node_key"]].append(r["label"]) + except sqlite3.OperationalError: + pass + c.close(); return out + + +def load_downloads(): + c = db(); out = collections.defaultdict(list) + try: + for r in c.execute("SELECT node_key,file_path,kind,size FROM downloads WHERE status='ok' OR status IS NULL"): + out[r["node_key"]].append(dict(r)) + except sqlite3.OperationalError: + pass + c.close(); return out + + +def load_deep_shots(): + """深层界面截图(非 main): 主操作弹窗/表单(add)、筛选(filter)、自定义列(columns)、行详情(detail)。""" + kind_cn = {"add": "主操作弹窗/表单", "filter": "筛选面板", + "columns": "自定义列/选择表头", "detail": "行详情/编辑"} + c = db(); out = collections.defaultdict(list) + try: + for r in c.execute("SELECT node_key,kind,label,path FROM page_shots " + "WHERE kind<>'main' ORDER BY node_key,id"): + out[r["node_key"]].append({"kind": r["kind"], "kind_cn": kind_cn.get(r["kind"], r["kind"]), + "label": r["label"] or "", "path": r["path"]}) + except sqlite3.OperationalError: + pass + c.close(); return out + + +def load_templates(): + c = db(); out = [] + try: + for r in c.execute("SELECT category,name,provider,description,sort_order " + "FROM approval_templates ORDER BY sort_order,id"): + out.append({"category": r["category"], "name": r["name"], + "provider": r["provider"] or "", "description": r["description"] or ""}) + except sqlite3.OperationalError: + pass + c.close(); return out + + +def norm(s): + return re.sub(r"^\d+_", "", s or "").strip() + + +def main(): + leaves = load_leaves() + fields = load_fields() + extras = load_extras() + downloads = load_downloads() + deep_shots = load_deep_shots() + templates = load_templates() + + modules = collections.OrderedDict() + n_fields_pages = 0 + for lf in leaves: + nk = lf["node_key"] + mod = lf["_module"] or "未分类" + fl = fields.get(nk, []) + if fl: + n_fields_pages += 1 + samples = [] + for d in downloads.get(nk, []): + pv = excel_preview(d["file_path"]) + item = {"file": d["file_path"], "kind": d["kind"], "size": d["size"]} + if pv and "rows" in pv: + item.update({"sheet": pv["sheet"], "total_rows": pv["total_rows"], + "total_cols": pv["total_cols"], "headers": best_header(pv["rows"])}) + samples.append(item) + page = { + "node_key": nk, "name": lf["name"], "group": lf["_group"], + "full_path": lf["full_path"], "url": lf["url"] or "", + "keep": 1 if (lf["keep"] is None or lf["keep"] == 1) else 0, + "description": lf["description"] or "", + "understanding": lf["understanding"] or "", + "review_note": lf["note"] or "", + "screenshot": lf["screenshot_path"] or "", + "field_count": len(fl), + "fields": [{"group": f["group"], "name": f["name"], "order": f["order"]} for f in fl], + "hidden_entries": extras.get(nk, []), + "deep_shots": deep_shots.get(nk, []), + "data_samples": samples, + } + modules.setdefault(mod, []).append(page) + + mod_list = [{"module": m, "page_count": len(ps), + "field_pages": sum(1 for p in ps if p["field_count"]), + "pages": ps} for m, ps in modules.items()] + + total_fields = sum(len(v) for v in fields.values()) + total_samples = sum(len(v) for v in downloads.values()) + spec = { + "meta": { + "product": "2号人事部", + "source": "https://2haohr.com 功能调研", + "generated_at": time.strftime("%Y-%m-%dT%H:%M:%S"), + "schema_version": 1, + "notes": "按 模块->功能页 组织; fields 为自定义列/选择表头弹窗采集的完整字段(远超截图);" + " hidden_entries 为'更多'菜单发现的隐藏功能界面; data_samples 为真实导出样本(含表头预览);" + " screenshot 为去遮挡后重拍的整页主图; deep_shots 为点击按钮抵达的深层界面截图(新增表单/筛选/自定义列/行详情)。", + }, + "stats": { + "modules": len(mod_list), + "pages": len(leaves), + "kept_pages": sum(1 for lf in leaves if (lf["keep"] is None or lf["keep"] == 1)), + "pages_with_fields": n_fields_pages, + "total_fields": total_fields, + "pages_with_hidden_entries": sum(1 for k in extras if extras[k]), + "total_hidden_entries": sum(len(v) for v in extras.values()), + "data_samples": total_samples, + "pages_with_deep_shots": sum(1 for k in deep_shots if deep_shots[k]), + "total_deep_shots": sum(len(v) for v in deep_shots.values()), + "approval_templates": len(templates), + }, + "modules": mod_list, + "approval_templates": templates, + } + os.makedirs(os.path.dirname(OUT), exist_ok=True) + with open(OUT, "w", encoding="utf-8") as f: + json.dump(spec, f, ensure_ascii=False, indent=2) + size = os.path.getsize(OUT) + print("生成 docs/spec.json (%.1f KB)" % (size / 1024)) + print("统计:", json.dumps(spec["stats"], ensure_ascii=False)) + + +if __name__ == "__main__": + main() diff --git a/scripts/map_all.py b/scripts/map_all.py new file mode 100644 index 0000000..6b15328 --- /dev/null +++ b/scripts/map_all.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +遍历全部顶导航模块, 映射每个模块的侧边栏功能结构。 +含随机 5-15s 点击间隔(反爬)。结果写入 db/menu_map.json, 进度写 db/map_progress.log +""" +import json, time, random, os, urllib.request + +DAEMON = "http://127.0.0.1:10086/command" +SESSION = "2haohr" +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +OUT = os.path.join(BASE, "db", "menu_map.json") +LOG = os.path.join(BASE, "db", "map_progress.log") + +# (模块名, 是否在"更多"下拉里, 备注) +MODULES = [ + ("工作台", 0), ("人事", 0), ("组织", 0), ("招聘", 0), ("考勤假期", 0), ("薪酬", 0), + ("审批", 1), ("培训学习", 1), ("绩效", 1), ("社保公积金", 1), ("行政管理", 1), + ("电子合同", 1), ("背景调查", 1), ("人才测评", 1), ("员工福利", 1), ("人事仪表盘", 1), + ("第三方对接", 1), ("培训商城", 1), ("短信发送", 1), ("电子工资条", 1), ("智能薪酬", 1), + ("个税对接", 1), ("AI员工助手", 1), ("应用管理", 1), +] + +def call(action, args): + body = json.dumps({"action": action, "args": args, "session": SESSION}).encode() + req = urllib.request.Request(DAEMON, data=body, headers={"Content-Type": "application/json"}) + with urllib.request.urlopen(req, timeout=45) as resp: + return json.loads(resp.read().decode()) + +def ev(code): + try: + return call("evaluate", {"code": code}).get("data", {}).get("value") + except Exception as e: + return "ERR:" + str(e) + +CLICK_TOP = """ +(()=>{const name=%s; + const els=[...document.querySelectorAll("a,span,div,li")].filter(e=>{ + const t=(e.innerText||"").trim();const r=e.getBoundingClientRect(); + return t===name && r.top<60 && r.width>8 && r.width<160;}); + if(els.length){els[0].click();return "top-clicked";}return "not-found";})() +""" +OPEN_MORE = """ +(()=>{const els=[...document.querySelectorAll("a,span,div,li")].filter(e=>{ + const t=(e.innerText||"").trim();const r=e.getBoundingClientRect(); + return t==="更多" && r.top<60 && r.width>8 && r.width<160;}); + if(!els.length)return "no-more"; const el=els[0]; + ["pointerover","mouseover","mouseenter","pointerenter"].forEach(tp=>el.dispatchEvent(new MouseEvent(tp,{bubbles:true,cancelable:true,view:window}))); + el.click(); return "more-hover";})() +""" +CLICK_ANY = """ +(()=>{const name=%s; + const els=[...document.querySelectorAll("a,span,div,li")].filter(e=>(e.innerText||"").trim()===name && e.getBoundingClientRect().width>=0); + if(els.length){els[els.length-1].click();return "clicked";}return "not-found";})() +""" +EXTRACT = r""" +(()=>{ + const root=document.querySelector("[class*=leftMenu]")||document.querySelector("[class*=menu_]"); + const groups=[]; let cur={title:"",items:[]}; groups.push(cur); const seen=new Set(); + if(root){const walk=(el)=>{for(const c of el.children){const cls=(c.className||"").toString(); + if(/nameTitle/.test(cls)&&!c.closest("a")){const t=(c.innerText||"").trim();if(t){cur={title:t,items:[]};groups.push(cur);}} + if(c.tagName==="A"){const h=c.getAttribute("href")||"";const t=(c.innerText||"").trim().replace(/\s+/g," "); + if(h&&h.length>1&&t&&!seen.has(h)){seen.add(h);cur.items.push({name:t,href:h});}} + walk(c);}}; walk(root);} + return JSON.stringify({loc:location.href,groups:groups.filter(g=>g.items.length)}); +})() +""" + +def log(msg): + line = time.strftime("%H:%M:%S ") + msg + print(line, flush=True) + with open(LOG, "a") as f: + f.write(line + "\n") + +def main(): + results = {} + if os.path.exists(OUT): + results = json.load(open(OUT)) + for i, (mod, in_more) in enumerate(MODULES): + if mod in results and results[mod].get("groups"): + log(f"skip {mod} (already mapped)"); continue + delay = random.uniform(5, 15) + log(f"[{i+1}/{len(MODULES)}] wait {delay:.1f}s -> {mod}") + time.sleep(delay) + name_js = json.dumps(mod, ensure_ascii=False) + if in_more: + ev(OPEN_MORE); time.sleep(1.5); r = ev(CLICK_ANY % name_js) + else: + r = ev(CLICK_TOP % name_js) + if r == "not-found": + ev(OPEN_MORE); time.sleep(1.5); r = ev(CLICK_ANY % name_js) + time.sleep(3.2) + data = ev(EXTRACT) + try: + parsed = json.loads(data) + except Exception: + parsed = {"loc": "", "groups": [], "raw": str(data)[:200]} + parsed["in_more"] = in_more + parsed["click"] = r + results[mod] = parsed + n = sum(len(g["items"]) for g in parsed.get("groups", [])) + log(f" {mod}: loc={parsed.get('loc','')} groups={len(parsed.get('groups',[]))} items={n} click={r}") + json.dump(results, open(OUT, "w"), ensure_ascii=False, indent=1) + log("DONE all modules") + +if __name__ == "__main__": + main() diff --git a/scripts/map_downloads.py b/scripts/map_downloads.py new file mode 100644 index 0000000..0654ce4 --- /dev/null +++ b/scripts/map_downloads.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Part0: 把 downloads 表里 node_key 为空的导出文件回填到对应功能页, 实现导出↔页面一一对应。 +匹配策略: + 1) 普通导出: 文件目录(如 downloads/02_人事/员工关系) 对应功能页 screenshot 目录(模块/分组); + 在该分组下的候选页中, 选文件名里能命中的页面名(最长命中优先)。 + 2) _任务中心 收割文件: 无目录线索, 用文件名关键词对全站页面名/路径做全局匹配。 +仅回填 node_key 为空者; 打印每条匹配结果与未匹配项供人工核对。 +""" +import os, sqlite3, re, collections + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") + + +def db(): + c = sqlite3.connect(DB); c.row_factory = sqlite3.Row; return c + + +def strip_num(s): + return re.sub(r"^\d+_", "", s or "").strip() + + +def load_pages(): + c = db() + rows = [dict(r) for r in c.execute( + "SELECT node_key,name,full_path,screenshot_path FROM features " + "WHERE screenshot_path IS NOT NULL AND screenshot_path<>''")] + c.close() + for r in rows: + # screenshots/02_人事/员工管理/01_员工花名册.jpg -> 目录 02_人事/员工管理 + d = os.path.dirname(r["screenshot_path"]).replace("screenshots/", "", 1) + r["shot_dir"] = d + r["name_core"] = strip_num(r["name"]).replace("员工", "").strip() + return rows + + +def best_page_in_group(fname, candidates): + """在同分组候选页里, 选页面名能在文件名中命中且命中最长的。""" + best, blen = None, 0 + for p in candidates: + for token in (p["name"], strip_num(p["name"]), p["name_core"]): + token = (token or "").strip() + if len(token) >= 2 and token in fname and len(token) > blen: + best, blen = p, len(token) + return best + + +def global_match(fname, full_path_hint, pages): + """任务中心文件: 按文件名关键词对全站页面做匹配。""" + key = fname + best, blen = None, 0 + for p in pages: + hay = (p["full_path"] or "") + " " + (p["name"] or "") + for token in (strip_num(p["name"]), p["name_core"]): + token = (token or "").strip() + if len(token) >= 2 and token in key and len(token) > blen: + best, blen = p, len(token) + return best + + +# 任务中心文件名 -> 目标页面关键词(人工先验, 提高命中) +TC_HINTS = { + "参保": ["参保档案", "社保"], + "薪酬档案": ["薪酬档案", "薪资档案"], + "已签署": ["已签署"], + "电子合同": ["已签署", "合同"], +} + +# 显式关键词->页面 node_key (第一遍模糊未命中时的人工规则, 按顺序取首个命中) +EXPLICIT = [ + ("异动", "人事::/personnel/relation/unusual-action"), + ("谈话", "人事::/personnel/relation/talk"), + ("实习生", "人事::/personnel/relation/internship"), + ("已签订合同", "人事::/personnel/relation/contract"), + ("合同人员", "人事::/personnel/relation/contract"), + ("待入职", "人事::/personnel/relation/enrollment"), + ("待离职", "人事::/personnel/relation/departure"), + ("试用期", "人事::/personnel/relation/probation"), + ("考勤明细", "考勤假期::/attendance/stat/records"), + ("打卡记录", "考勤假期::/attendance/stat/records"), + ("工资档案", "薪酬::/payroll/salary/profiles"), +] +# 目录兜底: 该目录剩余未匹配文件统一归属(员工管理各类统计报表 -> 人事报表) +DIR_FALLBACK = { + "02_人事/员工管理": "人事::/personnel/employee/personnel-report", + "02_人事/员工关系": "人事::/personnel/relation/office", +} + + +def map_explicit(): + """第二遍: 对仍为空的行用显式关键词规则 + 目录兜底回填。""" + c = db() + fp = {r["node_key"]: r["full_path"] for r in c.execute("SELECT node_key,full_path FROM features")} + rows = [dict(r) for r in c.execute( + "SELECT id,file_path FROM downloads WHERE node_key IS NULL OR node_key=''")] + done, left = 0, 0 + for r in rows: + rel = r["file_path"].replace("downloads/", "", 1) + parts = rel.split("/"); fname = parts[-1]; dir_key = "/".join(parts[:-1]) + nk = None + for sub, node in EXPLICIT: + if sub in fname: + nk = node; break + if not nk: + nk = DIR_FALLBACK.get(dir_key) + if nk and nk in fp: + c.execute("UPDATE downloads SET node_key=?, full_path=? WHERE id=?", (nk, fp[nk], r["id"])) + done += 1 + print(" [OK2] %-40s -> %s" % (fname[:40], fp[nk])) + else: + left += 1 + print(" [??2] %-40s (dir=%s)" % (fname[:40], dir_key)) + c.execute("PRAGMA journal_mode=DELETE") + c.commit(); c.close() + print("显式回填: 命中 %d, 仍未匹配 %d" % (done, left)) + + + +def main(): + pages = load_pages() + by_dir = collections.defaultdict(list) + for p in pages: + by_dir[p["shot_dir"]].append(p) + + c = db() + rows = [dict(r) for r in c.execute( + "SELECT id,file_path FROM downloads WHERE node_key IS NULL OR node_key=''")] + print("待回填导出文件: %d" % len(rows)) + matched, unmatched = 0, [] + for r in rows: + rel = r["file_path"].replace("downloads/", "", 1) + parts = rel.split("/") + fname = parts[-1] + dir_key = "/".join(parts[:-1]) + page = None + if dir_key.startswith("_任务") or dir_key.startswith("_"): + # 任务中心: 关键词优先 + 全局匹配 + hint_pages = None + for kw, targets in TC_HINTS.items(): + if kw in fname: + hint_pages = [p for p in pages if any(t in (p["full_path"] or "") + (p["name"] or "") for t in targets)] + break + if hint_pages: + page = best_page_in_group(fname, hint_pages) or hint_pages[0] + if not page: + page = global_match(fname, dir_key, pages) + else: + cands = by_dir.get(dir_key, []) + page = best_page_in_group(fname, cands) + if not page and len(cands) == 1: + page = cands[0] + if page: + c.execute("UPDATE downloads SET node_key=?, full_path=? WHERE id=?", + (page["node_key"], page["full_path"], r["id"])) + matched += 1 + print(" [OK] %-46s -> %s" % (fname[:46], page["full_path"])) + else: + unmatched.append((fname, dir_key)) + print(" [??] %-46s (dir=%s) 未匹配" % (fname[:46], dir_key)) + c.execute("PRAGMA journal_mode=DELETE") + c.commit(); c.close() + print("\n回填完成: 命中 %d, 未匹配 %d" % (matched, len(unmatched))) + if unmatched: + print("--- 第二遍: 显式关键词 + 目录兜底 ---") + map_explicit() + + +if __name__ == "__main__": + main() diff --git a/scripts/map_menu.py b/scripts/map_menu.py new file mode 100644 index 0000000..be6dfcc --- /dev/null +++ b/scripts/map_menu.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +映射某个顶导航模块的侧边栏功能结构。 +用法: python3 map_menu.py "<模块名>" [in_more] + in_more: 传 1 表示该模块在"更多"下拉里, 需先展开 +输出: JSON {module, loc, groups:[{title, items:[{name,href}]}], flat:[...]} +""" +import sys, json, time, urllib.request + +DAEMON = "http://127.0.0.1:10086/command" +SESSION = "2haohr" + +def call(action, args): + body = json.dumps({"action": action, "args": args, "session": SESSION}).encode() + req = urllib.request.Request(DAEMON, data=body, headers={"Content-Type": "application/json"}) + with urllib.request.urlopen(req, timeout=40) as resp: + return json.loads(resp.read().decode()) + +def ev(code): + return call("evaluate", {"code": code}).get("data", {}).get("value") + +CLICK_TOP = """ +(()=>{const name=%s; + const els=[...document.querySelectorAll("a,span,div,li")].filter(e=>{ + const t=(e.innerText||"").trim();const r=e.getBoundingClientRect(); + return t===name && r.top<60 && r.width>8 && r.width<160;}); + if(els.length){els[0].click();return "top-clicked";}return "not-found";})() +""" + +OPEN_MORE = """ +(()=>{const els=[...document.querySelectorAll("a,span,div,li")].filter(e=>{ + const t=(e.innerText||"").trim();const r=e.getBoundingClientRect(); + return t==="更多" && r.top<60 && r.width>8 && r.width<160;}); + if(!els.length)return "no-more"; + const el=els[0]; + ["pointerover","mouseover","mouseenter","pointerenter"].forEach(tp=>{ + el.dispatchEvent(new MouseEvent(tp,{bubbles:true,cancelable:true,view:window}));}); + el.click(); + return "more-hover";})() +""" + +CLICK_ANY = """ +(()=>{const name=%s; + const els=[...document.querySelectorAll("a,span,div,li")].filter(e=>(e.innerText||"").trim()===name && e.getBoundingClientRect().width>8); + if(els.length){els[els.length-1].click();return "clicked";}return "not-found";})() +""" + +EXTRACT = r""" +(()=>{ + const root=document.querySelector("[class*=leftMenu]")||document.querySelector("[class*=menu_]"); + if(!root)return JSON.stringify({loc:location.href,groups:[],flat:[]}); + const groups=[]; let cur={title:"",items:[]}; groups.push(cur); + const seen=new Set(); + const walk=(el)=>{ + for(const c of el.children){ + const cls=(c.className||"").toString(); + if(/nameTitle/.test(cls) && !c.closest("a")){ const t=(c.innerText||"").trim(); if(t){ cur={title:t,items:[]}; groups.push(cur);} } + if(c.tagName==="A"){ const h=c.getAttribute("href")||""; const t=(c.innerText||"").trim().replace(/\s+/g," "); + if(h&&h.length>1&&t&&!seen.has(h)){seen.add(h);cur.items.push({name:t,href:h});} } + walk(c); + } + }; + walk(root); + const flat=[]; groups.forEach(g=>g.items.forEach(it=>flat.push({group:g.title,name:it.name,href:it.href}))); + return JSON.stringify({loc:location.href,groups:groups.filter(g=>g.items.length),flat}); +})() +""" + +def main(): + module = sys.argv[1] + in_more = len(sys.argv) > 2 and sys.argv[2] == "1" + name_js = json.dumps(module, ensure_ascii=False) + if in_more: + print("more:", ev(OPEN_MORE)); time.sleep(1.2) + print("click:", ev(CLICK_ANY % name_js)) + else: + r = ev(CLICK_TOP % name_js) + print("top:", r) + if r == "not-found": + print("more:", ev(OPEN_MORE)); time.sleep(1.2) + print("click:", ev(CLICK_ANY % name_js)) + time.sleep(3.0) + data = ev(EXTRACT) + print(data) + +if __name__ == "__main__": + main() diff --git a/scripts/recap_main.py b/scripts/recap_main.py new file mode 100644 index 0000000..6c5802e --- /dev/null +++ b/scripts/recap_main.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""仅重拍主截图 (不触发任何深层点击)。 + +用途: 修复"数据没加载好就截图 -> 只截到首屏空表"的问题。 +现在 fresh_page 内含 settle_content(等 docH 稳定 + 数据就绪), 重拍后 +列表/报表页会等到数据渲染完(docH 增长)再整页拼接, 从而截全。 + +安全: 只做 导航 -> 去遮挡(仅点"立即刷新"/"跳过引导") -> 截图 -> 覆盖原图, + 绝不点击 保存/删除/提交/确定/发送 等任何写操作。 + +用法: + python3 recap_main.py att # 只重拍 18 个有附件的页面 + python3 recap_main.py all # 重拍全部 level=2 页面主图 + python3 recap_main.py # 重拍指定 node_key +""" +import os, sys, time +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from capture_full import capture, ev +from rewalk import fresh_page, SESSION, BASE, dbc, log + +MODE = sys.argv[1] if len(sys.argv) > 1 else "att" + + +def targets(conn): + if MODE == "all": + rows = conn.execute( + "SELECT node_key,name,url,full_path,screenshot_path FROM features " + "WHERE level=2 AND url IS NOT NULL AND url<>'' ORDER BY sort_order,id").fetchall() + elif MODE == "att": + rows = conn.execute( + "SELECT DISTINCT f.node_key,f.name,f.url,f.full_path,f.screenshot_path FROM features f " + "JOIN downloads d ON d.node_key=f.node_key " + "WHERE d.node_key IS NOT NULL AND d.node_key<>'' AND f.url IS NOT NULL AND f.url<>'' " + "ORDER BY f.name").fetchall() + else: + rows = conn.execute( + "SELECT node_key,name,url,full_path,screenshot_path FROM features WHERE node_key=?", + (MODE,)).fetchall() + return [dict(r) for r in rows] + + +def main(): + conn = dbc() + conn.execute("PRAGMA journal_mode=DELETE") + rows = targets(conn) + total = len(rows) + log("=== recap_main mode=%s total=%d ===" % (MODE, total)) + ok = fail = 0 + for i, r in enumerate(rows): + nk = r["node_key"]; url = r["url"]; rel = r["screenshot_path"] + if not rel: + log("[%d/%d] SKIP no screenshot_path %s" % (i + 1, total, nk)); continue + out_abs = os.path.join(BASE, rel) + log("[%d/%d] %s %s" % (i + 1, total, r["name"], url)) + try: + fresh_page(url) + capture(SESSION, out_abs, 16) + conn.execute("DELETE FROM page_shots WHERE node_key=? AND kind='main'", (nk,)) + conn.execute( + "INSERT INTO page_shots(node_key,full_path,url,kind,label,path,ts) " + "VALUES(?,?,?,?,?,?,?)", + (nk, r.get("full_path"), url, "main", "主界面", rel, + time.strftime("%Y-%m-%d %H:%M:%S"))) + conn.commit() + ok += 1 + except Exception as e: + fail += 1 + log(" FAIL %s: %s" % (nk, str(e)[:120])) + conn.execute("PRAGMA journal_mode=DELETE"); conn.commit(); conn.close() + log("=== recap DONE ok=%d fail=%d total=%d ===" % (ok, fail, total)) + + +if __name__ == "__main__": + main() diff --git a/scripts/rewalk.py b/scripts/rewalk.py new file mode 100644 index 0000000..bdab768 --- /dev/null +++ b/scripts/rewalk.py @@ -0,0 +1,431 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +阶段B Part1: 重走全部叶子页 -> 去遮挡 -> 重拍主截图 -> 安全抓取 4 类更深界面。 + +安全约束(硬性): + 浏览器是用户本人登录的真实 Chrome。深层抓取一律"打开 -> 截图 -> 换页重载", + 绝不点击 保存/删除/提交/确定/发送 等会产生真实数据变更的按钮(见 BAD 黑名单)。 + 为杜绝状态污染: 每抓一个深层界面前都重新导航到干净页面, 只打开一个目标后立即截图, + 不做任何"确认"操作; 下一个深层界面靠再次重载复位。 + +4 类深层界面: + add 主操作弹窗(顶部工具栏 新增/添加/新建/创建/录入/发起 表单) + detail 行详情/编辑(首个数据行的 详情/查看/编辑) + filter 筛选面板(#icon-filter / 文本"筛选") + columns 自定义列/表头设置(#icon-custom-columns / 文本 自定义列/列设置/表头设置) + menu_* 更多菜单里已发现且安全的配置类入口(page_extras 白名单) + +存储: + 主截图: 覆盖 features.screenshot_path + 深层截图: 同目录 __.jpg, 记录到 page_shots(node_key,full_path,url,kind,label,path,ts) +断点续跑: page_shots 已有该 node_key 的 kind=main 记录则整页跳过(除非 --force)。 +用法: python3 rewalk.py [start_index] [--force] +""" +import os, sys, json, time, sqlite3, urllib.request +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from capture_full import capture, ev, shot, call, HIDE_JS + +SESSION = "2haohr" +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +LOG = os.path.join(BASE, "db", "rewalk_progress.log") + +# ---- 操作黑名单: 深层抓取时任何匹配的按钮都绝不点击 ---- +BAD = (r"删除|移除|停用|注销|作废|清空|批量|放弃|提交|保存|确定|确认|发送|禁用|冻结|解除|" + r"终止|结束|撤销|重置|清除|导入|上传|同步|生成|发放|归档|封存|开除|辞退|下架|驳回|" + r"通过|拒绝|办理|恢复|启用|锁定|解锁|导出|下载|离职|开票|付款|转账|扣款|发起流程") + +# ---- 更多菜单安全白名单: 仅打开明确的配置/查看类界面 ---- +MENU_SAFE = r"设置|字段|配置|规则|对比|说明|模板|方案|切换视图|调整排序|自定义列|列设置|表头|视图|统计口径" + + +def dbc(): + c = sqlite3.connect(DB); c.row_factory = sqlite3.Row; return c + + +def log(msg): + line = time.strftime("%H:%M:%S ") + msg + print(line, flush=True) + with open(LOG, "a") as f: + f.write(line + "\n") + + +def navigate(url): + body = json.dumps({"action": "navigate", "args": {"url": url, "newTab": False}, "session": SESSION}).encode() + last = None + for attempt in range(4): + try: + req = urllib.request.Request(DAEMON_URL, data=body, headers={"Content-Type": "application/json"}) + with _OPENER.open(req, timeout=45) as resp: + return json.loads(resp.read().decode()) + except Exception as e: + last = e + time.sleep(1.5 + attempt * 1.5) + raise last + + +DAEMON_URL = "http://127.0.0.1:10086/command" +_OPENER = urllib.request.build_opener(urllib.request.ProxyHandler({})) + + +def wait_ready(max_wait=9): + t0 = time.time() + while time.time() - t0 < max_wait: + try: + if ev("(()=>document.readyState)()", SESSION) == "complete": + time.sleep(1.2); return True + except Exception: + pass + time.sleep(0.6) + return False + + +# 内容稳定探测: docH(整页高度) + '共N条'数据计数 +SETTLE_JS = r"""(()=>{const de=document.documentElement;const m=(document.body.innerText||'').match(/共\s*([\d,]+)\s*条/);return JSON.stringify({docH:de.scrollHeight,cnt:m?m[1].replace(/,/g,''):null});})()""" + + +def settle_content(max_wait=12.0): + """截图前等内容稳定: 轮询 docH 直到连续两次不变, 且(若页面有'共N条')数据>0。 + 列表/报表页的表格数据是异步加载的, 加载完成后 docH 才会增长到真实高度; + 若在'共0条/加载中'时截图, 会只截到首屏空表(没截全)。""" + t0 = time.time(); last = -1; stable = 0 + while time.time() - t0 < max_wait: + try: + m = json.loads(ev(SETTLE_JS, SESSION) or "{}") + except Exception: + m = {} + h = int(m.get("docH") or 0) + cnt = m.get("cnt") + data_ok = (cnt is None) or (str(cnt).isdigit() and int(cnt) > 0) + stable = stable + 1 if (h == last and h > 0) else 0 + last = h + if stable >= 2 and data_ok and time.time() - t0 > 1.5: + return h + time.sleep(0.5) + return last + + +# 主截图去遮挡: 点"立即刷新"(安全重载数据) + 跳过新手引导 + DOM 隐藏遮罩/协议层 + 隐藏浮窗 +DEOCCLUDE_JS = r""" +(()=>{ + const vis=el=>{const r=el.getBoundingClientRect();return r.width>0&&r.height>0&&getComputedStyle(el).visibility!=='hidden';}; + let acts=[]; + const refresh=[...document.querySelectorAll('a,button,span')].find(x=>x.childElementCount===0&&/立即刷新/.test((x.innerText||'').trim())&&vis(x)); + if(refresh){refresh.click();acts.push('refresh');} + const skip=[...document.querySelectorAll('a,button,span,div')].find(x=>x.childElementCount===0&&/^(跳过|我知道了|知道了|跳过引导|不再提示|下次再说|以后再说)$/.test((x.innerText||'').trim())&&vis(x)); + if(skip){skip.click();acts.push('skip');} + // DOM 隐藏引导遮罩/协议弹层(纯客户端, 不产生服务端动作) + const masksel=['[class*=guide]','[class*=Guide]','[class*=driver]','[class*=intro]','[class*=newbie]','[class*=Newbie]','[class*=agreement]','[class*=Agreement]','[class*=guideMask]','[class*=coach]']; + masksel.forEach(s=>document.querySelectorAll(s).forEach(el=>{const r=el.getBoundingClientRect();const p=getComputedStyle(el).position;if((p==='fixed'||p==='absolute')&&r.width>window.innerWidth*0.4&&r.height>window.innerHeight*0.3){el.style.setProperty('display','none','important');acts.push('mask');}})); + return JSON.stringify(acts); +})() +""" + + +def deocclude_main(): + """返回是否触发了 refresh(需重新等待)。""" + try: + acts = json.loads(ev(DEOCCLUDE_JS, SESSION) or "[]") + except Exception: + acts = [] + ev(HIDE_JS, SESSION) + return "refresh" in acts + + +def save_shot(out_abs): + img = shot(SESSION) + os.makedirs(os.path.dirname(out_abs), exist_ok=True) + img.save(out_abs, "JPEG", quality=80) + return img.size + + +# ---------- 4 类深层触发 (均带 BAD 黑名单过滤, 只打开不确认) ---------- +OPEN_ADD = r""" +(()=>{ + const bad=/%BAD%/; const add=/(新增|添加|新建|创建|录入|发起)/; + const cands=[...document.querySelectorAll('button,a')].filter(x=>{ + const t=(x.innerText||'').trim(); const r=x.getBoundingClientRect(); + return t&&t.length<=8&&add.test(t)&&!bad.test(t)&&r.width>0&&r.height>0&&r.top<340;}); + cands.sort((a,b)=>a.getBoundingClientRect().top-b.getBoundingClientRect().top); + if(!cands.length) return ''; + const t=(cands[0].innerText||'').trim(); cands[0].click(); return t; +})() +""".replace("%BAD%", BAD) + +OPEN_DETAIL = r""" +(()=>{ + const bad=/%BAD%/; const want=/^(详情|查看|编辑|查看详情|详情信息)$/; + const els=[...document.querySelectorAll('span,a,button')].filter(x=>{ + const t=(x.innerText||'').trim(); const r=x.getBoundingClientRect(); + return want.test(t)&&!bad.test(t)&&x.childElementCount<=1&&r.width>0&&r.height>0&&r.top>150&&r.top{const ra=a.getBoundingClientRect(),rb=b.getBoundingClientRect();return ra.top-rb.top||ra.left-rb.left;}); + if(!els.length) return ''; + const t=(els[0].innerText||'').trim(); els[0].click(); return t; +})() +""".replace("%BAD%", BAD) + +OPEN_FILTER = r""" +(()=>{ + let target=null; + document.querySelectorAll('use').forEach(u=>{const h=u.getAttribute('xlink:href')||u.getAttribute('href')||'';if(/#icon-filter|#icon-shaixuan|filter/i.test(h)&&!target){target=u;}}); + if(!target){target=[...document.querySelectorAll('button,span,div')].find(x=>x.childElementCount<=2&&/^筛选$/.test((x.innerText||'').trim())&&x.getBoundingClientRect().width>0);} + if(!target) return ''; + let el=target; for(let i=0;i<4&⪙i++){if(el.tagName==='BUTTON'||el.getAttribute('role')==='button'||/btn|button/i.test(el.className||'')){break;}el=el.parentElement;} + (el||target).click(); return 'filter'; +})() +""" + +OPEN_COLUMNS = r""" +(()=>{ + let target=null; + document.querySelectorAll('use').forEach(u=>{const h=u.getAttribute('xlink:href')||u.getAttribute('href')||'';if(/#icon-custom-columns|#icon-column|#icon-setting-col|columns/i.test(h)&&!target){target=u;}}); + if(!target){target=[...document.querySelectorAll('button,span,div')].find(x=>x.childElementCount<=2&&/^(自定义列|列设置|表头设置|表头字段|字段设置)$/.test((x.innerText||'').trim())&&x.getBoundingClientRect().width>0);} + if(!target) return ''; + let el=target; for(let i=0;i<4&⪙i++){if(el.tagName==='BUTTON'||el.getAttribute('role')==='button'||/btn|button/i.test(el.className||'')){break;}el=el.parentElement;} + (el||target).click(); return 'columns'; +})() +""" + +CLICK_MORE = r""" +(()=>{ + const el=[...document.querySelectorAll('button,a,span,div')].find(x=>x.childElementCount<=2&&/^(更多操作|更多功能|···|\.\.\.|⋯)$/.test((x.innerText||'').replace(/\s/g,''))&&x.getBoundingClientRect().width>0&&x.getBoundingClientRect().top>60&&x.getBoundingClientRect().top<420); + if(el){el.click();return 'clicked';}return 'none'; +})() +""" + +CLICK_MENU_ITEM = r""" +(()=>{ + const bad=/%BAD%/; const label=%LABEL%; + const el=[...document.querySelectorAll('[class*=dropdown] li,[class*=Dropdown] li,[class*=popper] li,[class*=Popover] li,[role=menu] li,[class*=dropdown] a,[class*=menuItem],li,[role=menuitem]')].find(x=>{ + const t=(x.innerText||'').trim(); return t===label&&!bad.test(t)&&x.getBoundingClientRect().width>0;}); + if(el){el.click();return 'ok';}return 'miss'; +})() +""" + + +def modal_visible(): + js = ("(()=>{const s=['.el-overlay','.el-dialog__wrapper','.el-drawer','.el-drawer__container'," + "'[class*=dialog]','[class*=Dialog]','[class*=drawer]','[class*=Drawer]','[class*=popper]'," + "'[class*=Popover]','[role=dialog]'];for(const q of s){for(const el of document.querySelectorAll(q)){" + "const r=el.getBoundingClientRect();if(r.width>120&&r.height>120&&getComputedStyle(el).display!=='none')return true;}}return false;})()") + try: + return bool(ev(js, SESSION)) + except Exception: + return False + + +# 统计当前可见的"浮层面板"(弹窗/抽屉/筛选抑扇/popover)数量, 用于点击前后对比判定是否弹出新面板 +PANEL_COUNT_JS = r""" +(()=>{let n=0;const W=innerWidth,H=innerHeight; + document.querySelectorAll('div,aside,section,ul').forEach(el=>{ + const s=getComputedStyle(el);const r=el.getBoundingClientRect();const z=parseInt(s.zIndex)||0; + const floaty=(s.position==='fixed'||s.position==='absolute'); + if(floaty&&s.display!=='none'&&r.width>=200&&r.width<=W*0.99&&r.height>=160&&r.top60&& + (z>=8||/dialog|drawer|popper|popover|modal|mask|panel|Dialog|Drawer/.test(el.className||''))){n++;} + });return n;})() +""" + + +def panels(): + try: + return int(ev(PANEL_COUNT_JS, SESSION) or 0) + except Exception: + return 0 + + +def fresh_page(url): + """导航到干净页面: 重载 + 去遮挡 + (若刷新)再等待。""" + navigate(url); wait_ready() + if deocclude_main(): + wait_ready(); deocclude_main() + settle_content() + time.sleep(0.3) + + +def cur_url(): + try: + return ev("(()=>location.href)()", SESSION) or "" + except Exception: + return "" + + +def url_path(u): + return (u or "").split("?")[0].split("#")[0] + + +def deep_capture(url, node_key, full_path, out_base, kind, open_js, label, conn, accept_route=True): + """重载到干净页 -> 执行 open_js -> 判定出现(整页跳转表单 或 弹层) -> 截图 -> 记录。绝不做确认。""" + rel_dir = os.path.dirname(out_base) + base = os.path.splitext(os.path.basename(out_base))[0] + fname = "%s__%s.jpg" % (base, kind) + rel_path = os.path.join(rel_dir, fname) + out_abs = os.path.join(BASE, rel_path) + if os.path.exists(out_abs) and os.path.getsize(out_abs) > 3000: + return None + fresh_page(url) + before = url_path(cur_url()) + b_panels = panels() + clicked = ev(open_js, SESSION) + if not clicked: + return None + time.sleep(1.3) + after = url_path(cur_url()) + routed = after != before + if routed and not accept_route: + return None # filter/columns 不应发生跳转: 判为误点, 不记录 + if not routed: + opened = modal_visible() or panels() > b_panels + if not opened: + return None # 点了没反馈, 放弃, 不记录 + if routed: + wait_ready(); time.sleep(0.6); deocclude_main() + ev(HIDE_JS, SESSION) # 去掉可能盖在上面的浮窗 + try: + if routed: + capture(SESSION, out_abs, 16) # 整页表单: 滚动拼接 + else: + save_shot(out_abs) # 弹层: 单屏视口 + except Exception as e: + log(" shot-fail %s %s: %s" % (kind, clicked, str(e)[:80])) + return None + conn.execute("INSERT INTO page_shots(node_key,full_path,url,kind,label,path,ts) VALUES(?,?,?,?,?,?,?)", + (node_key, full_path, url, kind, clicked if isinstance(clicked, str) else label, rel_path, + time.strftime("%Y-%m-%d %H:%M:%S"))) + conn.commit() + return clicked + + +def process_page(r, conn, force): + url = r["url"]; node_key = r["node_key"]; full_path = r["full_path"] + rel_main = r["screenshot_path"] + out_main = os.path.join(BASE, rel_main) + + # 断点续跑: 已有 main 记录且未 force 则跳过 + if not force: + done = conn.execute("SELECT 1 FROM page_shots WHERE node_key=? AND kind='main' LIMIT 1", + (node_key,)).fetchone() + if done: + return "skip" + + # ---- 主截图: 去遮挡后整页拼接, 覆盖原图 ---- + fresh_page(url) + try: + capture(SESSION, out_main, 16) + except Exception as e: + log(" main-capture FAIL %s: %s" % (full_path, str(e)[:100])) + return "fail" + conn.execute("DELETE FROM page_shots WHERE node_key=? AND kind='main'", (node_key,)) + conn.execute("INSERT INTO page_shots(node_key,full_path,url,kind,label,path,ts) VALUES(?,?,?,?,?,?,?)", + (node_key, full_path, url, "main", "主界面", rel_main, time.strftime("%Y-%m-%d %H:%M:%S"))) + conn.commit() + + tally = ["main"] + # ---- 4 类深层 ---- + for kind, js, acc in (("filter", OPEN_FILTER, False), ("columns", OPEN_COLUMNS, False), + ("add", OPEN_ADD, True), ("detail", OPEN_DETAIL, True)): + try: + c = deep_capture(url, node_key, full_path, rel_main, kind, js, None, conn, accept_route=acc) + if c: + tally.append("%s(%s)" % (kind, c if isinstance(c, str) else "")) + except Exception as e: + log(" deep %s err: %s" % (kind, str(e)[:80])) + + # ---- 更多菜单安全入口(最多 3 个) ---- + import re as _re + extras = conn.execute("SELECT label FROM page_extras WHERE node_key=?", (node_key,)).fetchall() + safe = [] + for e in extras: + lab = (e["label"] or "").strip() + if lab and _re.search(MENU_SAFE, lab) and not _re.search(BAD, lab) and lab not in safe: + safe.append(lab) + for lab in safe[:3]: + item_js = CLICK_MENU_ITEM.replace("%BAD%", BAD).replace("%LABEL%", json.dumps(lab, ensure_ascii=False)) + try: + c = deep_capture_menu(url, node_key, full_path, rel_main, lab, item_js, conn) + if c: + tally.append("menu(%s)" % lab) + except Exception as e: + log(" menu %s err: %s" % (lab, str(e)[:80])) + + log(" OK %s [%s]" % (full_path, ", ".join(tally))) + return "done" + + +def deep_capture_menu(url, node_key, full_path, out_base, label, item_js, conn): + """更多菜单类: 重载 -> 打开更多 -> 点安全项 -> 截图。""" + rel_dir = os.path.dirname(out_base) + base = os.path.splitext(os.path.basename(out_base))[0] + safe_label = label.replace("/", "_").replace(" ", "")[:16] + rel_path = os.path.join(rel_dir, "%s__menu_%s.jpg" % (base, safe_label)) + out_abs = os.path.join(BASE, rel_path) + if os.path.exists(out_abs) and os.path.getsize(out_abs) > 3000: + return None + fresh_page(url) + b_panels = panels() + ok = False + for attempt in range(3): + if ev(CLICK_MORE, SESSION) != "clicked": + break + time.sleep(1.0 + attempt * 0.6) + if ev(item_js, SESSION) == "ok": + ok = True; break + ev("(()=>{document.body.click();return 1;})()", SESSION) + time.sleep(0.4) + if not ok: + return None + time.sleep(1.3) + after = url_path(cur_url()) + routed = after != url_path(url) + if not routed and not (modal_visible() or panels() > b_panels): + return None + if routed: + wait_ready(); time.sleep(0.6); deocclude_main() + ev(HIDE_JS, SESSION) + try: + if routed: + capture(SESSION, out_abs, 16) + else: + save_shot(out_abs) + except Exception: + return None + conn.execute("INSERT INTO page_shots(node_key,full_path,url,kind,label,path,ts) VALUES(?,?,?,?,?,?,?)", + (node_key, full_path, url, "menu", label, rel_path, time.strftime("%Y-%m-%d %H:%M:%S"))) + conn.commit() + return label + + +def main(): + args = [a for a in sys.argv[1:] if a != "--force"] + force = "--force" in sys.argv + start = int(args[0]) if args else 0 + + conn = dbc() + conn.execute("PRAGMA journal_mode=DELETE") + rows = [dict(r) for r in conn.execute( + "SELECT node_key,name,full_path,url,screenshot_path FROM features " + "WHERE level=2 AND url IS NOT NULL AND url<>'' ORDER BY sort_order,id")] + rows = sorted(rows, key=lambda r: r["full_path"] or "") + total = len(rows) + log("=== rewalk start total=%d start=%d force=%s ===" % (total, start, force)) + done = skip = fail = 0 + for i, r in enumerate(rows): + if i < start: + continue + log("[%d/%d] %s" % (i + 1, total, r["full_path"])) + try: + st = process_page(r, conn, force) + except Exception as e: + st = "fail"; log(" PAGE-FAIL %s: %s" % (r["full_path"], str(e)[:120])) + if st == "done": + done += 1 + elif st == "skip": + skip += 1 + else: + fail += 1 + conn.execute("PRAGMA journal_mode=DELETE"); conn.commit(); conn.close() + log("=== DONE done=%d skip=%d fail=%d total=%d ===" % (done, skip, fail, total)) + + +if __name__ == "__main__": + main() diff --git a/scripts/serve.py b/scripts/serve.py new file mode 100644 index 0000000..e1e57de --- /dev/null +++ b/scripts/serve.py @@ -0,0 +1,319 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +阶段3(改进版) 审核后端服务。 +- 打开 http://localhost:8777/ 直接进入"一页一个功能"的审核界面 +- 每次点击 保留/删除 立即写回 SQLite(features.keep),供第二阶段开发直接使用 +- 提供 API: 功能列表 / 更新保留状态 / 导出 selection.json +依赖: Flask (已确认可用) +用法: python3 scripts/serve.py 然后浏览器打开 http://localhost:8777 +""" +import os, json, sqlite3, time, re +from flask import Flask, request, jsonify, send_from_directory, Response + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +DOCS = os.path.join(BASE, "docs") +DL_ROOT = os.path.join(BASE, "downloads") +REVIEW_HTML = os.path.join(DOCS, "审核.html") +EXPORT_JSON = os.path.join(DOCS, "selection.json") +EXCEL_EXT = (".xlsx", ".xls", ".docx", ".doc") + +app = Flask(__name__) + + +def db(): + conn = sqlite3.connect(DB) + conn.row_factory = sqlite3.Row + return conn + + +def load_features(): + """按菜单树先序遍历返回叶子(待审核功能)列表,同一模块的功能连续排列。""" + conn = db() + rows = [dict(r) for r in conn.execute( + "SELECT node_key,parent_key,level,name,full_path,url,description," + "understanding,screenshot_path,sort_order,keep,note FROM features " + "ORDER BY sort_order,id").fetchall()] + # 深层界面截图(非 main): node_key -> [{kind,kind_cn,label,shot}] + kind_cn = {"add": "主操作弹窗/表单", "filter": "筛选面板", + "columns": "自定义列/选择表头", "detail": "行详情/编辑"} + deep = {} + try: + for r in conn.execute("SELECT node_key,kind,label,path FROM page_shots " + "WHERE kind<>'main' ORDER BY node_key,id").fetchall(): + deep.setdefault(r["node_key"], []).append({ + "kind": r["kind"], "kind_cn": kind_cn.get(r["kind"], r["kind"]), + "label": r["label"] or "", "shot": "/shot/" + r["path"]}) + except sqlite3.OperationalError: + pass + # 导出文件按 node_key 精确挂到页面: node_key -> [{name,rel,size,kind}] + dls = {} + try: + for r in conn.execute("SELECT node_key,file_path,size,kind FROM downloads " + "WHERE node_key IS NOT NULL AND node_key<>'' ORDER BY file_path").fetchall(): + fp = r["file_path"] or "" + name = fp.rsplit("/", 1)[-1] + sz = r["size"] + if not sz: + ap = os.path.join(BASE, fp) + sz = os.path.getsize(ap) if os.path.isfile(ap) else 0 + dls.setdefault(r["node_key"], []).append( + {"name": name, "rel": fp, "size": sz or 0, "kind": r["kind"] or ""}) + except sqlite3.OperationalError: + pass + conn.close() + # 按父分组(已按 sort_order,id 排序,同父下保持菜单顺序) + by_parent = {} + for r in rows: + by_parent.setdefault(r["parent_key"] or "", []).append(r) + + leaves = [] + + def dfs(pk, module, group): + for r in by_parent.get(pk, []): + m = r["name"] if r["level"] == 0 else module + g = r["name"] if r["level"] == 1 else group + children = by_parent.get(r["node_key"]) + if children: + dfs(r["node_key"], m, g) + else: # 叶子 + shot = ("/shot/" + r["screenshot_path"]) if r.get("screenshot_path") else "" + leaves.append({ + "node_key": r["node_key"], + "name": r["name"], + "module": m, + "group": g if g and g != r["name"] else "", + "full_path": r["full_path"], + "url": r["url"] or "", + "description": r["description"] or "", + "understanding": r["understanding"] or "", + "shot": shot, + "deep_shots": deep.get(r["node_key"], []), + "downloads": dls.get(r["node_key"], []), + "keep": 1 if (r["keep"] is None or r["keep"] == 1) else 0, + "note": r.get("note") or "", + }) + + dfs("", "", "") + return leaves + + +@app.route("/") +def index(): + with open(REVIEW_HTML, "r", encoding="utf-8") as f: + return Response(f.read(), mimetype="text/html") + + +@app.route("/api/features") +def api_features(): + feats = load_features() + keep = sum(1 for f in feats if f["keep"]) + return jsonify({"total": len(feats), "keep": keep, "items": feats}) + + +@app.route("/api/keep", methods=["POST"]) +def api_keep(): + data = request.get_json(force=True) + node_key = data.get("node_key") + keep = 1 if data.get("keep") else 0 + if not node_key: + return jsonify({"ok": False, "err": "missing node_key"}), 400 + now = time.strftime("%Y-%m-%d %H:%M:%S") + conn = db() + conn.execute("UPDATE features SET keep=?, updated_at=? WHERE node_key=?", + (keep, now, node_key)) + conn.commit() + # 若为叶子节点,同步父节点(分组/模块)保留状态: 只要有一个子叶子保留,父就保留 + conn.close() + return jsonify({"ok": True, "node_key": node_key, "keep": keep}) + + +@app.route("/api/keep_batch", methods=["POST"]) +def api_keep_batch(): + """批量设置(全选/全不选/按模块)。body: {node_keys:[...], keep:0/1}""" + data = request.get_json(force=True) + keys = data.get("node_keys") or [] + keep = 1 if data.get("keep") else 0 + now = time.strftime("%Y-%m-%d %H:%M:%S") + conn = db() + conn.executemany("UPDATE features SET keep=?, updated_at=? WHERE node_key=?", + [(keep, now, k) for k in keys]) + conn.commit() + conn.close() + return jsonify({"ok": True, "updated": len(keys), "keep": keep}) + + +@app.route("/api/note", methods=["POST"]) +def api_note(): + """保存某功能的审核备注(建议/说明)到 SQLite。""" + data = request.get_json(force=True) + node_key = data.get("node_key") + note = data.get("note") or "" + if not node_key: + return jsonify({"ok": False, "err": "missing node_key"}), 400 + now = time.strftime("%Y-%m-%d %H:%M:%S") + conn = db() + conn.execute("UPDATE features SET note=?, updated_at=? WHERE node_key=?", + (note, now, node_key)) + conn.commit() + conn.close() + return jsonify({"ok": True, "node_key": node_key}) + + +@app.route("/api/export", methods=["POST", "GET"]) +def api_export(): + """把当前 SQLite 中的审核决策导出为 docs/selection.json(包含开发所需全部信息)""" + feats = load_features() + kept = sum(1 for f in feats if f["keep"]) + # 按模块汇总 + mods = {} + for f in feats: + m = mods.setdefault(f["module"], {"module": f["module"], "total": 0, "keep": 0}) + m["total"] += 1 + m["keep"] += f["keep"] + + def item(f): + return { + "module": f["module"], "group": f["group"], "name": f["name"], + "node_key": f["node_key"], "full_path": f["full_path"], "url": f["url"], + "keep": f["keep"], + "description": f["description"], # 功能释义 + "understanding": f["understanding"], # 我的理解/开发提示 + "note": f["note"], # 审核备注/开发建议 + "screenshot": f["shot"].replace("/shot/", "") if f["shot"] else "", # 界面参考图(相对项目根) + } + + out = { + "generated_at": time.strftime("%Y-%m-%dT%H:%M:%S"), + "source": "2号人事部 https://2haohr.com 功能调研", + "total": len(feats), + "keep": kept, + "dropped": len(feats) - kept, + "module_summary": sorted(mods.values(), key=lambda x: -x["keep"]), + "items": [item(f) for f in feats], # 全量(含删除项, 便于回溯) + "kept_items": [item(f) for f in feats if f["keep"]], # 仅保留项(开发直接用) + } + os.makedirs(DOCS, exist_ok=True) + with open(EXPORT_JSON, "w", encoding="utf-8") as f: + json.dump(out, f, ensure_ascii=False, indent=2) + return jsonify({"ok": True, "path": "docs/selection.json", + "total": out["total"], "keep": out["keep"], "dropped": out["dropped"]}) + + +@app.route("/shot/") +def shot(relpath): + return send_from_directory(BASE, relpath) + + +def _strip_num(s): + """去掉目录名前缀数字, 使 '02_人事' -> '人事', 便于与功能树模块名匹配。""" + return re.sub(r"^\d+_", "", s or "").strip() + + +def scan_attachments(): + """实时扫描 downloads/ 目录, 按目录分组返回真实导出的 Excel/Word 附件清单。 + dl_biz/dl_biz2 新增文件会自动出现(无需重启)。""" + groups = [] + if not os.path.isdir(DL_ROOT): + return groups + for root, _, files in os.walk(DL_ROOT): + fs = [f for f in files if f.lower().endswith(EXCEL_EXT)] + if not fs: + continue + rel = os.path.relpath(root, DL_ROOT) + segs = [] if rel == "." else rel.split(os.sep) + seg0 = segs[0] if segs else "" + module = "任务中心" if seg0.startswith("_任务") else _strip_num(seg0) + group = segs[1] if len(segs) > 1 else "" + items = [] + for f in sorted(fs): + p = os.path.join(root, f) + items.append({"name": f, "size": os.path.getsize(p), + "rel": os.path.relpath(p, BASE)}) + groups.append({"dir": rel.replace(os.sep, " / "), "module": module, + "group": group, "files": items}) + groups.sort(key=lambda g: g["dir"]) + return groups + + +@app.route("/api/attachments") +def api_attachments(): + """返回全部真实导出附件(按目录分组), 供审核界面展示与下载。""" + gs = scan_attachments() + total = sum(len(g["files"]) for g in gs) + return jsonify({"total": total, "groups": gs}) + + +@app.route("/dl/") +def dl(relpath): + """下载真实导出文件(强制作为附件下载)。""" + d = os.path.dirname(relpath) + fn = os.path.basename(relpath) + return send_from_directory(os.path.join(BASE, d), fn, as_attachment=True) + + +SHEET_EXT = (".xlsx", ".xls") +MAX_ROWS = 500 +MAX_COLS = 60 + + +def _parse_xlsx(path): + import openpyxl + wb = openpyxl.load_workbook(path, read_only=True, data_only=True) + sheets = [] + for ws in wb.worksheets: + rows = [] + for i, row in enumerate(ws.iter_rows(values_only=True)): + if i >= MAX_ROWS: + break + cells = [("" if v is None else str(v)) for v in row[:MAX_COLS]] + rows.append(cells) + sheets.append({"name": ws.title, "rows": rows, + "total_rows": ws.max_row, "total_cols": ws.max_column}) + wb.close() + return sheets + + +def _parse_xls(path): + import xlrd, warnings + warnings.filterwarnings("ignore") + wb = xlrd.open_workbook(path) + sheets = [] + for ws in wb.sheets(): + rows = [] + for r in range(min(MAX_ROWS, ws.nrows)): + cells = [] + for cc in range(min(MAX_COLS, ws.ncols)): + v = ws.cell_value(r, cc) + if isinstance(v, float) and v == int(v): + v = int(v) + cells.append("" if v == "" else str(v)) + rows.append(cells) + sheets.append({"name": ws.name, "rows": rows, + "total_rows": ws.nrows, "total_cols": ws.ncols}) + return sheets + + +@app.route("/api/preview") +def api_preview(): + """后端解析 Excel(.xlsx/openpyxl, .xls/xlrd) 为行列 JSON, 供前端表格预览。 + 参数 rel=相对项目根的文件路径(限 downloads/ 内, 防穿越)。""" + rel = request.args.get("rel", "") + abspath = os.path.abspath(os.path.join(BASE, rel)) + if not abspath.startswith(DL_ROOT + os.sep) or not os.path.isfile(abspath): + return jsonify({"ok": False, "err": "file not found or forbidden"}), 404 + low = abspath.lower() + if not low.endswith(SHEET_EXT): + return jsonify({"ok": False, "err": "not a spreadsheet", "kind": "other"}), 200 + try: + sheets = _parse_xls(abspath) if low.endswith(".xls") else _parse_xlsx(abspath) + except Exception as e: + return jsonify({"ok": False, "err": str(e)[:200]}), 200 + return jsonify({"ok": True, "name": os.path.basename(abspath), + "rel": rel, "sheets": sheets, + "max_rows": MAX_ROWS, "max_cols": MAX_COLS}) + + +if __name__ == "__main__": + app.run(host="127.0.0.1", port=8777, debug=False, threaded=True) diff --git a/xinrenxinshi/.DS_Store b/xinrenxinshi/.DS_Store new file mode 100644 index 0000000..56f4208 Binary files /dev/null and b/xinrenxinshi/.DS_Store differ diff --git a/xinrenxinshi/db/menu_map.json b/xinrenxinshi/db/menu_map.json new file mode 100644 index 0000000..7d77263 --- /dev/null +++ b/xinrenxinshi/db/menu_map.json @@ -0,0 +1,225 @@ +{ + "首页": { + "loc": "https://s-demob.xinrenxinshi.show/home/index", + "desc": "HR 登录后的首页驾驶舱,聚合员工概况、待办、OKR、入转调离等关键指标与快捷入口。", + "understanding": "系统门户与导航中枢,使用频率最高;建议做成可配置卡片式仪表盘。", + "single": {"name": "首页", "href": "/home/index"} + }, + "组织": { + "loc": "https://s-demob.xinrenxinshi.show/organization/index", + "desc": "企业组织架构主数据:部门、岗位词典、职级、编制、成本中心与历史归档。", + "understanding": "组织与岗位主数据是权限、审批流、薪酬绩效归属的基础,须优先建设。", + "items": [ + {"name": "组织架构", "href": "/organization/framework", "desc": "部门树的增删改、负责人与汇报关系维护。"}, + {"name": "岗位词典", "href": "/organization/job-dictionary", "desc": "岗位序列/职责/编制标准的字典化管理。"}, + {"name": "职级管理", "href": "/organization/rank-management", "desc": "职级职等体系维护,支撑薪酬带宽与晋升通道。"}, + {"name": "编制管理", "href": "/organization/headcount", "desc": "部门编制数与在编对比、编制预警。"}, + {"name": "成本中心", "href": "/organization/cost-center", "desc": "成本中心设置,用于人力成本归集与分摊。"}, + {"name": "历史归档", "href": "/organization/historical", "desc": "组织架构变更的历史版本归档与回溯。"}, + {"name": "设置", "href": "/organization/setting", "desc": "组织模块相关设置项。"} + ] + }, + "员工": { + "loc": "https://s-demob.xinrenxinshi.show/employee/index", + "desc": "员工全生命周期管理:花名册、合同、入转调离与人事报表。", + "understanding": "HR 系统核心主数据模块,薪酬/考勤/社保均依赖此处员工主数据。", + "items": [ + {"name": "花名册", "href": "/employee/employee-manage/employee-list", "desc": "全体员工核心名册,支持筛选、字段自定义与批量导入导出。"}, + {"name": "合同管理", "href": "/employee/employee-manage/contract", "desc": "劳动合同签订、续签、到期提醒与合同台账。"}, + {"name": "入职", "href": "/employee/serve-manage/entry", "desc": "待入职/入职办理流程,含入职登记与资料收集。"}, + {"name": "转正", "href": "/employee/serve-manage/regular", "desc": "试用期到期提醒与转正申请/审批办理。"}, + {"name": "调动", "href": "/employee/serve-manage/transfer", "desc": "部门/岗位/职级调动等异动记录与审批。"}, + {"name": "离职", "href": "/employee/serve-manage/dismiss", "desc": "离职申请、办理、交接与离职档案。"}, + {"name": "报表", "href": "/employee/reports", "desc": "各类标准人事报表的生成与导出。"}, + {"name": "设置", "href": "/employee/set", "desc": "员工模块字段与流程设置。"} + ] + }, + "考勤": { + "loc": "https://s-demob.xinrenxinshi.show/attendance/index", + "desc": "考勤打卡处理、报表、排班与考勤确认。", + "understanding": "规则复杂度高(排班/加班/假期),是薪酬核算的关键数据来源。", + "items": [ + {"name": "考勤处理", "href": "/attendance/home", "desc": "日常考勤数据处理与异常核对入口。"}, + {"name": "报表", "href": "/attendance/report", "desc": "月考勤/明细等考勤统计报表。"}, + {"name": "排班", "href": "/attendance/scheduling", "desc": "排班表编制与发布,支持轮班。"}, + {"name": "设置", "href": "/attendance/settings-v2", "desc": "考勤规则、打卡方式与分组设置。"}, + {"name": "任务中心", "href": "/attendance/task", "desc": "考勤相关异步任务(导入/导出/核算)进度。"}, + {"name": "考勤确认", "href": "/attendance/confirm", "desc": "月末考勤结果确认锁定,进入薪酬核算。"} + ] + }, + "审批": { + "loc": "https://s-demob.xinrenxinshi.show/approval/index", + "desc": "企业内各类事务的审批流引擎:审批列表、管理、角色与委托。", + "understanding": "贯穿全系统的通用能力,应做成可配置工作流平台。", + "items": [ + {"name": "审批列表", "href": "/approval/list", "desc": "各类审批单据的发起与处理列表。"}, + {"name": "审批管理", "href": "/approval/manage", "desc": "审批流程模板与规则的配置管理。"}, + {"name": "审批角色", "href": "/approval/role", "desc": "审批节点角色与审批人配置。"}, + {"name": "审批委托", "href": "/approval/entrust", "desc": "审批人不在时的委托代理设置。"} + ] + }, + "工资": { + "loc": "https://s-demob.xinrenxinshi.show/payroll/index", + "desc": "薪资档案、工资计算、报表/个税、工资条、预算、分析、奖金与年终奖。", + "understanding": "涉及资金与个税,准确性与权限要求最高;依赖考勤与社保数据。", + "items": [ + {"name": "薪资档案", "href": "/payroll/archives", "desc": "员工薪资档案(基本工资/结构),计薪基础数据。"}, + {"name": "工资计算", "href": "/payroll/activity-report", "desc": "按周期核算工资,支持公式与批量。"}, + {"name": "报表/个税", "href": "/payroll/payroll-report", "desc": "薪酬报表与个税相关统计。"}, + {"name": "工资条", "href": "/payroll/super-pay-slip", "desc": "电子工资条发送与确认。"}, + {"name": "预算管理", "href": "/payroll/budget-making", "desc": "人力成本预算编制与执行。"}, + {"name": "薪酬分析", "href": "/payroll/salary-analysis", "desc": "薪酬多维分析与人力成本洞察。"}, + {"name": "奖金包", "href": "/payroll/bonus-package", "desc": "奖金包设计与分配管理。"}, + {"name": "年终奖", "href": "/payroll/annual-bonus", "desc": "年终奖专项计税计算。"}, + {"name": "设置", "href": "/payroll/payroll-set", "desc": "薪酬结构、计薪规则与权限设置。"} + ] + }, + "社保": { + "loc": "https://s-demob.xinrenxinshi.show/insurance/index", + "desc": "参保档案、社保计算、报表与参保规则设置。", + "understanding": "地区政策差异大;与薪酬个税强相关。", + "items": [ + {"name": "档案", "href": "/insurance/index", "desc": "员工参保档案与参保状态主数据。"}, + {"name": "计算", "href": "/insurance/calculate", "desc": "社保公积金缴费计算。"}, + {"name": "报表", "href": "/insurance/report", "desc": "社保缴纳报表与统计。"}, + {"name": "设置", "href": "/insurance/insurance-set", "desc": "参保方案、基数与比例规则设置。"} + ] + }, + "绩效": { + "loc": "https://s-demob.xinrenxinshi.show/appraisal/index", + "desc": "OKR、绩效/试用期/组织/360 考核、绩效统计与归档。", + "understanding": "考核模板与指标配置复杂;结果可回流薪酬与人事晋升。", + "items": [ + {"name": "OKR", "href": "/appraisal/okr/index", "desc": "目标与关键结果(OKR)管理。"}, + {"name": "绩效考核", "href": "/appraisal/kpi/list", "desc": "发起与管理 KPI 绩效考核方案。"}, + {"name": "试用期考核", "href": "/appraisal/kpi/trial-list", "desc": "试用期专项考核,与转正联动。"}, + {"name": "组织绩效", "href": "/appraisal/kpi/organize-list", "desc": "面向组织/部门的绩效考核。"}, + {"name": "360考核", "href": "/appraisal/appraisal-360", "desc": "多维度 360 度评估考核。"}, + {"name": "绩效统计", "href": "/appraisal/count", "desc": "绩效结果分布与统计分析。"}, + {"name": "历史归档", "href": "/appraisal/archive/archive-list", "desc": "历史考核归档查询。"}, + {"name": "设置", "href": "/appraisal/appraisal-setting", "desc": "指标库、模板与考核流程设置。"} + ] + }, + "招聘": { + "loc": "https://s-demob.xinrenxinshi.show/recruitment/index", + "desc": "候选人、需求、职位、统计、人才库、简历监控的全流程招聘(ATS)。", + "understanding": "可独立成招聘子系统;与人事入职衔接形成招录闭环。", + "items": [ + {"name": "候选人", "href": "/recruitment/list", "desc": "招聘流程中的候选人列表与阶段管理。"}, + {"name": "需求", "href": "/recruitment/demand/list", "desc": "用人部门招聘需求申请与管理。"}, + {"name": "职位", "href": "/recruitment/job-management", "desc": "招聘职位(JD)发布与管理。"}, + {"name": "统计", "href": "/recruitment/new-statistics/index", "desc": "招聘漏斗/周期/渠道效果统计。"}, + {"name": "人才库", "href": "/recruitment/talent-list", "desc": "企业人才储备库,沉淀历史候选人。"}, + {"name": "简历监控", "href": "/recruitment/resume-monitor", "desc": "多渠道简历投递监控。"}, + {"name": "设置", "href": "/recruitment/set-list", "desc": "招聘团队、渠道与模板设置。"} + ] + }, + "合同": { + "loc": "https://s-demob.xinrenxinshi.show/contract/index", + "desc": "对内/对外电子合同签署、合同模版与合同类型设置。", + "understanding": "需对接第三方电子签名平台,具法律效力,替代纸质合同。", + "items": [ + {"name": "对内合同", "href": "/contract/index", "desc": "员工劳动合同等对内合同签署与档案。"}, + {"name": "对外合同", "href": "/contract/other", "desc": "对外商务/服务合同签署管理。"}, + {"name": "合同模版", "href": "/contract/contract-template", "desc": "合同模板管理,标准化签署。"}, + {"name": "设置", "href": "/contract/contract-type", "desc": "合同类型与签署流程设置。"} + ] + }, + "培训": { + "loc": "https://s-demob.xinrenxinshi.show/train/index", + "desc": "线上/线下培训、课程与学习管理。", + "understanding": "偏 LMS 学习管理系统,可作为增值模块,与绩效/晋升联动。", + "single": {"name": "培训", "href": "/train/index"} + }, + "智数": { + "loc": "https://s-demob.xinrenxinshi.show/statistic/index", + "desc": "数据看板、风险/健康诊断、对比洞察与外部数据导入报表。", + "understanding": "BI 可视化能力,聚合各模块指标,服务人力决策。", + "items": [ + {"name": "数据看板", "href": "/statistic/report-analysis", "desc": "人力核心指标的可视化数据看板。"}, + {"name": "风险诊断", "href": "/statistic/risk-diagnosis", "desc": "人力风险(流失/合规等)诊断分析。"}, + {"name": "健康诊断", "href": "/statistic/efficiecy-report", "desc": "组织人效健康度诊断报告。"}, + {"name": "对比洞察", "href": "/statistic/metric-contrast", "desc": "跨维度指标对比洞察。"}, + {"name": "导入报表", "href": "/statistic/external-data-import/list", "desc": "外部数据导入并生成报表。"} + ] + }, + "人才": { + "loc": "https://s-demob.xinrenxinshi.show/talents/index", + "desc": "人才档案、人才盘点与人才评估。", + "understanding": "服务人才发展与继任规划,与绩效/招聘数据打通。", + "items": [ + {"name": "人才档案", "href": "/talents/talents-archives", "desc": "员工人才发展档案(能力/潜力/履历)。"}, + {"name": "人才盘点", "href": "/talents/talents-inventory", "desc": "九宫格等人才盘点工具。"}, + {"name": "人才评估", "href": "/talents/evaluation-list", "desc": "人才测评与评估任务管理。"} + ] + }, + "公告": { + "loc": "https://s-demob.xinrenxinshi.show/notice/index", + "desc": "企业公告发布与阅读管理。", + "understanding": "全员触达的行政通知能力。", + "single": {"name": "公告", "href": "/notice/index"} + }, + "对接": { + "loc": "https://s-demob.xinrenxinshi.show/parrot/index", + "desc": "第三方对接管理、对接服务与工单中心。", + "understanding": "集成能力,实现与外部平台的组织同步/消息/服务对接。", + "items": [ + {"name": "对接管理", "href": "/parrot/index", "desc": "已配置的第三方对接管理。"}, + {"name": "对接服务", "href": "/parrot/connect-service", "desc": "可开通的对接服务目录。"}, + {"name": "工单中心", "href": "/parrot/order-center", "desc": "对接相关工单与服务请求。"} + ] + }, + "商城": { + "loc": "https://s-demob.xinrenxinshi.show/shop/index", + "desc": "SaaS 服务、对接服务、微服务与灵域空间的应用商城。", + "understanding": "增值服务采购入口,扩展系统能力。", + "items": [ + {"name": "SaaS服务", "href": "/shop/index?categoryCode=0", "desc": "SaaS 类增值服务采购。"}, + {"name": "对接服务", "href": "/shop/index?categoryCode=2", "desc": "第三方对接类服务采购。"}, + {"name": "微服务", "href": "/shop/index?categoryCode=1", "desc": "微服务/小工具采购。"}, + {"name": "灵域空间", "href": "/shop/index?categoryCode=100", "desc": "灵域空间增值服务专区。"} + ] + }, + "计算平台": { + "loc": "https://s-demob.xinrenxinshi.show/platform/index", + "desc": "计算方案、模板库与计算平台设置。", + "understanding": "薪酬/指标等复杂计算的可配置引擎平台。", + "items": [ + {"name": "计算方案", "href": "/platform/index", "desc": "自定义计算方案的编排与管理。"}, + {"name": "模板库", "href": "/platform/prototype", "desc": "计算方案模板库,快速套用。"}, + {"name": "设置", "href": "/platform/setting", "desc": "计算平台参数与权限设置。"} + ] + }, + "设置": { + "loc": "https://s-demob.xinrenxinshi.show/company-set/index", + "desc": "公司信息、合同主体、权限、品牌、语言、安全、员工端、薪豆与薪灵 AI 设置。", + "understanding": "系统级配置中心,管理企业主体与全局参数。", + "items": [ + {"name": "公司信息", "href": "/company-set/index", "desc": "企业基础信息维护。"}, + {"name": "合同主体", "href": "/company-set/index?tab=subject", "desc": "多签约主体(合同公司)管理。"}, + {"name": "权限设置", "href": "/company-set/index?tab=auth", "desc": "角色与数据权限配置。"}, + {"name": "品牌设置", "href": "/company-set/index?tab=brand", "desc": "企业品牌/主题定制。"}, + {"name": "语言设置", "href": "/company-set/index?tab=language", "desc": "多语言配置。"}, + {"name": "安全设置", "href": "/company-set/index?tab=security", "desc": "登录/数据安全策略。"}, + {"name": "员工端设置", "href": "/company-set/index?tab=employee", "desc": "员工自助端功能开关。"}, + {"name": "薪豆中心", "href": "/company-set/index?tab=xindou", "desc": "薪豆(积分/额度)中心。"}, + {"name": "薪灵", "href": "/company-set/index?tab=ai-assistant", "desc": "薪灵 AI 助手设置。"} + ] + }, + "我的": { + "loc": "https://s-demob.xinrenxinshi.show/staff/", + "desc": "员工自助端:审批、招聘、OKR、绩效、电子合同、工资条、考勤确认、项目、培训。", + "understanding": "面向普通员工的自助门户,与 HR 管理端数据共享。", + "items": [ + {"name": "我的审批", "href": "/staff/approve/list", "desc": "员工发起/待办的审批。"}, + {"name": "我的招聘", "href": "/staff/recruitment/list", "desc": "员工作为面试官/内推的招聘事项。"}, + {"name": "我的OKR", "href": "/staff/performance/okr", "desc": "员工个人 OKR。"}, + {"name": "我的绩效", "href": "/staff/performance/kpi", "desc": "员工个人绩效考核。"}, + {"name": "我的电子合同", "href": "/staff/contract/list", "desc": "员工待签/已签电子合同。"}, + {"name": "我的工资条", "href": "/staff/payroll/payroll-detail", "desc": "员工工资条查看与确认。"}, + {"name": "我的考勤确认", "href": "/staff/attendance/attendance-detail", "desc": "员工考勤明细确认。"}, + {"name": "我的项目管理", "href": "/staff/project-manage/index", "desc": "员工参与的项目工时管理。"}, + {"name": "我的培训", "href": "/staff/train/index", "desc": "员工个人培训与学习。"} + ] + } +} diff --git a/xinrenxinshi/db/pending.json b/xinrenxinshi/db/pending.json new file mode 100644 index 0000000..770c39e --- /dev/null +++ b/xinrenxinshi/db/pending.json @@ -0,0 +1,645 @@ +{ + "count": 80, + "pages": [ + { + "name": "花名册", + "full_path": "员工 / 花名册", + "url": "https://s-demob.xinrenxinshi.show/employee/employee-manage/employee-list", + "rel": "screenshots/03_员工/01_花名册.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/01_花名册.jpg", + "exists": false + }, + { + "name": "审批列表", + "full_path": "审批 / 审批列表", + "url": "https://s-demob.xinrenxinshi.show/approval/list", + "rel": "screenshots/05_审批/01_审批列表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/05_审批/01_审批列表.jpg", + "exists": false + }, + { + "name": "薪资档案", + "full_path": "工资 / 薪资档案", + "url": "https://s-demob.xinrenxinshi.show/payroll/archives", + "rel": "screenshots/06_工资/01_薪资档案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/01_薪资档案.jpg", + "exists": false + }, + { + "name": "档案", + "full_path": "社保 / 档案", + "url": "https://s-demob.xinrenxinshi.show/insurance/index", + "rel": "screenshots/07_社保/01_档案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/01_档案.jpg", + "exists": false + }, + { + "name": "OKR", + "full_path": "绩效 / OKR", + "url": "https://s-demob.xinrenxinshi.show/appraisal/okr/index", + "rel": "screenshots/08_绩效/01_OKR.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/01_OKR.jpg", + "exists": false + }, + { + "name": "候选人", + "full_path": "招聘 / 候选人", + "url": "https://s-demob.xinrenxinshi.show/recruitment/list", + "rel": "screenshots/09_招聘/01_候选人.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/01_候选人.jpg", + "exists": false + }, + { + "name": "对内合同", + "full_path": "合同 / 对内合同", + "url": "https://s-demob.xinrenxinshi.show/contract/index", + "rel": "screenshots/10_合同/01_对内合同.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/01_对内合同.jpg", + "exists": false + }, + { + "name": "培训", + "full_path": "培训 / 培训", + "url": "https://s-demob.xinrenxinshi.show/train/index", + "rel": "screenshots/11_培训/培训.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/11_培训/培训.jpg", + "exists": false + }, + { + "name": "数据看板", + "full_path": "智数 / 数据看板", + "url": "https://s-demob.xinrenxinshi.show/statistic/report-analysis", + "rel": "screenshots/12_智数/01_数据看板.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/01_数据看板.jpg", + "exists": false + }, + { + "name": "人才档案", + "full_path": "人才 / 人才档案", + "url": "https://s-demob.xinrenxinshi.show/talents/talents-archives", + "rel": "screenshots/13_人才/01_人才档案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/13_人才/01_人才档案.jpg", + "exists": false + }, + { + "name": "公告", + "full_path": "公告 / 公告", + "url": "https://s-demob.xinrenxinshi.show/notice/index", + "rel": "screenshots/14_公告/公告.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/14_公告/公告.jpg", + "exists": false + }, + { + "name": "对接管理", + "full_path": "对接 / 对接管理", + "url": "https://s-demob.xinrenxinshi.show/parrot/index", + "rel": "screenshots/15_对接/01_对接管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/15_对接/01_对接管理.jpg", + "exists": false + }, + { + "name": "SaaS服务", + "full_path": "商城 / SaaS服务", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=0", + "rel": "screenshots/16_商城/01_SaaS服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/01_SaaS服务.jpg", + "exists": false + }, + { + "name": "计算方案", + "full_path": "计算平台 / 计算方案", + "url": "https://s-demob.xinrenxinshi.show/platform/index", + "rel": "screenshots/17_计算平台/01_计算方案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/17_计算平台/01_计算方案.jpg", + "exists": false + }, + { + "name": "公司信息", + "full_path": "设置 / 公司信息", + "url": "https://s-demob.xinrenxinshi.show/company-set/index", + "rel": "screenshots/18_设置/01_公司信息.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/01_公司信息.jpg", + "exists": false + }, + { + "name": "我的审批", + "full_path": "我的 / 我的审批", + "url": "https://s-demob.xinrenxinshi.show/staff/approve/list", + "rel": "screenshots/19_我的/01_我的审批.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/01_我的审批.jpg", + "exists": false + }, + { + "name": "合同管理", + "full_path": "员工 / 合同管理", + "url": "https://s-demob.xinrenxinshi.show/employee/employee-manage/contract", + "rel": "screenshots/03_员工/02_合同管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/02_合同管理.jpg", + "exists": false + }, + { + "name": "审批管理", + "full_path": "审批 / 审批管理", + "url": "https://s-demob.xinrenxinshi.show/approval/manage", + "rel": "screenshots/05_审批/02_审批管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/05_审批/02_审批管理.jpg", + "exists": false + }, + { + "name": "工资计算", + "full_path": "工资 / 工资计算", + "url": "https://s-demob.xinrenxinshi.show/payroll/activity-report", + "rel": "screenshots/06_工资/02_工资计算.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/02_工资计算.jpg", + "exists": false + }, + { + "name": "计算", + "full_path": "社保 / 计算", + "url": "https://s-demob.xinrenxinshi.show/insurance/calculate", + "rel": "screenshots/07_社保/02_计算.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/02_计算.jpg", + "exists": false + }, + { + "name": "绩效考核", + "full_path": "绩效 / 绩效考核", + "url": "https://s-demob.xinrenxinshi.show/appraisal/kpi/list", + "rel": "screenshots/08_绩效/02_绩效考核.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/02_绩效考核.jpg", + "exists": false + }, + { + "name": "需求", + "full_path": "招聘 / 需求", + "url": "https://s-demob.xinrenxinshi.show/recruitment/demand/list", + "rel": "screenshots/09_招聘/02_需求.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/02_需求.jpg", + "exists": false + }, + { + "name": "对外合同", + "full_path": "合同 / 对外合同", + "url": "https://s-demob.xinrenxinshi.show/contract/other", + "rel": "screenshots/10_合同/02_对外合同.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/02_对外合同.jpg", + "exists": false + }, + { + "name": "风险诊断", + "full_path": "智数 / 风险诊断", + "url": "https://s-demob.xinrenxinshi.show/statistic/risk-diagnosis", + "rel": "screenshots/12_智数/02_风险诊断.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/02_风险诊断.jpg", + "exists": false + }, + { + "name": "人才盘点", + "full_path": "人才 / 人才盘点", + "url": "https://s-demob.xinrenxinshi.show/talents/talents-inventory", + "rel": "screenshots/13_人才/02_人才盘点.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/13_人才/02_人才盘点.jpg", + "exists": false + }, + { + "name": "对接服务", + "full_path": "对接 / 对接服务", + "url": "https://s-demob.xinrenxinshi.show/parrot/connect-service", + "rel": "screenshots/15_对接/02_对接服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/15_对接/02_对接服务.jpg", + "exists": false + }, + { + "name": "对接服务", + "full_path": "商城 / 对接服务", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=2", + "rel": "screenshots/16_商城/02_对接服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/02_对接服务.jpg", + "exists": false + }, + { + "name": "模板库", + "full_path": "计算平台 / 模板库", + "url": "https://s-demob.xinrenxinshi.show/platform/prototype", + "rel": "screenshots/17_计算平台/02_模板库.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/17_计算平台/02_模板库.jpg", + "exists": false + }, + { + "name": "合同主体", + "full_path": "设置 / 合同主体", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=subject", + "rel": "screenshots/18_设置/02_合同主体.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/02_合同主体.jpg", + "exists": false + }, + { + "name": "我的招聘", + "full_path": "我的 / 我的招聘", + "url": "https://s-demob.xinrenxinshi.show/staff/recruitment/list", + "rel": "screenshots/19_我的/02_我的招聘.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/02_我的招聘.jpg", + "exists": false + }, + { + "name": "职级管理", + "full_path": "组织 / 职级管理", + "url": "https://s-demob.xinrenxinshi.show/organization/rank-management", + "rel": "screenshots/02_组织/03_职级管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/03_职级管理.jpg", + "exists": false + }, + { + "name": "报表/个税", + "full_path": "工资 / 报表/个税", + "url": "https://s-demob.xinrenxinshi.show/payroll/payroll-report", + "rel": "screenshots/06_工资/03_报表_个税.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/03_报表_个税.jpg", + "exists": false + }, + { + "name": "报表", + "full_path": "社保 / 报表", + "url": "https://s-demob.xinrenxinshi.show/insurance/report", + "rel": "screenshots/07_社保/03_报表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/03_报表.jpg", + "exists": false + }, + { + "name": "试用期考核", + "full_path": "绩效 / 试用期考核", + "url": "https://s-demob.xinrenxinshi.show/appraisal/kpi/trial-list", + "rel": "screenshots/08_绩效/03_试用期考核.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/03_试用期考核.jpg", + "exists": false + }, + { + "name": "职位", + "full_path": "招聘 / 职位", + "url": "https://s-demob.xinrenxinshi.show/recruitment/job-management", + "rel": "screenshots/09_招聘/03_职位.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/03_职位.jpg", + "exists": false + }, + { + "name": "合同模版", + "full_path": "合同 / 合同模版", + "url": "https://s-demob.xinrenxinshi.show/contract/contract-template", + "rel": "screenshots/10_合同/03_合同模版.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/03_合同模版.jpg", + "exists": false + }, + { + "name": "健康诊断", + "full_path": "智数 / 健康诊断", + "url": "https://s-demob.xinrenxinshi.show/statistic/efficiecy-report", + "rel": "screenshots/12_智数/03_健康诊断.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/03_健康诊断.jpg", + "exists": false + }, + { + "name": "人才评估", + "full_path": "人才 / 人才评估", + "url": "https://s-demob.xinrenxinshi.show/talents/evaluation-list", + "rel": "screenshots/13_人才/03_人才评估.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/13_人才/03_人才评估.jpg", + "exists": false + }, + { + "name": "工单中心", + "full_path": "对接 / 工单中心", + "url": "https://s-demob.xinrenxinshi.show/parrot/order-center", + "rel": "screenshots/15_对接/03_工单中心.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/15_对接/03_工单中心.jpg", + "exists": false + }, + { + "name": "微服务", + "full_path": "商城 / 微服务", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=1", + "rel": "screenshots/16_商城/03_微服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/03_微服务.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "计算平台 / 设置", + "url": "https://s-demob.xinrenxinshi.show/platform/setting", + "rel": "screenshots/17_计算平台/03_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/17_计算平台/03_设置.jpg", + "exists": false + }, + { + "name": "权限设置", + "full_path": "设置 / 权限设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=auth", + "rel": "screenshots/18_设置/03_权限设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/03_权限设置.jpg", + "exists": false + }, + { + "name": "我的OKR", + "full_path": "我的 / 我的OKR", + "url": "https://s-demob.xinrenxinshi.show/staff/performance/okr", + "rel": "screenshots/19_我的/03_我的OKR.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/03_我的OKR.jpg", + "exists": false + }, + { + "name": "编制管理", + "full_path": "组织 / 编制管理", + "url": "https://s-demob.xinrenxinshi.show/organization/headcount", + "rel": "screenshots/02_组织/04_编制管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/04_编制管理.jpg", + "exists": false + }, + { + "name": "工资条", + "full_path": "工资 / 工资条", + "url": "https://s-demob.xinrenxinshi.show/payroll/super-pay-slip", + "rel": "screenshots/06_工资/04_工资条.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/04_工资条.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "社保 / 设置", + "url": "https://s-demob.xinrenxinshi.show/insurance/insurance-set", + "rel": "screenshots/07_社保/04_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/04_设置.jpg", + "exists": false + }, + { + "name": "组织绩效", + "full_path": "绩效 / 组织绩效", + "url": "https://s-demob.xinrenxinshi.show/appraisal/kpi/organize-list", + "rel": "screenshots/08_绩效/04_组织绩效.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/04_组织绩效.jpg", + "exists": false + }, + { + "name": "统计", + "full_path": "招聘 / 统计", + "url": "https://s-demob.xinrenxinshi.show/recruitment/new-statistics/index", + "rel": "screenshots/09_招聘/04_统计.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/04_统计.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "合同 / 设置", + "url": "https://s-demob.xinrenxinshi.show/contract/contract-type", + "rel": "screenshots/10_合同/04_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/04_设置.jpg", + "exists": false + }, + { + "name": "对比洞察", + "full_path": "智数 / 对比洞察", + "url": "https://s-demob.xinrenxinshi.show/statistic/metric-contrast", + "rel": "screenshots/12_智数/04_对比洞察.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/04_对比洞察.jpg", + "exists": false + }, + { + "name": "灵域空间", + "full_path": "商城 / 灵域空间", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=100", + "rel": "screenshots/16_商城/04_灵域空间.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/04_灵域空间.jpg", + "exists": false + }, + { + "name": "品牌设置", + "full_path": "设置 / 品牌设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=brand", + "rel": "screenshots/18_设置/04_品牌设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/04_品牌设置.jpg", + "exists": false + }, + { + "name": "我的绩效", + "full_path": "我的 / 我的绩效", + "url": "https://s-demob.xinrenxinshi.show/staff/performance/kpi", + "rel": "screenshots/19_我的/04_我的绩效.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/04_我的绩效.jpg", + "exists": false + }, + { + "name": "成本中心", + "full_path": "组织 / 成本中心", + "url": "https://s-demob.xinrenxinshi.show/organization/cost-center", + "rel": "screenshots/02_组织/05_成本中心.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/05_成本中心.jpg", + "exists": false + }, + { + "name": "调动", + "full_path": "员工 / 调动", + "url": "https://s-demob.xinrenxinshi.show/employee/serve-manage/transfer", + "rel": "screenshots/03_员工/05_调动.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/05_调动.jpg", + "exists": false + }, + { + "name": "预算管理", + "full_path": "工资 / 预算管理", + "url": "https://s-demob.xinrenxinshi.show/payroll/budget-making", + "rel": "screenshots/06_工资/05_预算管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/05_预算管理.jpg", + "exists": false + }, + { + "name": "360考核", + "full_path": "绩效 / 360考核", + "url": "https://s-demob.xinrenxinshi.show/appraisal/appraisal-360", + "rel": "screenshots/08_绩效/05_360考核.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/05_360考核.jpg", + "exists": false + }, + { + "name": "人才库", + "full_path": "招聘 / 人才库", + "url": "https://s-demob.xinrenxinshi.show/recruitment/talent-list", + "rel": "screenshots/09_招聘/05_人才库.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/05_人才库.jpg", + "exists": false + }, + { + "name": "导入报表", + "full_path": "智数 / 导入报表", + "url": "https://s-demob.xinrenxinshi.show/statistic/external-data-import/list", + "rel": "screenshots/12_智数/05_导入报表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/05_导入报表.jpg", + "exists": false + }, + { + "name": "语言设置", + "full_path": "设置 / 语言设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=language", + "rel": "screenshots/18_设置/05_语言设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/05_语言设置.jpg", + "exists": false + }, + { + "name": "我的电子合同", + "full_path": "我的 / 我的电子合同", + "url": "https://s-demob.xinrenxinshi.show/staff/contract/list", + "rel": "screenshots/19_我的/05_我的电子合同.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/05_我的电子合同.jpg", + "exists": false + }, + { + "name": "薪酬分析", + "full_path": "工资 / 薪酬分析", + "url": "https://s-demob.xinrenxinshi.show/payroll/salary-analysis", + "rel": "screenshots/06_工资/06_薪酬分析.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/06_薪酬分析.jpg", + "exists": false + }, + { + "name": "绩效统计", + "full_path": "绩效 / 绩效统计", + "url": "https://s-demob.xinrenxinshi.show/appraisal/count", + "rel": "screenshots/08_绩效/06_绩效统计.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/06_绩效统计.jpg", + "exists": false + }, + { + "name": "简历监控", + "full_path": "招聘 / 简历监控", + "url": "https://s-demob.xinrenxinshi.show/recruitment/resume-monitor", + "rel": "screenshots/09_招聘/06_简历监控.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/06_简历监控.jpg", + "exists": false + }, + { + "name": "安全设置", + "full_path": "设置 / 安全设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=security", + "rel": "screenshots/18_设置/06_安全设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/06_安全设置.jpg", + "exists": false + }, + { + "name": "我的工资条", + "full_path": "我的 / 我的工资条", + "url": "https://s-demob.xinrenxinshi.show/staff/payroll/payroll-detail", + "rel": "screenshots/19_我的/06_我的工资条.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/06_我的工资条.jpg", + "exists": false + }, + { + "name": "报表", + "full_path": "员工 / 报表", + "url": "https://s-demob.xinrenxinshi.show/employee/reports", + "rel": "screenshots/03_员工/07_报表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/07_报表.jpg", + "exists": false + }, + { + "name": "奖金包", + "full_path": "工资 / 奖金包", + "url": "https://s-demob.xinrenxinshi.show/payroll/bonus-package", + "rel": "screenshots/06_工资/07_奖金包.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/07_奖金包.jpg", + "exists": false + }, + { + "name": "历史归档", + "full_path": "绩效 / 历史归档", + "url": "https://s-demob.xinrenxinshi.show/appraisal/archive/archive-list", + "rel": "screenshots/08_绩效/07_历史归档.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/07_历史归档.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "招聘 / 设置", + "url": "https://s-demob.xinrenxinshi.show/recruitment/set-list", + "rel": "screenshots/09_招聘/07_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/07_设置.jpg", + "exists": false + }, + { + "name": "员工端设置", + "full_path": "设置 / 员工端设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=employee", + "rel": "screenshots/18_设置/07_员工端设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/07_员工端设置.jpg", + "exists": false + }, + { + "name": "我的考勤确认", + "full_path": "我的 / 我的考勤确认", + "url": "https://s-demob.xinrenxinshi.show/staff/attendance/attendance-detail", + "rel": "screenshots/19_我的/07_我的考勤确认.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/07_我的考勤确认.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "员工 / 设置", + "url": "https://s-demob.xinrenxinshi.show/employee/set", + "rel": "screenshots/03_员工/08_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/08_设置.jpg", + "exists": false + }, + { + "name": "年终奖", + "full_path": "工资 / 年终奖", + "url": "https://s-demob.xinrenxinshi.show/payroll/annual-bonus", + "rel": "screenshots/06_工资/08_年终奖.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/08_年终奖.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "绩效 / 设置", + "url": "https://s-demob.xinrenxinshi.show/appraisal/appraisal-setting", + "rel": "screenshots/08_绩效/08_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/08_设置.jpg", + "exists": false + }, + { + "name": "薪豆中心", + "full_path": "设置 / 薪豆中心", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=xindou", + "rel": "screenshots/18_设置/08_薪豆中心.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/08_薪豆中心.jpg", + "exists": false + }, + { + "name": "我的项目管理", + "full_path": "我的 / 我的项目管理", + "url": "https://s-demob.xinrenxinshi.show/staff/project-manage/index", + "rel": "screenshots/19_我的/08_我的项目管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/08_我的项目管理.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "工资 / 设置", + "url": "https://s-demob.xinrenxinshi.show/payroll/payroll-set", + "rel": "screenshots/06_工资/09_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/09_设置.jpg", + "exists": false + }, + { + "name": "薪灵", + "full_path": "设置 / 薪灵", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=ai-assistant", + "rel": "screenshots/18_设置/09_薪灵.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/09_薪灵.jpg", + "exists": false + }, + { + "name": "我的培训", + "full_path": "我的 / 我的培训", + "url": "https://s-demob.xinrenxinshi.show/staff/train/index", + "rel": "screenshots/19_我的/09_我的培训.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/09_我的培训.jpg", + "exists": false + } + ] +} diff --git a/xinrenxinshi/db/research.db b/xinrenxinshi/db/research.db new file mode 100644 index 0000000..971b42a Binary files /dev/null and b/xinrenxinshi/db/research.db differ diff --git a/xinrenxinshi/db/shot_queue.json b/xinrenxinshi/db/shot_queue.json new file mode 100644 index 0000000..269884d --- /dev/null +++ b/xinrenxinshi/db/shot_queue.json @@ -0,0 +1,773 @@ +{ + "count": 96, + "pages": [ + { + "name": "首页", + "full_path": "首页 / 首页", + "url": "https://s-demob.xinrenxinshi.show/home/index", + "rel": "screenshots/01_首页/首页.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/01_首页/首页.jpg", + "exists": true + }, + { + "name": "组织架构", + "full_path": "组织 / 组织架构", + "url": "https://s-demob.xinrenxinshi.show/organization/framework", + "rel": "screenshots/02_组织/01_组织架构.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/01_组织架构.jpg", + "exists": false + }, + { + "name": "花名册", + "full_path": "员工 / 花名册", + "url": "https://s-demob.xinrenxinshi.show/employee/employee-manage/employee-list", + "rel": "screenshots/03_员工/01_花名册.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/01_花名册.jpg", + "exists": false + }, + { + "name": "考勤处理", + "full_path": "考勤 / 考勤处理", + "url": "https://s-demob.xinrenxinshi.show/attendance/home", + "rel": "screenshots/04_考勤/01_考勤处理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/04_考勤/01_考勤处理.jpg", + "exists": false + }, + { + "name": "审批列表", + "full_path": "审批 / 审批列表", + "url": "https://s-demob.xinrenxinshi.show/approval/list", + "rel": "screenshots/05_审批/01_审批列表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/05_审批/01_审批列表.jpg", + "exists": false + }, + { + "name": "薪资档案", + "full_path": "工资 / 薪资档案", + "url": "https://s-demob.xinrenxinshi.show/payroll/archives", + "rel": "screenshots/06_工资/01_薪资档案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/01_薪资档案.jpg", + "exists": false + }, + { + "name": "档案", + "full_path": "社保 / 档案", + "url": "https://s-demob.xinrenxinshi.show/insurance/index", + "rel": "screenshots/07_社保/01_档案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/01_档案.jpg", + "exists": false + }, + { + "name": "OKR", + "full_path": "绩效 / OKR", + "url": "https://s-demob.xinrenxinshi.show/appraisal/okr/index", + "rel": "screenshots/08_绩效/01_OKR.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/01_OKR.jpg", + "exists": false + }, + { + "name": "候选人", + "full_path": "招聘 / 候选人", + "url": "https://s-demob.xinrenxinshi.show/recruitment/list", + "rel": "screenshots/09_招聘/01_候选人.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/01_候选人.jpg", + "exists": false + }, + { + "name": "对内合同", + "full_path": "合同 / 对内合同", + "url": "https://s-demob.xinrenxinshi.show/contract/index", + "rel": "screenshots/10_合同/01_对内合同.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/01_对内合同.jpg", + "exists": false + }, + { + "name": "培训", + "full_path": "培训 / 培训", + "url": "https://s-demob.xinrenxinshi.show/train/index", + "rel": "screenshots/11_培训/培训.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/11_培训/培训.jpg", + "exists": false + }, + { + "name": "数据看板", + "full_path": "智数 / 数据看板", + "url": "https://s-demob.xinrenxinshi.show/statistic/report-analysis", + "rel": "screenshots/12_智数/01_数据看板.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/01_数据看板.jpg", + "exists": false + }, + { + "name": "人才档案", + "full_path": "人才 / 人才档案", + "url": "https://s-demob.xinrenxinshi.show/talents/talents-archives", + "rel": "screenshots/13_人才/01_人才档案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/13_人才/01_人才档案.jpg", + "exists": false + }, + { + "name": "公告", + "full_path": "公告 / 公告", + "url": "https://s-demob.xinrenxinshi.show/notice/index", + "rel": "screenshots/14_公告/公告.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/14_公告/公告.jpg", + "exists": false + }, + { + "name": "对接管理", + "full_path": "对接 / 对接管理", + "url": "https://s-demob.xinrenxinshi.show/parrot/index", + "rel": "screenshots/15_对接/01_对接管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/15_对接/01_对接管理.jpg", + "exists": false + }, + { + "name": "SaaS服务", + "full_path": "商城 / SaaS服务", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=0", + "rel": "screenshots/16_商城/01_SaaS服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/01_SaaS服务.jpg", + "exists": false + }, + { + "name": "计算方案", + "full_path": "计算平台 / 计算方案", + "url": "https://s-demob.xinrenxinshi.show/platform/index", + "rel": "screenshots/17_计算平台/01_计算方案.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/17_计算平台/01_计算方案.jpg", + "exists": false + }, + { + "name": "公司信息", + "full_path": "设置 / 公司信息", + "url": "https://s-demob.xinrenxinshi.show/company-set/index", + "rel": "screenshots/18_设置/01_公司信息.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/01_公司信息.jpg", + "exists": false + }, + { + "name": "我的审批", + "full_path": "我的 / 我的审批", + "url": "https://s-demob.xinrenxinshi.show/staff/approve/list", + "rel": "screenshots/19_我的/01_我的审批.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/01_我的审批.jpg", + "exists": false + }, + { + "name": "岗位词典", + "full_path": "组织 / 岗位词典", + "url": "https://s-demob.xinrenxinshi.show/organization/job-dictionary", + "rel": "screenshots/02_组织/02_岗位词典.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/02_岗位词典.jpg", + "exists": false + }, + { + "name": "合同管理", + "full_path": "员工 / 合同管理", + "url": "https://s-demob.xinrenxinshi.show/employee/employee-manage/contract", + "rel": "screenshots/03_员工/02_合同管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/02_合同管理.jpg", + "exists": false + }, + { + "name": "报表", + "full_path": "考勤 / 报表", + "url": "https://s-demob.xinrenxinshi.show/attendance/report", + "rel": "screenshots/04_考勤/02_报表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/04_考勤/02_报表.jpg", + "exists": false + }, + { + "name": "审批管理", + "full_path": "审批 / 审批管理", + "url": "https://s-demob.xinrenxinshi.show/approval/manage", + "rel": "screenshots/05_审批/02_审批管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/05_审批/02_审批管理.jpg", + "exists": false + }, + { + "name": "工资计算", + "full_path": "工资 / 工资计算", + "url": "https://s-demob.xinrenxinshi.show/payroll/activity-report", + "rel": "screenshots/06_工资/02_工资计算.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/02_工资计算.jpg", + "exists": false + }, + { + "name": "计算", + "full_path": "社保 / 计算", + "url": "https://s-demob.xinrenxinshi.show/insurance/calculate", + "rel": "screenshots/07_社保/02_计算.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/02_计算.jpg", + "exists": false + }, + { + "name": "绩效考核", + "full_path": "绩效 / 绩效考核", + "url": "https://s-demob.xinrenxinshi.show/appraisal/kpi/list", + "rel": "screenshots/08_绩效/02_绩效考核.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/02_绩效考核.jpg", + "exists": false + }, + { + "name": "需求", + "full_path": "招聘 / 需求", + "url": "https://s-demob.xinrenxinshi.show/recruitment/demand/list", + "rel": "screenshots/09_招聘/02_需求.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/02_需求.jpg", + "exists": false + }, + { + "name": "对外合同", + "full_path": "合同 / 对外合同", + "url": "https://s-demob.xinrenxinshi.show/contract/other", + "rel": "screenshots/10_合同/02_对外合同.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/02_对外合同.jpg", + "exists": false + }, + { + "name": "风险诊断", + "full_path": "智数 / 风险诊断", + "url": "https://s-demob.xinrenxinshi.show/statistic/risk-diagnosis", + "rel": "screenshots/12_智数/02_风险诊断.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/02_风险诊断.jpg", + "exists": false + }, + { + "name": "人才盘点", + "full_path": "人才 / 人才盘点", + "url": "https://s-demob.xinrenxinshi.show/talents/talents-inventory", + "rel": "screenshots/13_人才/02_人才盘点.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/13_人才/02_人才盘点.jpg", + "exists": false + }, + { + "name": "对接服务", + "full_path": "对接 / 对接服务", + "url": "https://s-demob.xinrenxinshi.show/parrot/connect-service", + "rel": "screenshots/15_对接/02_对接服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/15_对接/02_对接服务.jpg", + "exists": false + }, + { + "name": "对接服务", + "full_path": "商城 / 对接服务", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=2", + "rel": "screenshots/16_商城/02_对接服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/02_对接服务.jpg", + "exists": false + }, + { + "name": "模板库", + "full_path": "计算平台 / 模板库", + "url": "https://s-demob.xinrenxinshi.show/platform/prototype", + "rel": "screenshots/17_计算平台/02_模板库.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/17_计算平台/02_模板库.jpg", + "exists": false + }, + { + "name": "合同主体", + "full_path": "设置 / 合同主体", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=subject", + "rel": "screenshots/18_设置/02_合同主体.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/02_合同主体.jpg", + "exists": false + }, + { + "name": "我的招聘", + "full_path": "我的 / 我的招聘", + "url": "https://s-demob.xinrenxinshi.show/staff/recruitment/list", + "rel": "screenshots/19_我的/02_我的招聘.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/02_我的招聘.jpg", + "exists": false + }, + { + "name": "职级管理", + "full_path": "组织 / 职级管理", + "url": "https://s-demob.xinrenxinshi.show/organization/rank-management", + "rel": "screenshots/02_组织/03_职级管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/03_职级管理.jpg", + "exists": false + }, + { + "name": "入职", + "full_path": "员工 / 入职", + "url": "https://s-demob.xinrenxinshi.show/employee/serve-manage/entry", + "rel": "screenshots/03_员工/03_入职.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/03_入职.jpg", + "exists": false + }, + { + "name": "排班", + "full_path": "考勤 / 排班", + "url": "https://s-demob.xinrenxinshi.show/attendance/scheduling", + "rel": "screenshots/04_考勤/03_排班.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/04_考勤/03_排班.jpg", + "exists": false + }, + { + "name": "审批角色", + "full_path": "审批 / 审批角色", + "url": "https://s-demob.xinrenxinshi.show/approval/role", + "rel": "screenshots/05_审批/03_审批角色.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/05_审批/03_审批角色.jpg", + "exists": false + }, + { + "name": "报表/个税", + "full_path": "工资 / 报表/个税", + "url": "https://s-demob.xinrenxinshi.show/payroll/payroll-report", + "rel": "screenshots/06_工资/03_报表_个税.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/03_报表_个税.jpg", + "exists": false + }, + { + "name": "报表", + "full_path": "社保 / 报表", + "url": "https://s-demob.xinrenxinshi.show/insurance/report", + "rel": "screenshots/07_社保/03_报表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/03_报表.jpg", + "exists": false + }, + { + "name": "试用期考核", + "full_path": "绩效 / 试用期考核", + "url": "https://s-demob.xinrenxinshi.show/appraisal/kpi/trial-list", + "rel": "screenshots/08_绩效/03_试用期考核.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/03_试用期考核.jpg", + "exists": false + }, + { + "name": "职位", + "full_path": "招聘 / 职位", + "url": "https://s-demob.xinrenxinshi.show/recruitment/job-management", + "rel": "screenshots/09_招聘/03_职位.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/03_职位.jpg", + "exists": false + }, + { + "name": "合同模版", + "full_path": "合同 / 合同模版", + "url": "https://s-demob.xinrenxinshi.show/contract/contract-template", + "rel": "screenshots/10_合同/03_合同模版.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/03_合同模版.jpg", + "exists": false + }, + { + "name": "健康诊断", + "full_path": "智数 / 健康诊断", + "url": "https://s-demob.xinrenxinshi.show/statistic/efficiecy-report", + "rel": "screenshots/12_智数/03_健康诊断.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/03_健康诊断.jpg", + "exists": false + }, + { + "name": "人才评估", + "full_path": "人才 / 人才评估", + "url": "https://s-demob.xinrenxinshi.show/talents/evaluation-list", + "rel": "screenshots/13_人才/03_人才评估.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/13_人才/03_人才评估.jpg", + "exists": false + }, + { + "name": "工单中心", + "full_path": "对接 / 工单中心", + "url": "https://s-demob.xinrenxinshi.show/parrot/order-center", + "rel": "screenshots/15_对接/03_工单中心.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/15_对接/03_工单中心.jpg", + "exists": false + }, + { + "name": "微服务", + "full_path": "商城 / 微服务", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=1", + "rel": "screenshots/16_商城/03_微服务.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/03_微服务.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "计算平台 / 设置", + "url": "https://s-demob.xinrenxinshi.show/platform/setting", + "rel": "screenshots/17_计算平台/03_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/17_计算平台/03_设置.jpg", + "exists": false + }, + { + "name": "权限设置", + "full_path": "设置 / 权限设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=auth", + "rel": "screenshots/18_设置/03_权限设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/03_权限设置.jpg", + "exists": false + }, + { + "name": "我的OKR", + "full_path": "我的 / 我的OKR", + "url": "https://s-demob.xinrenxinshi.show/staff/performance/okr", + "rel": "screenshots/19_我的/03_我的OKR.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/03_我的OKR.jpg", + "exists": false + }, + { + "name": "编制管理", + "full_path": "组织 / 编制管理", + "url": "https://s-demob.xinrenxinshi.show/organization/headcount", + "rel": "screenshots/02_组织/04_编制管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/04_编制管理.jpg", + "exists": false + }, + { + "name": "转正", + "full_path": "员工 / 转正", + "url": "https://s-demob.xinrenxinshi.show/employee/serve-manage/regular", + "rel": "screenshots/03_员工/04_转正.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/04_转正.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "考勤 / 设置", + "url": "https://s-demob.xinrenxinshi.show/attendance/settings-v2", + "rel": "screenshots/04_考勤/04_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/04_考勤/04_设置.jpg", + "exists": false + }, + { + "name": "审批委托", + "full_path": "审批 / 审批委托", + "url": "https://s-demob.xinrenxinshi.show/approval/entrust", + "rel": "screenshots/05_审批/04_审批委托.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/05_审批/04_审批委托.jpg", + "exists": false + }, + { + "name": "工资条", + "full_path": "工资 / 工资条", + "url": "https://s-demob.xinrenxinshi.show/payroll/super-pay-slip", + "rel": "screenshots/06_工资/04_工资条.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/04_工资条.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "社保 / 设置", + "url": "https://s-demob.xinrenxinshi.show/insurance/insurance-set", + "rel": "screenshots/07_社保/04_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/07_社保/04_设置.jpg", + "exists": false + }, + { + "name": "组织绩效", + "full_path": "绩效 / 组织绩效", + "url": "https://s-demob.xinrenxinshi.show/appraisal/kpi/organize-list", + "rel": "screenshots/08_绩效/04_组织绩效.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/04_组织绩效.jpg", + "exists": false + }, + { + "name": "统计", + "full_path": "招聘 / 统计", + "url": "https://s-demob.xinrenxinshi.show/recruitment/new-statistics/index", + "rel": "screenshots/09_招聘/04_统计.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/04_统计.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "合同 / 设置", + "url": "https://s-demob.xinrenxinshi.show/contract/contract-type", + "rel": "screenshots/10_合同/04_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/10_合同/04_设置.jpg", + "exists": false + }, + { + "name": "对比洞察", + "full_path": "智数 / 对比洞察", + "url": "https://s-demob.xinrenxinshi.show/statistic/metric-contrast", + "rel": "screenshots/12_智数/04_对比洞察.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/04_对比洞察.jpg", + "exists": false + }, + { + "name": "灵域空间", + "full_path": "商城 / 灵域空间", + "url": "https://s-demob.xinrenxinshi.show/shop/index?categoryCode=100", + "rel": "screenshots/16_商城/04_灵域空间.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/16_商城/04_灵域空间.jpg", + "exists": false + }, + { + "name": "品牌设置", + "full_path": "设置 / 品牌设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=brand", + "rel": "screenshots/18_设置/04_品牌设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/04_品牌设置.jpg", + "exists": false + }, + { + "name": "我的绩效", + "full_path": "我的 / 我的绩效", + "url": "https://s-demob.xinrenxinshi.show/staff/performance/kpi", + "rel": "screenshots/19_我的/04_我的绩效.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/04_我的绩效.jpg", + "exists": false + }, + { + "name": "成本中心", + "full_path": "组织 / 成本中心", + "url": "https://s-demob.xinrenxinshi.show/organization/cost-center", + "rel": "screenshots/02_组织/05_成本中心.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/05_成本中心.jpg", + "exists": false + }, + { + "name": "调动", + "full_path": "员工 / 调动", + "url": "https://s-demob.xinrenxinshi.show/employee/serve-manage/transfer", + "rel": "screenshots/03_员工/05_调动.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/05_调动.jpg", + "exists": false + }, + { + "name": "任务中心", + "full_path": "考勤 / 任务中心", + "url": "https://s-demob.xinrenxinshi.show/attendance/task", + "rel": "screenshots/04_考勤/05_任务中心.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/04_考勤/05_任务中心.jpg", + "exists": false + }, + { + "name": "预算管理", + "full_path": "工资 / 预算管理", + "url": "https://s-demob.xinrenxinshi.show/payroll/budget-making", + "rel": "screenshots/06_工资/05_预算管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/05_预算管理.jpg", + "exists": false + }, + { + "name": "360考核", + "full_path": "绩效 / 360考核", + "url": "https://s-demob.xinrenxinshi.show/appraisal/appraisal-360", + "rel": "screenshots/08_绩效/05_360考核.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/05_360考核.jpg", + "exists": false + }, + { + "name": "人才库", + "full_path": "招聘 / 人才库", + "url": "https://s-demob.xinrenxinshi.show/recruitment/talent-list", + "rel": "screenshots/09_招聘/05_人才库.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/05_人才库.jpg", + "exists": false + }, + { + "name": "导入报表", + "full_path": "智数 / 导入报表", + "url": "https://s-demob.xinrenxinshi.show/statistic/external-data-import/list", + "rel": "screenshots/12_智数/05_导入报表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/12_智数/05_导入报表.jpg", + "exists": false + }, + { + "name": "语言设置", + "full_path": "设置 / 语言设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=language", + "rel": "screenshots/18_设置/05_语言设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/05_语言设置.jpg", + "exists": false + }, + { + "name": "我的电子合同", + "full_path": "我的 / 我的电子合同", + "url": "https://s-demob.xinrenxinshi.show/staff/contract/list", + "rel": "screenshots/19_我的/05_我的电子合同.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/05_我的电子合同.jpg", + "exists": false + }, + { + "name": "历史归档", + "full_path": "组织 / 历史归档", + "url": "https://s-demob.xinrenxinshi.show/organization/historical", + "rel": "screenshots/02_组织/06_历史归档.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/06_历史归档.jpg", + "exists": false + }, + { + "name": "离职", + "full_path": "员工 / 离职", + "url": "https://s-demob.xinrenxinshi.show/employee/serve-manage/dismiss", + "rel": "screenshots/03_员工/06_离职.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/06_离职.jpg", + "exists": false + }, + { + "name": "考勤确认", + "full_path": "考勤 / 考勤确认", + "url": "https://s-demob.xinrenxinshi.show/attendance/confirm", + "rel": "screenshots/04_考勤/06_考勤确认.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/04_考勤/06_考勤确认.jpg", + "exists": false + }, + { + "name": "薪酬分析", + "full_path": "工资 / 薪酬分析", + "url": "https://s-demob.xinrenxinshi.show/payroll/salary-analysis", + "rel": "screenshots/06_工资/06_薪酬分析.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/06_薪酬分析.jpg", + "exists": false + }, + { + "name": "绩效统计", + "full_path": "绩效 / 绩效统计", + "url": "https://s-demob.xinrenxinshi.show/appraisal/count", + "rel": "screenshots/08_绩效/06_绩效统计.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/06_绩效统计.jpg", + "exists": false + }, + { + "name": "简历监控", + "full_path": "招聘 / 简历监控", + "url": "https://s-demob.xinrenxinshi.show/recruitment/resume-monitor", + "rel": "screenshots/09_招聘/06_简历监控.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/06_简历监控.jpg", + "exists": false + }, + { + "name": "安全设置", + "full_path": "设置 / 安全设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=security", + "rel": "screenshots/18_设置/06_安全设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/06_安全设置.jpg", + "exists": false + }, + { + "name": "我的工资条", + "full_path": "我的 / 我的工资条", + "url": "https://s-demob.xinrenxinshi.show/staff/payroll/payroll-detail", + "rel": "screenshots/19_我的/06_我的工资条.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/06_我的工资条.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "组织 / 设置", + "url": "https://s-demob.xinrenxinshi.show/organization/setting", + "rel": "screenshots/02_组织/07_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/02_组织/07_设置.jpg", + "exists": false + }, + { + "name": "报表", + "full_path": "员工 / 报表", + "url": "https://s-demob.xinrenxinshi.show/employee/reports", + "rel": "screenshots/03_员工/07_报表.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/07_报表.jpg", + "exists": false + }, + { + "name": "奖金包", + "full_path": "工资 / 奖金包", + "url": "https://s-demob.xinrenxinshi.show/payroll/bonus-package", + "rel": "screenshots/06_工资/07_奖金包.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/07_奖金包.jpg", + "exists": false + }, + { + "name": "历史归档", + "full_path": "绩效 / 历史归档", + "url": "https://s-demob.xinrenxinshi.show/appraisal/archive/archive-list", + "rel": "screenshots/08_绩效/07_历史归档.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/07_历史归档.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "招聘 / 设置", + "url": "https://s-demob.xinrenxinshi.show/recruitment/set-list", + "rel": "screenshots/09_招聘/07_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/09_招聘/07_设置.jpg", + "exists": false + }, + { + "name": "员工端设置", + "full_path": "设置 / 员工端设置", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=employee", + "rel": "screenshots/18_设置/07_员工端设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/07_员工端设置.jpg", + "exists": false + }, + { + "name": "我的考勤确认", + "full_path": "我的 / 我的考勤确认", + "url": "https://s-demob.xinrenxinshi.show/staff/attendance/attendance-detail", + "rel": "screenshots/19_我的/07_我的考勤确认.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/07_我的考勤确认.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "员工 / 设置", + "url": "https://s-demob.xinrenxinshi.show/employee/set", + "rel": "screenshots/03_员工/08_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/03_员工/08_设置.jpg", + "exists": false + }, + { + "name": "年终奖", + "full_path": "工资 / 年终奖", + "url": "https://s-demob.xinrenxinshi.show/payroll/annual-bonus", + "rel": "screenshots/06_工资/08_年终奖.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/08_年终奖.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "绩效 / 设置", + "url": "https://s-demob.xinrenxinshi.show/appraisal/appraisal-setting", + "rel": "screenshots/08_绩效/08_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/08_绩效/08_设置.jpg", + "exists": false + }, + { + "name": "薪豆中心", + "full_path": "设置 / 薪豆中心", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=xindou", + "rel": "screenshots/18_设置/08_薪豆中心.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/08_薪豆中心.jpg", + "exists": false + }, + { + "name": "我的项目管理", + "full_path": "我的 / 我的项目管理", + "url": "https://s-demob.xinrenxinshi.show/staff/project-manage/index", + "rel": "screenshots/19_我的/08_我的项目管理.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/08_我的项目管理.jpg", + "exists": false + }, + { + "name": "设置", + "full_path": "工资 / 设置", + "url": "https://s-demob.xinrenxinshi.show/payroll/payroll-set", + "rel": "screenshots/06_工资/09_设置.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/06_工资/09_设置.jpg", + "exists": false + }, + { + "name": "薪灵", + "full_path": "设置 / 薪灵", + "url": "https://s-demob.xinrenxinshi.show/company-set/index?tab=ai-assistant", + "rel": "screenshots/18_设置/09_薪灵.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/18_设置/09_薪灵.jpg", + "exists": false + }, + { + "name": "我的培训", + "full_path": "我的 / 我的培训", + "url": "https://s-demob.xinrenxinshi.show/staff/train/index", + "rel": "screenshots/19_我的/09_我的培训.jpg", + "abs": "D:/WorkSpace/TwoJob/xinrenxinshi/screenshots/19_我的/09_我的培训.jpg", + "exists": false + } + ] +} diff --git a/xinrenxinshi/docs/审核.html b/xinrenxinshi/docs/审核.html new file mode 100644 index 0000000..6c6fae2 --- /dev/null +++ b/xinrenxinshi/docs/审核.html @@ -0,0 +1,185 @@ + + + + + +薪人薪事 · 功能调研审核 + + + +
+

薪人薪事 · 功能调研审核 逐条勾选保留/删除,可写开发备注,导出 selection.json

+
数据来源:https://s-demob.xinrenxinshi.show 全站功能调研
+
+ + + + + + + 保留 0 / 0 项 +
+
+
+
×
+
×
+ + + diff --git a/xinrenxinshi/screenshots/01_首页/首页.jpg b/xinrenxinshi/screenshots/01_首页/首页.jpg new file mode 100644 index 0000000..1ff8a24 Binary files /dev/null and b/xinrenxinshi/screenshots/01_首页/首页.jpg differ diff --git a/xinrenxinshi/screenshots/02_组织/01_组织架构.jpg b/xinrenxinshi/screenshots/02_组织/01_组织架构.jpg new file mode 100644 index 0000000..3fbb35e Binary files /dev/null and b/xinrenxinshi/screenshots/02_组织/01_组织架构.jpg differ diff --git a/xinrenxinshi/screenshots/02_组织/02_岗位词典.jpg b/xinrenxinshi/screenshots/02_组织/02_岗位词典.jpg new file mode 100644 index 0000000..46ff941 Binary files /dev/null and b/xinrenxinshi/screenshots/02_组织/02_岗位词典.jpg differ diff --git a/xinrenxinshi/screenshots/02_组织/03_职级管理.jpg b/xinrenxinshi/screenshots/02_组织/03_职级管理.jpg new file mode 100644 index 0000000..5d21385 Binary files /dev/null and b/xinrenxinshi/screenshots/02_组织/03_职级管理.jpg differ diff --git a/xinrenxinshi/screenshots/02_组织/04_编制管理.jpg b/xinrenxinshi/screenshots/02_组织/04_编制管理.jpg new file mode 100644 index 0000000..72a49c3 Binary files /dev/null and b/xinrenxinshi/screenshots/02_组织/04_编制管理.jpg differ diff --git a/xinrenxinshi/screenshots/02_组织/05_成本中心.jpg b/xinrenxinshi/screenshots/02_组织/05_成本中心.jpg new file mode 100644 index 0000000..57c339f Binary files /dev/null and b/xinrenxinshi/screenshots/02_组织/05_成本中心.jpg differ diff --git a/xinrenxinshi/screenshots/02_组织/06_历史归档.jpg b/xinrenxinshi/screenshots/02_组织/06_历史归档.jpg new file mode 100644 index 0000000..1e69669 Binary files /dev/null and b/xinrenxinshi/screenshots/02_组织/06_历史归档.jpg differ diff --git a/xinrenxinshi/screenshots/02_组织/07_设置.jpg b/xinrenxinshi/screenshots/02_组织/07_设置.jpg new file mode 100644 index 0000000..fbe51ad Binary files /dev/null and b/xinrenxinshi/screenshots/02_组织/07_设置.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/01_花名册.jpg b/xinrenxinshi/screenshots/03_员工/01_花名册.jpg new file mode 100644 index 0000000..7611646 Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/01_花名册.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/02_合同管理.jpg b/xinrenxinshi/screenshots/03_员工/02_合同管理.jpg new file mode 100644 index 0000000..bb6749d Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/02_合同管理.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/03_入职.jpg b/xinrenxinshi/screenshots/03_员工/03_入职.jpg new file mode 100644 index 0000000..1290afa Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/03_入职.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/04_转正.jpg b/xinrenxinshi/screenshots/03_员工/04_转正.jpg new file mode 100644 index 0000000..9635701 Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/04_转正.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/05_调动.jpg b/xinrenxinshi/screenshots/03_员工/05_调动.jpg new file mode 100644 index 0000000..55c7a71 Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/05_调动.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/06_离职.jpg b/xinrenxinshi/screenshots/03_员工/06_离职.jpg new file mode 100644 index 0000000..9e09a40 Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/06_离职.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/07_报表.jpg b/xinrenxinshi/screenshots/03_员工/07_报表.jpg new file mode 100644 index 0000000..811244f Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/07_报表.jpg differ diff --git a/xinrenxinshi/screenshots/03_员工/08_设置.jpg b/xinrenxinshi/screenshots/03_员工/08_设置.jpg new file mode 100644 index 0000000..80c2b75 Binary files /dev/null and b/xinrenxinshi/screenshots/03_员工/08_设置.jpg differ diff --git a/xinrenxinshi/screenshots/04_考勤/01_考勤处理.jpg b/xinrenxinshi/screenshots/04_考勤/01_考勤处理.jpg new file mode 100644 index 0000000..e1e304d Binary files /dev/null and b/xinrenxinshi/screenshots/04_考勤/01_考勤处理.jpg differ diff --git a/xinrenxinshi/screenshots/04_考勤/02_报表.jpg b/xinrenxinshi/screenshots/04_考勤/02_报表.jpg new file mode 100644 index 0000000..fcbd57b Binary files /dev/null and b/xinrenxinshi/screenshots/04_考勤/02_报表.jpg differ diff --git a/xinrenxinshi/screenshots/04_考勤/03_排班.jpg b/xinrenxinshi/screenshots/04_考勤/03_排班.jpg new file mode 100644 index 0000000..e73e132 Binary files /dev/null and b/xinrenxinshi/screenshots/04_考勤/03_排班.jpg differ diff --git a/xinrenxinshi/screenshots/04_考勤/04_设置.jpg b/xinrenxinshi/screenshots/04_考勤/04_设置.jpg new file mode 100644 index 0000000..f26d2eb Binary files /dev/null and b/xinrenxinshi/screenshots/04_考勤/04_设置.jpg differ diff --git a/xinrenxinshi/screenshots/04_考勤/05_任务中心.jpg b/xinrenxinshi/screenshots/04_考勤/05_任务中心.jpg new file mode 100644 index 0000000..aa19db3 Binary files /dev/null and b/xinrenxinshi/screenshots/04_考勤/05_任务中心.jpg differ diff --git a/xinrenxinshi/screenshots/04_考勤/06_考勤确认.jpg b/xinrenxinshi/screenshots/04_考勤/06_考勤确认.jpg new file mode 100644 index 0000000..ab054bd Binary files /dev/null and b/xinrenxinshi/screenshots/04_考勤/06_考勤确认.jpg differ diff --git a/xinrenxinshi/screenshots/05_审批/01_审批列表.jpg b/xinrenxinshi/screenshots/05_审批/01_审批列表.jpg new file mode 100644 index 0000000..c3bad6c Binary files /dev/null and b/xinrenxinshi/screenshots/05_审批/01_审批列表.jpg differ diff --git a/xinrenxinshi/screenshots/05_审批/02_审批管理.jpg b/xinrenxinshi/screenshots/05_审批/02_审批管理.jpg new file mode 100644 index 0000000..39d24f5 Binary files /dev/null and b/xinrenxinshi/screenshots/05_审批/02_审批管理.jpg differ diff --git a/xinrenxinshi/screenshots/05_审批/03_审批角色.jpg b/xinrenxinshi/screenshots/05_审批/03_审批角色.jpg new file mode 100644 index 0000000..e0733bd Binary files /dev/null and b/xinrenxinshi/screenshots/05_审批/03_审批角色.jpg differ diff --git a/xinrenxinshi/screenshots/05_审批/04_审批委托.jpg b/xinrenxinshi/screenshots/05_审批/04_审批委托.jpg new file mode 100644 index 0000000..e95a130 Binary files /dev/null and b/xinrenxinshi/screenshots/05_审批/04_审批委托.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/01_薪资档案.jpg b/xinrenxinshi/screenshots/06_工资/01_薪资档案.jpg new file mode 100644 index 0000000..c90c423 Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/01_薪资档案.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/02_工资计算.jpg b/xinrenxinshi/screenshots/06_工资/02_工资计算.jpg new file mode 100644 index 0000000..385a34c Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/02_工资计算.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/03_报表_个税.jpg b/xinrenxinshi/screenshots/06_工资/03_报表_个税.jpg new file mode 100644 index 0000000..6ad4300 Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/03_报表_个税.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/04_工资条.jpg b/xinrenxinshi/screenshots/06_工资/04_工资条.jpg new file mode 100644 index 0000000..7eb6046 Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/04_工资条.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/05_预算管理.jpg b/xinrenxinshi/screenshots/06_工资/05_预算管理.jpg new file mode 100644 index 0000000..acc1e93 Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/05_预算管理.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/06_薪酬分析.jpg b/xinrenxinshi/screenshots/06_工资/06_薪酬分析.jpg new file mode 100644 index 0000000..9d72c72 Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/06_薪酬分析.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/07_奖金包.jpg b/xinrenxinshi/screenshots/06_工资/07_奖金包.jpg new file mode 100644 index 0000000..6d006a3 Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/07_奖金包.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/08_年终奖.jpg b/xinrenxinshi/screenshots/06_工资/08_年终奖.jpg new file mode 100644 index 0000000..d7e8afd Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/08_年终奖.jpg differ diff --git a/xinrenxinshi/screenshots/06_工资/09_设置.jpg b/xinrenxinshi/screenshots/06_工资/09_设置.jpg new file mode 100644 index 0000000..d39d483 Binary files /dev/null and b/xinrenxinshi/screenshots/06_工资/09_设置.jpg differ diff --git a/xinrenxinshi/screenshots/07_社保/01_档案.jpg b/xinrenxinshi/screenshots/07_社保/01_档案.jpg new file mode 100644 index 0000000..77ae857 Binary files /dev/null and b/xinrenxinshi/screenshots/07_社保/01_档案.jpg differ diff --git a/xinrenxinshi/screenshots/07_社保/02_计算.jpg b/xinrenxinshi/screenshots/07_社保/02_计算.jpg new file mode 100644 index 0000000..ef2b52c Binary files /dev/null and b/xinrenxinshi/screenshots/07_社保/02_计算.jpg differ diff --git a/xinrenxinshi/screenshots/07_社保/03_报表.jpg b/xinrenxinshi/screenshots/07_社保/03_报表.jpg new file mode 100644 index 0000000..67c2f71 Binary files /dev/null and b/xinrenxinshi/screenshots/07_社保/03_报表.jpg differ diff --git a/xinrenxinshi/screenshots/07_社保/04_设置.jpg b/xinrenxinshi/screenshots/07_社保/04_设置.jpg new file mode 100644 index 0000000..f8ae1ea Binary files /dev/null and b/xinrenxinshi/screenshots/07_社保/04_设置.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/01_OKR.jpg b/xinrenxinshi/screenshots/08_绩效/01_OKR.jpg new file mode 100644 index 0000000..b0aae92 Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/01_OKR.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/02_绩效考核.jpg b/xinrenxinshi/screenshots/08_绩效/02_绩效考核.jpg new file mode 100644 index 0000000..7dc5380 Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/02_绩效考核.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/03_试用期考核.jpg b/xinrenxinshi/screenshots/08_绩效/03_试用期考核.jpg new file mode 100644 index 0000000..191c44d Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/03_试用期考核.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/04_组织绩效.jpg b/xinrenxinshi/screenshots/08_绩效/04_组织绩效.jpg new file mode 100644 index 0000000..a947c08 Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/04_组织绩效.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/05_360考核.jpg b/xinrenxinshi/screenshots/08_绩效/05_360考核.jpg new file mode 100644 index 0000000..3b10792 Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/05_360考核.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/06_绩效统计.jpg b/xinrenxinshi/screenshots/08_绩效/06_绩效统计.jpg new file mode 100644 index 0000000..0c960e9 Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/06_绩效统计.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/07_历史归档.jpg b/xinrenxinshi/screenshots/08_绩效/07_历史归档.jpg new file mode 100644 index 0000000..85a3a1c Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/07_历史归档.jpg differ diff --git a/xinrenxinshi/screenshots/08_绩效/08_设置.jpg b/xinrenxinshi/screenshots/08_绩效/08_设置.jpg new file mode 100644 index 0000000..f62176c Binary files /dev/null and b/xinrenxinshi/screenshots/08_绩效/08_设置.jpg differ diff --git a/xinrenxinshi/screenshots/09_招聘/01_候选人.jpg b/xinrenxinshi/screenshots/09_招聘/01_候选人.jpg new file mode 100644 index 0000000..0b9e506 Binary files /dev/null and b/xinrenxinshi/screenshots/09_招聘/01_候选人.jpg differ diff --git a/xinrenxinshi/screenshots/09_招聘/02_需求.jpg b/xinrenxinshi/screenshots/09_招聘/02_需求.jpg new file mode 100644 index 0000000..076ea99 Binary files /dev/null and b/xinrenxinshi/screenshots/09_招聘/02_需求.jpg differ diff --git a/xinrenxinshi/screenshots/09_招聘/03_职位.jpg b/xinrenxinshi/screenshots/09_招聘/03_职位.jpg new file mode 100644 index 0000000..dcf931f Binary files /dev/null and b/xinrenxinshi/screenshots/09_招聘/03_职位.jpg differ diff --git a/xinrenxinshi/screenshots/09_招聘/04_统计.jpg b/xinrenxinshi/screenshots/09_招聘/04_统计.jpg new file mode 100644 index 0000000..687fd05 Binary files /dev/null and b/xinrenxinshi/screenshots/09_招聘/04_统计.jpg differ diff --git a/xinrenxinshi/screenshots/09_招聘/05_人才库.jpg b/xinrenxinshi/screenshots/09_招聘/05_人才库.jpg new file mode 100644 index 0000000..794c44e Binary files /dev/null and b/xinrenxinshi/screenshots/09_招聘/05_人才库.jpg differ diff --git a/xinrenxinshi/screenshots/09_招聘/06_简历监控.jpg b/xinrenxinshi/screenshots/09_招聘/06_简历监控.jpg new file mode 100644 index 0000000..f8b6c16 Binary files /dev/null and b/xinrenxinshi/screenshots/09_招聘/06_简历监控.jpg differ diff --git a/xinrenxinshi/screenshots/09_招聘/07_设置.jpg b/xinrenxinshi/screenshots/09_招聘/07_设置.jpg new file mode 100644 index 0000000..3b7d23a Binary files /dev/null and b/xinrenxinshi/screenshots/09_招聘/07_设置.jpg differ diff --git a/xinrenxinshi/screenshots/10_合同/01_对内合同.jpg b/xinrenxinshi/screenshots/10_合同/01_对内合同.jpg new file mode 100644 index 0000000..2efabaa Binary files /dev/null and b/xinrenxinshi/screenshots/10_合同/01_对内合同.jpg differ diff --git a/xinrenxinshi/screenshots/10_合同/02_对外合同.jpg b/xinrenxinshi/screenshots/10_合同/02_对外合同.jpg new file mode 100644 index 0000000..5cdfe52 Binary files /dev/null and b/xinrenxinshi/screenshots/10_合同/02_对外合同.jpg differ diff --git a/xinrenxinshi/screenshots/10_合同/03_合同模版.jpg b/xinrenxinshi/screenshots/10_合同/03_合同模版.jpg new file mode 100644 index 0000000..1f2b927 Binary files /dev/null and b/xinrenxinshi/screenshots/10_合同/03_合同模版.jpg differ diff --git a/xinrenxinshi/screenshots/10_合同/04_设置.jpg b/xinrenxinshi/screenshots/10_合同/04_设置.jpg new file mode 100644 index 0000000..970a66d Binary files /dev/null and b/xinrenxinshi/screenshots/10_合同/04_设置.jpg differ diff --git a/xinrenxinshi/screenshots/11_培训/培训.jpg b/xinrenxinshi/screenshots/11_培训/培训.jpg new file mode 100644 index 0000000..ac3dee2 Binary files /dev/null and b/xinrenxinshi/screenshots/11_培训/培训.jpg differ diff --git a/xinrenxinshi/screenshots/12_智数/01_数据看板.jpg b/xinrenxinshi/screenshots/12_智数/01_数据看板.jpg new file mode 100644 index 0000000..2c922c0 Binary files /dev/null and b/xinrenxinshi/screenshots/12_智数/01_数据看板.jpg differ diff --git a/xinrenxinshi/screenshots/12_智数/02_风险诊断.jpg b/xinrenxinshi/screenshots/12_智数/02_风险诊断.jpg new file mode 100644 index 0000000..a30d13e Binary files /dev/null and b/xinrenxinshi/screenshots/12_智数/02_风险诊断.jpg differ diff --git a/xinrenxinshi/screenshots/12_智数/03_健康诊断.jpg b/xinrenxinshi/screenshots/12_智数/03_健康诊断.jpg new file mode 100644 index 0000000..5cc8e52 Binary files /dev/null and b/xinrenxinshi/screenshots/12_智数/03_健康诊断.jpg differ diff --git a/xinrenxinshi/screenshots/12_智数/04_对比洞察.jpg b/xinrenxinshi/screenshots/12_智数/04_对比洞察.jpg new file mode 100644 index 0000000..5887d4b Binary files /dev/null and b/xinrenxinshi/screenshots/12_智数/04_对比洞察.jpg differ diff --git a/xinrenxinshi/screenshots/12_智数/05_导入报表.jpg b/xinrenxinshi/screenshots/12_智数/05_导入报表.jpg new file mode 100644 index 0000000..2271b50 Binary files /dev/null and b/xinrenxinshi/screenshots/12_智数/05_导入报表.jpg differ diff --git a/xinrenxinshi/screenshots/13_人才/01_人才档案.jpg b/xinrenxinshi/screenshots/13_人才/01_人才档案.jpg new file mode 100644 index 0000000..9069185 Binary files /dev/null and b/xinrenxinshi/screenshots/13_人才/01_人才档案.jpg differ diff --git a/xinrenxinshi/screenshots/13_人才/02_人才盘点.jpg b/xinrenxinshi/screenshots/13_人才/02_人才盘点.jpg new file mode 100644 index 0000000..7eacb2c Binary files /dev/null and b/xinrenxinshi/screenshots/13_人才/02_人才盘点.jpg differ diff --git a/xinrenxinshi/screenshots/13_人才/03_人才评估.jpg b/xinrenxinshi/screenshots/13_人才/03_人才评估.jpg new file mode 100644 index 0000000..50d0954 Binary files /dev/null and b/xinrenxinshi/screenshots/13_人才/03_人才评估.jpg differ diff --git a/xinrenxinshi/screenshots/14_公告/公告.jpg b/xinrenxinshi/screenshots/14_公告/公告.jpg new file mode 100644 index 0000000..d8901dc Binary files /dev/null and b/xinrenxinshi/screenshots/14_公告/公告.jpg differ diff --git a/xinrenxinshi/screenshots/15_对接/01_对接管理.jpg b/xinrenxinshi/screenshots/15_对接/01_对接管理.jpg new file mode 100644 index 0000000..9e208f1 Binary files /dev/null and b/xinrenxinshi/screenshots/15_对接/01_对接管理.jpg differ diff --git a/xinrenxinshi/screenshots/15_对接/02_对接服务.jpg b/xinrenxinshi/screenshots/15_对接/02_对接服务.jpg new file mode 100644 index 0000000..2edeeda Binary files /dev/null and b/xinrenxinshi/screenshots/15_对接/02_对接服务.jpg differ diff --git a/xinrenxinshi/screenshots/15_对接/03_工单中心.jpg b/xinrenxinshi/screenshots/15_对接/03_工单中心.jpg new file mode 100644 index 0000000..9ca65cb Binary files /dev/null and b/xinrenxinshi/screenshots/15_对接/03_工单中心.jpg differ diff --git a/xinrenxinshi/screenshots/16_商城/01_SaaS服务.jpg b/xinrenxinshi/screenshots/16_商城/01_SaaS服务.jpg new file mode 100644 index 0000000..d7456eb Binary files /dev/null and b/xinrenxinshi/screenshots/16_商城/01_SaaS服务.jpg differ diff --git a/xinrenxinshi/screenshots/16_商城/02_对接服务.jpg b/xinrenxinshi/screenshots/16_商城/02_对接服务.jpg new file mode 100644 index 0000000..2edeeda Binary files /dev/null and b/xinrenxinshi/screenshots/16_商城/02_对接服务.jpg differ diff --git a/xinrenxinshi/screenshots/16_商城/03_微服务.jpg b/xinrenxinshi/screenshots/16_商城/03_微服务.jpg new file mode 100644 index 0000000..c64f3cd Binary files /dev/null and b/xinrenxinshi/screenshots/16_商城/03_微服务.jpg differ diff --git a/xinrenxinshi/screenshots/16_商城/04_灵域空间.jpg b/xinrenxinshi/screenshots/16_商城/04_灵域空间.jpg new file mode 100644 index 0000000..87ee086 Binary files /dev/null and b/xinrenxinshi/screenshots/16_商城/04_灵域空间.jpg differ diff --git a/xinrenxinshi/screenshots/17_计算平台/01_计算方案.jpg b/xinrenxinshi/screenshots/17_计算平台/01_计算方案.jpg new file mode 100644 index 0000000..8a0de5f Binary files /dev/null and b/xinrenxinshi/screenshots/17_计算平台/01_计算方案.jpg differ diff --git a/xinrenxinshi/screenshots/17_计算平台/02_模板库.jpg b/xinrenxinshi/screenshots/17_计算平台/02_模板库.jpg new file mode 100644 index 0000000..8412b8a Binary files /dev/null and b/xinrenxinshi/screenshots/17_计算平台/02_模板库.jpg differ diff --git a/xinrenxinshi/screenshots/17_计算平台/03_设置.jpg b/xinrenxinshi/screenshots/17_计算平台/03_设置.jpg new file mode 100644 index 0000000..0f75fb4 Binary files /dev/null and b/xinrenxinshi/screenshots/17_计算平台/03_设置.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/01_公司信息.jpg b/xinrenxinshi/screenshots/18_设置/01_公司信息.jpg new file mode 100644 index 0000000..fc9e915 Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/01_公司信息.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/02_合同主体.jpg b/xinrenxinshi/screenshots/18_设置/02_合同主体.jpg new file mode 100644 index 0000000..c836701 Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/02_合同主体.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/03_权限设置.jpg b/xinrenxinshi/screenshots/18_设置/03_权限设置.jpg new file mode 100644 index 0000000..bddc749 Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/03_权限设置.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/04_品牌设置.jpg b/xinrenxinshi/screenshots/18_设置/04_品牌设置.jpg new file mode 100644 index 0000000..bf8f927 Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/04_品牌设置.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/05_语言设置.jpg b/xinrenxinshi/screenshots/18_设置/05_语言设置.jpg new file mode 100644 index 0000000..557101f Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/05_语言设置.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/06_安全设置.jpg b/xinrenxinshi/screenshots/18_设置/06_安全设置.jpg new file mode 100644 index 0000000..9ad928e Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/06_安全设置.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/07_员工端设置.jpg b/xinrenxinshi/screenshots/18_设置/07_员工端设置.jpg new file mode 100644 index 0000000..0f4cc41 Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/07_员工端设置.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/08_薪豆中心.jpg b/xinrenxinshi/screenshots/18_设置/08_薪豆中心.jpg new file mode 100644 index 0000000..261d517 Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/08_薪豆中心.jpg differ diff --git a/xinrenxinshi/screenshots/18_设置/09_薪灵.jpg b/xinrenxinshi/screenshots/18_设置/09_薪灵.jpg new file mode 100644 index 0000000..46ef1db Binary files /dev/null and b/xinrenxinshi/screenshots/18_设置/09_薪灵.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/01_我的审批.jpg b/xinrenxinshi/screenshots/19_我的/01_我的审批.jpg new file mode 100644 index 0000000..c0fd77d Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/01_我的审批.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/02_我的招聘.jpg b/xinrenxinshi/screenshots/19_我的/02_我的招聘.jpg new file mode 100644 index 0000000..b2f9c9c Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/02_我的招聘.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/03_我的OKR.jpg b/xinrenxinshi/screenshots/19_我的/03_我的OKR.jpg new file mode 100644 index 0000000..654edf4 Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/03_我的OKR.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/04_我的绩效.jpg b/xinrenxinshi/screenshots/19_我的/04_我的绩效.jpg new file mode 100644 index 0000000..7d719a7 Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/04_我的绩效.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/05_我的电子合同.jpg b/xinrenxinshi/screenshots/19_我的/05_我的电子合同.jpg new file mode 100644 index 0000000..a177069 Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/05_我的电子合同.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/06_我的工资条.jpg b/xinrenxinshi/screenshots/19_我的/06_我的工资条.jpg new file mode 100644 index 0000000..a864fc7 Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/06_我的工资条.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/07_我的考勤确认.jpg b/xinrenxinshi/screenshots/19_我的/07_我的考勤确认.jpg new file mode 100644 index 0000000..bed3e4d Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/07_我的考勤确认.jpg differ diff --git a/xinrenxinshi/screenshots/19_我的/08_我的项目管理.jpg b/xinrenxinshi/screenshots/19_我的/08_我的项目管理.jpg new file mode 100644 index 0000000..438c022 Binary files /dev/null and b/xinrenxinshi/screenshots/19_我的/08_我的项目管理.jpg differ diff --git a/xinrenxinshi/scripts/build_tree.py b/xinrenxinshi/scripts/build_tree.py new file mode 100644 index 0000000..b193db6 --- /dev/null +++ b/xinrenxinshi/scripts/build_tree.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +读取 db/menu_map.json, 构建功能树写入 SQLite(features 表)。 +层级: level0=顶层模块, level1=分组, level2=菜单页(叶子) +并为每个叶子分配期望截图路径 screenshots/<序号_模块>/<分组>/<序号_名称>.jpg + +menu_map.json 结构(由实时爬取生成): +{ + "<模块名>": { + "loc": "落地页URL", + "desc": "模块释义(可选)", + "understanding": "开发理解(可选)", + "groups": [ {"title": "分组名", "items": [ {"name":"页名","href":"/路径","desc":"","understanding":""}, ...] } ], + "single": {"name":"页名","href":"/路径"} # 无侧边栏的单页模块(可选) + }, + ... +} +""" +import json, os, re, sqlite3 + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +MAP = os.path.join(BASE, "db", "menu_map.json") +DB = os.path.join(BASE, "db", "research.db") +ORIGIN = "https://s-demob.xinrenxinshi.show" + + +def sanitize(s): + s = re.sub(r'[\\/:*?"<>|]', "_", s or "").strip() + return s[:40] or "page" + + +def full_url(href): + if not href: + return "" + if href.startswith("http"): + return href + return ORIGIN + (href if href.startswith("/") else "/" + href) + + +def main(): + data = json.load(open(MAP, encoding="utf-8")) + conn = sqlite3.connect(DB) + conn.row_factory = sqlite3.Row + cur = conn.cursor() + cur.execute("DELETE FROM features") + + def up(obj): + keys = list(obj.keys()); cols = ",".join(keys); ph = ",".join(["?"] * len(keys)) + cur.execute(f"INSERT OR REPLACE INTO features ({cols}) VALUES ({ph})", [obj[k] for k in keys]) + + for mi, module in enumerate(data.keys(), 1): + v = data[module] + mod_key = f"mod::{module}" + seq_mod = f"{mi:02d}_{sanitize(module)}" + up(dict(node_key=mod_key, parent_key="", level=0, name=module, + full_path=module, url=v.get("loc", ""), + description=v.get("desc", f"{module}模块。"), + understanding=v.get("understanding", ""), sort_order=mi, keep=1)) + + groups = v.get("groups", []) + single = v.get("single") + flat_items = v.get("items") + # 扁平模式: 模块直接挂功能页(level2), 无中间分组层 + if not groups and flat_items: + for ii, it in enumerate(flat_items, 1): + nm = it["name"]; href = it.get("href", "") + leaf_key = f"{module}::{href or nm}" + rel = f"screenshots/{seq_mod}/{ii:02d}_{sanitize(nm)}.jpg" + up(dict(node_key=leaf_key, parent_key=mod_key, level=2, name=nm, + full_path=f"{module} / {nm}", url=full_url(href), + description=it.get("desc", f"{module}模块下「{nm}」相关功能页。"), + understanding=it.get("understanding", ""), + screenshot_path=rel, sort_order=ii, keep=1)) + continue + if not groups and single: + nm = single["name"]; href = single.get("href", "") + leaf_key = f"{module}::{href or nm}" + rel = f"screenshots/{seq_mod}/{sanitize(nm)}.jpg" + up(dict(node_key=leaf_key, parent_key=mod_key, level=2, name=nm, + full_path=f"{module} / {nm}", url=full_url(href), + description=single.get("desc", f"{module}模块下「{nm}」相关功能页。"), + understanding=single.get("understanding", ""), + screenshot_path=rel, sort_order=1, keep=1)) + continue + + gi = 0 + for g in groups: + gtitle = g.get("title") or "常规" + gi += 1 + grp_key = f"{mod_key}::grp::{gi}_{gtitle}" + up(dict(node_key=grp_key, parent_key=mod_key, level=1, name=gtitle, + full_path=f"{module} / {gtitle}", url="", + description=f"{module}模块下「{gtitle}」功能分组。", + understanding="", sort_order=gi, keep=1)) + for ii, it in enumerate(g.get("items", []), 1): + nm = it["name"]; href = it.get("href", "") + leaf_key = f"{module}::{href or (gtitle + '/' + nm)}" + rel = f"screenshots/{seq_mod}/{sanitize(gtitle)}/{ii:02d}_{sanitize(nm)}.jpg" + up(dict(node_key=leaf_key, parent_key=grp_key, level=2, name=nm, + full_path=f"{module} / {gtitle} / {nm}", url=full_url(href), + description=it.get("desc", f"{module}模块下「{nm}」相关功能页。"), + understanding=it.get("understanding", ""), + screenshot_path=rel, sort_order=ii, keep=1)) + conn.commit() + for lv in (0, 1, 2): + n = cur.execute("SELECT COUNT(*) FROM features WHERE level=?", (lv,)).fetchone()[0] + print(f"level{lv}: {n}") + print("total:", cur.execute("SELECT COUNT(*) FROM features").fetchone()[0]) + conn.close() + + +if __name__ == "__main__": + main() diff --git a/xinrenxinshi/scripts/dbtool.py b/xinrenxinshi/scripts/dbtool.py new file mode 100644 index 0000000..3ec6da2 --- /dev/null +++ b/xinrenxinshi/scripts/dbtool.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +薪人薪事(xinrenxinshi) 功能调研 —— SQLite 数据存取工具(通用,无站点耦合) + +用法: + python dbtool.py init 初始化数据库表结构 + python dbtool.py add 新增/更新一个功能节点(传入JSON对象) + python dbtool.py addmany 批量新增/更新(传入JSON数组) + python dbtool.py setshot 设置某节点的截图路径 + python dbtool.py get 查询单个节点 + python dbtool.py tree 以树形结构打印(JSON) + python dbtool.py stats 统计各层级节点数 + +节点字段: + node_key 唯一键(建议用 URL 或 path 组合, 用于去重更新) + parent_key 父节点的 node_key (顶层为空) + level 0=顶层模块 1=分组 2=菜单页 3=子页/Tab + name 功能名称 + full_path 全路径名称(面包屑, 如 "人事 / 员工管理 / 员工花名册") + url 页面URL + description 释义(功能是做什么的) + understanding 我理解的信息(交互/字段/价值等) + screenshot_path 截图相对路径 + sort_order 排序 + keep 是否保留(供管理员勾选, 默认1=保留) + note 审核备注 +""" +import sqlite3, sys, json, os + +DB_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "db", "research.db") + +SCHEMA = """ +CREATE TABLE IF NOT EXISTS features ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + node_key TEXT UNIQUE NOT NULL, + parent_key TEXT, + level INTEGER NOT NULL DEFAULT 0, + name TEXT NOT NULL, + full_path TEXT, + url TEXT, + description TEXT, + understanding TEXT, + screenshot_path TEXT, + sort_order INTEGER DEFAULT 0, + keep INTEGER DEFAULT 1, + note TEXT, + created_at TEXT DEFAULT (datetime('now','localtime')), + updated_at TEXT DEFAULT (datetime('now','localtime')) +); +CREATE INDEX IF NOT EXISTS idx_parent ON features(parent_key); +CREATE INDEX IF NOT EXISTS idx_level ON features(level); + +-- 深层界面截图(弹窗/筛选/自定义列/详情) +CREATE TABLE IF NOT EXISTS page_shots ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + node_key TEXT NOT NULL, + kind TEXT NOT NULL, -- main/add/filter/columns/detail + label TEXT, + path TEXT NOT NULL, + created_at TEXT DEFAULT (datetime('now','localtime')) +); +CREATE INDEX IF NOT EXISTS idx_ps_node ON page_shots(node_key); + +-- 真实导出附件 +CREATE TABLE IF NOT EXISTS downloads ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + node_key TEXT, + file_path TEXT NOT NULL, + size INTEGER, + kind TEXT, + created_at TEXT DEFAULT (datetime('now','localtime')) +); +CREATE INDEX IF NOT EXISTS idx_dl_node ON downloads(node_key); +""" + +FIELDS = ["node_key","parent_key","level","name","full_path","url", + "description","understanding","screenshot_path","sort_order","keep","note"] + +def conn(): + os.makedirs(os.path.dirname(DB_PATH), exist_ok=True) + c = sqlite3.connect(DB_PATH) + c.row_factory = sqlite3.Row + return c + +def init(): + c = conn() + c.executescript(SCHEMA) + c.commit(); c.close() + print("DB initialized at", DB_PATH) + +def upsert(c, obj): + keys = [k for k in FIELDS if k in obj] + placeholders = ",".join(["?"]*len(keys)) + cols = ",".join(keys) + updates = ",".join([f"{k}=excluded.{k}" for k in keys if k != "node_key"]) + sql = f"INSERT INTO features ({cols}) VALUES ({placeholders}) " \ + f"ON CONFLICT(node_key) DO UPDATE SET {updates}, updated_at=datetime('now','localtime')" + c.execute(sql, [obj[k] for k in keys]) + +def add(obj): + c = conn(); upsert(c, obj); c.commit(); c.close() + print("ok:", obj.get("node_key")) + +def addmany(arr): + c = conn() + for obj in arr: + upsert(c, obj) + c.commit(); c.close() + print("ok addmany:", len(arr)) + +def setshot(node_key, path): + c = conn() + c.execute("UPDATE features SET screenshot_path=?, updated_at=datetime('now','localtime') WHERE node_key=?", (path, node_key)) + c.commit(); n = c.total_changes; c.close() + print("updated" if n else "not found", node_key) + +def get(node_key): + c = conn() + r = c.execute("SELECT * FROM features WHERE node_key=?", (node_key,)).fetchone() + c.close() + print(json.dumps(dict(r), ensure_ascii=False) if r else "null") + +def stats(): + c = conn() + rows = c.execute("SELECT level, COUNT(*) n FROM features GROUP BY level ORDER BY level").fetchall() + total = c.execute("SELECT COUNT(*) n FROM features").fetchone()["n"] + shots = c.execute("SELECT COUNT(*) n FROM features WHERE screenshot_path IS NOT NULL AND screenshot_path<>''").fetchone()["n"] + c.close() + for r in rows: + print(f"level {r['level']}: {r['n']}") + print(f"total: {total}, with_screenshot: {shots}") + +def tree(): + c = conn() + rows = [dict(r) for r in c.execute("SELECT * FROM features ORDER BY level, sort_order, id").fetchall()] + c.close() + by_parent = {} + for r in rows: + by_parent.setdefault(r["parent_key"] or "", []).append(r) + def build(pk): + out = [] + for r in by_parent.get(pk, []): + node = {k: r[k] for k in ("node_key","name","level","url","description","understanding","screenshot_path","keep")} + node["children"] = build(r["node_key"]) + out.append(node) + return out + print(json.dumps(build(""), ensure_ascii=False)) + +if __name__ == "__main__": + cmd = sys.argv[1] if len(sys.argv) > 1 else "" + if cmd == "init": init() + elif cmd == "add": add(json.loads(sys.argv[2])) + elif cmd == "addmany": addmany(json.loads(sys.argv[2])) + elif cmd == "setshot": setshot(sys.argv[2], sys.argv[3]) + elif cmd == "get": get(sys.argv[2]) + elif cmd == "stats": stats() + elif cmd == "tree": tree() + else: + print(__doc__) + sys.exit(1) diff --git a/xinrenxinshi/scripts/serve.py b/xinrenxinshi/scripts/serve.py new file mode 100644 index 0000000..8032ebd --- /dev/null +++ b/xinrenxinshi/scripts/serve.py @@ -0,0 +1,290 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +审核后端服务(薪人薪事 功能调研)。 +- 打开 http://localhost:8788/ 进入"一页一个功能"的审核界面 +- 每次点击 保留/删除 立即写回 SQLite(features.keep) +- 提供 API: 功能列表 / 更新保留状态 / 备注 / 附件清单 / Excel 预览 / 导出 selection.json +依赖: Flask +用法: python serve.py 然后浏览器打开 http://localhost:8788 +""" +import os, json, sqlite3, time, re +from flask import Flask, request, jsonify, send_from_directory, Response + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +DOCS = os.path.join(BASE, "docs") +DL_ROOT = os.path.join(BASE, "downloads") +REVIEW_HTML = os.path.join(DOCS, "审核.html") +EXPORT_JSON = os.path.join(DOCS, "selection.json") +EXCEL_EXT = (".xlsx", ".xls", ".docx", ".doc", ".pdf") + +app = Flask(__name__) + + +def db(): + conn = sqlite3.connect(DB) + conn.row_factory = sqlite3.Row + return conn + + +def load_features(): + conn = db() + rows = [dict(r) for r in conn.execute( + "SELECT node_key,parent_key,level,name,full_path,url,description," + "understanding,screenshot_path,sort_order,keep,note FROM features " + "ORDER BY sort_order,id").fetchall()] + kind_cn = {"add": "主操作弹窗/表单", "filter": "筛选面板", + "columns": "自定义列/选择表头", "detail": "行详情/编辑"} + deep = {} + try: + for r in conn.execute("SELECT node_key,kind,label,path FROM page_shots " + "WHERE kind<>'main' ORDER BY node_key,id").fetchall(): + deep.setdefault(r["node_key"], []).append({ + "kind": r["kind"], "kind_cn": kind_cn.get(r["kind"], r["kind"]), + "label": r["label"] or "", "shot": "/shot/" + r["path"]}) + except sqlite3.OperationalError: + pass + dls = {} + try: + for r in conn.execute("SELECT node_key,file_path,size,kind FROM downloads " + "WHERE node_key IS NOT NULL AND node_key<>'' ORDER BY file_path").fetchall(): + fp = r["file_path"] or "" + name = fp.rsplit("/", 1)[-1] + sz = r["size"] + if not sz: + ap = os.path.join(BASE, fp) + sz = os.path.getsize(ap) if os.path.isfile(ap) else 0 + dls.setdefault(r["node_key"], []).append( + {"name": name, "rel": fp, "size": sz or 0, "kind": r["kind"] or ""}) + except sqlite3.OperationalError: + pass + conn.close() + by_parent = {} + for r in rows: + by_parent.setdefault(r["parent_key"] or "", []).append(r) + + leaves = [] + + def dfs(pk, module, group): + for r in by_parent.get(pk, []): + m = r["name"] if r["level"] == 0 else module + g = r["name"] if r["level"] == 1 else group + children = by_parent.get(r["node_key"]) + if children: + dfs(r["node_key"], m, g) + else: + shot = ("/shot/" + r["screenshot_path"]) if r.get("screenshot_path") else "" + leaves.append({ + "node_key": r["node_key"], "name": r["name"], "module": m, + "group": g if g and g != r["name"] else "", + "full_path": r["full_path"], "url": r["url"] or "", + "description": r["description"] or "", + "understanding": r["understanding"] or "", + "shot": shot, "deep_shots": deep.get(r["node_key"], []), + "downloads": dls.get(r["node_key"], []), + "keep": 1 if (r["keep"] is None or r["keep"] == 1) else 0, + "note": r.get("note") or "", + }) + + dfs("", "", "") + return leaves + + +@app.route("/") +def index(): + with open(REVIEW_HTML, "r", encoding="utf-8") as f: + return Response(f.read(), mimetype="text/html") + + +@app.route("/api/features") +def api_features(): + feats = load_features() + keep = sum(1 for f in feats if f["keep"]) + return jsonify({"total": len(feats), "keep": keep, "items": feats}) + + +@app.route("/api/keep", methods=["POST"]) +def api_keep(): + data = request.get_json(force=True) + node_key = data.get("node_key") + keep = 1 if data.get("keep") else 0 + if not node_key: + return jsonify({"ok": False, "err": "missing node_key"}), 400 + now = time.strftime("%Y-%m-%d %H:%M:%S") + conn = db() + conn.execute("UPDATE features SET keep=?, updated_at=? WHERE node_key=?", (keep, now, node_key)) + conn.commit(); conn.close() + return jsonify({"ok": True, "node_key": node_key, "keep": keep}) + + +@app.route("/api/keep_batch", methods=["POST"]) +def api_keep_batch(): + data = request.get_json(force=True) + keys = data.get("node_keys") or [] + keep = 1 if data.get("keep") else 0 + now = time.strftime("%Y-%m-%d %H:%M:%S") + conn = db() + conn.executemany("UPDATE features SET keep=?, updated_at=? WHERE node_key=?", + [(keep, now, k) for k in keys]) + conn.commit(); conn.close() + return jsonify({"ok": True, "updated": len(keys), "keep": keep}) + + +@app.route("/api/note", methods=["POST"]) +def api_note(): + data = request.get_json(force=True) + node_key = data.get("node_key") + note = data.get("note") or "" + if not node_key: + return jsonify({"ok": False, "err": "missing node_key"}), 400 + now = time.strftime("%Y-%m-%d %H:%M:%S") + conn = db() + conn.execute("UPDATE features SET note=?, updated_at=? WHERE node_key=?", (note, now, node_key)) + conn.commit(); conn.close() + return jsonify({"ok": True, "node_key": node_key}) + + +@app.route("/api/export", methods=["POST", "GET"]) +def api_export(): + feats = load_features() + kept = sum(1 for f in feats if f["keep"]) + mods = {} + for f in feats: + m = mods.setdefault(f["module"], {"module": f["module"], "total": 0, "keep": 0}) + m["total"] += 1 + m["keep"] += f["keep"] + + def item(f): + return { + "module": f["module"], "group": f["group"], "name": f["name"], + "node_key": f["node_key"], "full_path": f["full_path"], "url": f["url"], + "keep": f["keep"], "description": f["description"], + "understanding": f["understanding"], "note": f["note"], + "screenshot": f["shot"].replace("/shot/", "") if f["shot"] else "", + } + + out = { + "generated_at": time.strftime("%Y-%m-%dT%H:%M:%S"), + "source": "薪人薪事 https://s-demob.xinrenxinshi.show 功能调研", + "total": len(feats), "keep": kept, "dropped": len(feats) - kept, + "module_summary": sorted(mods.values(), key=lambda x: -x["keep"]), + "items": [item(f) for f in feats], + "kept_items": [item(f) for f in feats if f["keep"]], + } + os.makedirs(DOCS, exist_ok=True) + with open(EXPORT_JSON, "w", encoding="utf-8") as f: + json.dump(out, f, ensure_ascii=False, indent=2) + return jsonify({"ok": True, "path": "docs/selection.json", + "total": out["total"], "keep": out["keep"], "dropped": out["dropped"]}) + + +@app.route("/shot/") +def shot(relpath): + return send_from_directory(BASE, relpath) + + +def _strip_num(s): + return re.sub(r"^\d+_", "", s or "").strip() + + +def scan_attachments(): + groups = [] + if not os.path.isdir(DL_ROOT): + return groups + for root, _, files in os.walk(DL_ROOT): + fs = [f for f in files if f.lower().endswith(EXCEL_EXT)] + if not fs: + continue + rel = os.path.relpath(root, DL_ROOT) + segs = [] if rel == "." else rel.split(os.sep) + seg0 = segs[0] if segs else "" + module = "任务中心" if seg0.startswith("_任务") else _strip_num(seg0) + group = segs[1] if len(segs) > 1 else "" + items = [] + for f in sorted(fs): + p = os.path.join(root, f) + items.append({"name": f, "size": os.path.getsize(p), + "rel": os.path.relpath(p, BASE)}) + groups.append({"dir": rel.replace(os.sep, " / "), "module": module, + "group": group, "files": items}) + groups.sort(key=lambda g: g["dir"]) + return groups + + +@app.route("/api/attachments") +def api_attachments(): + gs = scan_attachments() + total = sum(len(g["files"]) for g in gs) + return jsonify({"total": total, "groups": gs}) + + +@app.route("/dl/") +def dl(relpath): + d = os.path.dirname(relpath) + fn = os.path.basename(relpath) + return send_from_directory(os.path.join(BASE, d), fn, as_attachment=True) + + +SHEET_EXT = (".xlsx", ".xls") +MAX_ROWS = 500 +MAX_COLS = 60 + + +def _parse_xlsx(path): + import openpyxl + wb = openpyxl.load_workbook(path, read_only=True, data_only=True) + sheets = [] + for ws in wb.worksheets: + rows = [] + for i, row in enumerate(ws.iter_rows(values_only=True)): + if i >= MAX_ROWS: + break + cells = [("" if v is None else str(v)) for v in row[:MAX_COLS]] + rows.append(cells) + sheets.append({"name": ws.title, "rows": rows, + "total_rows": ws.max_row, "total_cols": ws.max_column}) + wb.close() + return sheets + + +def _parse_xls(path): + import xlrd, warnings + warnings.filterwarnings("ignore") + wb = xlrd.open_workbook(path) + sheets = [] + for ws in wb.sheets(): + rows = [] + for r in range(min(MAX_ROWS, ws.nrows)): + cells = [] + for cc in range(min(MAX_COLS, ws.ncols)): + v = ws.cell_value(r, cc) + if isinstance(v, float) and v == int(v): + v = int(v) + cells.append("" if v == "" else str(v)) + rows.append(cells) + sheets.append({"name": ws.name, "rows": rows, + "total_rows": ws.nrows, "total_cols": ws.ncols}) + return sheets + + +@app.route("/api/preview") +def api_preview(): + rel = request.args.get("rel", "") + abspath = os.path.abspath(os.path.join(BASE, rel)) + if not abspath.startswith(DL_ROOT + os.sep) or not os.path.isfile(abspath): + return jsonify({"ok": False, "err": "file not found or forbidden"}), 404 + low = abspath.lower() + if not low.endswith(SHEET_EXT): + return jsonify({"ok": False, "err": "not a spreadsheet", "kind": "other"}), 200 + try: + sheets = _parse_xls(abspath) if low.endswith(".xls") else _parse_xlsx(abspath) + except Exception as e: + return jsonify({"ok": False, "err": str(e)[:200]}), 200 + return jsonify({"ok": True, "name": os.path.basename(abspath), + "rel": rel, "sheets": sheets, + "max_rows": MAX_ROWS, "max_cols": MAX_COLS}) + + +if __name__ == "__main__": + app.run(host="127.0.0.1", port=8788, debug=False, threaded=True) diff --git a/xinrenxinshi/scripts/set_note.py b/xinrenxinshi/scripts/set_note.py new file mode 100644 index 0000000..9616060 --- /dev/null +++ b/xinrenxinshi/scripts/set_note.py @@ -0,0 +1,12 @@ +import os, sqlite3, datetime +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") +NOTE = "该员工自助培训页为嵌入式LMS,持续加载无法稳定截图,已跳过。" +conn = sqlite3.connect(DB) +now = datetime.datetime.now().isoformat(timespec="seconds") +cur = conn.execute( + "UPDATE features SET note=?, updated_at=? WHERE screenshot_path LIKE ?", + (NOTE, now, "%09_我的培训%")) +conn.commit() +print("rows updated:", cur.rowcount) +conn.close() diff --git a/xinrenxinshi/scripts/shot_queue.py b/xinrenxinshi/scripts/shot_queue.py new file mode 100644 index 0000000..0c4057d --- /dev/null +++ b/xinrenxinshi/scripts/shot_queue.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""列出待截图 / 已截图的功能页,供截图流程驱动。 +用法: + python scripts/shot_queue.py # 列出所有 level2 页面(JSON) + python scripts/shot_queue.py --pending # 只列出截图文件尚不存在的页面 +""" +import os, json, sqlite3, sys + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +DB = os.path.join(BASE, "db", "research.db") + + +def main(): + pending = "--pending" in sys.argv + conn = sqlite3.connect(DB) + conn.row_factory = sqlite3.Row + rows = [dict(r) for r in conn.execute( + "SELECT name, full_path, url, screenshot_path FROM features " + "WHERE level=2 ORDER BY sort_order, id").fetchall()] + conn.close() + out = [] + for r in rows: + rel = r["screenshot_path"] + ap = os.path.join(BASE, rel) if rel else "" + exists = bool(ap) and os.path.isfile(ap) + if pending and exists: + continue + out.append({ + "name": r["name"], "full_path": r["full_path"], "url": r["url"], + "rel": rel, "abs": ap.replace("\\", "/"), "exists": exists, + }) + print(json.dumps({"count": len(out), "pages": out}, ensure_ascii=False, indent=2)) + + +if __name__ == "__main__": + main()