From 9f7a5e8f14bc2ed082ece8fb6000de9ae1cf3d87 Mon Sep 17 00:00:00 2001 From: sagitchu Date: Thu, 23 Apr 2026 16:26:49 +0800 Subject: [PATCH] feat: add max conn UI to user management and forward rules --- vite-frontend/src/api/types.ts | 4 ++++ vite-frontend/src/pages/forward.tsx | 16 ++++++++++++++++ vite-frontend/src/pages/user.tsx | 25 +++++++++++++++++++++++++ vite-frontend/src/types/index.ts | 5 ++++- 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/vite-frontend/src/api/types.ts b/vite-frontend/src/api/types.ts index 7e92b67..dc31da5 100644 --- a/vite-frontend/src/api/types.ts +++ b/vite-frontend/src/api/types.ts @@ -20,6 +20,7 @@ export interface UserApiItem { num: number; expTime?: number; flowResetTime?: number; + maxConn?: number; inFlow?: number; outFlow?: number; dailyQuotaGB?: number; @@ -200,6 +201,7 @@ export interface UserPackageInfoApiData { num: number; expTime?: string; flowResetTime?: number; + maxConn?: number; [key: string]: unknown; }; tunnelPermissions: UserTunnelPermissionApiItem[]; @@ -276,6 +278,7 @@ export interface UserMutationPayload { num?: number; expTime?: number | string; flowResetTime?: number; + maxConn?: number; dailyQuotaGB?: number; monthlyQuotaGB?: number; tunnelFlow?: number; @@ -338,6 +341,7 @@ export interface UserTunnelAssignPayload { num?: number; expTime?: number; flowResetTime?: number; + maxConn?: number; status?: number; speedId?: number | null; tunnels?: Array<{ tunnelId: number; speedId?: number | null }>; diff --git a/vite-frontend/src/pages/forward.tsx b/vite-frontend/src/pages/forward.tsx index c63d17b..95048ef 100644 --- a/vite-frontend/src/pages/forward.tsx +++ b/vite-frontend/src/pages/forward.tsx @@ -157,6 +157,7 @@ interface ForwardForm { interfaceName?: string; strategy: string; speedId: number | null; + maxConn?: number; } interface ForwardUserGroup { @@ -1306,6 +1307,7 @@ export default function ForwardPage() { interfaceName: "", strategy: "fifo", speedId: null, + maxConn: 0, }); const [inIpTouched, setInIpTouched] = useState(false); @@ -4723,6 +4725,20 @@ export default function ForwardPage() {
+ { + const value = Math.max(Number(e.target.value) || 0, 0); + setForm((prev) => ({ ...prev, maxConn: value })); + }} + description="此设置优先于用户的全局连接数限制。0 表示不限制。" + variant="bordered" + /> + ({ ...prev, flow: value })); }} /> + { + const value = Math.max(Number(e.target.value) || 0, 0); + setUserForm((prev) => ({ ...prev, maxConn: value })); + }} + /> + { + const value = Math.max(Number(e.target.value) || 0, 0); + setUserForm((prev) => ({ ...prev, maxConn: value })); + }} + /> 规则数量 状态 限速规则 + 最大连接 重置时间 到期时间 操作 diff --git a/vite-frontend/src/types/index.ts b/vite-frontend/src/types/index.ts index 83fc3a4..6784911 100644 --- a/vite-frontend/src/types/index.ts +++ b/vite-frontend/src/types/index.ts @@ -44,6 +44,7 @@ export interface UserForm { num: number; expTime: Date | null; flowResetTime: number; + maxConn?: number; groupIds?: number[]; } @@ -56,7 +57,8 @@ export interface UserTunnel { flow: number; // 流量限制(GB) num: number; // 转发数量 expTime: number; // 过期时间戳 - flowResetTime: number; // 流量重置日期 + flowResetTime: number; + maxConn?: number; // 流量重置日期 speedId?: number | null; // 限速规则ID speedLimitName?: string; // 限速规则名称 inFlow?: number; // 下载流量(字节) @@ -70,6 +72,7 @@ export interface UserTunnelForm { num: number; expTime: Date | null; flowResetTime: number; + maxConn?: number; speedId: number | null; }