From 7984129b4cbb6d635ff9fe6b100d5b79c02e1995 Mon Sep 17 00:00:00 2001 From: qaq <1937228092@qq.com> Date: Fri, 29 Aug 2025 09:38:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80ui=E6=98=BE=E7=A4=BA=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vite-frontend/.env.development | 2 +- vite-frontend/index.html | 2 +- vite-frontend/src/config/site.ts | 4 +- vite-frontend/src/pages/forward.tsx | 6 +-- vite-frontend/src/pages/node.tsx | 71 ++++++++++++++++++++++++----- vite-frontend/src/pages/tunnel.tsx | 3 +- 6 files changed, 68 insertions(+), 20 deletions(-) diff --git a/vite-frontend/.env.development b/vite-frontend/.env.development index fe059ef..a1c927f 100644 --- a/vite-frontend/.env.development +++ b/vite-frontend/.env.development @@ -1 +1 @@ -VITE_API_BASE=http://192.168.31.126:6365 +VITE_API_BASE=http://192.168.100.11:6365 diff --git a/vite-frontend/index.html b/vite-frontend/index.html index c26343a..7c3bc59 100644 --- a/vite-frontend/index.html +++ b/vite-frontend/index.html @@ -148,7 +148,7 @@ /> diff --git a/vite-frontend/src/config/site.ts b/vite-frontend/src/config/site.ts index 4178eea..cd15c75 100644 --- a/vite-frontend/src/config/site.ts +++ b/vite-frontend/src/config/site.ts @@ -4,8 +4,8 @@ export type SiteConfig = typeof siteConfig; // 缓存相关常量 const CACHE_PREFIX = 'vite_config_'; -const VERSION = "1.3.3"; -const APP_VERSION = "1.0.2"; +const VERSION = "1.3.4"; +const APP_VERSION = "1.0.3"; const getInitialConfig = () => { if (typeof window === 'undefined') { diff --git a/vite-frontend/src/pages/forward.tsx b/vite-frontend/src/pages/forward.tsx index e00ae51..7e2ab21 100644 --- a/vite-frontend/src/pages/forward.tsx +++ b/vite-frontend/src/pages/forward.tsx @@ -138,13 +138,13 @@ export default function ForwardPage() { return () => window.removeEventListener('resize', checkMobile); }, []); - // 显示模式状态 - 从localStorage读取,默认为分类显示 + // 显示模式状态 - 从localStorage读取,默认为平铺显示 const [viewMode, setViewMode] = useState<'grouped' | 'direct'>(() => { try { const savedMode = localStorage.getItem('forward-view-mode'); - return (savedMode as 'grouped' | 'direct') || 'grouped'; + return (savedMode as 'grouped' | 'direct') || 'direct'; } catch { - return 'grouped'; + return 'direct'; } }); diff --git a/vite-frontend/src/pages/node.tsx b/vite-frontend/src/pages/node.tsx index 2ad4ff8..bb3c86f 100644 --- a/vite-frontend/src/pages/node.tsx +++ b/vite-frontend/src/pages/node.tsx @@ -58,6 +58,9 @@ export default function NodePage() { const [dialogTitle, setDialogTitle] = useState(''); const [isEdit, setIsEdit] = useState(false); const [submitLoading, setSubmitLoading] = useState(false); + const [deleteModalOpen, setDeleteModalOpen] = useState(false); + const [deleteLoading, setDeleteLoading] = useState(false); + const [nodeToDelete, setNodeToDelete] = useState(null); const [form, setForm] = useState({ id: null, name: '', @@ -419,19 +422,29 @@ export default function NodePage() { }; // 删除节点 - const handleDelete = async (node: Node) => { - if (window.confirm(`确定要删除节点 "${node.name}" 吗?`)) { - try { - const res = await deleteNode(node.id); - if (res.code === 0) { - toast.success('删除成功'); - setNodeList(prev => prev.filter(n => n.id !== node.id)); - } else { - toast.error(res.msg || '删除失败'); - } - } catch (error) { - toast.error('网络错误,请重试'); + const handleDelete = (node: Node) => { + setNodeToDelete(node); + setDeleteModalOpen(true); + }; + + const confirmDelete = async () => { + if (!nodeToDelete) return; + + setDeleteLoading(true); + try { + const res = await deleteNode(nodeToDelete.id); + if (res.code === 0) { + toast.success('删除成功'); + setNodeList(prev => prev.filter(n => n.id !== nodeToDelete.id)); + setDeleteModalOpen(false); + setNodeToDelete(null); + } else { + toast.error(res.msg || '删除失败'); } + } catch (error) { + toast.error('网络错误,请重试'); + } finally { + setDeleteLoading(false); } }; @@ -883,6 +896,40 @@ export default function NodePage() { + {/* 删除确认模态框 */} + + + {(onClose) => ( + <> + +

确认删除

+
+ +

确定要删除节点 "{nodeToDelete?.name}" 吗?

+

此操作不可恢复,请谨慎操作。

+
+ + + + + + )} +
+
+ {/* 安装命令模态框 */} {(onClose) => (