diff --git a/vite-frontend/src/layouts/admin.tsx b/vite-frontend/src/layouts/admin.tsx index 353d714..0ec185c 100644 --- a/vite-frontend/src/layouts/admin.tsx +++ b/vite-frontend/src/layouts/admin.tsx @@ -574,8 +574,11 @@ export default function AdminLayout({ {/* 修改密码弹窗 */} -

隧道分组

- @@ -1503,7 +1526,11 @@ export default function NodePage() { onPress={() => setActiveTab("remote")} > 远程节点 - + {remoteNodes.length} @@ -1526,13 +1553,16 @@ export default function NodePage() { onChange={setCurrentSearchKeyword} onClose={() => setIsSearchVisible(false)} onOpen={() => { - setIsSearchVisible(true); - setTimeout(() => { - // 精准抓取带有“搜索”字样的输入框并强制聚焦 - const searchInput = document.querySelector('input[placeholder*="搜索"]'); - if (searchInput) (searchInput as HTMLElement).focus(); - }, 150); // 150ms 刚好是 CSS 展开动画的时间 - }} + setIsSearchVisible(true); + setTimeout(() => { + // 精准抓取带有“搜索”字样的输入框并强制聚焦 + const searchInput = document.querySelector( + 'input[placeholder*="搜索"]', + ); + + if (searchInput) (searchInput as HTMLElement).focus(); + }, 150); // 150ms 刚好是 CSS 展开动画的时间 + }} /> @@ -1592,7 +1622,6 @@ export default function NodePage() { + +
+ + {expiryMeta.label} + +
+
+ {formatNodeRenewalTime( + expiryMeta.nextDueTime, + )} +
)} - + {hasRemark && ( -
- - 备注:{node.remark?.trim()} - +
+
+ 备注 +
+
+ {node.remark?.trim()} +
)}
@@ -2181,8 +2287,11 @@ export default function NodePage() { )} {/* 新增/编辑节点对话框 */} - 0 ? new Date(form.expiryTime).toISOString().slice(0, 10) @@ -2599,8 +2709,10 @@ export default function NodePage() { {/* 回退确认模态框 */}

- 确定要将节点 "{nodeToRollback?.name}" 回退到上一个版本吗? + 确定要将节点{" "} + "{nodeToRollback?.name}"{" "} + 回退到上一个版本吗?

节点将执行版本回退并自动重启,期间会导致节点短暂离线。 @@ -2635,8 +2749,11 @@ export default function NodePage() { {/* 删除确认模态框 */} - - {/* 安装命令模态框 */} - {/* 版本选择升级模态框 */} - {/* 批量删除确认模态框 */} - - {/* Create Share Modal */} - setCreateShareOpen(false)} @@ -784,7 +788,11 @@ export default function PanelSharingPage() { {/* Edit Share Modal */} - setEditShareOpen(false)} @@ -883,7 +891,14 @@ export default function PanelSharingPage() { {/* Import Node Modal */} - setImportNodeOpen(false)}> + setImportNodeOpen(false)} + > 导入远程节点 diff --git a/vite-frontend/src/pages/profile.tsx b/vite-frontend/src/pages/profile.tsx index f6bb899..86a2ada 100644 --- a/vite-frontend/src/pages/profile.tsx +++ b/vite-frontend/src/pages/profile.tsx @@ -325,8 +325,11 @@ export default function ProfilePage() { {/* 修改密码弹窗 */} - { if (open) { setBatchResultModal((prev) => ({ ...prev, open: true })); + return; } setBatchResultModal(EMPTY_BATCH_RESULT_MODAL_STATE); diff --git a/vite-frontend/src/pages/user.tsx b/vite-frontend/src/pages/user.tsx index 2a3a557..9a02c31 100644 --- a/vite-frontend/src/pages/user.tsx +++ b/vite-frontend/src/pages/user.tsx @@ -59,7 +59,12 @@ import { getUserGroupList, getUserGroups, } from "@/api"; -import { EditIcon, DeleteIcon, SettingsIcon, SearchIcon } from "@/components/icons"; +import { + EditIcon, + DeleteIcon, + SettingsIcon, + SearchIcon, +} from "@/components/icons"; import { PageLoadingState } from "@/components/page-state"; import { useLocalStorageState } from "@/hooks/use-local-storage-state"; import { removeItemsById, replaceItemById } from "@/utils/list-state";