field( 'a.id, a.account, a.name, a.status, a.authId, a.createTime createdAt, a.lastLoginTime lastLogin, p.permissions' ) ->leftJoin('administrator_permissions p', 'a.id = p.adminId') ->where('a.id', $adminId) ->find(); if (!$admin) { throw new \Exception('管理员不存在', 404); } return $admin; } /** * 解析权限数据 * * @param string|null $permission * @return array */ protected function parsePermissions(?string $permission): array { $permissionIds = []; if (!empty($permission)) { $permissions = json_decode($permission, true); $permissions = is_array($permissions) ? $permissions : json_decode($permissions, true); if (isset($permissions['ids'])) { $permissionIds = is_string($permissions['ids']) ? explode(',', $permissions['ids']) : $permissions['ids']; $permissionIds = array_map('intval', $permissionIds); } } return $permissionIds; } /** * 根据权限ID获取角色名称 * * @param int $authId * @return string */ protected function getRoleName($authId): string { switch ($authId) { case 1: return '超级管理员'; case 2: return '项目管理员'; case 3: return '客户管理员'; default: return '普通管理员'; } } /** * 获取详细信息 * * @param int $id 管理员ID * @return \think\response\Json */ public function index($id) { try { $admin = $this->getAdministrator($id); $roleName = $this->getRoleName($admin->authId); $permissionIds = $this->parsePermissions($admin->permissions); return json([ 'code' => 200, 'msg' => '获取成功', 'data' => array_merge($admin->toArray(), [ 'roleName' => $roleName, 'permissions' => $permissionIds, 'lastLogin' => $admin->lastLogin ? date('Y-m-d H:i', $admin->lastLogin) : '从未登录', 'createdAt' => date('Y-m-d H:i', $admin->createdAt), ]) ]); } catch (\Exception $e) { return json([ 'code' => $e->getCode(), 'msg' => $e->getMessage() ]); } } }