初始化

缺陷:主题配色需要优化整体的同风格
This commit is contained in:
2026-08-14 23:21:21 +08:00
parent 6e2769c528
commit bcf54c2727
152 changed files with 13521 additions and 141 deletions

View File

@@ -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_type0 dot 小红点 / 1 normal 文本
*/
private function badgeType(int $type): string
{
return $type === 1 ? 'normal' : 'dot';
}
/**
* nl_menu.badge_variants0 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 : [];
}
}