156 lines
4.7 KiB
Markdown
156 lines
4.7 KiB
Markdown
:::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/<int:dept_id>` | POST | `sys:dept:delete` | 删除部门 |
|
|
|
|
### 职级接口
|
|
|
|
| 接口 | 方法 | 权限节点 | 说明 |
|
|
|------|------|---------|------|
|
|
| `/level/page` | GET | `sys:level:page` | 职级分页列表 |
|
|
| `/level/add` | POST | `sys:level:add` | 新增职级 |
|
|
| `/level/update` | POST | `sys:level:update` | 编辑职级 |
|
|
| `/level/delete/<int:level_id>` | 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/<int:position_id>` | 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. 删除保护:删除前校验引用关系,防止数据悬空
|
|
```
|