Compare commits

..

No commits in common. "ac5c7e801dc3ed5f5cce7e2fde96c77a7d8d5b1b" and "c771162e0b448dfe4c9faf2807a2cd8259830b7e" have entirely different histories.

14 changed files with 48 additions and 77 deletions

View File

@ -62,7 +62,7 @@ jobs:
uses: oven-sh/setup-bun@v1
with:
bun-version: "latest"
- name: Changelog
run: bun x changelogithub
env:

View File

@ -107,14 +107,12 @@ export default function ServerListClient() {
: filteredServersByStatus.filter((server) => server.tag === tag);
if (filter) {
// 根据使用流量进行从高到低排序
filteredServers.sort((a, b) => {
if (!a.online_status && b.online_status) return 1;
if (a.online_status && !b.online_status) return -1;
if (!a.online_status && !b.online_status) return 0;
return (
b.status.NetInSpeed +
b.status.NetOutSpeed -
(a.status.NetInSpeed + a.status.NetOutSpeed)
b.status.NetInTransfer +
b.status.NetOutTransfer -
(a.status.NetInTransfer + b.status.NetOutTransfer)
);
});
}

View File

@ -3,7 +3,6 @@
import { ServerApi } from "@/app/types/nezha-api";
import { Loader } from "@/components/loading/Loader";
import { Card, CardContent } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
import getEnv from "@/lib/env-entry";
import { useFilter } from "@/lib/network-filter-context";
import { useStatus } from "@/lib/status-context";
@ -49,14 +48,11 @@ export default function ServerOverviewClient() {
setStatus("all");
}
}}
className={cn(
"cursor-pointer hover:border-blue-500 transition-all min-h-[94px]",
{
"pointer-events-none": global,
},
)}
className={cn("cursor-pointer hover:border-blue-500 transition-all", {
"pointer-events-none": global,
})}
>
<CardContent className="flex h-full items-center px-6 py-3">
<CardContent className="px-6 py-3">
<section className="flex flex-col gap-1">
<p className="text-sm font-medium md:text-base">
{t("p_816-881_Totalservers")}
@ -86,7 +82,7 @@ export default function ServerOverviewClient() {
}
}}
className={cn(
"cursor-pointer hover:ring-green-500 ring-1 ring-transparent transition-all min-h-[94px]",
"cursor-pointer hover:ring-green-500 ring-1 ring-transparent transition-all",
{
"ring-green-500 ring-2 border-transparent": status === "online",
},
@ -95,7 +91,7 @@ export default function ServerOverviewClient() {
},
)}
>
<CardContent className="flex h-full items-center px-6 py-3">
<CardContent className="px-6 py-3">
<section className="flex flex-col gap-1">
<p className="text-sm font-medium md:text-base">
{t("p_1610-1676_Onlineservers")}
@ -126,7 +122,7 @@ export default function ServerOverviewClient() {
}
}}
className={cn(
"cursor-pointer hover:ring-red-500 ring-1 ring-transparent transition-all min-h-[94px]",
"cursor-pointer hover:ring-red-500 ring-1 ring-transparent transition-all",
{
"ring-red-500 ring-2 border-transparent": status === "offline",
},
@ -135,7 +131,7 @@ export default function ServerOverviewClient() {
},
)}
>
<CardContent className="flex h-full items-center px-6 py-3">
<CardContent className="px-6 py-3">
<section className="flex flex-col gap-1">
<p className="text-sm font-medium md:text-base">
{t("p_2532-2599_Offlineservers")}
@ -166,7 +162,7 @@ export default function ServerOverviewClient() {
}
}}
className={cn(
"cursor-pointer hover:ring-purple-500 ring-1 ring-transparent transition-all min-h-[94px]",
"cursor-pointer hover:ring-purple-500 ring-1 ring-transparent transition-all",
{
"ring-purple-500 ring-2 border-transparent": filter === true,
},
@ -175,34 +171,20 @@ export default function ServerOverviewClient() {
},
)}
>
<CardContent className="flex h-full items-center relative px-3 py-1 pr-0 sm:px-6 sm:py-3">
<CardContent className="relative px-6 py-3">
<section className="flex flex-col gap-1">
<div className="flex items-center gap-1">
<p className="text-sm font-medium md:text-base">
{t("p_3463-3530_Totalbandwidth")}
</p>
<Separator orientation="vertical" className="h-4 w-[1px]" />
<p className="text-sm font-medium md:text-base">{t("speed")}</p>
</div>
<p className="text-sm font-medium md:text-base">
{t("p_3463-3530_Totalbandwidth")}
</p>
{data?.result ? (
<>
<section className="flex flex-row sm:items-center items-start gap-1">
<p className="sm:text-[12px] text-[10px] text-stone-400 text-nowrap font-medium">
{formatBytes(data?.total_out_bandwidth)}
</p>
<p className="sm:text-[12px] text-[10px] text-stone-400 text-nowrap font-medium">
{formatBytes(data?.total_in_bandwidth)}
</p>
</section>
<section className="flex flex-row -mt-1 -mr-1 sm:items-center items-start gap-1">
<p className="sm:text-[12px] text-[10px] text-nowrap font-semibold">
{formatBytes(data?.total_out_speed)}/s
</p>
<p className="sm:text-[12px] text-[10px] text-nowrap font-semibold">
{formatBytes(data?.total_in_speed)}/s
</p>
</section>
</>
<section className="flex flex-col sm:flex-row pt-[8px] sm:items-center items-start gap-1">
<p className="text-[12px] text-nowrap font-semibold">
{formatBytes(data?.total_out_bandwidth)}
</p>
<p className="text-[12px] text-nowrap font-semibold">
{formatBytes(data?.total_in_bandwidth)}
</p>
</section>
) : (
<div className="flex h-7 items-center">
<Loader visible={true} />

View File

@ -5,6 +5,8 @@ import { Suspense } from "react";
import ServerGlobal from "./ClientComponents/Global";
import GlobalLoading from "./ClientComponents/GlobalLoading";
export const runtime = "edge";
export default async function Home({
searchParams,
}: {

View File

@ -1,6 +1,6 @@
// @auto-i18n-check. Please do not delete the line.
import { ThemeColorManager } from "@/components/ThemeColorManager";
import { MotionProvider } from "@/components/motion/motion-provider";
import { ThemeColorManager } from "@/components/ThemeColorManager";
import getEnv from "@/lib/env-entry";
import { FilterProvider } from "@/lib/network-filter-context";
import { StatusProvider } from "@/lib/status-context";

View File

@ -4,6 +4,8 @@ import Link from "next/link";
import Footer from "./(main)/footer";
import Header from "./(main)/header";
export const runtime = "edge";
export default function NotFoundPage() {
const t = useTranslations("NotFoundPage");
return (

View File

@ -3,8 +3,6 @@ export type ServerApi = {
offline_servers: number;
total_out_bandwidth: number;
total_in_bandwidth: number;
total_out_speed: number;
total_in_speed: number;
result: NezhaAPISafe[];
};

View File

@ -1,40 +1,37 @@
"use client";
'use client';
import { useTheme } from "next-themes";
import { useEffect } from "react";
import { useEffect } from 'react';
import { useTheme } from 'next-themes';
export function ThemeColorManager() {
const { theme, systemTheme } = useTheme();
useEffect(() => {
const updateThemeColor = () => {
const currentTheme = theme === "system" ? systemTheme : theme;
const currentTheme = theme === 'system' ? systemTheme : theme;
const meta = document.querySelector('meta[name="theme-color"]');
if (!meta) {
const newMeta = document.createElement("meta");
newMeta.name = "theme-color";
const newMeta = document.createElement('meta');
newMeta.name = 'theme-color';
document.head.appendChild(newMeta);
}
const themeColor =
currentTheme === "dark"
? "hsl(30 15% 8%)" // 深色模式背景色
: "hsl(0 0% 98%)"; // 浅色模式背景色
document
.querySelector('meta[name="theme-color"]')
?.setAttribute("content", themeColor);
const themeColor = currentTheme === 'dark'
? 'hsl(30 15% 8%)' // 深色模式背景色
: 'hsl(0 0% 98%)'; // 浅色模式背景色
document.querySelector('meta[name="theme-color"]')?.setAttribute('content', themeColor);
};
// Update on mount and theme change
updateThemeColor();
// Listen for system theme changes
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
mediaQuery.addEventListener("change", updateThemeColor);
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
mediaQuery.addEventListener('change', updateThemeColor);
return () => mediaQuery.removeEventListener("change", updateThemeColor);
return () => mediaQuery.removeEventListener('change', updateThemeColor);
}, [theme, systemTheme]);
return null;

View File

@ -44,8 +44,6 @@ export async function GetNezhaData() {
offline_servers: 0,
total_out_bandwidth: 0,
total_in_bandwidth: 0,
total_in_speed: 0,
total_out_speed: 0,
result: [],
};
@ -68,8 +66,6 @@ export async function GetNezhaData() {
data.total_out_bandwidth += element.status.NetOutTransfer;
data.total_in_bandwidth += element.status.NetInTransfer;
data.total_in_speed += element.status.NetInSpeed;
data.total_out_speed += element.status.NetOutSpeed;
// Remove unwanted properties
delete element.ipv4;

View File

@ -4,7 +4,6 @@
"p_1610-1676_Onlineservers": "Online servers",
"p_2532-2599_Offlineservers": "Offline servers",
"p_3463-3530_Totalbandwidth": "Total bandwidth",
"speed": "speed",
"error_message": "Please check your environment variables and review the server console",
"no_data_message": "No data"
},

View File

@ -4,7 +4,6 @@
"p_1610-1676_Onlineservers": "オンラインサーバー",
"p_2532-2599_Offlineservers": "オフラインサーバー",
"p_3463-3530_Totalbandwidth": "総流量",
"speed": "速度",
"error_message": "環境変数を確認し、サーバーコンソールを確認してください",
"no_data_message": "データなし"
},

View File

@ -4,7 +4,6 @@
"p_1610-1676_Onlineservers": "在線伺服器",
"p_2532-2599_Offlineservers": "離線伺服器",
"p_3463-3530_Totalbandwidth": "總流量",
"speed": "速率",
"error_message": "請檢查您的環境變數並檢查伺服器控制台",
"no_data_message": "無資料"
},

View File

@ -4,7 +4,6 @@
"p_1610-1676_Onlineservers": "在线服务器",
"p_2532-2599_Offlineservers": "离线服务器",
"p_3463-3530_Totalbandwidth": "总流量",
"speed": "速率",
"error_message": "请检查您的环境变量并检查服务器控制台",
"no_data_message": "无数据"
},

View File

@ -1,6 +1,6 @@
{
"name": "nezha-dash",
"version": "1.6.8",
"version": "1.6.6",
"private": true,
"scripts": {
"dev": "next dev -p 3040",