4.1 KiB
4.1 KiB
6.6 岗位管理
:::tip 概述
岗位管理维护用户的岗位属性数据。PositionService 继承 BaseTenantService 实现租户隔离,全部能力由属性配置自动装配,仅保留删除前的业务校验钩子——是"极简 CRUD"的典型模块。
:::
模块特点
| 特性 | 说明 |
|---|---|
| 基类 | BaseTenantService(租户隔离) |
| 唯一校验 | name 按租户分组唯一(['name','tenant_id']) |
| 枚举映射 | status → position_status 字典(1=在用 2=停用) |
| 删除保护 | beforeDelete 业务校验(如岗位被用户引用时阻止) |
| 自定义方法 | 无(分页/详情/增删改全部由 Trait 自动装配) |
数据库表结构
CREATE TABLE `laravel_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 | 批量删除 |
Service 配置(来自项目实际代码)
class PositionService extends BaseTenantService
{
use HasCrudOperations, HasQueryScopes, HasSerializeMaps, HasUniqueCheck;
protected string $modelClass = Position::class;
protected array $pageLikeFields = ['name'];
protected array $pageEqFields = ['status'];
protected array $pageOrderBy = ['field' => 'sort', 'type' => 'asc'];
// name 在同一租户内唯一
protected array $uniqueFields = [['name', 'tenant_id']];
// 字典翻译
protected array $serializeMaps = [
'status' => 'position_status',
];
// 删除前业务校验(如岗位被用户引用时抛 BizException 阻止删除)
protected function beforeDelete(int $id): void
{
// ... 业务约束检查 ...
}
}
Controller 代码(标准形态)
// app/Http/Controllers/Api/PositionController.php(形态示例)
#[OperationLog('岗位管理-查询分页', OperationLog::TYPE_QUERY)]
#[Permission('sys:position:page', '岗位分页')]
public function page(): JsonResponse
{
return $this->_page($this->positionService);
}
#[OperationLog('岗位管理-新增', OperationLog::TYPE_ADD, '新增岗位:{name}')]
#[Permission('sys:position:add', '添加岗位')]
public function add(PositionRequest $request): JsonResponse
{
return $this->_add($this->positionService, $request->validated());
}
#[OperationLog('岗位管理-删除', OperationLog::TYPE_DELETE, '删除岗位ID:{id}')]
#[Permission('sys:position:delete', '删除岗位')]
public function delete(int $id): JsonResponse
{
return $this->_delete($this->positionService, $id);
}
:::tip 极简 CRUD 岗位模块几乎"零手写业务代码"——Service 只声明属性配置与删除校验钩子,Controller 调用基类通用方法,即可获得完整的增删改查、分页、唯一性校验、字典翻译能力。新模块建议从复制本模块结构开始。 :::
与其他模块的关系
| 关系 | 说明 |
|---|---|
| 用户 → 岗位 | laravel_user.position_id 外键,用户表单级联选择 |
| 详情回显 | 用户 afterDetail 中补全 positionName |
| 导出映射 | 用户导出列「岗位」由岗位名称映射生成 |