diff --git a/vite-frontend/src/pages/forward.tsx b/vite-frontend/src/pages/forward.tsx index 4162cdf..6cd953e 100644 --- a/vite-frontend/src/pages/forward.tsx +++ b/vite-frontend/src/pages/forward.tsx @@ -100,6 +100,16 @@ export default function ForwardPage() { const [forwards, setForwards] = useState([]); const [tunnels, setTunnels] = useState([]); + // 显示模式状态 - 从localStorage读取,默认为分类显示 + const [viewMode, setViewMode] = useState<'grouped' | 'direct'>(() => { + try { + const savedMode = localStorage.getItem('forward-view-mode'); + return (savedMode as 'grouped' | 'direct') || 'grouped'; + } catch { + return 'grouped'; + } + }); + // 模态框状态 const [modalOpen, setModalOpen] = useState(false); const [deleteModalOpen, setDeleteModalOpen] = useState(false); @@ -132,6 +142,17 @@ export default function ForwardPage() { loadData(); }, []); + // 切换显示模式并保存到localStorage + const handleViewModeChange = () => { + const newMode = viewMode === 'grouped' ? 'direct' : 'grouped'; + setViewMode(newMode); + try { + localStorage.setItem('forward-view-mode', newMode); + } catch (error) { + console.warn('无法保存显示模式到localStorage:', error); + } + }; + // 加载所有数据 const loadData = async () => { setLoading(true); @@ -742,6 +763,11 @@ export default function ForwardPage() { {formatFlow((forward.inFlow || 0) + (forward.outFlow || 0))} + {forward.userName && ( + + {forward.userName} + + )} @@ -816,100 +842,150 @@ export default function ForwardPage() { {/* 页面头部 */}

转发管理

- +
+ {/* 显示模式切换按钮 */} + + + +
- {/* 按用户和隧道分组的转发列表 */} - {userGroups.length > 0 ? ( -
- {userGroups.map((userGroup) => ( - - -
-
-
- - - -
-
-

{userGroup.userName}

-

- {userGroup.tunnelGroups.length} 个隧道, - {userGroup.tunnelGroups.reduce((total, tg) => total + tg.forwards.length, 0)} 个转发 -

-
-
- - 用户 - -
-
- - - - {userGroup.tunnelGroups.map((tunnelGroup) => ( - -
-
- - - -
-
-

{tunnelGroup.tunnelName}

-
-
-
- - {tunnelGroup.forwards.filter(f => f.serviceRunning).length}/{tunnelGroup.forwards.length} - -
-
- } - className="shadow-none border border-divider" - > -
- {tunnelGroup.forwards.map((forward) => renderForwardCard(forward))} + {/* 根据显示模式渲染不同内容 */} + {viewMode === 'grouped' ? ( + /* 按用户和隧道分组的转发列表 */ + userGroups.length > 0 ? ( +
+ {userGroups.map((userGroup) => ( + + +
+
+
+ + +
- - ))} - - - - ))} -
+
+

{userGroup.userName}

+

+ {userGroup.tunnelGroups.length} 个隧道, + {userGroup.tunnelGroups.reduce((total, tg) => total + tg.forwards.length, 0)} 个转发 +

+
+
+ + 用户 + +
+ + + + + {userGroup.tunnelGroups.map((tunnelGroup) => ( + +
+
+ + + +
+
+

{tunnelGroup.tunnelName}

+
+
+
+ + {tunnelGroup.forwards.filter(f => f.serviceRunning).length}/{tunnelGroup.forwards.length} + +
+
+ } + className="shadow-none border border-divider" + > +
+ {tunnelGroup.forwards.map((forward) => renderForwardCard(forward))} +
+ + ))} + + + + ))} + + ) : ( + /* 空状态 */ + + +
+
+ + + +
+
+

暂无转发配置

+

还没有创建任何转发配置,点击上方按钮开始创建

+
+
+
+
+ ) ) : ( - /* 空状态 */ - - -
-
- - - + /* 直接显示模式 */ + forwards.length > 0 ? ( +
+ {forwards.map((forward) => renderForwardCard(forward))} +
+ ) : ( + /* 空状态 */ + + +
+
+ + + +
+
+

暂无转发配置

+

还没有创建任何转发配置,点击上方按钮开始创建

+
-
-

暂无转发配置

-

还没有创建任何转发配置,点击上方按钮开始创建

-
-
- - + + + ) )} {/* 新增/编辑模态框 */}