# 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 调用父类通用方法,无需编写任何业务代码,即可获得完整的增删改查、分页、唯一性校验、枚举翻译能力。 :::