增加流量不重置功能,ping改为tcpping

This commit is contained in:
qaq
2025-07-22 10:30:16 +08:00
parent 1448f96fa5
commit de4da12f42
17 changed files with 277 additions and 243 deletions
+1 -1
View File
@@ -260,7 +260,7 @@ export default function AdminLayout({
<Logo size={28} />
<div>
<h1 className="text-base font-bold text-foreground">哆啦A梦</h1>
<p className="text-xs text-default-500">v1.0.7</p>
<p className="text-xs text-default-500">v1.0.8</p>
</div>
</div>
</div>
+4 -3
View File
@@ -341,7 +341,8 @@ export default function DashboardPage() {
};
const formatResetTime = (resetDay?: number): string => {
if (!resetDay) return '';
if (resetDay === undefined || resetDay === null) return '';
if (resetDay === 0) return '不重置';
const now = new Date();
const currentDay = now.getDate();
@@ -592,7 +593,7 @@ export default function DashboardPage() {
<p className="text-xs text-default-500 truncate">
{userInfo.flow === 99999 ? '无限制' : `${calculateUsagePercentage('flow').toFixed(1)}%`}
</p>
{userInfo.flowResetTime && (
{(userInfo.flowResetTime !== undefined && userInfo.flowResetTime !== null) && (
<div className="text-xs text-default-500 flex items-center gap-1">
<svg className="w-3 h-3" fill="currentColor" viewBox="0 0 20 20">
<path fillRule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clipRule="evenodd" />
@@ -682,7 +683,7 @@ export default function DashboardPage() {
<span className={`px-2 py-1 rounded-md text-xs font-medium border ${tunnelExpStatus.bg} ${tunnelExpStatus.color}`}>
{tunnelExpStatus.text}
</span>
{tunnel.flowResetTime && (
{(tunnel.flowResetTime !== undefined && tunnel.flowResetTime !== null) && (
<span className="text-xs text-default-500">
{formatResetTime(tunnel.flowResetTime)}
</span>
+7 -2
View File
@@ -74,6 +74,7 @@ interface DiagnosisResult {
nodeName: string;
nodeId: string;
targetIp: string;
targetPort?: number;
message?: string;
averageTime?: number;
packetLoss?: number;
@@ -1075,14 +1076,18 @@ export default function ForwardPage() {
</div>
<div className="text-small text-default-500 flex items-center gap-1">
<span className="flex-shrink-0">目标地址:</span>
<code className="font-mono truncate min-w-0" title={result.targetIp}>{result.targetIp}</code>
<code className="font-mono truncate min-w-0" title={`${result.targetIp}${result.targetPort ? ':' + result.targetPort : ''}`}>
{result.targetIp}{result.targetPort ? ':' + result.targetPort : ''}
</code>
</div>
</div>
) : (
<div className="space-y-2">
<div className="text-small text-default-500 flex items-center gap-1">
<span className="flex-shrink-0">目标地址:</span>
<code className="font-mono truncate min-w-0" title={result.targetIp}>{result.targetIp}</code>
<code className="font-mono truncate min-w-0" title={`${result.targetIp}${result.targetPort ? ':' + result.targetPort : ''}`}>
{result.targetIp}{result.targetPort ? ':' + result.targetPort : ''}
</code>
</div>
<Alert
color="danger"
+3 -2
View File
@@ -67,6 +67,7 @@ interface DiagnosisResult {
nodeName: string;
nodeId: string;
targetIp: string;
targetPort: number;
message?: string;
averageTime?: number;
packetLoss?: number;
@@ -974,13 +975,13 @@ export default function TunnelPage() {
</div>
</div>
<div className="text-small text-default-500">
目标地址: <code className="font-mono">{result.targetIp}</code>
目标地址: <code className="font-mono">{result.targetIp}:{result.targetPort}</code>
</div>
</div>
) : (
<div className="space-y-2">
<div className="text-small text-default-500">
目标地址: <code className="font-mono">{result.targetIp}</code>
目标地址: <code className="font-mono">{result.targetIp}:{result.targetPort}</code>
</div>
<Alert
color="danger"
+17 -8
View File
@@ -126,7 +126,7 @@ export default function UserPage() {
flow: 100,
num: 10,
expTime: null,
flowResetTime: 1
flowResetTime: 0
});
const [userFormLoading, setUserFormLoading] = useState(false);
@@ -142,7 +142,7 @@ export default function UserPage() {
flow: 100,
num: 10,
expTime: null,
flowResetTime: 1,
flowResetTime: 0,
speedId: null
});
const [assignLoading, setAssignLoading] = useState(false);
@@ -253,7 +253,7 @@ export default function UserPage() {
flow: 100,
num: 10,
expTime: null,
flowResetTime: 1
flowResetTime: 0
});
onUserModalOpen();
};
@@ -269,7 +269,7 @@ export default function UserPage() {
flow: user.flow,
num: user.num,
expTime: user.expTime ? new Date(user.expTime) : null,
flowResetTime: user.flowResetTime || 1
flowResetTime: user.flowResetTime ?? 0
});
onUserModalOpen();
};
@@ -338,7 +338,7 @@ export default function UserPage() {
flow: 100,
num: 10,
expTime: null,
flowResetTime: 1,
flowResetTime: 0,
speedId: null
});
onTunnelModalOpen();
@@ -370,7 +370,7 @@ export default function UserPage() {
flow: 100,
num: 10,
expTime: null,
flowResetTime: 1,
flowResetTime: 0,
speedId: null
});
loadUserTunnels(currentUser.id);
@@ -592,7 +592,7 @@ export default function UserPage() {
</div>
<div className="flex justify-between text-sm">
<span className="text-default-600">重置日期</span>
<span className="text-xs">每月{user.flowResetTime || 1}号</span>
<span className="text-xs">{user.flowResetTime === 0 ? '不重置' : `每月${user.flowResetTime}号`}</span>
</div>
{user.expTime && (
<div className="flex justify-between text-sm">
@@ -716,6 +716,9 @@ export default function UserPage() {
setUserForm(prev => ({ ...prev, flowResetTime: Number(value) }));
}}
>
<SelectItem key="0" textValue="不重置">
不重置
</SelectItem>
{Array.from({ length: 31 }, (_, i) => i + 1).map(day => (
<SelectItem key={day.toString()} textValue={`每月${day}号(0点重置)`}>
每月{day}号(0点重置)
@@ -836,6 +839,9 @@ export default function UserPage() {
setTunnelForm(prev => ({ ...prev, flowResetTime: Number(value) }));
}}
>
<SelectItem key="0" textValue="不重置">
不重置
</SelectItem>
{Array.from({ length: 31 }, (_, i) => i + 1).map(day => (
<SelectItem key={day.toString()} textValue={`每月${day}号(0点重置)`}>
每月{day}号(0点重置)
@@ -919,7 +925,7 @@ export default function UserPage() {
{userTunnel.speedLimitName || '不限速'}
</Chip>
</TableCell>
<TableCell>每月{userTunnel.flowResetTime}号</TableCell>
<TableCell>{userTunnel.flowResetTime === 0 ? '不重置' : `每月${userTunnel.flowResetTime}号`}</TableCell>
<TableCell>{formatDate(userTunnel.expTime)}</TableCell>
<TableCell>
<div className="flex items-center gap-2">
@@ -1012,6 +1018,9 @@ export default function UserPage() {
setEditTunnelForm(prev => prev ? { ...prev, flowResetTime: Number(value) } : null);
}}
>
<SelectItem key="0" textValue="不重置">
不重置
</SelectItem>
{Array.from({ length: 31 }, (_, i) => i + 1).map(day => (
<SelectItem key={day.toString()} textValue={`每月${day}号(0点重置)`}>
每月{day}号(0点重置)