:::tip 部门/职级/岗位 部门、职级、岗位是组织架构管理的三个核心模块。部门采用树形结构,职级和岗位为简单 CRUD 模块。用户表通过 `dept_id`、`position_id`、`level_id` 三个外键关联这三个模块。 ::: ## 部门管理 ### 部门模型 ```python # application/dept/models.py from application.models import BaseModel class Dept(BaseModel): """部门模型类""" class Meta: db_table = 'django_dept' name = models.CharField(max_length=150, verbose_name='部门名称') type = models.IntegerField(default=0, verbose_name='部门类型:1-公司 2-子公司 3-部门 4-小组') parent_id = models.IntegerField(default=0, verbose_name='上级部门ID') sort = models.IntegerField(default=0, verbose_name='部门排序') note = models.CharField(max_length=255, null=True, blank=True, verbose_name='备注') ``` ### 树形结构 部门通过 `parent_id` 字段形成树形结构: ``` 公司总部 (parent_id=0) +-- 技术部 (parent_id=1) | +-- 前端组 (parent_id=2) | +-- 后端组 (parent_id=2) +-- 市场部 (parent_id=1) ``` ### 删除前校验 部门删除时需检查是否存在下级部门或用户引用: ```python # application/dept/services.py def delete_dept(request): data = parse_request_body(request) dept_id = data.get('id') # 检查是否存在下级部门 if Dept.objects.filter(parent_id=dept_id, is_delete=False).exists(): return R.failed("存在下级部门,请先删除下级部门") # 检查是否存在用户引用 if User.objects.filter(dept_id=dept_id, is_delete=False).exists(): return R.failed("存在用户引用该部门,请先调整用户部门") # 执行删除... return R.ok(msg="删除成功") ``` ## 职级管理 ### 职级模型 ```python # application/level/models.py from application.models import BaseModel class Level(BaseModel): """职级模型类""" class Meta: db_table = 'django_level' name = models.CharField(max_length=255, verbose_name='职级名称') status = models.IntegerField(default=0, verbose_name='职级状态:1-在用 2-停用') sort = models.IntegerField(default=0, verbose_name='职级排序') ``` ### 表单验证 ```python # application/level/forms.py from django import forms from application.level.models import Level class LevelForm(forms.ModelForm): class Meta: model = Level fields = ['name', 'status', 'sort'] error_messages = { 'name': { 'required': '职级名称不能为空', 'max_length': '职级名称不能超过255个字符', }, } ``` ## 岗位管理 ### 岗位模型 ```python # application/position/models.py from application.models import BaseModel class Position(BaseModel): """岗位模型类""" class Meta: db_table = 'django_position' name = models.CharField(max_length=255, verbose_name='岗位名称') status = models.IntegerField(default=0, verbose_name='岗位状态:1-在用 2-停用') sort = models.IntegerField(default=0, verbose_name='岗位排序') ``` ## API 接口 ### 部门接口 | 接口 | 方法 | 权限节点 | 说明 | |------|------|---------|------| | `/dept/list` | GET | `sys:dept:list` | 部门列表 | | `/dept/add` | POST | `sys:dept:add` | 新增部门 | | `/dept/update` | POST | `sys:dept:update` | 编辑部门 | | `/dept/delete/` | POST | `sys:dept:delete` | 删除部门 | ### 职级接口 | 接口 | 方法 | 权限节点 | 说明 | |------|------|---------|------| | `/level/page` | GET | `sys:level:page` | 职级分页列表 | | `/level/add` | POST | `sys:level:add` | 新增职级 | | `/level/update` | POST | `sys:level:update` | 编辑职级 | | `/level/delete/` | POST | `sys:level:delete` | 删除职级 | | `/level/status` | POST | `sys:level:status` | 设置状态 | ### 岗位接口 | 接口 | 方法 | 权限节点 | 说明 | |------|------|---------|------| | `/position/page` | GET | `sys:position:page` | 岗位分页列表 | | `/position/add` | POST | `sys:position:add` | 新增岗位 | | `/position/update` | POST | `sys:position:update` | 编辑岗位 | | `/position/delete/` | POST | `sys:position:delete` | 删除岗位 | | `/position/status` | POST | `sys:position:status` | 设置状态 | ## 总结 组织架构模块具备以下特点: ``` 1. 部门树形:parent_id 形成多级部门结构,删除前校验下级部门和用户引用 2. 职级/岗位:简单 CRUD 模块 3. 表单验证:Django Form + error_messages 中文提示 4. 用户关联:用户表通过 dept_id、position_id、level_id 关联 5. 删除保护:删除前校验引用关系,防止数据悬空 ```