Files
rxthinkcmf-wiki/RXThinkCMF_ThinkPhp8_NaiveVue/zh/modules/level.md
T
2026-09-29 10:14:04 +08:00

3.5 KiB

6.5 职级管理

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

模块特点

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

API 接口

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

核心代码

Logic 配置

// 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',
    ];
}

导出方法

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

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

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

导入方法

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];
}

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