Skip to content

组织架构管理 PRD

文档信息

项目内容
产品名称PMForge - 组织架构管理
文档版本v2.0
创建日期2026-09-13
最后更新2026-09-24
文档状态评审中
优先级P0
所属模块系统管理
前端路由/system/dept(部门管理)、/system/post(岗位管理)

一、功能概述

1.1 功能定位

组织架构管理是系统的"骨架搭建"模块——就像一家公司在 HR 系统中录入自己的组织架构图一样。它包含两部分:

  • 部门管理:维护公司的部门树(公司 → 事业部 → 部门 → 小组),是一棵从上到下生长的"树"
  • 岗位管理:维护公司里的岗位类型(产品经理、前端工程师、测试工程师),是一个扁平的"清单"

部门和岗位组合起来,就能精确描述一个员工在组织中的位置——"研发部-后端组"的"高级 Java 工程师"。

为什么部门和岗位要分开管理?因为部门是"你在哪个团队",岗位是"你做什么工作"。同一个人可以是"研发部"的"高级工程师",调岗时部门不变但岗位变了;部门合并时岗位不变但归属变了。两者独立管理才够灵活。

1.2 目标用户

用户类型使用场景核心诉求
超级管理员管理整个组织架构,创建顶级部门、设置部门负责人搭建和维护完整的组织架构
租户管理员管理本租户内的组织架构,创建和维护部门与岗位在自己租户内建立组织体系
部门管理者查看本部门及子部门的人员结构、统计数据了解团队人员构成
普通用户在个人中心查看所属部门、岗位信息(只读)确认自己的组织归属

1.3 业务价值

价值维度说明
🏢 组织可视化树形结构清晰展示公司完整组织架构
👥 人员归属每个用户都有明确的部门和岗位归属
📊 数据权限基础数据权限的"本部门""本部门及子部门"依赖部门树
🔄 灵活调整支持部门新增、合并、拆分、停用,适应企业发展
📈 统计分析为部门级人员统计、组织分析提供数据基础

1.4 功能范围

功能分类后台管理端前台用户端
部门树形列表
部门新增/编辑/删除
部门状态管理
部门负责人设置
部门人员查看
部门统计
岗位分页列表
岗位新增/编辑/删除
岗位导出
个人中心展示

二、用户场景

2.1 用户角色

角色描述核心诉求
超级管理员系统最高权限管理整个组织架构,不受租户限制
租户管理员租户内最高权限在本租户内建立和维护组织架构
部门管理者某部门的负责人查看本部门及下级部门人员情况
普通用户系统使用者在表单中选择/查看部门、岗位信息

2.2 使用场景

场景1:新公司入驻——初始化组织架构

  • 用户:租户管理员小王
  • 场景:公司初次使用 PMForge → 小王进入组织架构 → 部门管理 → 创建顶级节点"PMForge 科技有限公司" → 在其下创建一级部门"研发中心""产品部""市场部""行政部" → 在"研发中心"下继续创建"前端组""后端组""测试组" → 为每个部门设置负责人
  • 期望:通过树形结构清晰展示公司完整组织架构,快速搭建完成
  • 异常处理:如果部门名称为空,提示"请输入部门名称";如果设置负责人时搜索不到目标用户,提示"未找到匹配用户"

场景2:组织架构调整——部门迁移

  • 用户:租户管理员小王
  • 场景:公司决定将"前端组"从"研发中心"调整到"产品部" → 小王编辑"前端组" → 将上级部门改为"产品部" → 保存 → 树形结构自动更新
  • 期望:支持部门层级调整,调整后树形结构立即更新
  • 异常处理:如果试图将上级部门设为自身或其子孙部门,系统提示"不能将部门设为自身或子部门的下级,会造成循环引用"

场景3:部门撤销——停用而非删除

  • 用户:租户管理员小王
  • 场景:公司撤销"创新业务部" → 但该部门的历史数据(项目、文档)还需要保留 → 小王选择"停用"该部门 → 停用后该部门在下拉选项中不再出现(新建用户时选不到它) → 但已有用户和历史数据中仍保留部门信息
  • 期望:部门停用不影响已有用户数据,只在下拉选项中隐藏
  • 异常处理:如果该部门下有子部门且子部门还在使用,系统提示"请先停用或迁移所有子部门"

场景4:新增岗位体系

  • 用户:租户管理员小王
  • 场景:公司岗位体系需要细化 → 小王进入岗位管理 → 批量新增"初级工程师""中级工程师""高级工程师""技术专家"等岗位 → 设置编码和排序 → 后续在用户管理中就可以为员工分配这些岗位
  • 期望:快速新增岗位,用户管理时可选新岗位

场景5:部门经理查看团队

  • 用户:研发部负责人老张
  • 场景:老张需要了解团队人员构成 → 进入部门管理 → 点击"研发中心"节点 → 查看该部门及子部门下所有人员列表 → 看到前端组 5 人、后端组 8 人、测试组 3 人 → 了解各部门人员分布
  • 期望:快速查看部门下所有成员及其岗位信息

场景6:年底岗位盘点

  • 用户:行政主管陈姐
  • 场景:年底需要整理岗位台账 → 陈姐进入岗位管理 → 筛选"启用"状态 → 点击"导出" → 下载 Excel → 包含所有岗位的名称、编码、排序、状态、备注
  • 期望:导出的 Excel 字段完整、状态用中文显示

场景7:新员工入职选择部门岗位

  • 用户:HR 小李
  • 场景:新员工入职 → 小李在用户管理中创建用户 → 所属部门字段弹出树形下拉 → 选择"研发中心-后端组" → 岗位字段弹出下拉 → 选择"中级工程师" → 保存
  • 期望:部门和岗位以下拉形式提供,选择方便快捷

2.3 用户故事

编号用户故事优先级验收标准
US-01作为管理员,我希望以树形结构查看公司所有部门,以便了解组织架构全貌P0① 部门以树形展示,支持展开/折叠 ② 每个节点显示名称、负责人、状态 ③ 500 个部门内渲染流畅
US-02作为管理员,我希望能创建和编辑部门信息,以便维护组织架构P0① 支持选择上级部门 ② 不能将上级设为自身或子孙部门 ③ 保存后树形结构立即更新
US-03作为管理员,我希望能设置部门负责人,以便明确管理责任P0① 从用户列表中搜索选择 ② 显示负责人姓名
US-04作为管理员,我希望能停用/启用部门,以便灵活管理组织变更P0① 停用后下拉选项中隐藏 ② 已有用户数据不受影响 ③ 有子部门的不能直接停用
US-05作为管理员,我希望能删除不再使用的部门,以便保持架构整洁P0① 有子部门时不能删除 ② 有关联用户时不能删除 ③ 删除前二次确认
US-06作为管理员,我希望创建/编辑用户时能从树形下拉中选择部门P0① 下拉展示完整部门树 ② 只展示启用状态的部门
US-07作为管理员,我希望查看某部门下的所有人员列表P1① 默认包含子部门人员 ② 可切换为"仅本部门" ③ 支持搜索和筛选
US-08作为管理员,我希望能以分页方式查看和管理岗位列表P0① 分页展示 ② 支持按名称/编码/状态搜索
US-09作为管理员,我希望能创建/编辑/删除岗位P0① 岗位编码全局唯一 ② 有关联用户时不能删除
US-10作为管理员,我希望能导出岗位数据P1① 导出 Excel 字段完整 ② 状态翻译为中文

三、功能需求

3.1 后台管理端 - 部门管理

3.1.1 功能清单

功能优先级说明
部门树形列表P0以树形结构展示所有部门,支持展开/折叠
搜索筛选P0按部门名称、状态筛选
新增部门P0创建部门节点,指定上级部门
编辑部门P0修改部门名称、负责人、联系方式、排序、状态等
删除部门P0删除单个部门,需校验子部门和人员
批量删除P1批量选择并删除多个部门
状态切换P0开启/停用部门
设置负责人P0从用户列表中选择部门负责人
调整排序P0通过排序字段控制同级部门的展示顺序

3.1.2 部门树形列表

页面描述:

部门树形列表页面线框图

  • 页面采用全幅树形布局
  • 顶部:搜索栏(部门名称输入框、状态下拉选择、查询/重置按钮)
  • 主体:树形结构展示所有部门,每个节点显示部门名称、排序值、状态标签、负责人、操作按钮
  • 操作列:编辑、新增子部门、删除
  • 顶部工具栏:新增顶级部门、展开全部、折叠全部、批量删除

业务规则:

规则编号规则描述为什么这样设计
R-01默认按排序值升序排列,同 sort 值按创建时间升序管理员可自定义展示顺序
R-02树的根节点 parentId 为 0统一根节点标识
R-03支持按部门名称模糊搜索,搜索结果仍保持树形结构搜索子部门时需要看到它的父级链路
R-04支持按状态筛选,筛选后仍保持树形结构快速定位停用部门
R-05超级管理员可以看到所有部门超管需要管理全系统
R-06租户管理员只能看到本租户内的部门租户间数据隔离
R-07部门以树形全量返回(非分页)部门总量通常不大,树形展示更直观
R-08停用状态的部门在树中仍显示,但标记为"已停用"标签让管理员知道这个部门还存在但已停用
R-09不展示已逻辑删除的部门已删除的不应出现

数据字段:

字段名类型说明
idLong部门ID
nameString部门名称
parentIdLong父部门ID(0 为顶级)
sortInteger显示顺序
leaderUserIdLong负责人的用户ID
leaderNameString负责人姓名(前端展示用,非直接存储)
phoneString联系电话
emailString邮箱
statusInteger状态(0-开启 1-关闭)
createTimeDateTime创建时间
childrenList子部门列表(前端构建树形结构时使用)

接口设计:

接口名称请求方式接口路径说明权限标识
获取部门列表GET/admin-api/system/dept/list获取部门树形列表(全量)system:dept:query

请求参数(查询条件):

参数名类型必填说明
nameString部门名称,模糊匹配
statusInteger展示状态(0-开启 1-关闭)

返回结果:

字段名类型说明
idLong部门编号
nameString部门名称
parentIdLong父部门ID
sortInteger显示顺序
leaderUserIdLong负责人用户ID
phoneString联系电话
emailString邮箱
statusInteger状态
createTimeDateTime创建时间

说明: 前端接收扁平列表后根据 parentId 自行构建为树形结构进行渲染。

3.1.3 获取部门精简信息列表

页面描述:

  • 用于前端下拉选择器(如用户管理中的"所属部门"字段)
  • 仅返回开启状态的部门

接口设计:

接口名称请求方式接口路径说明权限标识
获取部门精简列表GET/admin-api/system/dept/simple-list获取开启状态的部门精简信息无(登录即可)

返回结果:

字段名类型说明
idLong部门编号
nameString部门名称
parentIdLong父部门ID

说明: 前端接收扁平列表后根据 parentId 构建为树形下拉结构。仅返回状态为"开启"的部门。

3.1.4 获取部门详情

接口设计:

接口名称请求方式接口路径说明权限标识
获得部门信息GET/admin-api/system/dept/get根据ID获取部门详情system:dept:query

请求参数:

参数名类型必填说明
idLong部门编号

返回结果:

字段名类型说明
idLong部门编号
nameString部门名称
parentIdLong父部门ID
sortInteger显示顺序
leaderUserIdLong负责人用户ID
phoneString联系电话
emailString邮箱
statusInteger状态
createTimeDateTime创建时间

3.1.5 新增部门

页面描述:

新增部门对话框

  • 弹窗或抽屉表单
  • 支持选择上级部门(树形下拉选择器)
  • 支持选择负责人(用户选择器)
  • 点击"新增顶级部门"时 parentId 默认为 0

表单字段:

字段控件类型必填校验规则说明
上级部门树形选择器-不选则为顶级部门(parentId=0)
部门名称输入框不能为空,最长30字符部门显示名称
显示排序数字输入框不能为空,正整数控制同级部门展示顺序
负责人用户选择器-从系统用户中搜索选择
联系电话输入框最长11字符部门联系方式
邮箱输入框邮箱格式校验,最长50字符部门邮箱
状态单选/开关必须为 0 或 10-开启 1-关闭

业务规则:

规则编号规则描述为什么这样设计
R-01部门名称在同级中不要求唯一不同上级下可以有同名部门(如"研发部"在不同事业部下都存在)
R-02上级部门必须为开启状态不能把新部门挂到已停用的部门下面
R-03不能将上级部门设置为自身或其子孙部门(防止循环引用)循环引用会导致树形结构崩溃
R-04创建后 sort 默认为同级最大值 + 1(如前端未传)新部门默认排在最后
R-05负责人必须是系统中存在的用户确保负责人可追溯

接口设计:

接口名称请求方式接口路径说明权限标识
创建部门POST/admin-api/system/dept/create创建新部门system:dept:create

请求参数:

参数名类型必填校验规则说明
nameString不能为空,最长30字符部门名称
parentIdLong-父部门ID,不传或传0为顶级部门
sortInteger不能为空显示排序
leaderUserIdLong-负责人用户ID
phoneString最长11字符联系电话
emailString邮箱格式,最长50字符邮箱
statusInteger必须为 0 或 1状态(0-开启 1-关闭)

返回结果:

字段名类型说明
dataLong新创建的部门ID

3.1.6 编辑部门

页面描述:

  • 弹窗或抽屉表单,预填现有数据
  • 表单结构与新增一致
  • 上级部门选择器中不可选择自身及其子孙部门

业务规则:

规则编号规则描述为什么这样设计
R-01上级部门不能设为自身,防止循环引用自己不能是自己的上级
R-02上级部门不能设为自身的子孙部门,防止循环引用否则树形结构变成环
R-03如果该部门存在子孙部门,不允许将其状态改为"关闭"父部门关闭了,子部门怎么办?需要先处理子部门
R-04修改负责人时,需清除该用户相关的部门缓存确保数据一致性

接口设计:

接口名称请求方式接口路径说明权限标识
更新部门PUT/admin-api/system/dept/update更新部门信息system:dept:update

请求参数:

参数名类型必填校验规则说明
idLong不能为空部门编号
nameString不能为空,最长30字符部门名称
parentIdLong-父部门ID
sortInteger不能为空显示排序
leaderUserIdLong-负责人用户ID
phoneString最长11字符联系电话
emailString邮箱格式,最长50字符邮箱
statusInteger必须为 0 或 1状态(0-开启 1-关闭)

返回结果:

字段名类型说明
dataBooleantrue-成功

3.1.7 删除部门

业务规则:

规则编号规则描述为什么这样设计
R-01逻辑删除,不物理删除保留历史数据用于审计
R-02该部门下不存在子部门才能删除有子部门时删除会导致子部门"悬空"
R-03该部门下不存在关联用户才能删除有用户时删除会导致用户"无部门"
R-04删除前需二次确认弹窗防止误操作
R-05删除后,关联该部门的用户数据不受影响(用户的 deptId 保留)历史数据中仍能看到用户曾属于哪个部门

接口设计:

接口名称请求方式接口路径说明权限标识
删除部门DELETE/admin-api/system/dept/delete删除单个部门system:dept:delete

请求参数:

参数名类型必填说明
idLong部门编号(Query 参数)

返回结果:

字段名类型说明
dataBooleantrue-成功

3.1.8 批量删除部门

业务规则:

规则编号规则描述
R-01批量逻辑删除,校验规则同单个删除
R-02任一部门校验不通过则整体失败
R-03需二次确认弹窗:"确认删除选中的 N 个部门吗?"

接口设计:

接口名称请求方式接口路径说明权限标识
批量删除部门DELETE/admin-api/system/dept/delete-list批量删除部门system:dept:delete

请求参数:

参数名类型必填说明
idsLong[]部门编号列表(Query 参数,逗号分隔)

3.1.9 部门人员查看

页面描述:

  • 点击部门节点或"查看人员"按钮,弹出部门人员列表
  • 列表展示该部门及其子部门下所有用户
  • 显示用户基本信息:用户名、昵称、手机号、岗位、状态

业务规则:

规则编号规则描述
R-01默认包含子部门下的人员(可切换为"仅本部门")
R-02支持按用户名、手机号搜索
R-03支持按状态筛选
R-04分页展示,默认每页 10 条

接口设计:

接口名称请求方式接口路径说明权限标识
获取部门人员列表GET/admin-api/system/user/page复用用户分页接口,传入 deptIdsystem:dept:query

说明: 复用用户管理的分页查询接口,前端在部门管理页面中以弹窗或右侧面板形式展示。需后端支持 deptId 参数自动包含子部门。

3.1.10 部门统计

页面描述:

  • 在部门树形列表页面或部门详情中展示统计信息
  • 统计项包括:当前部门人数、子部门数量、总人数(含子部门)

业务规则:

规则编号规则描述
R-01部门人数统计仅计算直接归属该部门的用户
R-02总人数统计包含所有子部门(递归)下的用户
R-03统计数据实时计算或通过缓存加速
R-04停用状态的部门仍参与统计

接口设计:

接口名称请求方式接口路径说明权限标识
获取部门统计GET/admin-api/system/dept/statistics获取部门统计数据system:dept:query

请求参数:

参数名类型必填说明
idLong部门编号,不传则返回所有部门统计

返回结果:

字段名类型说明
deptIdLong部门编号
deptNameString部门名称
directUserCountInteger直属用户数
totalUserCountInteger总用户数(含子部门)
childDeptCountInteger直接子部门数
totalDeptCountInteger总子部门数(含递归)

3.2 后台管理端 - 岗位管理

3.2.1 功能清单

功能优先级说明
岗位分页列表P0分页展示岗位,支持搜索筛选
新增岗位P0创建新岗位
编辑岗位P0修改岗位信息
删除岗位P0删除单个岗位
批量删除P1批量删除多个岗位
岗位导出P1导出岗位数据为 Excel
岗位精简列表P0下拉选择用,仅返回开启状态的岗位

3.2.2 岗位分页列表

页面描述:

岗位分页列表页面线框图

业务规则:

规则编号规则描述
R-01默认按创建时间倒序排列
R-02支持按岗位名称模糊搜索
R-03支持按岗位编码模糊搜索
R-04支持按状态筛选(开启/关闭)
R-05分页展示,默认每页 10 条

数据字段:

字段名类型说明
idLong岗位编号
nameString岗位名称
codeString岗位编码
sortInteger显示排序
statusInteger状态(0-开启 1-关闭)
remarkString备注
createTimeDateTime创建时间

接口设计:

接口名称请求方式接口路径说明权限标识
获取岗位分页列表GET/admin-api/system/post/page获取岗位分页列表system:post:query

请求参数:

参数名类型必填说明
nameString岗位名称,模糊匹配
codeString岗位编码,模糊匹配
statusInteger展示状态(0-开启 1-关闭)
pageNoInteger页码
pageSizeInteger每页条数

返回结果:

字段名类型说明
listPost[]岗位列表
totalLong总记录数

3.2.3 获取岗位精简信息列表

页面描述:

  • 用于前端下拉选择器(如用户管理中的"岗位"字段)
  • 仅返回开启状态的岗位
  • 按排序值升序排列

接口设计:

接口名称请求方式接口路径说明权限标识
获取岗位精简列表GET/admin-api/system/post/simple-list获取开启状态的岗位精简信息无(登录即可)

返回结果:

字段名类型说明
idLong岗位编号
nameString岗位名称

3.2.4 新增岗位

页面描述:

新增岗位对话框

表单字段:

字段控件类型必填校验规则说明
岗位名称输入框不能为空,最长50字符岗位显示名称
岗位编码输入框不能为空,最长64字符岗位唯一标识编码
显示排序数字输入框不能为空,正整数控制展示顺序
状态单选/开关必须为 0 或 10-开启 1-关闭
备注文本域-岗位说明

业务规则:

规则编号规则描述为什么这样设计
R-01岗位编码全局唯一(不含已逻辑删除的数据)编码是程序内部引用的唯一标识,不能重复
R-02岗位名称不要求全局唯一不同部门可以有同名岗位
R-03岗位编码创建后建议不可修改避免与用户关联数据不一致

接口设计:

接口名称请求方式接口路径说明权限标识
创建岗位POST/admin-api/system/post/create创建新岗位system:post:create

请求参数:

参数名类型必填校验规则说明
nameString不能为空,最长50字符岗位名称
codeString不能为空,最长64字符岗位编码
sortInteger不能为空显示排序
statusInteger必须为 0 或 1状态(0-开启 1-关闭)
remarkString-备注

返回结果:

字段名类型说明
dataLong新创建的岗位ID

3.2.5 编辑岗位

页面描述:

  • 弹窗表单,预填现有数据
  • 表单结构与新增一致

接口设计:

接口名称请求方式接口路径说明权限标识
修改岗位PUT/admin-api/system/post/update更新岗位信息system:post:update

请求参数:

参数名类型必填校验规则说明
idLong不能为空岗位编号
nameString不能为空,最长50字符岗位名称
codeString不能为空,最长64字符岗位编码
sortInteger不能为空显示排序
statusInteger必须为 0 或 1状态
remarkString-备注

3.2.6 删除岗位

业务规则:

规则编号规则描述为什么这样设计
R-01逻辑删除保留历史数据
R-02该岗位下有关联用户时拒绝删除有用户时删除会导致用户"无岗位"
R-03删除前需二次确认弹窗防止误操作

接口设计:

接口名称请求方式接口路径说明权限标识
删除岗位DELETE/admin-api/system/post/delete删除单个岗位system:post:delete

请求参数:

参数名类型必填说明
idLong岗位编号(Query 参数)

3.2.7 批量删除岗位

业务规则:

规则编号规则描述
R-01批量逻辑删除,校验规则同单个删除
R-02任一岗位校验不通过则整体失败
R-03需二次确认弹窗

接口设计:

接口名称请求方式接口路径说明权限标识
批量删除岗位DELETE/admin-api/system/post/delete-list批量删除岗位system:post:delete

请求参数:

参数名类型必填说明
idsLong[]岗位编号列表(Query 参数,逗号分隔)

3.2.8 岗位导出

页面描述:

  • 导出当前筛选条件下的所有岗位数据为 Excel
  • 导出字段:岗位序号、岗位名称、岗位编码、岗位排序、状态、创建时间

业务规则:

规则编号规则描述
R-01导出格式为 xls
R-02导出当前筛选条件下的所有数据(不分页)
R-03状态字段使用字典翻译显示(如"开启"/"关闭")

接口设计:

接口名称请求方式接口路径说明权限标识
导出岗位GET/admin-api/system/post/export-excel导出岗位Excelsystem:post:export

请求参数:

参数名类型必填说明
nameString岗位名称,模糊匹配
codeString岗位编码,模糊匹配
statusInteger展示状态

返回结果: 文件下载流,文件名"岗位数据.xls"


3.3 前台用户端

本模块前台用户端无独立功能页面。部门和岗位信息在前台用户端的体现如下:

使用场景说明
个人中心展示显示用户所属部门名称、岗位名称(只读)
注册/信息填写提供部门和岗位的下拉选择(调用精简列表接口)

四、非功能需求

4.1 性能要求

指标要求说明
部门树形列表查询响应时间< 500ms(建议 < 200ms)500 个部门内流畅渲染
部门精简列表查询响应时间< 200ms用于下拉选择,需要快速响应
部门创建/更新响应时间< 500ms包含循环引用校验
岗位分页列表查询响应时间< 300ms常规分页查询
岗位导出(1000条以内)响应时间< 5sExcel 生成
部门子部门缓存查询< 50ms高频场景(如数据权限过滤)

4.2 安全要求

要求说明实现方式
权限控制部门管理需对应权限标识@PreAuthorize 注解
数据隔离部门表支持多租户隔离tenant_id 字段
循环引用检测部门编辑时必须校验递归检查上级链路
删除保护存在子部门或关联用户的部门不允许删除删除前校验
操作日志部门/岗位的增删改操作记录操作日志AOP 切面

4.3 兼容性要求

要求
PC浏览器Chrome 80+、Firefox 75+、Safari 13+、Edge 80+
分辨率最小支持 1280x720,推荐 1920x1080

4.4 可用性要求

要求说明
树形结构渲染部门数在 500 以内时,树形渲染应流畅无卡顿
缓存机制子部门ID列表提供缓存能力,高频查询场景性能有保障
乐观锁/并发部门/岗位编辑支持乐观锁,防止并发覆盖

五、数据设计

5.1 数据模型

部门表(system_dept)

字段名类型约束说明
idBIGINTPK, AUTO_INCREMENT部门ID(主键)
nameVARCHAR(30)NOT NULL部门名称
parent_idBIGINTNOT NULL, DEFAULT 0父部门ID(0 为顶级部门)
sortINTNOT NULL, DEFAULT 0显示顺序
leader_user_idBIGINT-负责人用户ID(关联 system_users.id)
phoneVARCHAR(11)-联系电话
emailVARCHAR(50)-邮箱
statusTINYINTNOT NULL, DEFAULT 0状态(0-开启 1-关闭)
tenant_idBIGINTNOT NULL, DEFAULT 0租户编号(多租户隔离)
creatorVARCHAR(64)-创建者(用户ID)
create_timeDATETIMENOT NULL创建时间
updaterVARCHAR(64)-更新者(用户ID)
update_timeDATETIMENOT NULL最后更新时间
deletedBIT(1)NOT NULL, DEFAULT 0删除标记(0-未删除 1-已删除)

索引设计:

索引名类型字段说明
PRIMARY主键id主键索引
idx_parent_id普通索引parent_id按父部门查询子部门
idx_tenant_id普通索引tenant_id租户隔离查询

岗位表(system_post)

字段名类型约束说明
idBIGINTPK, AUTO_INCREMENT岗位编号(主键)
nameVARCHAR(50)NOT NULL岗位名称
codeVARCHAR(64)NOT NULL岗位编码
sortINTNOT NULL, DEFAULT 0显示顺序
statusTINYINTNOT NULL, DEFAULT 0状态(0-开启 1-关闭)
remarkVARCHAR(255)-备注
creatorVARCHAR(64)-创建者(用户ID)
create_timeDATETIMENOT NULL创建时间
updaterVARCHAR(64)-更新者(用户ID)
update_timeDATETIMENOT NULL最后更新时间
deletedBIT(1)NOT NULL, DEFAULT 0删除标记(0-未删除 1-已删除)

索引设计:

索引名类型字段说明
PRIMARY主键id主键索引
uk_code唯一索引code岗位编码唯一

5.2 关联关系

数据关联关系图

5.3 数据字典

字典类型标识字典类型名称字典值说明
common_status通用状态0-开启, 1-关闭部门/岗位状态共用

六、跨模块联动

6.1 联动关系总览

关联模块联动方式联动说明
用户管理用户归属部门用户管理中创建/编辑用户时选择部门和岗位,部门精简列表和岗位精简列表被用户表单调用
角色权限数据权限依赖数据权限的"本部门""本部门及子部门"等选项依赖部门树结构进行数据过滤
租户管理租户隔离部门表有 tenant_id 字段,不同租户的部门数据完全隔离
日志审计操作记录部门/岗位的增删改操作记录到操作日志
数据字典状态翻译部门/岗位状态使用通用状态字典(common_status)进行翻译

6.2 关键联动流程

6.2.1 创建用户 → 选择部门岗位

创建用户选择部门岗位流程

6.2.2 数据权限 → 部门过滤

数据权限部门过滤流程

6.2.3 部门调整 → 影响范围

部门调整影响范围流程

6.3 数据一致性要求

场景一致性要求
删除部门必须先清空关联用户或转移用户到其他部门
停用部门该部门在下拉列表中隐藏,但已有用户数据不变
部门迁移子部门跟随迁移,数据权限缓存需要刷新
岗位删除必须先清空关联用户或转移用户到其他岗位

七、附录

7.1 名词解释

术语解释类比
部门树部门之间通过 parentId 形成父子关系的层级结构,像一棵倒置的树就像公司的组织架构图——CEO 下面是各 VP,VP 下面是各部门经理,经理下面是各小组长
岗位公司中的职位类型,与部门独立管理部门是"你在哪个团队",岗位是"你做什么工作"——同一个"工程师"岗位可以在不同部门
岗位编码岗位的唯一业务标识,用于程序内部引用就像员工的工号——名字可能重名,但工号是唯一的
逻辑删除不物理删除数据,通过 deleted 标记字段标识已删除状态就像把文件放进"回收站"——看不到了,但还能恢复
租户隔离SaaS 模式下不同租户的组织架构数据完全隔离就像同一栋写字楼里不同公司的组织架构互不可见
精简列表仅返回必要字段(ID、名称等)的列表,用于前端下拉选择器就像通讯录的"快速拨号"——只显示名字和号码,不显示详细信息
排序值控制同级节点展示顺序的数值,值越小越靠前就像排队——号码越小越靠前
循环引用部门的上级链路形成环(A 的上级是 B,B 的上级是 A)就像"鸡生蛋、蛋生鸡"的死循环——系统必须防止这种情况
负责人部门的管理者,通过关联系统中的用户来指定就像团队的"组长"——从团队成员中选一个人来负责
树形下拉以树形结构展示的下拉选择器,用于选择有层级关系的数据就像文件选择对话框——可以展开文件夹选择子目录

7.2 权限标识

权限标识说明所属菜单
system:dept:query查询部门系统管理 > 组织架构 > 部门管理
system:dept:create创建部门系统管理 > 组织架构 > 部门管理
system:dept:update修改部门系统管理 > 组织架构 > 部门管理
system:dept:delete删除部门系统管理 > 组织架构 > 部门管理
system:post:query查询岗位系统管理 > 组织架构 > 岗位管理
system:post:create创建岗位系统管理 > 组织架构 > 岗位管理
system:post:update修改岗位系统管理 > 组织架构 > 岗位管理
system:post:delete删除岗位系统管理 > 组织架构 > 岗位管理
system:post:export导出岗位系统管理 > 组织架构 > 岗位管理

7.3 接口汇总

序号接口名称请求方式接口路径权限标识优先级
1获取部门列表GET/admin-api/system/dept/listsystem:dept:queryP0
2获取部门精简列表GET/admin-api/system/dept/simple-listP0
3获得部门信息GET/admin-api/system/dept/getsystem:dept:queryP0
4创建部门POST/admin-api/system/dept/createsystem:dept:createP0
5更新部门PUT/admin-api/system/dept/updatesystem:dept:updateP0
6删除部门DELETE/admin-api/system/dept/deletesystem:dept:deleteP0
7批量删除部门DELETE/admin-api/system/dept/delete-listsystem:dept:deleteP1
8获取部门统计GET/admin-api/system/dept/statisticssystem:dept:queryP2
9获取岗位分页列表GET/admin-api/system/post/pagesystem:post:queryP0
10获取岗位精简列表GET/admin-api/system/post/simple-listP0
11创建岗位POST/admin-api/system/post/createsystem:post:createP0
12修改岗位PUT/admin-api/system/post/updatesystem:post:updateP0
13删除岗位DELETE/admin-api/system/post/deletesystem:post:deleteP0
14批量删除岗位DELETE/admin-api/system/post/delete-listsystem:post:deleteP1
15导出岗位GET/admin-api/system/post/export-excelsystem:post:exportP1

7.4 变更记录

版本日期修改内容修改人
v1.02026-09-23初始版本,包含部门管理和岗位管理完整功能设计PMForge Team
v2.02026-09-19增强版:补充业务场景细节、验收标准、跨模块联动、名词解释、ASCII线框图PM Team

本文档为组织架构管理模块PRD,如有问题请联系产品负责人。