Skip to content

组织架构模块开发文档

迭代编号: sprint-1
模块: 组织架构模块
状态: ✅ 已完成


开发任务

部门管理

  • [√] 部门树页面
  • [√] 部门树API
  • [√] 部门CRUD功能

职位管理

  • [√] 职位列表页面
  • [√] 职位列表API
  • [√] 职位CRUD功能

职称管理

  • [√] 职称列表页面
  • [√] 职称列表API
  • [√] 职称CRUD功能

技术方案

架构设计

┌─────────────────────────────────────────────────────────────────┐
│                      组织架构模块                                │
├─────────────────────┬─────────────────────┬─────────────────────┤
│     部门管理         │      职位管理        │      职称管理        │
│   (树形结构)         │    (列表/筛选)       │    (列表/级别)       │
└──────────┬──────────┴──────────┬──────────┴──────────┬──────────┘
           │                     │                     │
           └─────────────────────┼─────────────────────┘

                    ┌────────────▼────────────┐
                    │    组织架构API (CRUD)    │
                    │  /v1/sys/dept/*          │
                    │  /v1/sys/position/*      │
                    │  /v1/sys/title/*         │
                    └────────────┬────────────┘

         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
         ▼                       ▼                       ▼
┌─────────────────┐   ┌─────────────────┐   ┌─────────────────┐
│ 部门表(sys_dept) │   │职位表(sys_position)│  │职称表(sys_title) │
│   (树形结构)     │   │   (关联部门)      │   │   (级别排序)     │
└─────────────────┘   └─────────────────┘   └─────────────────┘

数据模型

部门表 (sys_dept)

字段名类型说明
idVARCHAR(32)主键
parent_idVARCHAR(32)父部门ID,根节点为0
nameVARCHAR(50)部门名称
codeVARCHAR(50)部门编码
sortINT排序号
leaderVARCHAR(50)负责人
phoneVARCHAR(20)联系电话
emailVARCHAR(100)邮箱
statusTINYINT状态:0-禁用,1-启用
pathVARCHAR(500)路径枚举,如:/1/2/3/
levelINT层级深度,根节点为1
create_timeDATETIME创建时间
update_timeDATETIME更新时间

职位表 (sys_position)

字段名类型说明
idVARCHAR(32)主键
nameVARCHAR(50)职位名称
codeVARCHAR(50)职位编码
dept_idVARCHAR(32)所属部门ID
sortINT排序号
statusTINYINT状态:0-禁用,1-启用
remarkVARCHAR(500)备注
create_timeDATETIME创建时间
update_timeDATETIME更新时间

职称表 (sys_title)

字段名类型说明
idVARCHAR(32)主键
nameVARCHAR(50)职称名称
levelINT职称级别,1-10
sortINT排序号
statusTINYINT状态:0-禁用,1-启用
remarkVARCHAR(500)备注
create_timeDATETIME创建时间
update_timeDATETIME更新时间

功能特性

部门管理

  1. 树形展示

    • 支持无限层级(限制5层)
    • 支持展开/折叠
    • 支持拖拽排序
    • 支持搜索定位
  2. 部门CRUD

    • 创建部门(自动计算path和level)
    • 编辑部门(更新子部门path)
    • 删除部门(检查是否有子部门或员工)
    • 启用/禁用部门

职位管理

  1. 列表展示

    • 支持分页查询
    • 支持按部门筛选
    • 支持关键字搜索
  2. 职位CRUD

    • 创建职位(关联部门)
    • 编辑职位
    • 删除职位(检查是否被员工使用)

职称管理

  1. 列表展示

    • 支持按级别排序
    • 支持分页查询
  2. 职称CRUD

    • 创建职称(设置级别)
    • 编辑职称
    • 删除职称(检查是否被员工使用)

接口定义

部门管理接口

1. 获取部门树

请求

http
GET /v1/sys/dept/tree?status=1
Authorization: Bearer {accessToken}

响应

json
{
  "code": 200,
  "message": "获取成功",
  "data": [
    {
      "id": "1",
      "parentId": "0",
      "name": "总公司",
      "code": "HQ",
      "sort": 1,
      "leader": "总经理",
      "phone": "010-12345678",
      "email": "hq@example.com",
      "status": 1,
      "path": "/1/",
      "level": 1,
      "children": [
        {
          "id": "2",
          "parentId": "1",
          "name": "技术部",
          "code": "TECH",
          "sort": 1,
          "leader": "技术总监",
          "phone": "010-12345679",
          "email": "tech@example.com",
          "status": 1,
          "path": "/1/2/",
          "level": 2,
          "children": []
        }
      ]
    }
  ]
}

2. 创建部门

请求

http
POST /v1/sys/dept
Content-Type: application/json
Authorization: Bearer {accessToken}

{
  "parentId": "1",
  "name": "技术部",
  "code": "TECH",
  "sort": 1,
  "leader": "技术总监",
  "phone": "010-12345679",
  "email": "tech@example.com",
  "status": 1
}

3. 更新部门

请求

http
PUT /v1/sys/dept/{id}
Content-Type: application/json
Authorization: Bearer {accessToken}

{
  "name": "技术研发部",
  "code": "TECH_RD",
  "sort": 1,
  "leader": "技术总监",
  "phone": "010-12345679",
  "email": "tech@example.com",
  "status": 1
}

4. 删除部门

请求

http
DELETE /v1/sys/dept/{id}
Authorization: Bearer {accessToken}

5. 更新部门排序

请求

http
PUT /v1/sys/dept/sort
Content-Type: application/json
Authorization: Bearer {accessToken}

{
  "deptId": "2",
  "parentId": "1",
  "sort": 3
}

职位管理接口

1. 获取职位列表

请求

http
GET /v1/sys/position/list?page=1&pageSize=10&deptId=2&keyword=经理
Authorization: Bearer {accessToken}

响应

json
{
  "code": 200,
  "message": "获取成功",
  "data": {
    "list": [
      {
        "id": "1",
        "name": "技术经理",
        "code": "TECH_MGR",
        "deptId": "2",
        "deptName": "技术部",
        "sort": 1,
        "status": 1,
        "remark": "负责技术团队管理",
        "createTime": "2026-03-27 10:00:00"
      }
    ],
    "pagination": {
      "page": 1,
      "pageSize": 10,
      "total": 20
    }
  }
}

2. 创建职位

请求

http
POST /v1/sys/position
Content-Type: application/json
Authorization: Bearer {accessToken}

{
  "name": "技术经理",
  "code": "TECH_MGR",
  "deptId": "2",
  "sort": 1,
  "status": 1,
  "remark": "负责技术团队管理"
}

3. 更新职位

请求

http
PUT /v1/sys/position/{id}
Content-Type: application/json
Authorization: Bearer {accessToken}

{
  "name": "高级技术经理",
  "code": "SR_TECH_MGR",
  "deptId": "2",
  "sort": 1,
  "status": 1,
  "remark": "负责技术团队管理"
}

4. 删除职位

请求

http
DELETE /v1/sys/position/{id}
Authorization: Bearer {accessToken}

职称管理接口

1. 获取职称列表

请求

http
GET /v1/sys/title/list?page=1&pageSize=10&status=1
Authorization: Bearer {accessToken}

响应

json
{
  "code": 200,
  "message": "获取成功",
  "data": {
    "list": [
      {
        "id": "1",
        "name": "高级工程师",
        "level": 5,
        "sort": 1,
        "status": 1,
        "remark": "技术职称",
        "createTime": "2026-03-27 10:00:00"
      }
    ],
    "pagination": {
      "page": 1,
      "pageSize": 10,
      "total": 15
    }
  }
}

2. 创建职称

请求

http
POST /v1/sys/title
Content-Type: application/json
Authorization: Bearer {accessToken}

{
  "name": "高级工程师",
  "level": 5,
  "sort": 1,
  "status": 1,
  "remark": "技术职称"
}

3. 更新职称

请求

http
PUT /v1/sys/title/{id}
Content-Type: application/json
Authorization: Bearer {accessToken}

{
  "name": "资深高级工程师",
  "level": 6,
  "sort": 1,
  "status": 1,
  "remark": "技术职称"
}

4. 删除职称

请求

http
DELETE /v1/sys/title/{id}
Authorization: Bearer {accessToken}

测试用例

部门管理测试

用例编号用例名称测试步骤预期结果实际结果状态
DEPT-001查看部门树访问部门管理页面显示部门树结构符合预期[√] 通过
DEPT-002展开/折叠部门点击展开/折叠按钮子部门显示/隐藏符合预期[√] 通过
DEPT-003创建部门填写部门信息,保存创建成功,树结构更新符合预期[√] 通过
DEPT-004部门层级限制尝试创建第6层部门提示层级超过限制符合预期[√] 通过
DEPT-005编辑部门修改部门信息,保存更新成功符合预期[√] 通过
DEPT-006删除部门删除无子部门的部门删除成功符合预期[√] 通过
DEPT-007删除有子部门的部门删除有子部门的部门提示无法删除符合预期[√] 通过
DEPT-008拖拽排序拖拽部门调整顺序排序更新成功符合预期[√] 通过
DEPT-009搜索部门输入部门名称搜索高亮显示匹配部门符合预期[√] 通过
DEPT-010启用/禁用部门切换部门状态状态切换成功符合预期[√] 通过

职位管理测试

用例编号用例名称测试步骤预期结果实际结果状态
POS-001查看职位列表访问职位管理页面显示职位列表符合预期[√] 通过
POS-002按部门筛选选择部门筛选显示该部门下的职位符合预期[√] 通过
POS-003搜索职位输入关键字搜索显示匹配的职位符合预期[√] 通过
POS-004创建职位填写职位信息,保存创建成功符合预期[√] 通过
POS-005编辑职位修改职位信息,保存更新成功符合预期[√] 通过
POS-006删除职位删除未被使用的职位删除成功符合预期[√] 通过
POS-007删除已使用的职位删除被员工使用的职位提示无法删除符合预期[√] 通过

职称管理测试

用例编号用例名称测试步骤预期结果实际结果状态
TITLE-001查看职称列表访问职称管理页面显示职称列表,按级别排序符合预期[√] 通过
TITLE-002创建职称填写职称信息,保存创建成功符合预期[√] 通过
TITLE-003编辑职称修改职称信息,保存更新成功符合预期[√] 通过
TITLE-004删除职称删除未被使用的职称删除成功符合预期[√] 通过
TITLE-005删除已使用的职称删除被员工使用的职称提示无法删除符合预期[√] 通过

开发记录

部门管理

日期工作内容完成状态
2026-04-04技术方案设计、数据模型设计[√] 已完成
2026-04-05部门树页面开发、树形API开发[√] 已完成
2026-04-05部门CRUD功能开发[√] 已完成
2026-04-05拖拽排序功能开发[√] 已完成
2026-04-06单元测试编写、代码审查[√] 已完成

职位管理

日期工作内容完成状态
2026-04-06职位列表页面开发、列表API开发[√] 已完成
2026-04-06职位CRUD功能开发[√] 已完成
2026-04-06单元测试编写[√] 已完成

职称管理

日期工作内容完成状态
2026-04-06职称列表页面开发、列表API开发[√] 已完成
2026-04-06职称CRUD功能开发[√] 已完成
2026-04-06单元测试编写[√] 已完成
2026-04-07集成测试、Bug修复[√] 已完成

代码统计

模块前端代码后端代码测试代码接口数
部门管理1,680 行1,240 行520 行5 个
职位管理980 行760 行320 行4 个
职称管理850 行680 行280 行4 个
合计3,510 行2,680 行1,120 行13 个

相关文档


记录人: 赵六
日期: 2026-04-07

Released under the MIT License.