签入版本

This commit is contained in:
小蚂蚁云
2026-10-25 17:24:27 +08:00
parent 48911cc08f
commit fdbeae092a
1010 changed files with 30682 additions and 95274 deletions
+19 -135
View File
@@ -1,148 +1,32 @@
# 6.5 职级管理
:::tip 概述
职级管理维护用户的职级属性数据,支持 Excel 导入导出。继承 BaseTenantLogic 实现租户隔离。
职级(gin_level,租户级)是组织人事的基础字典型模块:标准 CRUD + 启停状态 + 导入导出,适合作为理解"简单模块完整形态"的参照。
:::
## 模块特点
## 功能清单
| 特性 | 说明 |
|------|------|
| 基类 | BaseTenantLogic(租户隔离) |
| 唯一校验 | name 全局唯一 |
| 枚举映射 | status → level_status 字典(1=在用 2=停用) |
| 导入导出 | 支持 Excel 导入导出 |
| 接口 | 说明 |
|---|---|
| Page / List / Detail | 标准查询 |
| Add / Update | 标准维护 |
| Status | 启停单列更新(手写) |
| Delete / BatchDelete | 软删除 |
| Import / Export | 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 | 导入 |
- **无关联表**:职级是扁平定义表,不挂用户/角色
- **导入导出**:与 example 模块同款契约(ReadSheet 逐行校验 / WriteSheet 输出 URL)
- **租户级**:写侧补 tenant_id,读侧隔离
## 核心代码
职级与用户的关联由用户表承载(如需),本模块只管定义与排序。
### Logic 配置
## 管理界面
```php
// app/logic/LevelLogic.php
`system/level`:列表 + 状态开关 + 导入导出按钮。
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];
}
```
:::tip 导入导出模式
LevelLogic 是导入导出的标准实现示例。导出使用 `allList()` 获取全量数据,导入使用 `ExcelService::importWithMap()` 解析文件,枚举字段通过 `DictService::getValue()` 反向映射。
:::
- [6.6 岗位管理](/zh/modules/position.html)(同形态模块)
- [7.4 数据导入导出](/zh/tools/excel.html)