# 组织人事 UI 设计文档 > **任务编号**:07(P0-C) > **覆盖范围**:`US-ORG-001 ~ US-ORG-003`(组织结构维护 / 员工列表维护 / 员工入职账号创建) > **输出文件**:`UI_DESIGN/组织人事_UI.html` > **设计基线**:`UI_SYSTEM/UI_SYSTEM.md`(后台壳层、表格、分页、Modal/Drawer、树形选择器) > **需求依据**: > - `PRD/TASK.md`(US-ORG-001~003) > - `PRD/组织人事管理/组织人事管理模块PRD.md` > - `DATA_MODEL/DATA_MODEL_ORG.md` > **竞品截图参考**: > - `screenshots/组织人事/组织结构/公司组织结构.png` > - `screenshots/组织人事/组织结构/部门新增.png` > - `screenshots/组织人事/组织结构/部门编辑.png` > - `screenshots/组织人事/组织结构/部门详情.png` > - `screenshots/组织人事/组织结构/部门架构图.png` > - `screenshots/组织人事/组织结构/员工信息编辑.png` > - `screenshots/组织人事/组织结构/员工离职.png` > - `screenshots/组织人事/组织结构/员工调动.png` > - `screenshots/组织人事/组织结构/员工通讯录.png` > - `screenshots/组织人事/职务管理/职务管理.png` --- ## 1. 目标与范围 ### 1.1 页面目标 组织人事页面用于承载 3 个 P0 核心能力: 1. **组织结构维护(US-ORG-001)** - 左侧组织树支持新增/编辑/删除部门 - 删除有员工部门时阻断并提示 2. **员工列表维护(US-ORG-002)** - 支持姓名/工号/手机号关键词检索 - 支持部门/状态筛选 - 员工姓名可进入员工详情 3. **员工入职与账号创建(US-ORG-003)** - 入职表单必填校验(姓名/手机号/所属门店/职位) - 创建后自动生成初始密码并给出发送提示 - 新员工立即进入组织数据并可用于后续选择器 ### 1.2 本任务边界 - ✅ 包含:壳层、组织树、员工表格、架构图视图、通讯录视图、部门弹窗、入职抽屉、离职弹窗、调动抽屉、员工详情抽屉、异动记录弹窗 - ✅ 包含:关键必填校验、批量操作启用态、分页演示、Toast 反馈 - ⛔ 不包含:真实后端接口、真实地图服务、真实短信发送、真实权限系统 --- ## 2. 信息架构 ### 2.1 统一壳层 - **Top Bar(56px)**:品牌 + 一级导航 + 用户区 - **Sidebar(240px)**:组织人事二级导航 - **Main Content(`ml-60 pt-[72px]`)**: 1. 面包屑 + 页面标题 2. 主 Tab(组织结构 / 部门架构图 / 员工通讯录) 3. 各视图内容 ### 2.2 组织结构视图(默认) #### 左栏:组织树 - 新增部门按钮 - 部门搜索 - 显示已关闭部门复选 - 树节点(名称 + 在职人数) - 行内操作:编辑 / 删除 #### 右栏:员工管理 1. 顶部预警条(账号上限、证件不匹配) 2. 筛选区(关键词、职务、状态、审批状态、入职时间、部门级别等) 3. 操作区(新增员工、导出员工、批量调动、批量设置上级、更多、员工异动记录) 4. 员工表格(姓名、工号、职务、部门、上级、电话、入职时间、审批状态、操作) 5. 分页区 ### 2.3 部门架构图视图 - 顶部筛选:部门下拉、显示已关闭部门 - 说明文案:最多 8 层,支持拖拽缩放 - 工具栏:放大、缩小、导出、适配、重置 - 树状节点卡片:部门名、级别标签、负责人、人数、直属下级 ### 2.4 员工通讯录视图 - 筛选:部门、职务、生日、关键字 - 表格:部门、姓名、职务、性别、生日、电话、分机、邮箱 - 电话操作:拨打 / 查看号码 - 分页演示 --- ## 3. 关键交互设计 ### 3.1 组织树维护 - 点击节点切换右侧员工列表范围 - 新增部门弹窗:保存后实时加入树 - 编辑部门弹窗:字段预填并支持状态/属性调整 - 删除部门: - 若该部门(含下级)仍有员工,阻断并提示 - 无员工时删除成功 - 组织树变更后,部门下拉/调动选择器实时更新(同页数据源) ### 3.2 员工列表筛选与批量 - 关键词支持:姓名 / 工号 / 手机号 - 部门筛选 + “显示下属部门员工”开关 - 状态筛选(正式/试用/冻结/离职) - 批量按钮在未勾选时禁用,勾选后启用 ### 3.3 新增员工(入职)抽屉 #### 必填字段 - 姓名 - 手机号 - 所属门店/店组 - 职务 #### 联动逻辑 - 选择职务后自动带出:职务类别、默认角色 - 仅允许选择门店/店组作为所属部门 #### 提交结果 - 自动生成初始密码 - 弹窗展示账号与密码(模拟发送) - 新员工立即进入列表,审批状态置为“入职审” ### 3.4 员工离职弹窗 - 顶部展示业务统计(房源数/客源数/营销客数) - 必填:离职日期、离职类型 - 可选:备注 - 成功后:员工状态改为“离职”,并写入异动记录 ### 3.5 员工调动抽屉 - “调动前 / 调动后”双列对照 - 必填:调动日期、部门、职务、角色、直属上级(或勾选无直属上级) - 备注最多 30 字 - 调动成功后更新员工归属并写入异动记录 ### 3.6 员工详情抽屉 - 左侧:头像、姓名、部门、职务、工号 - 右侧 Tab:员工基本信息 / 异动记录 / 账号信息 - 列表点击姓名触发打开 --- ## 4. 状态矩阵 | 状态 | 触发 | 页面反馈 | |---|---|---| | 默认态 | 首次进入 | 展示组织结构视图 + 默认部门员工 | | 树节点切换 | 点击部门节点 | 右侧员工列表按节点刷新 | | 查询态 | 输入条件并查询 | 列表过滤结果更新 | | 空结果态 | 条件过严 | 表格空状态“暂无匹配数据” | | 批量勾选态 | 勾选复选框 | 批量按钮启用 + 已选计数 | | 新增员工校验失败 | 缺失必填 | 字段红字错误提示,不提交 | | 部门删除拦截 | 部门有员工 | Toast 提示并阻断删除 | | 离职/调动成功 | 表单校验通过 | 更新列表 + 写异动日志 + Toast | | 主题策略 | 后台统一视觉 | 页面内不包含 Light/Dark/System 切换控件 | --- ## 5. 字段与数据模型映射(DATA_MODEL_ORG) | UI 字段 | 数据模型字段 | |---|---| | 部门名称 | `org_units.name` | | 部门级别 | `org_units.type` | | 上级部门 | `org_units.parent_id` | | 部门属性 | `org_units.attribute` | | 部门状态 | `org_units.is_active` | | 员工姓名 | `staff.name` | | 员工工号 | `staff.employee_no` | | 职务 | `staff.job_title` | | 职务类别 | `staff.job_category` | | 所属部门 | `staff.org_unit_id` | | 员工状态 | `staff.status` | | 手机号(脱敏显示) | `staff.phone_enc` + 展示脱敏规则 | | 入职日期 | `staff.first_joined_at` | | 离职日期 | `staff.resigned_at` | | 异动类型 | `staff_transfer_logs.transfer_type` | | 异动时间 | `staff_transfer_logs.transfer_date` | | 操作人 | `staff_transfer_logs.operator_id` | | 账号平台绑定 | `staff_accounts.platform / is_bound` | --- ## 6. 可访问性与实现规范 - 表格列头使用 `` - 图标按钮补充 `aria-label` - Modal/Drawer 支持 `Esc` 关闭 - 必填错误信息使用文本提示,不仅靠颜色 - 焦点统一 `focus-visible:ring-2 focus-visible:ring-primary-600/40` - 所有关键操作给出 Toast 反馈 - 页面遵循既有后台浅色视觉,不加入主题切换控件 --- ## 7. 验收清单(本轮) - [x] 覆盖 US-ORG-001:组织树增改删 + 删除拦截 - [x] 覆盖 US-ORG-002:员工关键词/部门/状态筛选 + 姓名详情入口 - [x] 覆盖 US-ORG-003:入职必填校验 + 自动密码 + 成功入列 - [x] 竞品关键结构已映射:组织树、架构图、离职弹窗、调动抽屉、通讯录 - [x] 页面不含 Light/Dark/System 切换控件 - [ ] 控制台 0 报错(待本地预览验证) --- ## 8. 后续衔接 - 本任务评审通过后进入任务 08:权限管理(US-PERMISSION-001~005) - 组织结构与员工数据将作为权限人员列表、角色分配的数据基础