diff --git a/docs/ui/nextjs-admin-panel.md b/docs/ui/nextjs-admin-panel.md
index 3401c06..e5c7a63 100644
--- a/docs/ui/nextjs-admin-panel.md
+++ b/docs/ui/nextjs-admin-panel.md
@@ -42,10 +42,18 @@ styles/
```
- 使用 `next export` 生成静态 HTML:
```bash
- npm run build && npx next export
+ npm run build && npx next export
```
生成的 `out/` 目录即可作为纯静态网站部署。
+## 响应式设计
+示例实现利用 Tailwind 的 `md:` 等断点完成移动端适配:
+
+- 小屏幕默认隐藏侧边栏,在 Header 内提供菜单按钮控制显示。
+- 大屏幕侧边栏常驻,内容区域使用 `md:ml-64` 留出宽度。
+
+布局组件 `layout.tsx` 中使用 React 状态切换侧边栏,可满足主流移动端浏览体验。
+
## 示例代码结构
本仓库 `ui/nextjs` 目录提供了一套最简参考实现,可直接 `npm run build && npx next export` 编译到 `ui/dist` 供 Go 服务嵌入。
diff --git a/ui/nextjs/app/layout.tsx b/ui/nextjs/app/layout.tsx
index 6487a5e..1b0ee1e 100644
--- a/ui/nextjs/app/layout.tsx
+++ b/ui/nextjs/app/layout.tsx
@@ -1,14 +1,26 @@
+'use client'
+
import '../styles/globals.css'
+import { useState } from 'react'
import Sidebar from '../components/Sidebar'
+import Header from '../components/Header'
export const dynamic = 'force-static'
export default function RootLayout({ children }: { children: React.ReactNode }) {
+ const [open, setOpen] = useState(false)
+
return (
-
-
- {children}
+
+ setOpen(false)}
+ />
+
+ setOpen(!open)} />
+ {children}
+
)
diff --git a/ui/nextjs/components/Header.tsx b/ui/nextjs/components/Header.tsx
index 940bcde..daeb74a 100644
--- a/ui/nextjs/components/Header.tsx
+++ b/ui/nextjs/components/Header.tsx
@@ -1,7 +1,21 @@
-export default function Header() {
+export interface HeaderProps {
+ onMenu?: () => void
+}
+
+export default function Header({ onMenu }: HeaderProps) {
return (
-
- XControl Admin
+
+
+ XControl Admin
)
}
diff --git a/ui/nextjs/components/Sidebar.tsx b/ui/nextjs/components/Sidebar.tsx
index 132d6e9..8c22a49 100644
--- a/ui/nextjs/components/Sidebar.tsx
+++ b/ui/nextjs/components/Sidebar.tsx
@@ -1,5 +1,10 @@
import Link from 'next/link'
+export interface SidebarProps {
+ className?: string
+ onNavigate?: () => void
+}
+
const menu = [
{ href: '/', label: 'Home' },
{ href: '/agent', label: 'Agent' },
@@ -8,11 +13,16 @@ const menu = [
{ href: '/xray', label: 'XRay' },
]
-export default function Sidebar() {
+export default function Sidebar({ className = '', onNavigate }: SidebarProps) {
return (
-