初始化
缺陷:主题配色需要优化整体的同风格
This commit is contained in:
@@ -23,11 +23,12 @@ class AdminService extends BaseService
|
||||
'open_id',
|
||||
'avatar',
|
||||
'nick_name',
|
||||
'password',
|
||||
// 不查 password / legacy_password:列表与详情都会直接回给前端,密码哈希不该出网
|
||||
'phone',
|
||||
'email',
|
||||
'code',
|
||||
'role_id',
|
||||
'department_id',
|
||||
'province_id',
|
||||
'city_id',
|
||||
'reg_ip',
|
||||
@@ -47,6 +48,7 @@ class AdminService extends BaseService
|
||||
'nick_name' => 'like',
|
||||
'email' => 'like',
|
||||
'role_id' => '=',
|
||||
'department_id' => '=',
|
||||
'status' => '=',
|
||||
];
|
||||
}
|
||||
@@ -60,14 +62,17 @@ class AdminService extends BaseService
|
||||
public function list(): array
|
||||
{
|
||||
$this->with = [
|
||||
'role'
|
||||
'role',
|
||||
'department',
|
||||
];
|
||||
$result = $this->getPageList();
|
||||
|
||||
foreach ($result['items'] as &$v) {
|
||||
$v['ip_table'] = json_decode($v['ip_table'], true);
|
||||
$v['status_text'] = UserStatusEnum::from($v['status'])->description();
|
||||
$v['department_name'] = $v['department']['name'] ?? '';
|
||||
}
|
||||
unset($v);
|
||||
|
||||
return $result;
|
||||
}
|
||||
@@ -95,6 +100,10 @@ class AdminService extends BaseService
|
||||
public function create($params): mixed
|
||||
{
|
||||
$params['ip_table'] = json_encode([]);
|
||||
// open_id 是 NOT NULL 且无默认值,不显式赋值会插入失败
|
||||
$params['open_id'] = 'nl_' . bin2hex(random_bytes(15));
|
||||
// status 列默认值是 1(禁用),不显式写成正常态新账号一登录就被状态校验挡下
|
||||
$params['status'] = (int) ($params['status'] ?? UserStatusEnum::NORMAL->value);
|
||||
$params['password'] = password_hash($params['password'], PASSWORD_DEFAULT);
|
||||
// 手机号或邮箱任一重复都拒绝,且必须排除软删记录(deleted_at=0)。
|
||||
// 原写法 whereOr('email',...) 是 Laravel 动态 where 的空操作(等于只按 phone 判断且不排软删),
|
||||
@@ -363,7 +372,13 @@ class AdminService extends BaseService
|
||||
'affixTab' => !$menu->affix_tab,
|
||||
'order' => $menu->sort,
|
||||
'iframeSrc' => $menu->iframe_src,
|
||||
]
|
||||
// 库里有这几列但之前没往 meta 输出,等于菜单管理里配了也不生效
|
||||
'badge' => (string) $menu->badge,
|
||||
'badgeType' => $this->badgeType((int) $menu->badge_type),
|
||||
'badgeVariants' => $this->badgeVariants((int) $menu->badge_variants),
|
||||
],
|
||||
// vben5 路由的 query 是路由级字段而不是 meta,且必须是对象
|
||||
'query' => $this->decodeQuery((string) $menu->query),
|
||||
];
|
||||
}
|
||||
$result = $this->utils->tree($resultMenus);
|
||||
@@ -375,4 +390,48 @@ class AdminService extends BaseService
|
||||
RedisService::getInstance()->init(config('nl.redis.menu_key'))->set($this->roleId, json_encode($result), 3600);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前账号的权限码
|
||||
* @return array<int, string>
|
||||
*/
|
||||
public function codes(): array
|
||||
{
|
||||
return PermissionService::getInstance()->codes($this->roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
* nl_menu.badge_type:0 dot 小红点 / 1 normal 文本
|
||||
*/
|
||||
private function badgeType(int $type): string
|
||||
{
|
||||
return $type === 1 ? 'normal' : 'dot';
|
||||
}
|
||||
|
||||
/**
|
||||
* nl_menu.badge_variants:0 default 1 destructive 2 primary 3 success 4 warning
|
||||
*/
|
||||
private function badgeVariants(int $variants): string
|
||||
{
|
||||
return match ($variants) {
|
||||
1 => 'destructive',
|
||||
2 => 'primary',
|
||||
3 => 'success',
|
||||
4 => 'warning',
|
||||
default => 'default',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 菜单默认查询参数:库里存的是 JSON 字符串,非法值按空对象处理,别让一行坏数据把整棵菜单打挂
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function decodeQuery(string $query): array
|
||||
{
|
||||
if (trim($query) === '') {
|
||||
return [];
|
||||
}
|
||||
$decoded = json_decode($query, true);
|
||||
return is_array($decoded) ? $decoded : [];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user