import{_ as s,o as a,c as t,a2 as h}from"./chunks/framework.BbmSSMjL.js";const y=JSON.parse('{"title":"6.6 岗位管理","description":"","frontmatter":{},"headers":[],"relativePath":"zh/modules/position.md","filePath":"zh/modules/position.md"}'),k={name:"zh/modules/position.md"};function n(l,i,p,e,d,r){return a(),t("div",null,[...i[0]||(i[0]=[h(`

6.6 岗位管理 ​

概述

岗位管理维护用户的岗位属性数据。PositionService 继承 BaseTenantService 实现租户隔离,全部能力由属性配置自动装配,仅保留删除前的业务校验钩子——是"极简 CRUD"的典型模块。

模块特点 ​

特性说明
基类BaseTenantService(租户隔离)
唯一校验name 按租户分组唯一(['name','tenant_id'])
枚举映射status → position_status 字典(1=在用 2=停用)
删除保护beforeDelete 业务校验(如岗位被用户引用时阻止)
自定义方法无(分页/详情/增删改全部由 Trait 自动装配)

数据库表结构 ​

sql
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/pagesys:position:page分页列表
GET/api/position/listsys:position:list全量列表
GET/api/position/detail/{id}sys:position:detail详情
POST/api/position/addsys:position:add新增
PUT/api/position/updatesys:position:update修改
DELETE/api/position/delete/{id}sys:position:delete删除
DELETE/api/position/batchDeletesys:position:batchDelete批量删除

Service 配置(来自项目实际代码) ​

php
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 代码(标准形态) ​

php
// 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);
}

极简 CRUD

岗位模块几乎"零手写业务代码"——Service 只声明属性配置与删除校验钩子,Controller 调用基类通用方法,即可获得完整的增删改查、分页、唯一性校验、字典翻译能力。新模块建议从复制本模块结构开始。

与其他模块的关系 ​

关系说明
用户 → 岗位laravel_user.position_id 外键,用户表单级联选择
详情回显用户 afterDetail 中补全 positionName
导出映射用户导出列「岗位」由岗位名称映射生成
`,15)])])}const g=s(k,[["render",n]]);export{y as __pageData,g as default};