Files
nexus/Project/fonrey/PRD/组织人事管理/组织人事管理模块PRD.md
2026-04-30 20:33:51 +08:00

642 lines
38 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PRD: 组织人事管理模块
**状态**: Draft
**作者**: 产品经理
**最后更新**: 2026-04-24v1.2 移除技术实现章节,该部分由独立 DATA_MODEL 文档承载)
**版本**: 1.2
**所属系统**: Fonrey 房产经纪管理系统
**关联模块**: 权限管理、房源管理、客源管理、系统设置
## 变更历史
| 版本 | 日期 | 作者 | 变更说明 |
|------|------|------|---------|
| v1.0 | — | 产品经理 | 初稿 |
| v1.1 | — | 产品经理 | (详见 git 历史) |
| v1.2 | 2026-04-24 | 产品经理 | 移除技术实现章节,该部分由独立 DATA_MODEL 文档承载 |
---
## 1. 问题陈述
### 背景
房产经纪公司普遍存在多层级组织架构(总部 → 事业部 → 大区 → 区域 → 片区 → 门店 → 店组人员流动性极高入职、离职、调岗、复职频繁。传统管理方式纸质档案、Excel导致以下核心痛点
- **组织信息不透明**:架构变更无法实时同步,各部门人员情况只有 HR 知晓,业务管理层无法自助查看当前组织全貌
- **人员异动追踪困难**:调岗、离职、复职等操作缺乏系统记录,无法事后审计,纠纷时无据可查
- **权限与身份管理混乱**:系统账号与员工档案分离管理,账号状态变更(冻结/启用)不能与人事异动联动
- **实名认证合规风险**:房产经纪行业受监管,经纪人身份证信息需与公安系统比对,手工管理容易遗漏,产生合规风险
- **通讯录维护成本高**:员工联系方式散落在微信群、纸质通讯录,新人入职、老员工离职后无法快速更新
- **跨端口账号管理复杂**:经纪人同时使用 58 安居客、中国网络经纪人等第三方平台,账号绑定状态需统一管理
### 目标用户
| 角色 | 描述 | 使用频率 |
|------|------|----------|
| Tenant Admin租户管理员 / Tenant Admin租户管理员 | 负责新增/编辑部门、办理员工入职/离职/调岗,维护账号状态与证件信息 | 每日 |
| 店长 / 区域经理 | 查看本部门组织架构、员工列表,发起入职邀请 | 每日 |
| Agent经纪人 | 查看同事联系方式(通讯录),查看自己的档案信息 | 按需 |
| 公司管理层 | 通过架构图了解全公司组织结构,监控人员异动动态 | 按需 |
---
## 2. 目标与成功指标
| 目标 | 指标 | 当前基准 | 目标值 | 衡量周期 |
|------|------|----------|--------|----------|
| 提升人事操作效率 | 完成一次员工入职录入耗时 | 约 15 分钟(估算) | < 5 分钟 | 上线后 60 天 |
| 降低合规风险 | 实名未认证 / 证件不匹配员工数量 | 待统计 | 0 | 持续 |
| 提升组织透明度 | 管理层查阅组织架构的操作路径步骤数 | 待统计 | ≤ 2 步触达架构图 | 上线后 30 天 |
| 降低异动追踪成本 | 异动记录查询耗时 | 约 30 分钟(估算) | < 1 分钟 | 上线后 60 天 |
| 提升账号管理效率 | 账号冻结/启用操作耗时 | 待统计 | < 30 秒 | 上线后 60 天 |
---
## 3. 非目标(本期不做)
- 不包含薪酬管理、绩效考核、排班管理等 HR 深度功能(后续 OA 模块规划)
- 不包含招聘管理(简历库、面试流程)
- 不包含移动端 App本期为 Web 端,移动端适配为 v2 规划)
- 不包含合同电子签署(合同模块另行规划)
- 不包含考勤打卡系统集成
- 不包含组织架构图的直接编辑(仅展示,编辑通过部门管理页操作)
---
## 4. 用户故事与验收标准
> **说明**:以下用户故事按核心业务流程顺序排列,覆盖组织人事管理模块「组织结构」子模块的全部核心功能。
---
### Story 1管理员查看组织人员列表
**As** Tenant Admin租户管理员/店长,**I want** 在组织结构页面查看公司所有部门及其员工信息,**So that** 能快速掌握当前人员分布并进行管理操作。
**验收标准**
- [ ] 页面入口路径顶部导航「人事」→「组织人事」→「组织结构」面包屑显示「人事OA / 组织人事 / 组织结构」
- [ ] 页面包含两个视图 Tab「组织结构」默认选中和「部门架构图」Tab 切换无需刷新页面
- [ ] 左侧展示部门树形列表,包含:「+ 新增部门」按钮、部门搜索框、「显示已关闭部门」复选框、公司名称(根节点)及各子部门节点(显示员工人数)
- [ ] 点击部门节点后,右侧展示该部门及其下级部门员工列表(可通过「显示下属部门员工」下拉切换)
- [ ] 右上角显示全局系统提示(账号数量上限、实名认证不匹配人数等),提示可点击「立即筛选数据」跳转至对应筛选结果
- [ ] 页面右上角有「员工入黑名单」快捷操作入口
- [ ] 员工列表支持多条件筛选:姓名/工号/电话(文本搜索)、职务(下拉选择)、职务类别(全选/单选)、员工状态(下拉,含已选 N 个计数、审批状态下拉、冻结状态全选、登录账号全选、Tenant Admin租户管理员请选择、入职时间日期范围、离职时间日期范围、显示下属部门员工显示/隐藏)、部门级别(全选)、证件状态(不限)、证件号搜索
- [ ] 点击「查询」按钮执行筛选,点击「清空条件」重置所有筛选项
- [ ] 员工列表支持批量操作:勾选复选框后,可执行「批量调动员工」「批量设置员工上级」,通过「更多」下拉展开更多批量操作
- [ ] 列表操作区包含:「新增员工」(主按钮,带下拉箭头)、「导出员工」、「批量调动员工」、「批量设置员工上级」、「更多」、「员工异动记录」(链接)
- [ ] 员工列表展示列:复选框、头像+姓名/昵称、员工工号、职务、部门、部门级别、上级、电话(脱敏显示,带信息图标)、入职时间、审批状态、操作列(查看 / 异动 / 更多)
- [ ] 异动记录状态(如「入职审」)展示在审批状态列
- [ ] 员工头像旁若有合规风险(如证件不匹配)展示红色警告图标
- [ ] 列表底部分页:显示「共 X 条 上一页 [当前页] 下一页 20 条/页 跳至 [页] 确定」
- [ ] 列表支持水平滚动以展示更多列
---
### Story 2管理员新增部门
**As** Tenant Admin租户管理员**I want** 新增一个业务部门并配置其基本信息,**So that** 新部门能纳入组织架构并支持员工归属。
**验收标准**
- [ ] 点击左侧「+ 新增部门」按钮跳转至「部门新增」页面面包屑显示「人事OA / 组织人事 / 组织结构 / 部门新增」
- [ ] 页面顶部展示业务规则提示(蓝色信息框):
- 1. 店组级别部门必须挂在门店下;
- 2. 经纪人/店管的所属部门只能是门店/店组;
- 3. 经纪人是职务类别为置业顾问的员工;
- [ ] 「部门基本信息」区块包含以下字段:
- **部门名称**(必填,文本输入)
- **上级部门**(必填,关联选择,默认预填为当前登录公司名称,可通过 X 清除并重新选择)
- **部门级别**(必填,单选:事业部 / 大区 / 区域 / 片区 / 门店 / 店组 / 职能)
- **部门地址**(选填,城市下拉 + 县区下拉 + 详细地址文本输入,三段式)
- **部门坐标**(选填,点击「坐标」链接打开地图选点,坐标图标为橙色定位针)
- **部门负责人**(选填,员工关联下拉选择)
- **成立时间**(选填,日期选择器)
- **部门电话**(选填,文本输入)
- **分机范围**(选填,起始分机号 - 结束分机号,两个数字输入框)
- [ ] 底部操作按钮:「保存」(主按钮,橙色)、「取消」(次级按钮)
- [ ] 点击「保存」时校验所有必填字段,未填写时高亮红色错误提示
- [ ] 保存成功后返回组织结构列表并展示成功提示
- [ ] 点击「取消」返回组织结构列表,不保存数据
---
### Story 3管理员编辑部门信息
**As** Tenant Admin租户管理员**I want** 编辑已有部门的基本信息,**So that** 组织信息保持最新准确状态。
**验收标准**
- [ ] 通过部门详情页右上角「编辑」按钮进入「部门编辑」页面面包屑显示「人事OA / 组织人事 / 组织结构 / 部门编辑」
- [ ] 编辑页面包含新增页面的全部字段,且已预填当前部门信息
- [ ] 编辑页面**额外包含**以下字段(新增页不含):
- **部门属性**(必填,单选:直营 / 加盟)
- **部门状态**(单选:启用 / 关闭)
- **部门关联人员**区块(显示该部门的关联人员列表,右上角有「添加人员」操作链接)
- [ ] 部门级别、上级部门修改后若违反业务规则(如店组不在门店下),保存时应提示错误
- [ ] 底部操作按钮:「保存」「取消」,行为与新增页一致
- [ ] 保存成功后返回该部门详情页并展示成功提示
---
### Story 4查看部门详情
**As** 管理员/店长,**I want** 查看某个部门的完整信息,**So that** 能快速了解部门基本情况及关联人员。
**验收标准**
- [ ] 点击左侧部门树节点进入部门详情页标题显示部门名称面包屑显示「人事OA / 组织人事 / 组织结构 / 部门详情」
- [ ] 页面右上角操作按钮:「入职邀请」(次级按钮)、「编辑」(主按钮,橙色)
- [ ] 「部门基本信息」区块展示:部门名称、上级部门、部门级别、部门属性(直营/加盟)、部门地址、部门坐标、部门负责人、成立时间、部门电话、分机范围、部门状态
- [ ] 无内容的字段显示「-」占位
- [ ] 「部门关联人员」区块展示该部门配置的关联人员列表,无关联人员时显示「暂无部门关联人员」空态
---
### Story 5查看部门架构图
**As** 管理层/店长,**I want** 以可视化树状图方式查看公司完整组织架构,**So that** 能直观了解层级关系和各部门人员规模。
**验收标准**
- [ ] 点击「部门架构图」Tab 切换至架构图视图,与「组织结构」列表视图共用顶部 Tab
- [ ] 架构图以树状结构展示,根节点为公司名称(显示总人数),向下展开各级部门节点
- [ ] 每个部门节点卡片展示:部门名称、部门级别标签(如「事业部」标签,蓝色)、部门负责人(未设置时显示「未设置部门负责人」)、部门人数、直属下级数量
- [ ] 部门级别标签颜色区分显示(如:事业部-蓝色、职能-蓝色,不同级别可配置不同颜色)
- [ ] 架构图支持交互操作:
- 点击节点上的展开/折叠图标(「○」)收起/展开子部门
- 缩放:支持放大(+)、缩小(-)、适应窗口(自适应按钮)、重置(刷新按钮)
- 下载:支持导出架构图为图片
- [ ] 右上角工具栏放大、下载、缩小、适应、重置5 个图标按钮)
- [ ] 顶部筛选:「部门」下拉选择(可指定从某部门开始展示)、「显示已关闭部门」复选框
- [ ] 提示文字:「最多 8 个层级数量,可对下图进行拖拽/缩放操作」
- [ ] 架构图支持拖拽画布(平移视图)
---
### Story 6查看员工详情 - 员工基本信息
**As** Tenant Admin租户管理员**I want** 查看某员工的完整档案信息,**So that** 能全面了解员工的任职、个人、来源等情况。
**验收标准**
- [ ] 点击员工列表的「查看」操作进入员工详情页,页面标题显示「[部门名称] [员工姓名]」面包屑显示「人事OA / 组织人事 / 组织结构 / 员工详情」
- [ ] 左侧边栏展示员工卡片:头像、姓名、所属部门、职务标签、工号;下方为详情导航菜单(员工基本信息 / 奖惩记录 / 异动记录 / 账号信息 / 员工相关资料)
- [ ] 「员工基本信息」Tab 包含「编辑」按钮(右上角,橙色),内容分为以下区块:
**任职信息区块**
- 昵称、工号(并排双列)
- 首次入职日期、工龄如「44天」并排
- 复职日期、离职日期(并排)
- 入职次数、状态(正式/试用等)(并排)
- 行业经验、师傅(并排)
- 业务类型、职务(并排)
- 部门、职务类别(并排)
- 部门级别、角色(并排)
- 职级、银行名称(并排)
- 直属上级、联号(并排)
- 开户行、银行卡号
**联系方式区块**
- 「查看员工电话」操作链接(权限控制,非授权角色不可见完整号码)
- 手机号(脱敏显示,如 159\*\*\*\*\*\*96
- 通讯录号码(显示「不隐藏」或「隐藏」状态)
**个人信息区块**
- 「查看员工隐私信息」操作链接(权限控制)
- 真实姓名、证件类型(并排)
- 性别、证件号码(并排,证件号脱敏,后跟「已认证」绿色标签或「未认证」状态)
- 籍贯、出生日期(并排)
- 户籍性质、婚姻状况(并排)
- 政治面貌、有无子女(并排)
- 最高学历、紧急联系人(并排)
- 民族、紧急联系人电话(并排)
- 户口所在地、参加工作时间(并排)
- 住址
**来源信息区块**
- 招聘人、招聘来源(并排)
- 转介人
**备注区块**:表格展示(添加时间 + 备注内容),空时显示「暂无数据」
**工作经历区块**:表格展示(任职时间 / 单位名称 / 担任职务 / 离职原因 / 证明人 / 证明人电话),空时显示「暂无数据」
**教育经历区块**:表格展示(阶段 / 时间段 / 学校名称 / 专业 / 学籍状态 / 学位),空时显示「暂无数据」
**培训经历区块**:表格展示(培训时间 / 培训名称 / 获取证书),空时显示「暂无数据」
**家庭主要成员区块**:表格展示(称谓 / 姓名 / 出生日期 / 职业 / 工作单位 / 联系方式),空时显示「暂无数据」
---
### Story 7查看员工详情 - 异动记录
**As** Tenant Admin租户管理员**I want** 在员工详情页查看该员工的所有人事异动历史,**So that** 能追溯员工入职、调岗、上级变动等完整轨迹。
**验收标准**
- [ ] 在员工详情页左侧导航点击「异动记录」切换至异动记录 Tab
- [ ] 异动记录以表格形式展示,列为:异动时间 / 操作时间 / 类别 / 旧(变动前值)/ 新(变动后值)/ 备注 / 操作人
- [ ] 异动类别枚举包含(不限于):入职、上级变动、员工调动、离职、复职
- [ ] 表格按异动时间倒序排列,最新记录在首行
- [ ] 旧/新字段为空时显示空白(不显示「-」),有值时直接展示变动的内容值
- [ ] 操作人格式为「姓名 - 所属部门」(如「金怡 - 都市港湾店」)
- [ ] 异动记录为只读,无编辑入口
---
### Story 8查看员工详情 - 账号信息
**As** Tenant Admin租户管理员/Tenant Admin租户管理员**I want** 在员工详情页查看和管理该员工的系统账号及第三方平台账号,**So that** 能统一管理员工的登录凭证和外部账号绑定状态。
**验收标准**
- [ ] 在员工详情页左侧导航点击「账号信息」切换至账号信息 Tab
- [ ] 「员工登录系统账号信息」区块,包含两个子区块:
**登录账号区块**
- 账号手机号后跟「登录账号」绿色标签提示文字「此账号也可登录58安居客经纪人」
- 手机号完整显示提示文字「若此手机号无法收到验证码请到58安居客经纪人修改」
- 账号状态(单选:启用 / 冻结,当前状态高亮显示)
**原登录账号区块**
- 账号(显示格式:「[部门名称] [员工姓名]」)
- 密码(密文输入框,可修改)
- 确认密码(密文输入框)
**微信公众号区块**
- 绑定情况(显示「已绑定」/「未绑定」)
- [ ] 「中国网络经纪人账号」区块:
- 以表格形式展示:账号 / 手机号 / 实名信息是否一致
- 账号后显示「登录账号」绿色标签和「跳转中国网络经纪人后台账号」操作链接
- 实名信息一致性显示「一致」/「不一致」
- [ ] 账号状态变更(启用 ↔ 冻结)操作即时生效,无需额外保存步骤
- [ ] 密码修改需两次输入一致才能保存,不一致时提示错误
---
### Story 9查看员工通讯录
**As** 经纪人/员工,**I want** 查看公司所有同事的联系方式,**So that** 能快速找到需要联系的同事并拨打电话。
**验收标准**
- [ ] 通讯录页面入口顶部导航「人事」→「组织人事」→「员工通讯录」或通过标签页打开面包屑显示「人事OA / 组织人事 / 员工通讯录」
- [ ] 顶部筛选区:部门(下拉选择)、职务(下拉选择)、生日(不限/本月生日等选项)、关键字(姓名/电话/分机/邮件文本搜索);「查询」(橙色按钮)、「清除条件」(链接)
- [ ] 通讯录以列表形式展示,列为:部门 / 姓名(含头像)/ 职务 / 性别 / 生日(月-日格式如「10-02」/ 电话(脱敏 + 「拨打」操作链接 + 「查看号码」链接)/ 分机 / 邮箱
- [ ] 电话列显示脱敏号码(如 159\*\*\*\*\*\*96同时提供「拨打」和「查看号码」两个操作
- 「拨打」点击后触发拨号动作(浏览器 tel: 协议或系统拨号)
- 「查看号码」需要有对应权限,授权后展示完整手机号
- [ ] 生日列仅显示月日(不含年份),用于保护隐私同时支持生日提醒功能
- [ ] 通讯录支持分页,底部展示分页控件
- [ ] 无分机、邮箱时显示「-」
---
### Story 10查看组织员工异动记录全局视图
**As** Tenant Admin租户管理员**I want** 在组织结构模块查看全公司所有员工的异动记录汇总,**So that** 能统一审计和追踪所有人事变动。
**验收标准**
- [ ] 异动记录入口组织结构员工列表页右上角「员工异动记录」链接跳转至异动记录汇总页面包屑显示「人事OA / 组织人事 / 组织结构 / 异动记录」
- [ ] 页面标题:「异动记录」
- [ ] 顶部筛选区:类型(下拉,请选择类型)、日期范围(起止日期选择器)、部门(下拉,请选择部门)、操作人(下拉,请选择)、搜索关键字(姓名/员工编号文本输入)、备注(文本输入);「查询」(橙色按钮)、「清空条件」(链接)
- [ ] 操作区:「新增异动记录」按钮、「报表导出」按钮
- [ ] 异动记录表格列:当前部门 / 员工 / 员工编号 / 员工状态 / 当前职务 / 类型 / 旧(变动前)/ 新(变动后)/ 备注 / 操作人 / 异动时间 / 操作时间
- [ ] 类型枚举包含(不限于):入职、上级变动、员工调动、离职、复职
- [ ] 旧/新字段:无值时显示「-」
- [ ] 操作人格式为「所属部门 - 姓名」(如「都市港湾店 - 金怡」)
- [ ] 分页:「共 X 条 上一页 [N] 下一页 [页码列表] 20 条/页 跳至 [页] 确定」(支持大数据量,示例图显示 575 条29 页)
- [ ] 「新增异动记录」功能:支持手动录入异动记录(字段与表格列对应),保存后记录追加至列表
- [ ] 「报表导出」:异步导出当前筛选条件下的异动记录为 Excel触发后显示「正在导出请稍候」提示完成后可下载
---
### Story 11员工离职操作
**As** Tenant Admin租户管理员/店长,**I want** 在组织结构员工列表中对在职员工发起离职操作,**So that** 员工状态及时变更为「离职」,并触发业务数据的归属处理流程。
**验收标准**
- [ ] 离职操作入口员工列表行右侧「异动」下拉菜单中点击「离职」弹出「员工离职」对话框Modal 形式,背景遮罩,不跳转页面)
- [ ] 对话框标题:「员工离职」,右上角有「×」关闭按钮
- [ ] 对话框顶部展示该员工**业务信息统计**
- 房源数量564
- 客源数量21
- 营销客数量3
- 数据以「标签 + 数值」形式并排展示,帮助操作人了解离职影响范围
- [ ] 对话框中部展示红色警示提示文字:「注:若不转给任何账号,则离职成功后业务信息仍属于该离职员工 转移业务归属」,其中「转移业务归属」为可点击的操作链接(跳转至业务归属转移页面)
- [ ] 表单字段(全部必填):
- **离职日期**(必填,日期选择器,默认空)
- **离职类型**(必填,下拉选择,枚举由运营维护,如:自离、协商离职、辞退等)
- **备注**选填多行文本输入框占位符「50字以内」
- [ ] 底部操作按钮:「确定」(橙色主按钮)、「取消」(次级按钮)
- [ ] 点击「确定」时校验必填字段:离职日期、离职类型均未填时拦截提交并高亮错误提示
- [ ] 离职操作成功后:
- 员工状态变更为「离职」
- 在员工异动记录中自动生成一条类型为「离职」的异动记录,记录离职日期、离职类型、备注及操作人
- 员工列表中该员工行状态更新,不再计入在职账号数
- 展示「操作成功」Toast 提示
- [ ] 点击「取消」或「×」关闭对话框,不执行任何操作
- [ ] 离职操作需有权限控制,非授权角色不显示「离职」操作入口
---
### Story 12员工调动操作
**As** Tenant Admin租户管理员**I want** 通过右侧抽屉面板对员工发起调动操作并修改其部门、上级、职务等信息,**So that** 员工的组织归属变更即时生效并留下完整的调动记录。
**验收标准**
- [ ] 调动操作入口:员工列表行右侧「异动」下拉菜单中点击「调动」,从页面右侧滑出「员工调动」抽屉面板(不跳转页面,背景列表可见但交互禁用)
- [ ] 抽屉面板标题:「员工调动」,显示被调动员工姓名(如「周炜 的业务信息统计」)
- [ ] 抽屉顶部展示该员工**业务信息统计**
- 房源数量13
- 红色警示提示文字:「注:若不转给任何账号,则业务信息跟随到新部门 转移业务归属」,「转移业务归属」为可点击操作链接
- [ ] 表单采用「调动前 → 调动后」双列对比布局,左列为「调动前」(只读展示当前值),右列为「调动后」(可编辑):
| 字段 | 必填 | 调动前(只读) | 调动后(可编辑) |
|------|------|---------------|-----------------|
| 调动日期 | 必填 | — | 日期选择器,默认今日 |
| 分类 | — | — | 文本说明(如「此次调动为:平调」,系统自动判断) |
| 部门 | 必填 | 当前部门(如「上海豪园店二组」)| 部门选择器(带清除按钮 ○)|
| 部门级别 | — | 当前部门级别(如「店组」)| 自动跟随部门联动,只读 |
| 职务 | 必填 | 当前职务(如「高级业务员」)| 职务下拉选择器 |
| 职务类别 | — | 当前职务类别(如「置业顾问」)| 自动跟随职务联动,只读 |
| 职级 | — | 当前职级如「3」| 数字输入框 |
| 员工状态 | — | 当前状态(如「正式」)| 状态下拉选择器 |
| 角色 | 必填 | 当前角色(如「高级业务员」)| 角色多选选择器(支持添加多个角色标签) |
| 直属上级 | 必填 | 当前上级(如「刘文龙」)| 员工选择器(格式「部门-姓名」,如「上海豪园店二组-刘文龙 ○」)+ 「无直属上级」复选项 |
| 直属下级 | — | 当前下级 | 「+ 添加该员工工直属下级」操作链接 |
- [ ] 调动日期说明文字:「若日期为今日之前的日期,若当天有已提交的日报,当天之后的日报将进行调动」
- [ ] 调动分类由系统根据调动前后部门级别自动判断:同级调动显示「平调」,晋升显示「晋升」,降职显示「降职」
- [ ] 备注字段选填多行文本提示「备注内容不超过30个字符」字数实时计数
- [ ] 底部操作按钮:「提交」(橙色主按钮)、「取消」(次级按钮),按钮固定在抽屉底部
- [ ] 点击「提交」校验必填字段,未填写时在对应字段旁展示红色错误提示
- [ ] 调动成功后:
- 员工部门、上级、职务等信息即时更新
- 自动生成异动记录,类型为「员工调动」,记录调动前/后各字段变化值、调动日期、备注及操作人
- 关闭抽屉列表数据刷新展示「操作成功」Toast 提示
- [ ] 点击「取消」或抽屉外部区域关闭抽屉,不执行操作
---
### Story 13查看员工奖惩记录
**As** Tenant Admin租户管理员/店长,**I want** 在员工详情页查看该员工的所有奖惩记录,**So that** 能了解员工的奖励与处罚历史,作为绩效管理和晋升的参考依据。
**验收标准**
- [ ] 在员工详情页左侧导航点击「奖惩记录」切换至奖惩记录 Tab当前选中项高亮橙色文字 + 左侧橙色指示条)
- [ ] 页面右上角有「新增」按钮(橙色),用于发起新增奖惩记录操作
- [ ] 奖惩记录以表格形式展示,列为:日期 / 奖惩类别 / 奖惩名称 / 备注 / 操作
- [ ] 无记录时表格内展示空态文字「暂无数据」,居中显示
- [ ] 操作列包含每条记录的「编辑」和「删除」操作(具体操作入口待补充截图确认)
- [ ] 表格按日期倒序排列,最新记录在首行
---
### Story 14新增员工奖惩记录
**As** Tenant Admin租户管理员**I want** 在员工奖惩记录页面新增一条奖惩记录,**So that** 员工的奖励或处罚情况被系统留档,可追溯查询。
**验收标准**
- [ ] 点击奖惩记录页面右上角「新增」按钮弹出「新增奖惩记录」对话框Modal 形式,标题「新增奖惩记录」,右上角有「×」关闭按钮)
- [ ] 对话框表单字段:
- **奖惩日期**必填日期选择器默认填充当日日期如「2026-04-24」可修改
- **奖惩类别**(必填,下拉选择器,枚举值由系统/运营维护,区分奖励类与惩戒类)
- **奖惩名称**(必填,下拉选择器,与奖惩类别存在联动关系,选择类别后名称列表随之过滤)
- **备注**(选填,多行文本输入框,占位符「请输入备注」)
- [ ] 必填字段均标有红色「*」前缀标识
- [ ] 底部操作按钮:「确定」(橙色主按钮)、「取消」(次级按钮)
- [ ] 点击「确定」时校验所有必填字段,未填写时在字段下方展示红色错误提示,阻止提交
- [ ] 保存成功后:
- 对话框关闭
- 奖惩记录列表中新增该条记录
- 展示「保存成功」Toast 提示
- [ ] 点击「取消」或「×」关闭对话框,不保存任何数据
---
## 5. 解决方案概述
### 5.1 整体架构
组织人事管理模块人事OA作为 Fonrey 系统的组织底座,承担三大核心职责:
1. **组织结构维护**:多层级部门树管理(最多 8 层),支持直营/加盟属性区分
2. **员工档案管理**:员工入职到离职的完整生命周期档案,含任职信息、个人信息、账号信息
3. **人事异动追踪**:所有人事变动自动记录异动日志,支持全局汇总查询与个人维度查询
### 5.2 部门层级模型
系统支持以下部门级别(按层级从高到低):
| 级别 | 说明 | 约束规则 |
|------|------|----------|
| 事业部 | 最高业务单元 | 挂在公司根节点下 |
| 大区 | 跨城市/跨区域管理单元 | — |
| 区域 | 区域管理层 | — |
| 片区 | 片区管理层 | — |
| 门店 | 独立经营单元(实体店铺) | 经纪人/店管只能归属此级或下级 |
| 店组 | 门店下的小组 | 必须挂在门店下 |
| 职能 | 后台支撑部门(行政/财务等)| — |
**业务约束规则**
- 店组级别部门必须挂在门店下
- 经纪人/店管的所属部门只能是门店/店组
- 经纪人是职务类别为「置业顾问」的员工
### 5.3 员工档案结构
员工档案分五大模块通过左侧导航访问:
```
员工详情
├── 员工基本信息(任职信息 / 联系方式 / 个人信息 / 来源信息 / 备注 / 工作经历 / 教育经历 / 培训经历 / 家庭主要成员)
├── 奖惩记录
├── 异动记录
├── 账号信息(系统登录账号 / 原登录账号 / 微信公众号 / 中国网络经纪人账号)
└── 员工相关资料
```
### 5.4 账号体系设计
员工账号与多个平台关联:
| 账号类型 | 说明 |
|----------|------|
| 系统登录账号 | Fonrey 系统主账号,以手机号为账号,支持启用/冻结 |
| 原登录账号 | 系统内部账号(部门+姓名格式),支持密码设置 |
| 微信公众号 | 绑定公众号用于消息通知,显示绑定状态 |
| 58安居客经纪人 | 系统账号同时可登录 58 安居客平台 |
| 中国网络经纪人 | 显示绑定账号及实名一致性状态,提供跳转链接 |
### 5.5 数据脱敏策略
| 数据类型 | 默认展示 | 授权后展示 |
|----------|----------|------------|
| 手机号 | 159\*\*\*\*\*\*96 | 15901850696 |
| 证件号码 | 410\*\*\*\*\*\*\*\*\*\*3037 | 完整号码 |
| 通讯录号码 | 脱敏显示 | 点击「查看号码」后展示 |
---
## 6. 技术考量
### 6.1 依赖关系
| 系统/模块 | 依赖原因 | 优先级风险 |
|-----------|---------|-----------|
| 登录管理模块 | 员工账号的创建、冻结、密码重置由登录模块提供接口 | 高 |
| 权限管理模块 | 员工的角色/权限分配在人事模块发起,权限模块执行 | 高 |
| 系统配置模块 | 职务类别、部门级别、奖惩类型等枚举值从系统配置读取 | 中 |
### 6.2 核心技术设计
#### 6.2.1 组织树存储方案
采用 **Closure Table闭包表** 存储多层级部门树,最大支持 8 层嵌套:
| 方案 | 优点 | 缺点 | 选用理由 |
|------|------|------|---------|
| Adjacency List | 写入简单 | 递归查询慢,需多次 SQL | ❌ 不适合 8 层嵌套 |
| Nested Set | 读取极快 | 写入时需重排序,高并发写冲突大 | ❌ 人事模块写入频繁 |
| **Closure Table** | 读写均衡,查询任意层级 O(1) | 存储量略多 | ✅ **选用** |
**数据结构**
```python
class OrgUnit(TenantModel): # 部门节点
id = UUIDField(primary_key=True)
name = CharField(max_length=100)
level = CharField(choices=['事业部','大区','区域','片区','门店','店组','职能'])
parent = ForeignKey('self', null=True, on_delete=PROTECT) # 直接父节点
is_direct = BooleanField(default=True) # True=直营, False=加盟
deleted_at = DateTimeField(null=True)
class OrgUnitClosure(TenantModel): # 闭包表
ancestor = ForeignKey(OrgUnit, related_name='descendants')
descendant = ForeignKey(OrgUnit, related_name='ancestors')
depth = IntegerField() # 0=自身, 1=子, 2=孙...
```
**查询示例**
- 查某节点所有子孙:`WHERE ancestor_id = X AND depth > 0`
- 查某节点完整路径:`WHERE descendant_id = X ORDER BY depth DESC`
- 移动节点:删除旧闭包记录 + 插入新闭包记录(事务内执行)
#### 6.2.2 员工状态机
员工在系统内的状态须通过后端状态机严格控制:
```
[录入] ──► 试用期 ──► 正式 ──► 离职
│ │
└──────────────┘
复职
试用期 / 正式(恢复上次状态)
```
| 状态 | 允许流转目标 | 触发方式 |
|------|------------|---------|
| 试用期 | 正式、离职 | 管理员手动操作 |
| 正式 | 离职 | 管理员手动操作 |
| 离职 | 复职 | 管理员手动操作 |
| 冻结 | 启用(需先恢复员工状态) | 账号冻结操作 |
**实现要求**
- 每次状态变更写入 `StaffChangeLog`(异动记录表),字段包含:变更人、变更类型、变更前后值、变更时间、备注
- 员工离职时,系统自动:① 冻结关联登录账号 ② 解除权限角色 ③ 归属客源触发掉公检查
- 员工状态变更失败返回明确错误码,前端展示友好提示
#### 6.2.3 异动记录审计策略
异动记录为**只追加append-only**设计,不支持修改或删除:
| 异动类型枚举 | 触发场景 |
|------------|---------|
| 入职 | 员工首次录入系统 |
| 转正 | 试用期转为正式员工 |
| 调岗 | 员工所属部门变更 |
| 上级变动 | 直接上级变更 |
| 离职 | 办理离职手续 |
| 复职 | 离职员工重新入职 |
| 账号冻结 | 账号被冻结 |
| 账号启用 | 账号从冻结恢复 |
```python
class StaffChangeLog(TenantModel):
staff = ForeignKey(Staff)
change_type = CharField(choices=[...]) # 见枚举表
before_value = JSONField(null=True) # 变更前状态快照
after_value = JSONField(null=True) # 变更后状态快照
operator = ForeignKey(User)
remark = TextField(blank=True)
created_at = DateTimeField(auto_now_add=True)
# 无 updated_at / deleted_at — append-only
```
#### 6.2.4 敏感数据脱敏
| 数据 | 存储方式 | 展示方式 | 查看权限 |
|------|---------|---------|---------|
| 手机号 | AES-256-GCM 加密 + SHA-256 哈希索引 | `159****9696` | 需「查看员工手机号」权限,留操作日志 |
| 证件号码 | AES-256-GCM 加密 | `410***********3037` | 需「查看员工证件」权限,留操作日志 |
| 通讯录号码 | AES-256-GCM 加密 | 脱敏显示 | 点击「查看号码」后临时展示,留痕 |
### 6.3 已知风险
| 风险 | 可能性 | 影响 | 缓解措施 |
|------|--------|------|---------|
| 大型机构部门树深度超过 8 层 | 低 | 中 | 前端录入时限制最大深度,超出提示联系运营调整 |
| 员工大批量导入时账号创建并发冲突 | 中 | 中 | 批量导入走 Celery 异步任务,序列化账号创建 |
| 组织调整时历史客源/房源归属关系错乱 | 中 | 高 | 员工调岗不改变现有资源归属,仅更新组织关系;业务重新分配由管理员手动操作 |
### 6.4 待确认问题
- [ ] 员工工号规则:系统自动生成还是管理员手动填写?格式约定是什么? — 待业务确认 — 开发前必须明确
- [ ] 「复职」时是否复用原有账号?还是重新创建新账号? — 待产品/法务确认
- [ ] 部门移动操作(将某节点及其子树挂到新父节点)是否在 MVP 范围内? — 待产品确认
---
## 7. 上线计划
| 阶段 | 时间 | 受众 | 验收门槛 |
|------|------|------|----------|
| 内部 Alpha | 开发完成后 1 周 | 产品+研发团队 | 核心流程无 P0 Bug部门 CRUD 功能完整 |
| 封闭 Beta | Alpha 后 2 周 | 2-3 家种子客户 HR | 错误率 < 5%,员工录入/异动记录功能可用 |
| 正式上线 | Beta 验收通过后 | 全量租户 | 各指标达到第 2 节目标值 |
**回滚标准**:若上线后 48 小时内系统错误率超过 2% 或出现员工数据泄露事件,立即回滚并通知所有租户管理员。
---
## 8. 附录
### 8.1 截图来源
| 截图文件路径 | 对应功能 |
|-------------|----------|
| `screenshots/组织人事/组织结构/公司组织结构.png` | Story 1 — 组织人员列表页 |
| `screenshots/组织人事/组织结构/员工详情.png` | Story 6 — 员工基本信息详情 |
| `screenshots/组织人事/组织结构/员工通讯录.png` | Story 9 — 员工通讯录 |
| `screenshots/组织人事/组织结构/员工详情异动记录.png` | Story 7 — 员工异动记录(个人维度)|
| `screenshots/组织人事/组织结构/员工详情账号信息.png` | Story 8 — 员工账号信息 |
| `screenshots/组织人事/组织结构/部门新增.png` | Story 2 — 新增部门 |
| `screenshots/组织人事/组织结构/部门编辑.png` | Story 3 — 编辑部门 |
| `screenshots/组织人事/组织结构/部门详情.png` | Story 4 — 部门详情 |
| `screenshots/组织人事/组织结构/组织员工异动记录.png` | Story 10 — 全局异动记录汇总 |
| `screenshots/组织人事/组织结构/部门架构图.png` | Story 5 — 部门架构图 |
| `screenshots/组织人事/组织结构/员工离职.png` | Story 11 — 员工离职操作Modal 弹窗)|
| `screenshots/组织人事/组织结构/员工调动.png` | Story 12 — 员工调动操作(右侧抽屉面板)|
| `screenshots/组织人事/组织结构/员工奖惩记录.png` | Story 13 — 员工奖惩记录列表 |
| `screenshots/组织人事/组织结构/员工奖惩记录新增.png` | Story 14 — 新增奖惩记录Modal 弹窗)|
### 8.2 术语表
| 术语 | 定义 |
|------|------|
| 异动 | 员工人事状态变化的统称,包含入职、离职、调岗、复职、上级变动等 |
| 店组 | 门店内的业务小组,是经纪人的最小管理单元 |
| 职能部门 | 非业务线部门,如行政、财务等后台支撑部门 |
| 直营 | 公司直接运营的门店/部门 |
| 加盟 | 加盟商运营的门店/部门 |
| 工龄 | 员工首次入职日期至今的天数,系统自动计算 |
| 通讯录号码 | 员工在通讯录中展示的联系号码,可设置隐藏 |
| 中国网络经纪人 | 国家级房产经纪人实名注册平台,经纪人需在此平台实名认证 |