Skip to content

6.5 职级管理 ​

概述

职级管理维护用户的职级属性数据,支持 Excel 导入导出。继承 BaseTenantLogic 实现租户隔离。

模块特点 ​

特性说明
基类BaseTenantLogic(租户隔离)
唯一校验name 全局唯一
枚举映射status → level_status 字典(1=在用 2=停用)
导入导出支持 Excel 导入导出

API 接口 ​

方法路径权限码说明
GET/api/level/pagesys:level:page分页列表
GET/api/level/listsys:level:list全量列表
GET/api/level/detail/:idsys:level:detail详情
POST/api/level/addsys:level:add新增
PUT/api/level/updatesys:level:update修改
DELETE/api/level/delete/:idsys:level:delete删除
DELETE/api/level/batchDeletesys:level:batchDelete批量删除
GET/api/level/exportsys:level:export导出
POST/api/level/importsys:level:import导入

核心代码 ​

Logic 配置 ​

php
// app/logic/LevelLogic.php

class LevelLogic extends BaseTenantLogic
{
    /**
     * 关联的模型类
     *
     * @var string
     */
    protected string $modelClass = Level::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' => 'level_status',
    ];
}

导出方法 ​

php
public function export(array $params = []): string
{
    $list = $this->allList($params);

    $headers = [
        'name'        => '职级名称',
        'statusText'  => '状态',      // 枚举显示名
        'sort'        => '排序',
        'create_user' => '创建人',
        'create_time' => '创建时间',
    ];

    return ExcelService::export($list, $headers, '职级数据.xlsx');
}

导入方法 ​

php
public function import(string $filePath): array
{
    $headerMap = [
        '职级名称' => 'name',
        '状态'    => 'status',
        '排序'    => 'sort',
    ];

    $data = ExcelService::importWithMap($filePath, $headerMap);

    // 枚举字段反向映射:文字转数字
    foreach ($data as &$row) {
        if (!empty($row['status']) && !is_numeric($row['status'])) {
            $row['status'] = DictService::getValue('level_status', $row['status']);
        }
    }

    $count = 0;
    $errors = [];
    foreach ($data as $index => $row) {
        try {
            $this->add($row);
            $count++;
        } catch (\Exception $e) {
            $errors[] = [
                'row'    => $index + 2,
                'name'   => $row['name'] ?? '',
                'reason' => $e->getMessage(),
            ];
        }
    }

    return ['count' => $count, 'errors' => $errors];
}

导入导出模式

LevelLogic 是导入导出的标准实现示例。导出使用 allList() 获取全量数据,导入使用 ExcelService::importWithMap() 解析文件,枚举字段通过 DictService::getValue() 反向映射。

小蚂蚁云团队 · 提供技术支持