mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-04 09:06:38 +08:00
feat: add max conn UI to user management and forward rules
This commit is contained in:
@@ -20,6 +20,7 @@ export interface UserApiItem {
|
|||||||
num: number;
|
num: number;
|
||||||
expTime?: number;
|
expTime?: number;
|
||||||
flowResetTime?: number;
|
flowResetTime?: number;
|
||||||
|
maxConn?: number;
|
||||||
inFlow?: number;
|
inFlow?: number;
|
||||||
outFlow?: number;
|
outFlow?: number;
|
||||||
dailyQuotaGB?: number;
|
dailyQuotaGB?: number;
|
||||||
@@ -200,6 +201,7 @@ export interface UserPackageInfoApiData {
|
|||||||
num: number;
|
num: number;
|
||||||
expTime?: string;
|
expTime?: string;
|
||||||
flowResetTime?: number;
|
flowResetTime?: number;
|
||||||
|
maxConn?: number;
|
||||||
[key: string]: unknown;
|
[key: string]: unknown;
|
||||||
};
|
};
|
||||||
tunnelPermissions: UserTunnelPermissionApiItem[];
|
tunnelPermissions: UserTunnelPermissionApiItem[];
|
||||||
@@ -276,6 +278,7 @@ export interface UserMutationPayload {
|
|||||||
num?: number;
|
num?: number;
|
||||||
expTime?: number | string;
|
expTime?: number | string;
|
||||||
flowResetTime?: number;
|
flowResetTime?: number;
|
||||||
|
maxConn?: number;
|
||||||
dailyQuotaGB?: number;
|
dailyQuotaGB?: number;
|
||||||
monthlyQuotaGB?: number;
|
monthlyQuotaGB?: number;
|
||||||
tunnelFlow?: number;
|
tunnelFlow?: number;
|
||||||
@@ -338,6 +341,7 @@ export interface UserTunnelAssignPayload {
|
|||||||
num?: number;
|
num?: number;
|
||||||
expTime?: number;
|
expTime?: number;
|
||||||
flowResetTime?: number;
|
flowResetTime?: number;
|
||||||
|
maxConn?: number;
|
||||||
status?: number;
|
status?: number;
|
||||||
speedId?: number | null;
|
speedId?: number | null;
|
||||||
tunnels?: Array<{ tunnelId: number; speedId?: number | null }>;
|
tunnels?: Array<{ tunnelId: number; speedId?: number | null }>;
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ interface ForwardForm {
|
|||||||
interfaceName?: string;
|
interfaceName?: string;
|
||||||
strategy: string;
|
strategy: string;
|
||||||
speedId: number | null;
|
speedId: number | null;
|
||||||
|
maxConn?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ForwardUserGroup {
|
interface ForwardUserGroup {
|
||||||
@@ -1306,6 +1307,7 @@ export default function ForwardPage() {
|
|||||||
interfaceName: "",
|
interfaceName: "",
|
||||||
strategy: "fifo",
|
strategy: "fifo",
|
||||||
speedId: null,
|
speedId: null,
|
||||||
|
maxConn: 0,
|
||||||
});
|
});
|
||||||
const [inIpTouched, setInIpTouched] = useState(false);
|
const [inIpTouched, setInIpTouched] = useState(false);
|
||||||
|
|
||||||
@@ -4723,6 +4725,20 @@ export default function ForwardPage() {
|
|||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<div className="space-y-4 pb-4">
|
<div className="space-y-4 pb-4">
|
||||||
|
<Input
|
||||||
|
label="最大连接数"
|
||||||
|
placeholder="0 或空表示不限制"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
value={form.maxConn === 0 ? "" : String(form.maxConn || "")}
|
||||||
|
onChange={(e) => {
|
||||||
|
const value = Math.max(Number(e.target.value) || 0, 0);
|
||||||
|
setForm((prev) => ({ ...prev, maxConn: value }));
|
||||||
|
}}
|
||||||
|
description="此设置优先于用户的全局连接数限制。0 表示不限制。"
|
||||||
|
variant="bordered"
|
||||||
|
/>
|
||||||
|
|
||||||
<Input
|
<Input
|
||||||
errorMessage={errors.name}
|
errorMessage={errors.name}
|
||||||
isInvalid={!!errors.name}
|
isInvalid={!!errors.name}
|
||||||
|
|||||||
@@ -219,6 +219,7 @@ export default function UserPage() {
|
|||||||
num: 10,
|
num: 10,
|
||||||
expTime: null,
|
expTime: null,
|
||||||
flowResetTime: 0,
|
flowResetTime: 0,
|
||||||
|
maxConn: 0,
|
||||||
});
|
});
|
||||||
const [userFormLoading, setUserFormLoading] = useState(false);
|
const [userFormLoading, setUserFormLoading] = useState(false);
|
||||||
const [quotaResetLoading, setQuotaResetLoading] = useState(false);
|
const [quotaResetLoading, setQuotaResetLoading] = useState(false);
|
||||||
@@ -514,6 +515,7 @@ export default function UserPage() {
|
|||||||
num: 10,
|
num: 10,
|
||||||
expTime: null,
|
expTime: null,
|
||||||
flowResetTime: 0,
|
flowResetTime: 0,
|
||||||
|
maxConn: 0,
|
||||||
groupIds: [],
|
groupIds: [],
|
||||||
});
|
});
|
||||||
onUserModalOpen();
|
onUserModalOpen();
|
||||||
@@ -1516,6 +1518,28 @@ export default function UserPage() {
|
|||||||
setUserForm((prev) => ({ ...prev, flow: value }));
|
setUserForm((prev) => ({ ...prev, flow: value }));
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
<Input
|
||||||
|
label="最大连接数"
|
||||||
|
placeholder="0 或空表示不限制"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
value={userForm.maxConn === 0 ? "" : String(userForm.maxConn || "")}
|
||||||
|
onChange={(e) => {
|
||||||
|
const value = Math.max(Number(e.target.value) || 0, 0);
|
||||||
|
setUserForm((prev) => ({ ...prev, maxConn: value }));
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Input
|
||||||
|
label="最大连接数"
|
||||||
|
placeholder="0 或空表示不限制"
|
||||||
|
type="number"
|
||||||
|
min="0"
|
||||||
|
value={userForm.maxConn === 0 ? "" : String(userForm.maxConn || "")}
|
||||||
|
onChange={(e) => {
|
||||||
|
const value = Math.max(Number(e.target.value) || 0, 0);
|
||||||
|
setUserForm((prev) => ({ ...prev, maxConn: value }));
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<Input
|
<Input
|
||||||
isRequired
|
isRequired
|
||||||
label="规则数量"
|
label="规则数量"
|
||||||
@@ -1926,6 +1950,7 @@ export default function UserPage() {
|
|||||||
<TableColumn>规则数量</TableColumn>
|
<TableColumn>规则数量</TableColumn>
|
||||||
<TableColumn>状态</TableColumn>
|
<TableColumn>状态</TableColumn>
|
||||||
<TableColumn>限速规则</TableColumn>
|
<TableColumn>限速规则</TableColumn>
|
||||||
|
<TableColumn>最大连接</TableColumn>
|
||||||
<TableColumn>重置时间</TableColumn>
|
<TableColumn>重置时间</TableColumn>
|
||||||
<TableColumn>到期时间</TableColumn>
|
<TableColumn>到期时间</TableColumn>
|
||||||
<TableColumn>操作</TableColumn>
|
<TableColumn>操作</TableColumn>
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ export interface UserForm {
|
|||||||
num: number;
|
num: number;
|
||||||
expTime: Date | null;
|
expTime: Date | null;
|
||||||
flowResetTime: number;
|
flowResetTime: number;
|
||||||
|
maxConn?: number;
|
||||||
groupIds?: number[];
|
groupIds?: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +57,8 @@ export interface UserTunnel {
|
|||||||
flow: number; // 流量限制(GB)
|
flow: number; // 流量限制(GB)
|
||||||
num: number; // 转发数量
|
num: number; // 转发数量
|
||||||
expTime: number; // 过期时间戳
|
expTime: number; // 过期时间戳
|
||||||
flowResetTime: number; // 流量重置日期
|
flowResetTime: number;
|
||||||
|
maxConn?: number; // 流量重置日期
|
||||||
speedId?: number | null; // 限速规则ID
|
speedId?: number | null; // 限速规则ID
|
||||||
speedLimitName?: string; // 限速规则名称
|
speedLimitName?: string; // 限速规则名称
|
||||||
inFlow?: number; // 下载流量(字节)
|
inFlow?: number; // 下载流量(字节)
|
||||||
@@ -70,6 +72,7 @@ export interface UserTunnelForm {
|
|||||||
num: number;
|
num: number;
|
||||||
expTime: Date | null;
|
expTime: Date | null;
|
||||||
flowResetTime: number;
|
flowResetTime: number;
|
||||||
|
maxConn?: number;
|
||||||
speedId: number | null;
|
speedId: number | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user