order('sort', 'asc') ->order('id', 'asc') ->select() ->toArray(); // 按父子关系组织菜单 $menuTree = $this->buildMenuTree($menus); // 直接输出JSON响应 header('Content-type: application/json'); echo json_encode([ 'code' => 0, 'msg' => '获取菜单列表成功', 'data' => $menuTree ]); exit; } catch (\Exception $e) { header('Content-type: application/json'); echo json_encode([ 'code' => 1, 'msg' => '获取菜单列表失败:' . $e->getMessage() ]); exit; } } // 递归构建菜单树 private function buildMenuTree($menus, $parentId = 0) { $tree = []; foreach ($menus as $menu) { if ($menu['pid'] == $parentId) { $children = $this->buildMenuTree($menus, $menu['id']); $menuItem = [ 'id' => $menu['id'], 'pid' => $menu['pid'], 'name' => $menu['name'] ?? '', 'title' => $menu['title'] ?? '', 'icon' => $menu['icon'] ?? '', 'path' => $menu['path'] ?? '', 'component' => $menu['component'] ?? '', 'redirect' => $menu['redirect'] ?? '', 'sort' => $menu['sort'] ?? 0, 'status' => $menu['status'] ?? 1, 'type' => $menu['type'] ?? 0 ]; if (!empty($children)) { $menuItem['children'] = $children; } $tree[] = $menuItem; } } return $tree; } }