Files
2026-09-29 09:49:04 +08:00

170 lines
4.8 KiB
Markdown

# 6.6 岗位管理
:::tip 概述
岗位管理维护用户的岗位属性数据。继承 BaseTenantLogic 实现租户隔离,是典型的零自定义方法模块——全部能力由属性配置自动装配。
:::
## 模块特点
| 特性 | 说明 |
|------|------|
| 基类 | BaseTenantLogic(租户隔离) |
| 唯一校验 | name 全局唯一 |
| 枚举映射 | status → position_status 字典(1=在用 2=停用) |
| 自定义方法 | 无(全部由基类自动装配) |
## 数据库表结构
```sql
CREATE TABLE `think_position` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) NOT NULL COMMENT '岗位名称',
`status` int DEFAULT 0 COMMENT '岗位状态:1-在用 2-停用',
`sort` int DEFAULT 0 COMMENT '岗位排序',
`create_user` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT (now()) COMMENT '创建时间',
`update_user` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT (now()) COMMENT '更新时间',
`is_delete` int DEFAULT 0 COMMENT '删除标识:0-正常 1-已删除',
PRIMARY KEY (`id`)
) COMMENT = '岗位表';
```
## API 接口
| 方法 | 路径 | 权限码 | 说明 |
|------|------|--------|------|
| GET | `/api/position/page` | sys:position:page | 分页列表 |
| GET | `/api/position/list` | sys:position:list | 全量列表 |
| GET | `/api/position/detail/:id` | sys:position:detail | 详情 |
| POST | `/api/position/add` | sys:position:add | 新增 |
| PUT | `/api/position/update` | sys:position:update | 修改 |
| DELETE | `/api/position/delete/:id` | sys:position:delete | 删除 |
| DELETE | `/api/position/batchDelete` | sys:position:batchDelete | 批量删除 |
## 核心代码
```php
// app/logic/PositionLogic.php
class PositionLogic extends BaseTenantLogic
{
/**
* 关联的模型类
*
* @var string
*/
protected string $modelClass = Position::class;
/**
* LIKE 模糊匹配字段
*
* @var array
*/
protected array $pageLikeFields = ['name'];
/**
* 精确匹配字段
*
* @var array
*/
protected array $pageEqFields = ['status'];
/**
* 默认排序规则
*
* @var array
*/
protected array $pageOrderBy = [
['field' => 'tenant_id', 'type' => 'asc'],
['field' => 'sort', 'type' => 'asc'],
];
/**
* 唯一性校验字段
*
* @var array
*/
protected array $uniqueFields = ['name'];
/**
* 枚举显示名映射
*
* @var array
*/
protected array $serializeMaps = [
'status' => 'position_status',
];
}
```
### Controller 代码
```php
// app/controller/PositionController.php
class PositionController extends BaseController
{
protected PositionLogic $logic;
protected function initialize(): void
{
$this->logic = new PositionLogic();
}
#[Log('岗位管理-查询分页记录', Log::TYPE_QUERY)]
#[Permission('sys:position:page', '岗位分页')]
public function page(): Json
{
return parent::_index($this->logic);
}
#[Log('岗位管理-查询全量列表', Log::TYPE_QUERY)]
public function list(): Json
{
return parent::_list($this->logic);
}
#[Log('岗位管理-查询详情', Log::TYPE_QUERY, '查询岗位ID:{id}')]
public function detail(int $id): Json
{
return parent::_detail($this->logic, $id);
}
#[Log('岗位管理-新增记录', Log::TYPE_ADD, '新增岗位:{name}')]
#[Permission('sys:position:add', '添加岗位')]
public function add(): Json
{
return parent::_add($this->logic, $this->getJsonBody());
}
#[Log('岗位管理-修改记录', Log::TYPE_UPDATE, '修改岗位ID:{id}')]
#[Permission('sys:position:update', '修改岗位')]
public function update(): Json
{
$data = $this->getJsonBody();
$id = $data['id'] ?? 0;
if (empty($id)) return $this->fail('缺少id参数');
return parent::_edit($this->logic, $id, $data);
}
#[Log('岗位管理-删除记录', Log::TYPE_DELETE, '删除岗位ID:{id}')]
#[Permission('sys:position:delete', '删除岗位')]
public function delete(int $id): Json
{
return parent::_remove($this->logic, $id);
}
#[Log('岗位管理-批量删除', Log::TYPE_DELETE)]
#[Permission('sys:position:delete', '删除岗位')]
public function batchDelete(): Json
{
$ids = $this->getJsonBody()['ids'] ?? [];
return parent::_batchRemove($this->logic, $ids);
}
}
```
:::tip 极简 CRUD
岗位模块是"零自定义方法"的典型示例——Logic 类只声明属性配置,Controller 调用父类通用方法,无需编写任何业务代码,即可获得完整的增删改查、分页、唯一性校验、枚举翻译能力。
:::