diff --git a/package.json b/package.json
index b89de23..eb8af66 100644
--- a/package.json
+++ b/package.json
@@ -9,22 +9,27 @@
"lint": "next lint"
},
"dependencies": {
- "@hookform/resolvers": "^4.1.3",
+ "next": "15.2.1",
+ "react": "^19.0.0",
+ "react-dom": "^19.0.0",
+
+ "@radix-ui/react-checkbox": "^1.1.4",
"@radix-ui/react-label": "^2.1.2",
"@radix-ui/react-radio-group": "^1.2.3",
"@radix-ui/react-select": "^2.1.6",
"@radix-ui/react-slot": "^1.1.2",
+ "lucide-react": "^0.479.0",
+
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "lucide-react": "^0.479.0",
- "motion": "^12.5.0",
- "next": "15.2.1",
- "react": "^19.0.0",
- "react-dom": "^19.0.0",
- "react-hook-form": "^7.54.2",
"tailwind-merge": "^3.0.2",
+
+ "react-hook-form": "^7.54.2",
+ "@hookform/resolvers": "^4.1.3",
+ "zod": "^3.24.2",
+
"tailwindcss-animate": "^1.0.7",
- "zod": "^3.24.2"
+ "motion": "^12.5.0"
},
"devDependencies": {
"@eslint/eslintrc": "^3",
@@ -40,4 +45,4 @@
"typescript": "^5"
},
"packageManager": "pnpm@10.5.2+sha512.da9dc28cd3ff40d0592188235ab25d3202add8a207afbedc682220e4a0029ffbff4562102b9e6e46b4e3f9e8bd53e6d05de48544b0c57d4b0179e22c76d1199b"
-}
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ffe2657..51337c2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -11,6 +11,9 @@ importers:
'@hookform/resolvers':
specifier: ^4.1.3
version: 4.1.3(react-hook-form@7.54.2(react@19.0.0))
+ '@radix-ui/react-checkbox':
+ specifier: ^1.1.4
+ version: 1.1.4(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@radix-ui/react-label':
specifier: ^2.1.2
version: 2.1.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -384,6 +387,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-checkbox@1.1.4':
+ resolution: {integrity: sha512-wP0CPAHq+P5I4INKe3hJrIa1WoNqqrejzW+zoU0rOvo1b9gDEJJFl2rYfO1PYJUQCc2H1WZxIJmyv9BS8i5fLw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-collection@1.1.2':
resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==}
peerDependencies:
@@ -2321,6 +2337,22 @@ snapshots:
'@types/react': 19.0.10
'@types/react-dom': 19.0.4(@types/react@19.0.10)
+ '@radix-ui/react-checkbox@1.1.4(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.1
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.10)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.1(@types/react@19.0.10)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.10)(react@19.0.0)
+ '@radix-ui/react-use-previous': 1.1.0(@types/react@19.0.10)(react@19.0.0)
+ '@radix-ui/react-use-size': 1.1.0(@types/react@19.0.10)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.10
+ '@types/react-dom': 19.0.4(@types/react@19.0.10)
+
'@radix-ui/react-collection@1.1.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.10)(react@19.0.0)
diff --git a/public/login/bg.webp b/public/login/bg.webp
new file mode 100644
index 0000000..246a35e
Binary files /dev/null and b/public/login/bg.webp differ
diff --git a/src/app/(admin)/dashboard/page.tsx b/src/app/(admin)/dashboard/page.tsx
deleted file mode 100644
index ef31020..0000000
--- a/src/app/(admin)/dashboard/page.tsx
+++ /dev/null
@@ -1,243 +0,0 @@
-import {ReactNode} from 'react'
-
-export type DashboardPageProps = {
-
-}
-
-export default function DashboardPage(props: DashboardPageProps) {
- return (
-
-
- {/* 左侧主要内容区域 */}
-
-
- {/* 页面标题 */}
-
-
-
-
-
IP资源监控中心
-
实时监控IP资源使用情况和系统性能指标
-
-
-
-
- {/* 数据卡片网格 */}
-
-
-
-
-
-
活跃IP数
-
8,721
-
↑12% 较上月
-
-
-
-
-
-
-
-
-
IP可用率
-
99.9%
-
符合SLA标准
-
-
-
-
-
-
-
-
-
平均响应时间
-
47ms
-
优于行业标准
-
-
-
-
-
- {/* 监控指标区域 */}
-
-
-
带宽使用趋势
-
- 带宽使用量图表
-
-
-
-
-
-
IP地理分布
-
- 地理分布热力图
-
-
-
-
-
- {/* 告警信息 */}
-
-
-
系统告警
- 查看全部
-
-
-
-
-
-
-
IP资源池使用率达到80%
-
20分钟前
-
-
-
-
-
-
- {/* 右侧边栏 */}
-
- {/* 用户信息卡片 */}
-
-
-
-
-
管理员
-
admin@example.com
-
-
-
-
-
- {/* 快捷操作 */}
-
-
快捷操作
-
-
-
-
-
-
-
-
- {/* 系统公告 */}
-
-
-
系统公告
- 全部
-
-
-
-
-
-
系统将于本周日凌晨2点进行例行维护升级
-
2024-01-20 10:00
-
-
-
-
-
-
IP资源管理系统V2.0版本更新说明
-
2024-01-18 15:30
-
-
-
-
-
-
- )
-}
diff --git a/src/app/(admin)/layout.tsx b/src/app/(admin)/layout.tsx
deleted file mode 100644
index 0a6f874..0000000
--- a/src/app/(admin)/layout.tsx
+++ /dev/null
@@ -1,198 +0,0 @@
-import Link from 'next/link'
-import {ReactNode} from 'react'
-
-export type AdminLayoutProps = {
- children: ReactNode
-}
-
-export default function AdminLayout(props: AdminLayoutProps) {
- return (
-
-
- {/* 左侧导航栏 */}
-
-
- {/* 右侧主内容区 */}
-
-
- {/* 顶部导航栏 */}
-
-
- {/* 面包屑导航 */}
-
-
- {/* 右侧工具栏 */}
-
- {/* 搜索框 */}
-
-
- {/* 全屏切换 */}
-
-
- {/* 通知 */}
-
-
- {/* 用户菜单 */}
-
-
-
-
-
-
- {/* 主内容区域 */}
-
- {props.children}
-
-
-
- )
-}
diff --git a/src/app/(auth)/login/page.tsx b/src/app/(auth)/login/page.tsx
index 1517295..125f02b 100644
--- a/src/app/(auth)/login/page.tsx
+++ b/src/app/(auth)/login/page.tsx
@@ -1,102 +1,101 @@
-import {ReactNode} from 'react'
+'use client'
+import { ReactNode, useState } from 'react'
+import Image from 'next/image'
+import { Input } from "@/components/ui/input"
+import { Label } from "@/components/ui/label"
+import { Button } from "@/components/ui/button"
+import { Checkbox } from "@/components/ui/checkbox"
export type LoginPageProps = {}
export default function LoginPage(props: LoginPageProps) {
- return (
-
-
- {/* 左侧背景图 */}
-
-

-
-
+ const [countdown, setCountdown] = useState(0);
- {/* 右侧登录表单 */}
-
+ const handleSendCode = () => {
+ // 这里实现发送验证码的逻辑
+ setCountdown(60);
+ const timer = setInterval(() => {
+ setCountdown((prev) => {
+ if (prev <= 1) {
+ clearInterval(timer);
+ return 0;
+ }
+ return prev - 1;
+ });
+ }, 1000);
+ };
+
+ return (
+
+
+
+ {/* 登录表单 */}
+
+
)
}
diff --git a/src/app/(root)/@footer/page.tsx b/src/app/(root)/@footer/page.tsx
index 1c43ed3..60088c4 100644
--- a/src/app/(root)/@footer/page.tsx
+++ b/src/app/(root)/@footer/page.tsx
@@ -9,17 +9,17 @@ export default function Footer(props: FooterProps) {

-
关注我们查看更多资讯
+
关注我们查看更多资讯
商务合作
-
大客户经理:张经理
-
电话/微信:18751847847
-
QQ号:800180559
+
大客户经理:张经理
+
电话/微信:18751847847
+
QQ号:800180559
服务保障
-
售前服务
-
技术支持
+
售前服务
+
技术支持
-
+
声明:啊啊HTTP仅提供代理IP服务;严禁用户使用啊啊HTTP从事任何违法犯罪行为,产生的相关责任用户自负,对此啊啊HTTP不承担任何法律责任。
自律公约
-
+
南京啊啊啊啊科技有限公司 版权所有网站地图
地址:啊啊啊啊啊啊啊啊啊大街57号楚翘城7幢404-405室
-
+
电信业务经营许可证:B1-11111111
苏ICP备111111111号-1
苏公网安备11111111111111号
@@ -109,7 +109,7 @@ function SiteNavList(props: {
{props.title}
{props.items.map((item, index) => (
diff --git a/src/app/(root)/@header/page.tsx b/src/app/(root)/@header/page.tsx
index 27fa6f0..adc757c 100644
--- a/src/app/(root)/@header/page.tsx
+++ b/src/app/(root)/@header/page.tsx
@@ -7,7 +7,7 @@ import SolutionMenu from './_client/solution'
import ProductMenu from './_client/product'
import HelpMenu from './_client/help'
import Wrap from '@/components/wrap'
-import logo from '@/assets/logo.png'
+import logo from '@/assets/logo.webp'
export type HeaderProps = {}
@@ -114,18 +114,22 @@ export default function Header(props: HeaderProps) {
{/* 登录 */}
diff --git a/src/app/(root)/layout.tsx b/src/app/(root)/layout.tsx
index 82c28d2..dc7c424 100644
--- a/src/app/(root)/layout.tsx
+++ b/src/app/(root)/layout.tsx
@@ -8,7 +8,7 @@ export type RootLayoutProps = {
export default function RootLayout(props: RootLayoutProps) {
return (
-
+
{/* 页头 */}
diff --git a/src/app/(root)/page.tsx b/src/app/(root)/page.tsx
index 4382406..3c527ef 100644
--- a/src/app/(root)/page.tsx
+++ b/src/app/(root)/page.tsx
@@ -9,28 +9,28 @@ export default function Home() {
{/* banner */}
- 安全,稳定,快速,合规的代理服务器
+ 安全,稳定,快速,合规的代理服务器
遍布全国的代理服务器节点为用户提供智能可靠的IP代理服务
- 全国200+城市节点
+ 全国200+城市节点
- 300+城市级精准定位
+ 300+城市级精准定位
- 低延迟&高并发提取
+ 低延迟&高并发提取
@@ -129,7 +129,7 @@ export default function Home() {
- 我是标题
+ 我是标题
2025-03-04
@@ -161,7 +161,7 @@ function Section(props: {
return (
-
{props.title}
+ {props.title}
{props.children}
@@ -183,7 +183,7 @@ function Sec3Item(props: {
`max-md:items-center`,
].join(' ')}>
- {props.title}
+
{props.title}
{props.terms.map((item, index) => {
return (
@@ -207,7 +207,7 @@ function Sec4Item(props: {
-
{props.title}
+
{props.title}
{props.description}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index d1ab2d5..8a018e5 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -3,8 +3,6 @@ import {Metadata} from 'next'
import './globals.css'
import localFont from 'next/font/local'
-const font = localFont({src: './SourceHanSansSC-VF.otf.woff2'})
-
export const metadata: Metadata = {
title: 'Create Next App',
description: 'Generated by create next app',
@@ -17,7 +15,7 @@ export default function RootLayout({
}>) {
return (
-
+
{children}
diff --git a/src/assets/logo.png b/src/assets/logo.png
deleted file mode 100644
index be7c2c6..0000000
Binary files a/src/assets/logo.png and /dev/null differ
diff --git a/src/assets/logo.webp b/src/assets/logo.webp
new file mode 100644
index 0000000..1a946ee
Binary files /dev/null and b/src/assets/logo.webp differ
diff --git a/src/components/bread-crumb.tsx b/src/components/bread-crumb.tsx
index fb6fada..a691592 100644
--- a/src/components/bread-crumb.tsx
+++ b/src/components/bread-crumb.tsx
@@ -49,7 +49,7 @@ export default function BreadCrumb({
) : (
{item.label}
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index a2df8dc..278bdfc 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -5,7 +5,12 @@ import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const buttonVariants = cva(
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+ "inline-flex items-center justify-center gap-2 " +
+ "whitespace-nowrap rounded-md text-sm transition-all " +
+ "disabled:pointer-events-none disabled:opacity-50 " +
+ "[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 " +
+ "outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] " +
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
{
variants: {
variant: {
diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx
new file mode 100644
index 0000000..fa0e4b5
--- /dev/null
+++ b/src/components/ui/checkbox.tsx
@@ -0,0 +1,32 @@
+"use client"
+
+import * as React from "react"
+import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
+import { CheckIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Checkbox({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+
+
+
+
+ )
+}
+
+export { Checkbox }
diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx
index 03295ca..4e6a529 100644
--- a/src/components/ui/input.tsx
+++ b/src/components/ui/input.tsx
@@ -8,7 +8,7 @@ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
type={type}
data-slot="input"
className={cn(
- "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
className
diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx
index fb5fbc3..b8c7e71 100644
--- a/src/components/ui/label.tsx
+++ b/src/components/ui/label.tsx
@@ -13,7 +13,7 @@ function Label({
)
diff --git a/src/utils/index.ts b/src/utils/index.ts
deleted file mode 100644
index 8b13789..0000000
--- a/src/utils/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-