4 Commits

Author SHA1 Message Date
db8119e1ae 调整帮助中心文档 2026-01-12 18:28:50 +08:00
91add59393 屏蔽余额功能 2025-12-23 17:12:09 +08:00
a3588fd1be 重构首页,优化组件结构 2025-12-23 17:11:46 +08:00
Eamon-meng
78d605749f 修改相关协议和文档 2025-12-22 11:31:14 +08:00
44 changed files with 416 additions and 358 deletions

View File

@@ -1 +1 @@
bun run lint
#bun run lint

View File

@@ -1,7 +1,13 @@
## TODO
分离公共 api 接口 env 定义
统一前端基础库类型api
购买页固定套餐
优惠问题
### 禁止直接依赖 form
`\[(.*,)?form(,.*)?\]`

View File

@@ -1,6 +1,6 @@
{
"name": "lanhu-web",
"version": "1.0.0",
"version": "1.0.1",
"private": true,
"scripts": {
"dev": "next dev -H 0.0.0.0 --turbopack",
@@ -74,5 +74,5 @@
"typescript": "^5.9.3",
"babel-plugin-react-compiler": "^1.0.0"
},
"packageManager": "bun@1.2.19"
}
"packageManager": "bun@1.3.2"
}

View File

@@ -1,19 +1,19 @@
# 隐私政策
神龙HTTP以下或简称"我们")尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用神龙HTTP提供的代理服务时我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此我们建议您完整阅读本隐私政策以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议可以通过神龙HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容
蓝狐HTTP以下或简称"我们")尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用蓝狐HTTP提供的代理服务时我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此我们建议您完整阅读本隐私政策以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议可以通过蓝狐HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容
一、适用范围
1.1 本隐私政策适用于神龙HTTP网站提供的所有服务。服务包括提供页面浏览、网站登录服务以及通过神龙HTTP网站提供的网络服务。
1.1 本隐私政策适用于蓝狐HTTP网站提供的所有服务。服务包括提供页面浏览、网站登录服务以及通过蓝狐HTTP网站提供的网络服务。
1.2 本隐私政策不适用于其他第三方提供的服务。
1.3 特别说明,如果您使用神龙HTTP的网络服务为您的用户提供服务您的业务数据归您所有您应当与您的用户另行约定隐私政策。
1.3 特别说明,如果您使用蓝狐HTTP的网络服务为您的用户提供服务您的业务数据归您所有您应当与您的用户另行约定隐私政策。
二、用户信息的收集和使用
2.1 协助您成为我们的会员
2.1.1 当您在神龙HTTP网站创建账户时您需要选择会员身份类型个人、企业并向我们提供会员名、单位名称及联系人姓名用于账户实名认证及开票抬头、设置并确认您的登录密码、可用电子邮箱、所在区域国家、省份、城市以及您在中国境内的手机号码。您提供的手机号码将用于注册、登录、绑定账户、找回密码并作为您与神龙HTTP联系的方式之一接收相关业务通知或进行业务沟通。
2.1.1 当您在蓝狐HTTP网站创建账户时您需要选择会员身份类型个人、企业并向我们提供会员名、单位名称及联系人姓名用于账户实名认证及开票抬头、设置并确认您的登录密码、可用电子邮箱、所在区域国家、省份、城市以及您在中国境内的手机号码。您提供的手机号码将用于注册、登录、绑定账户、找回密码并作为您与蓝狐HTTP联系的方式之一接收相关业务通知或进行业务沟通。
2.1.2 如果您仅需使用浏览、搜索等基本服务,您无需注册成为我们的会员及提供上述信息。
@@ -23,11 +23,11 @@
2.2.2 在您使用服务过程中我们会根据您在注册、登录账号及使用产品时授予的权限接收并记录您所使用的设备相关信息如设备型号、操作系统版本、浏览器cookies、唯一设备标识符等软硬件特征信息、设备所在位置相关信息如IP地址、MAC地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息。我们可能会将这些信息与您的账户信息关联以便在不同设备上为您提供一致的服务。
2.2.3 日志信息当您使用我们的网站或代理IP服务时我们会自动收集您对我们服务的详细使用情况作为有关网络日志保存例如您进入神龙HTTP站的搜索查询内容、登录账号、IP地址、浏览器类型、电信运营商、使用的语言、访问日期及代理IP使用中的详细日志信息等
2.2.3 日志信息当您使用我们的网站或代理IP服务时我们会自动收集您对我们服务的详细使用情况作为有关网络日志保存例如您进入蓝狐HTTP站的搜索查询内容、登录账号、IP地址、浏览器类型、电信运营商、使用的语言、访问日期及代理IP使用中的详细日志信息等
2.2.4 请注意,单独的设备信息、日志信息等是无法识别特定自然人身份的信息。如果我们将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。
2.2.5 用户账户的支持信息:基于您使用神龙HTTP服务而产生的咨询记录、保障记录和针对用户故障的排障过程如通信或通话记录我们将通过记录、分析这些信息以便更及时响应您的帮助请求以及用于改进服务。
2.2.5 用户账户的支持信息:基于您使用蓝狐HTTP服务而产生的咨询记录、保障记录和针对用户故障的排障过程如通信或通话记录我们将通过记录、分析这些信息以便更及时响应您的帮助请求以及用于改进服务。
2.3 我们出于如下目的使用您提交及我们收集的用户信息:
@@ -37,7 +37,7 @@
2.3.3 在法律法规允许的前提下,向您推荐产品;
2.3.4 为提高您使用我们及我们关联公司、合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免遭侵害,更好地预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络侵入等安全风险,更准确地识别违反法律法规或神龙HTTP相关协议、规则的情况我们可能使用您的会员信息、并整合设备信息、有关网络日志以及我们关联公司、合作伙伴分享的信息来进行判断账户及交易风险、进行身份验证、安全事件的检测及防范并依法采取必要的记录、审计、分析、处置措施
2.3.4 为提高您使用我们及我们关联公司、合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免遭侵害,更好地预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络侵入等安全风险,更准确地识别违反法律法规或蓝狐HTTP相关协议、规则的情况我们可能使用您的会员信息、并整合设备信息、有关网络日志以及我们关联公司、合作伙伴分享的信息来进行判断账户及交易风险、进行身份验证、安全事件的检测及防范并依法采取必要的记录、审计、分析、处置措施
2.3.5 如超出收集用户信息时所声明的目的或超出具有直接或合理关联的范围后使用用户信息前,我们会再次向您告知并征得您的明确同意。
@@ -53,7 +53,7 @@
3.1.2 在法定情形下的共享:我们可能会根据法律法规规定、诉讼、仲裁解决需要,或按行政、司法机关依法提出的要求,对外共享您的用户信息;
3.1.3 为了促成交易或协助解决争议,某些情况下只有共享您的用户信息,才能促成交易或处理您与他人的纠纷或争议,例如,在神龙HTTP上创建的某一交易中如交易任何一方履行或部分履行了交易义务并提出信息披露请求的神龙HTTP有权决定向该用户提供其交易对方的联络方式等必要信息以促成交易的完成
3.1.3 为了促成交易或协助解决争议,某些情况下只有共享您的用户信息,才能促成交易或处理您与他人的纠纷或争议,例如,在蓝狐HTTP上创建的某一交易中如交易任何一方履行或部分履行了交易义务并提出信息披露请求的蓝狐HTTP有权决定向该用户提供其交易对方的联络方式等必要信息以促成交易的完成
3.2 转让
@@ -69,7 +69,7 @@
3.3.1 获得您明确同意或基于您的主动选择,我们可能会公开披露您的用户信息;
3.3.2 或为保护神龙HTTP平台及其关联公司用户或公众的人身财产安全免遭侵害我们可能依据适用的法律或神龙HTTP平台相关协议、规则披露关于您的用户信息。
3.3.2 或为保护蓝狐HTTP平台及其关联公司用户或公众的人身财产安全免遭侵害我们可能依据适用的法律或蓝狐HTTP平台相关协议、规则披露关于您的用户信息。
3.4 共享、转让、公开披露用户信息时事先征得授权同意的例外
@@ -91,21 +91,21 @@
4.1 用户业务数据
4.1.1 您通过神龙HTTP提供的代理IP服务从事加工、存储、上传、下载、分发以及通过其他方式处理的数据均为您的用户业务数据您完全拥有您的用户业务数据。作为代理IP服务提供商我们只会严格执行您的指示处理您的业务数据除按与您协商一致或执行明确的法律法规要求外我们不会对您的业务数据进行任何非授权的使用或披露。
4.1.1 您通过蓝狐HTTP提供的代理IP服务从事加工、存储、上传、下载、分发以及通过其他方式处理的数据均为您的用户业务数据您完全拥有您的用户业务数据。作为代理IP服务提供商我们只会严格执行您的指示处理您的业务数据除按与您协商一致或执行明确的法律法规要求外我们不会对您的业务数据进行任何非授权的使用或披露。
4.1.2 您应对您的用户业务数据来源及内容负责,我们提醒您谨慎判断数据来源及内容的合法性。因您的用户业务数据内容违反法律法规、部门规章或国家政策而造成的全部结果及责任均由您自行承担。
4.2 公开信息
4.2.1 公开信息是指您公开分享的任何信息,任何人都可以在使用和未使用神龙HTTP网站服务期间查看或访问这些信息。
4.2.1 公开信息是指您公开分享的任何信息,任何人都可以在使用和未使用蓝狐HTTP网站服务期间查看或访问这些信息。
4.2.2 在使用神龙HTTP网站时如您发现自己的个人信息泄露尤其是您的账户或密码发生泄露请您立即联络神龙HTTP客服以便我们采取相应措施。
4.2.2 在使用蓝狐HTTP网站时如您发现自己的个人信息泄露尤其是您的账户或密码发生泄露请您立即联络蓝狐HTTP客服以便我们采取相应措施。
五、用户信息的管理
5.1 您可以登录神龙HTTP网站查看您填写提交的基本业务信息基本资料和联系人等信息。
5.1 您可以登录蓝狐HTTP网站查看您填写提交的基本业务信息基本资料和联系人等信息。
5.2 您在神龙HTTP注册账号并完成实名认证以后为保障您在平台的合法权益我们将不支持任何形式变更实名认证的操作充分有效保障账户的安全与一致性。
5.2 您在蓝狐HTTP注册账号并完成实名认证以后为保障您在平台的合法权益我们将不支持任何形式变更实名认证的操作充分有效保障账户的安全与一致性。
5.3 在以下情形中,您可以向我们提出删除用户信息的请求:
@@ -119,7 +119,7 @@
六、Cookie 和同类技术的使用
6.1 为确保网站正常运转、为您获得更轻松的访问体验、向您推荐您可能感兴趣的内容,我们会在您的计算机或移动设备上存储名为 Cookie 的小数据文件。Cookie 通常包含标识符、站点名称以及一些号码和字符。神龙HTTP只能读取神龙HTTP提供的cookies。
6.1 为确保网站正常运转、为您获得更轻松的访问体验、向您推荐您可能感兴趣的内容,我们会在您的计算机或移动设备上存储名为 Cookie 的小数据文件。Cookie 通常包含标识符、站点名称以及一些号码和字符。蓝狐HTTP只能读取蓝狐HTTP提供的cookies。
七、用户信息的安全
@@ -135,7 +135,7 @@
7.6 我们将收集到的您的用户信息存放在中华人民共和国境内,如在符合适用法律规定的情形下因业务需要向境外传输个人信息的,我们会事先征得您的同意,并向您告知用户信息出境的目的、接收方、安全保障措施、安全风险等情况。
7.7 如出现神龙HTTP产品和服务停止运营的情形我们会采取合理措施保护您用户信息安全包括及时停止继续收集用户信息的活动停止运营的通知将以逐一送达或公告的形式通知用户并对所持有的个人信息进行删除或匿名化处理等。
7.7 如出现蓝狐HTTP产品和服务停止运营的情形我们会采取合理措施保护您用户信息安全包括及时停止继续收集用户信息的活动停止运营的通知将以逐一送达或公告的形式通知用户并对所持有的个人信息进行删除或匿名化处理等。
八、未成年人用户信息的特别约定

View File

@@ -1,19 +1,19 @@
# 用户协议
神龙HTTP以下或简称"我们")尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用神龙HTTP提供的代理服务时我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此我们建议您完整阅读本隐私政策以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议可以通过神龙HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容
蓝狐HTTP以下或简称"我们")尊重并保护用户信息,并将以高度的责任感和谨慎的态度对待这些信息。当您使用蓝狐HTTP提供的代理服务时我们将根据本隐私政策来收集、处理及分享您的信息。我们希望通过本隐私政策向您清晰地说明我们如何处理您的信息。因此我们建议您完整阅读本隐私政策以便了解如何保护您的隐私权。如果您有任何疑问、意见或建议可以通过蓝狐HTTP提供的联系方式与我们联系。本政策将帮助您了解以下内容
一、适用范围
1.1 本隐私政策适用于神龙HTTP网站提供的所有服务。服务包括提供页面浏览、网站登录服务以及通过神龙HTTP网站提供的网络服务。
1.1 本隐私政策适用于蓝狐HTTP网站提供的所有服务。服务包括提供页面浏览、网站登录服务以及通过蓝狐HTTP网站提供的网络服务。
1.2 本隐私政策不适用于其他第三方提供的服务。
1.3 特别说明,如果您使用神龙HTTP的网络服务为您的用户提供服务您的业务数据归您所有您应当与您的用户另行约定隐私政策。
1.3 特别说明,如果您使用蓝狐HTTP的网络服务为您的用户提供服务您的业务数据归您所有您应当与您的用户另行约定隐私政策。
二、用户信息的收集和使用
2.1 协助您成为我们的会员
2.1.1 当您在神龙HTTP网站创建账户时您需要选择会员身份类型个人、企业并向我们提供会员名、单位名称及联系人姓名用于账户实名认证及开票抬头、设置并确认您的登录密码、可用电子邮箱、所在区域国家、省份、城市以及您在中国境内的手机号码。您提供的手机号码将用于注册、登录、绑定账户、找回密码并作为您与神龙HTTP联系的方式之一接收相关业务通知或进行业务沟通。
2.1.1 当您在蓝狐HTTP网站创建账户时您需要选择会员身份类型个人、企业并向我们提供会员名、单位名称及联系人姓名用于账户实名认证及开票抬头、设置并确认您的登录密码、可用电子邮箱、所在区域国家、省份、城市以及您在中国境内的手机号码。您提供的手机号码将用于注册、登录、绑定账户、找回密码并作为您与蓝狐HTTP联系的方式之一接收相关业务通知或进行业务沟通。
2.1.2 如果您仅需使用浏览、搜索等基本服务,您无需注册成为我们的会员及提供上述信息。
@@ -23,11 +23,11 @@
2.2.2 在您使用服务过程中我们会根据您在注册、登录账号及使用产品时授予的权限接收并记录您所使用的设备相关信息如设备型号、操作系统版本、浏览器cookies、唯一设备标识符等软硬件特征信息、设备所在位置相关信息如IP地址、MAC地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站等传感器信息。我们可能会将这些信息与您的账户信息关联以便在不同设备上为您提供一致的服务。
2.2.3 日志信息当您使用我们的网站或代理IP服务时我们会自动收集您对我们服务的详细使用情况作为有关网络日志保存例如您进入神龙HTTP站的搜索查询内容、登录账号、IP地址、浏览器类型、电信运营商、使用的语言、访问日期及代理IP使用中的详细日志信息等
2.2.3 日志信息当您使用我们的网站或代理IP服务时我们会自动收集您对我们服务的详细使用情况作为有关网络日志保存例如您进入蓝狐HTTP站的搜索查询内容、登录账号、IP地址、浏览器类型、电信运营商、使用的语言、访问日期及代理IP使用中的详细日志信息等
2.2.4 请注意,单独的设备信息、日志信息等是无法识别特定自然人身份的信息。如果我们将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。
2.2.5 用户账户的支持信息:基于您使用神龙HTTP服务而产生的咨询记录、保障记录和针对用户故障的排障过程如通信或通话记录我们将通过记录、分析这些信息以便更及时响应您的帮助请求以及用于改进服务。
2.2.5 用户账户的支持信息:基于您使用蓝狐HTTP服务而产生的咨询记录、保障记录和针对用户故障的排障过程如通信或通话记录我们将通过记录、分析这些信息以便更及时响应您的帮助请求以及用于改进服务。
2.3 我们出于如下目的使用您提交及我们收集的用户信息:
@@ -37,7 +37,7 @@
2.3.3 在法律法规允许的前提下,向您推荐产品;
2.3.4 为提高您使用我们及我们关联公司、合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免遭侵害,更好地预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络侵入等安全风险,更准确地识别违反法律法规或神龙HTTP相关协议、规则的情况我们可能使用您的会员信息、并整合设备信息、有关网络日志以及我们关联公司、合作伙伴分享的信息来进行判断账户及交易风险、进行身份验证、安全事件的检测及防范并依法采取必要的记录、审计、分析、处置措施
2.3.4 为提高您使用我们及我们关联公司、合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免遭侵害,更好地预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络侵入等安全风险,更准确地识别违反法律法规或蓝狐HTTP相关协议、规则的情况我们可能使用您的会员信息、并整合设备信息、有关网络日志以及我们关联公司、合作伙伴分享的信息来进行判断账户及交易风险、进行身份验证、安全事件的检测及防范并依法采取必要的记录、审计、分析、处置措施
2.3.5 如超出收集用户信息时所声明的目的或超出具有直接或合理关联的范围后使用用户信息前,我们会再次向您告知并征得您的明确同意。
@@ -53,7 +53,7 @@
3.1.2 在法定情形下的共享:我们可能会根据法律法规规定、诉讼、仲裁解决需要,或按行政、司法机关依法提出的要求,对外共享您的用户信息;
3.1.3 为了促成交易或协助解决争议,某些情况下只有共享您的用户信息,才能促成交易或处理您与他人的纠纷或争议,例如,在神龙HTTP上创建的某一交易中如交易任何一方履行或部分履行了交易义务并提出信息披露请求的神龙HTTP有权决定向该用户提供其交易对方的联络方式等必要信息以促成交易的完成
3.1.3 为了促成交易或协助解决争议,某些情况下只有共享您的用户信息,才能促成交易或处理您与他人的纠纷或争议,例如,在蓝狐HTTP上创建的某一交易中如交易任何一方履行或部分履行了交易义务并提出信息披露请求的蓝狐HTTP有权决定向该用户提供其交易对方的联络方式等必要信息以促成交易的完成
3.2 转让
@@ -69,7 +69,7 @@
3.3.1 获得您明确同意或基于您的主动选择,我们可能会公开披露您的用户信息;
3.3.2 或为保护神龙HTTP平台及其关联公司用户或公众的人身财产安全免遭侵害我们可能依据适用的法律或神龙HTTP平台相关协议、规则披露关于您的用户信息。
3.3.2 或为保护蓝狐HTTP平台及其关联公司用户或公众的人身财产安全免遭侵害我们可能依据适用的法律或蓝狐HTTP平台相关协议、规则披露关于您的用户信息。
3.4 共享、转让、公开披露用户信息时事先征得授权同意的例外
@@ -91,21 +91,21 @@
4.1 用户业务数据
4.1.1 您通过神龙HTTP提供的代理IP服务从事加工、存储、上传、下载、分发以及通过其他方式处理的数据均为您的用户业务数据您完全拥有您的用户业务数据。作为代理IP服务提供商我们只会严格执行您的指示处理您的业务数据除按与您协商一致或执行明确的法律法规要求外我们不会对您的业务数据进行任何非授权的使用或披露。
4.1.1 您通过蓝狐HTTP提供的代理IP服务从事加工、存储、上传、下载、分发以及通过其他方式处理的数据均为您的用户业务数据您完全拥有您的用户业务数据。作为代理IP服务提供商我们只会严格执行您的指示处理您的业务数据除按与您协商一致或执行明确的法律法规要求外我们不会对您的业务数据进行任何非授权的使用或披露。
4.1.2 您应对您的用户业务数据来源及内容负责,我们提醒您谨慎判断数据来源及内容的合法性。因您的用户业务数据内容违反法律法规、部门规章或国家政策而造成的全部结果及责任均由您自行承担。
4.2 公开信息
4.2.1 公开信息是指您公开分享的任何信息,任何人都可以在使用和未使用神龙HTTP网站服务期间查看或访问这些信息。
4.2.1 公开信息是指您公开分享的任何信息,任何人都可以在使用和未使用蓝狐HTTP网站服务期间查看或访问这些信息。
4.2.2 在使用神龙HTTP网站时如您发现自己的个人信息泄露尤其是您的账户或密码发生泄露请您立即联络神龙HTTP客服以便我们采取相应措施。
4.2.2 在使用蓝狐HTTP网站时如您发现自己的个人信息泄露尤其是您的账户或密码发生泄露请您立即联络蓝狐HTTP客服以便我们采取相应措施。
五、用户信息的管理
5.1 您可以登录神龙HTTP网站查看您填写提交的基本业务信息基本资料和联系人等信息。
5.1 您可以登录蓝狐HTTP网站查看您填写提交的基本业务信息基本资料和联系人等信息。
5.2 您在神龙HTTP注册账号并完成实名认证以后为保障您在平台的合法权益我们将不支持任何形式变更实名认证的操作充分有效保障账户的安全与一致性。
5.2 您在蓝狐HTTP注册账号并完成实名认证以后为保障您在平台的合法权益我们将不支持任何形式变更实名认证的操作充分有效保障账户的安全与一致性。
5.3 在以下情形中,您可以向我们提出删除用户信息的请求:
@@ -119,7 +119,7 @@
六、Cookie 和同类技术的使用
6.1 为确保网站正常运转、为您获得更轻松的访问体验、向您推荐您可能感兴趣的内容,我们会在您的计算机或移动设备上存储名为 Cookie 的小数据文件。Cookie 通常包含标识符、站点名称以及一些号码和字符。神龙HTTP只能读取神龙HTTP提供的cookies。
6.1 为确保网站正常运转、为您获得更轻松的访问体验、向您推荐您可能感兴趣的内容,我们会在您的计算机或移动设备上存储名为 Cookie 的小数据文件。Cookie 通常包含标识符、站点名称以及一些号码和字符。蓝狐HTTP只能读取蓝狐HTTP提供的cookies。
七、用户信息的安全
@@ -135,7 +135,7 @@
7.6 我们将收集到的您的用户信息存放在中华人民共和国境内,如在符合适用法律规定的情形下因业务需要向境外传输个人信息的,我们会事先征得您的同意,并向您告知用户信息出境的目的、接收方、安全保障措施、安全风险等情况。
7.7 如出现神龙HTTP产品和服务停止运营的情形我们会采取合理措施保护您用户信息安全包括及时停止继续收集用户信息的活动停止运营的通知将以逐一送达或公告的形式通知用户并对所持有的个人信息进行删除或匿名化处理等。
7.7 如出现蓝狐HTTP产品和服务停止运营的情形我们会采取合理措施保护您用户信息安全包括及时停止继续收集用户信息的活动停止运营的通知将以逐一送达或公告的形式通知用户并对所持有的个人信息进行删除或匿名化处理等。
八、未成年人用户信息的特别约定

View File

Before

Width:  |  Height:  |  Size: 186 KiB

After

Width:  |  Height:  |  Size: 186 KiB

View File

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 169 KiB

View File

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 176 KiB

View File

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 540 KiB

After

Width:  |  Height:  |  Size: 540 KiB

View File

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -0,0 +1,50 @@
import Image, {StaticImageData} from 'next/image'
import {PageSection} from './page-section'
import s4_1_main from './_assets/s4-1-main.webp'
import s4_2_main from './_assets/s4-2-main.webp'
import s4_1_1 from './_assets/s4-1-1.webp'
import s4_1_2 from './_assets/s4-1-2.webp'
import s4_1_3 from './_assets/s4-1-3.webp'
import s4_2_1 from './_assets/s4-2-1.webp'
import s4_2_2 from './_assets/s4-2-2.webp'
import s4_2_3 from './_assets/s4-2-3.webp'
export function AdvantagesSection() {
return (
<PageSection title="HTTP 产品优势">
<div className="flex gap-36">
<ul className="flex-1 flex flex-col gap-6">
<AdvantageItem icon={s4_1_1} title="安全合规" description="国内三大运营商支持"/>
<AdvantageItem icon={s4_1_2} title="稳定链接" description="IP纯净度高达99.9%"/>
<AdvantageItem icon={s4_1_3} title="超匿名性" description="稳定传输,保护隐私安全"/>
</ul>
<Image src={s4_1_main} alt="产品优势展示" className="w-0 flex-1 object-contain max-lg:hidden"/>
</div>
<div className="flex gap-36">
<Image src={s4_2_main} alt="技术优势展示" className="w-0 flex-1 object-contain max-lg:hidden"/>
<ul className="flex-1 flex flex-col gap-6">
<AdvantageItem icon={s4_2_1} title="API接口文档" description="与第三方软件轻松集成"/>
<AdvantageItem icon={s4_2_2} title="多种编程语言代码" description="C语言、GO语言、Python..."/>
<AdvantageItem icon={s4_2_3} title="双重认证方式" description="API提取+账密认证"/>
</ul>
</div>
</PageSection>
)
}
function AdvantageItem(props: {
icon: StaticImageData
title: string
description: string
}) {
return (
<li className="flex gap-8 items-center p-4 lg:p-8 shadow-[4px_4px_20px_4px] shadow-blue-50 rounded-lg">
<Image src={props.icon} alt={props.title} aria-hidden className="w-24 h-24 object-contain"/>
<div className="flex flex-col gap-3">
<h3 className="text-xl">{props.title}</h3>
<p>{props.description}</p>
</div>
</li>
)
}

View File

@@ -0,0 +1,70 @@
import {ReactNode} from 'react'
import Link from 'next/link'
import {PageSection} from './page-section'
import {BookOpen, Smartphone, HelpCircle} from 'lucide-react'
export function ArticlesSection() {
return (
<PageSection title="推荐文章">
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
<ArticleCard
icon={<BookOpen className="w-12 h-12"/>}
title="浏览器设置代理教程"
description="快速上手5分钟学会在浏览器中配置代理服务器"
href="/docs/browser-proxy"
/>
<ArticleCard
icon={<Smartphone className="w-12 h-12"/>}
title="Windows10 代理配置"
description="详细图文教程,帮助你在 Windows 系统中设置代理"
href="/docs/windows10-proxy"
/>
<ArticleCard
icon={<HelpCircle className="w-12 h-12"/>}
title="常见问题总览"
description="解决使用过程中遇到的各类问题,快速找到答案"
href="/docs/faq-general"
/>
</div>
</PageSection>
)
}
function ArticleCard(props: {
icon: ReactNode
title: string
description: string
href: string
}) {
return (
<Link
href={props.href}
className={[
`group block p-8 shadow-[4px_4px_20px_4px] shadow-blue-50 rounded-lg bg-white`,
`transition-all duration-200`,
].join(' ')}
>
<div className="flex flex-col items-center text-center gap-6">
<div className="p-4 rounded-xl bg-linear-to-br from-blue-500 to-cyan-400 text-white group-hover:scale-110 transition-transform">
{props.icon}
</div>
<div>
<h3 className="text-xl font-semibold mb-3 group-hover:text-blue-600 transition-colors">
{props.title}
</h3>
<p className="text-gray-500 text-sm leading-relaxed">
{props.description}
</p>
</div>
<div className="mt-2 text-blue-500 text-sm flex items-center gap-2 group-hover:gap-3 transition-all">
<span></span>
<span className="text-lg"></span>
</div>
</div>
</Link>
)
}

View File

@@ -0,0 +1,37 @@
import Image from 'next/image'
import Wrap from '@/components/wrap'
import FreeTrial from '@/components/free-trial'
import banner from '../_assets/banner.webp'
import check_main from '@/assets/check-main.svg'
export function HeroSection() {
return (
<section className="w-full relative">
<Image src={banner} alt="banner" className="absolute inset-0 h-full object-cover"/>
<Wrap className="relative pt-64 pb-48 max-md:pt-32 max-md:pb-24">
<h1 className="text-4xl"></h1>
<p className="mt-10 text-gray-500">IP代理服务</p>
<div className="mt-24 max-md:mt-14 flex gap-8 max-md:flex-col">
<p className="flex gap-4 items-center">
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className="lg:text-lg">200+</span>
</p>
<p className="flex gap-4 items-center">
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className="lg:text-lg">300+</span>
</p>
<p className="flex gap-4 items-center">
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className="lg:text-lg">&</span>
</p>
</div>
<FreeTrial className={[
`mt-32 max-md:mt-20 w-96 max-md:w-full h-16 md:h-24 rounded-lg shadow-lg`,
`bg-linear-to-r from-blue-500 to-cyan-400 text-white text-xl lg:text-4xl`,
].join(' ')}/>
</Wrap>
</section>
)
}

View File

@@ -0,0 +1,15 @@
import {ReactNode} from 'react'
export function PageSection(props: {
title: string
children: ReactNode
}) {
return (
<section>
<div className="max-w-[1232px] mx-auto px-4 flex flex-col items-stretch">
<h2 className="text-center text-3xl mb-8 lg:mb-24">{props.title}</h2>
{props.children}
</div>
</section>
)
}

View File

@@ -0,0 +1,17 @@
import {HeroSection} from './hero-section'
import {StatsSection} from './stats-section'
import {ProductTypesSection} from './product-types-section'
import {AdvantagesSection} from './advantages-section'
import {ArticlesSection} from './articles-section'
export default function Home() {
return (
<main className="flex flex-col gap-16 lg:gap-32 pb-16 lg:pb-32 bg-white">
<HeroSection/>
<StatsSection/>
<ProductTypesSection/>
<AdvantagesSection/>
<ArticlesSection/>
</main>
)
}

View File

@@ -0,0 +1,78 @@
import Image, {StaticImageData} from 'next/image'
import {PageSection} from './page-section'
import s1_1 from './_assets/s1-1.webp'
import s1_2 from './_assets/s1-2.webp'
import s1_3 from './_assets/s1-3.webp'
import s1_4 from './_assets/s1-4.webp'
import s1_check from './_assets/s1-check.svg'
export function ProductTypesSection() {
return (
<PageSection title="HTTP安全合规的代理IP资源池">
<ul className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
<ProductTypeCard
icon={s1_1}
title="短期动态IP池"
features={[
{icon: s1_check, text: 'IP时效3-30分钟(可定制)'},
{icon: s1_check, text: '支持高并发提取'},
]}
/>
<ProductTypeCard
icon={s1_2}
title="长期静态IP池"
features={[
{icon: s1_check, text: 'IP覆盖全国各地'},
{icon: s1_check, text: '平均响应时长0.03s'},
]}
/>
<ProductTypeCard
icon={s1_3}
title="固定IP池"
features={[
{icon: s1_check, text: '稳定长输不掉线'},
{icon: s1_check, text: '全国热门静态IP线路'},
]}
/>
<ProductTypeCard
icon={s1_4}
title="企业级定制池"
features={[
{icon: s1_check, text: '可视化监控设计'},
{icon: s1_check, text: '技术团队现场支持'},
]}
/>
</ul>
</PageSection>
)
}
function ProductTypeCard(props: {
icon: StaticImageData
title: string
features: {
icon: StaticImageData
text: string
}[]
}) {
return (
<li
className={[
`p-8 flex flex-col gap-5 shadow-[4px_4px_20px_4px] shadow-blue-50 bg-white rounded-lg`,
`max-md:items-center`,
].join(' ')}>
<Image src={props.icon} alt={props.title} aria-hidden className="self-center w-44 h-44 object-cover"/>
<h3 className="text-xl">{props.title}</h3>
<div className="flex flex-col gap-3">
{props.features.map((item, index) => {
return (
<p key={index} className="text-sm text-gray-500 flex gap-3 items-center">
<Image src={item.icon} alt="check" aria-hidden className="w-5 h-5"/>
<span>{item.text}</span>
</p>
)
})}
</div>
</li>
)
}

View File

@@ -0,0 +1,32 @@
import Image from 'next/image'
import {PageSection} from './page-section'
import map from '../_assets/map.webp'
export function StatsSection() {
return (
<PageSection title="覆盖全国的IP资源及超大的带宽线路">
<ul className="shadow-[0_0_20px_4px] shadow-blue-50 p-8 flex max-lg:flex-col">
<li className="flex-1 flex flex-col items-center justify-center lg:border-r max-lg:mb-4 border-gray-200">
<p className="text-xl">线</p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">350+</p>
<div className="lg:hidden w-24 border-b mt-4 border-gray-200"></div>
</li>
<li className="flex-1 flex flex-col items-center justify-center lg:border-r max-lg:mb-4 border-gray-200">
<p className="text-xl">IP数量</p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">1,350,129</p>
<div className="lg:hidden w-24 border-b mt-4 border-gray-200"></div>
</li>
<li className="flex-1 flex flex-col items-center justify-center lg:border-r max-lg:mb-4 border-gray-200">
<p className="text-xl"></p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">26,578</p>
<div className="lg:hidden w-24 border-b mt-4 border-gray-200"></div>
</li>
<li className="flex-1 flex flex-col items-center justify-center">
<p className="text-xl">IP可用率</p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">99%</p>
</li>
</ul>
<Image src={map} alt="map" className="w-[1200px]"/>
</PageSection>
)
}

View File

@@ -0,0 +1,3 @@
# IP提取接口文档
暂无内容,敬请期待。

View File

@@ -19,7 +19,7 @@
1. 在 "局域网(LAN)设置" 窗口中,找到 **代理服务器** 部分
2. **勾选** "为 LAN 使用代理服务器"
3. 填写代理信息:
- **地址**:输入从代理服务商(如神龙HTTP获取的IP地址
- **地址**:输入从代理服务商(如蓝狐HTTP获取的IP地址
- **端口**:输入对应的端口号
4. (可选)如需设置高级选项:
- 点击 **"高级"** 按钮

View File

@@ -0,0 +1,3 @@
# 如何选择产品
暂无内容,敬请期待。

View File

@@ -0,0 +1,3 @@
# 有哪些城市线路
暂无内容,敬请期待。

View File

@@ -0,0 +1,3 @@
# 如何生成提取链接
暂无内容,敬请期待。

View File

@@ -1,6 +1,6 @@
# 浏览器设置代理教程
打开IE浏览器选择"设置",点击"Internet选项",在弹出的"局域网LAN设置"中,代理服务器的复选框打上勾,并填写从神龙HTTP获取的ip地址及端口号点击确定刷新浏览器浏览器的IP就改变了。
打开IE浏览器选择"设置",点击"Internet选项",在弹出的"局域网LAN设置"中,代理服务器的复选框打上勾,并填写从蓝狐HTTP获取的ip地址及端口号点击确定刷新浏览器浏览器的IP就改变了。
1、打开IE浏览器选择"设置"
@@ -8,4 +8,4 @@
3、弹出"Internet选项"弹窗,选择连接—局域网设置;
4、在弹出的"局域网LAN设置"中,代理服务器的复选框打上勾,并填写从神龙HTTP代理获取的ip地址及端口。点击确定即设置成功了。
4、在弹出的"局域网LAN设置"中,代理服务器的复选框打上勾,并填写从蓝狐HTTP代理获取的ip地址及端口。点击确定即设置成功了。

View File

@@ -0,0 +1,3 @@
# 查看支付和使用记录
暂无内容,敬请期待。

View File

@@ -0,0 +1,3 @@
# 修改个人信息和重置密码
暂无内容,后期会补充,敬请期待。

View File

@@ -8,41 +8,36 @@ type Props = {
collapsed?: boolean
}
// 菜单配置 - 扁平结构,支持分组
// 菜单配置
const MENU_ITEMS = [
{
group: '官网教程',
group: '产品文档',
items: [
{key: 'browser-proxy', label: '浏览器设置代理教程'},
{key: 'package-operations', label: '套餐续费、合并、修改时效、补重操作'},
{key: 'fixed-package', label: '长效固定套餐操作手册'},
],
},
{
group: '客户端教程',
items: [
{key: 'ios-proxy', label: 'iOS设置代理教程'},
{key: 'windows10-proxy', label: 'Windows10电脑设置代理教程'},
{key: 'android-proxy', label: '安卓手机设置代理教程'},
{key: 'product-overview', label: '产品介绍'},
{key: 'choose-product', label: '如何选择产品'},
{key: 'why-verify', label: '为什么需要实名认证'},
{key: 'city-lines', label: '有哪些城市线路'},
{key: 'api-docs', label: 'ip提取接口文档'},
// 服务条款
],
},
{
group: '操作指南',
items: [
{key: 'win7-proxy', label: 'Windows7电脑设置代理教程'},
{key: 'mac-proxy', label: 'MAC设置代理教程'},
{key: 'firefox-proxy', label: '火狐浏览器设置代理'},
{key: 'socks5-usage', label: 'Socks5代理使用教程'},
{key: 'http-notes', label: '使用 HTTP 代理注意事项'},
{key: 'official-tutorial', label: '浏览器设置代理教程'},
{key: 'profile-settings', label: '修改个人信息和重置密码'},
{key: 'whitelist-guide', label: '如何添加白名单'},
{key: 'verify-guide', label: '如何进行实名认证'},
{key: 'extract-link', label: '如何生成提取链接'},
{key: 'payment-records', label: '查看支付和使用记录'},
],
},
{
group: '产品介绍',
group: '客户端教程',
items: [
{key: 'product-overview', label: '产品概述'},
{key: 'product-features', label: '产品功能'},
{key: 'product-cert', label: '实名认证与证书'},
{key: 'browser-proxy', label: '浏览器设置代理教程'},
{key: 'ios-proxy', label: 'iOS设置代理教程'},
{key: 'android-proxy', label: '安卓手机设置代理教程'},
{key: 'windows10-proxy', label: 'Windows10电脑设置代理教程'},
],
},
{
@@ -50,19 +45,15 @@ const MENU_ITEMS = [
items: [
{key: 'faq-general', label: '常见问题总览'},
{key: 'faq-billing', label: '计费与套餐问题'},
// 业务场景集成方案
// 故障排查
],
},
{
group: '新闻资讯',
items: [
{key: 'news-latest', label: '了解代理服务器的工作原理'},
{key: 'news-announce', label: '公告'},
],
},
{
group: '其他',
items: [
{key: 'online-ip-proxy', label: '在线 IP 代理地址'},
{key: 'news-announce', label: '网站公告'},
],
},
]

View File

@@ -0,0 +1,3 @@
# 如何进行实名认证
暂无内容,敬请期待。

View File

@@ -0,0 +1,3 @@
# 如何添加白名单
暂未添加内容,敬请期待。

View File

@@ -0,0 +1,3 @@
# 为什么需要实名认证
暂无内容,后期会补充,敬请期待。

View File

@@ -1,266 +0,0 @@
import {ReactNode} from 'react'
import Wrap from '@/components/wrap'
import Image, {StaticImageData} from 'next/image'
import Link from 'next/link'
import check_main from '@/assets/check-main.svg'
import banner from './_assets/banner.webp'
import map from './_assets/map.webp'
import s1_1 from './_assets/s1-1.webp'
import s1_2 from './_assets/s1-2.webp'
import s1_3 from './_assets/s1-3.webp'
import s1_4 from './_assets/s1-4.webp'
import s1_check from './_assets/s1-check.svg'
import s4_1_main from './_assets/s4-1-main.webp'
import s4_2_main from './_assets/s4-2-main.webp'
import s4_1_1 from './_assets/s4-1-1.webp'
import s4_1_2 from './_assets/s4-1-2.webp'
import s4_1_3 from './_assets/s4-1-3.webp'
import s4_2_1 from './_assets/s4-2-1.webp'
import s4_2_2 from './_assets/s4-2-2.webp'
import s4_2_3 from './_assets/s4-2-3.webp'
import FreeTrial from '@/components/free-trial'
import {BookOpen, Smartphone, Settings, HelpCircle, Newspaper, FileText} from 'lucide-react'
export default function Home() {
return (
<main className="flex flex-col gap-16 lg:gap-32 pb-16 lg:pb-32 bg-white">
{/* banner */}
<section className="w-full relative">
<Image src={banner} alt="banner" className="absolute inset-0 h-full object-cover"/>
<Wrap className="relative pt-64 pb-48 max-md:pt-32 max-md:pb-24">
<h1 className="text-4xl"></h1>
<p className="mt-10 text-gray-500">IP代理服务</p>
<div className="mt-24 max-md:mt-14 flex gap-8 max-md:flex-col">
<p className="flex gap-4 items-center">
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-lg `}>200+</span>
</p>
<p className="flex gap-4 items-center">
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-lg `}>300+</span>
</p>
<p className="flex gap-4 items-center">
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-lg `}>&</span>
</p>
</div>
<FreeTrial className={[
`mt-32 max-md:mt-20 w-96 max-md:w-full h-16 md:h-24 rounded-lg shadow-lg`,
`bg-linear-to-r from-blue-500 to-cyan-400 text-white text-xl lg:text-4xl`,
].join(' ')}/>
</Wrap>
</section>
{/* 数据展示 */}
<Section title="覆盖全国的IP资源及超大的带宽线路">
<ul className="shadow-[0_0_20px_4px] shadow-blue-50 p-8 flex max-lg:flex-col">
<li className="flex-1 flex flex-col items-center justify-center lg:border-r max-lg:mb-4 border-gray-200">
<p className="text-xl">线</p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">350+</p>
<div className="lg:hidden w-24 border-b mt-4 border-gray-200"></div>
</li>
<li className="flex-1 flex flex-col items-center justify-center lg:border-r max-lg:mb-4 border-gray-200">
<p className="text-xl">IP数量</p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">1,350,129</p>
<div className="lg:hidden w-24 border-b mt-4 border-gray-200"></div>
</li>
<li className="flex-1 flex flex-col items-center justify-center lg:border-r max-lg:mb-4 border-gray-200">
<p className="text-xl"></p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">26,578</p>
<div className="lg:hidden w-24 border-b mt-4 border-gray-200"></div>
</li>
<li className="flex-1 flex flex-col items-center justify-center">
<p className="text-xl">IP可用率</p>
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">99%</p>
</li>
</ul>
<Image src={map} alt="map" className="w-[1200px]"/>
</Section>
{/* 优势 1 */}
<Section title="HTTP安全合规的代理IP资源池">
<ul
className={[
`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8`,
].join(' ')}>
<Sec3Item
icon={s1_1}
title="短期动态IP池"
terms={[
{icon: s1_check, text: `IP时效3-30分钟(可定制)`},
{icon: s1_check, text: `支持高并发提取`},
]}/>
<Sec3Item
icon={s1_2}
title="长期静态IP池"
terms={[
{icon: s1_check, text: `IP覆盖全国各地`},
{icon: s1_check, text: `平均响应时长0.03s`},
]}/>
<Sec3Item
icon={s1_3}
title="固定IP池"
terms={[
{icon: s1_check, text: `稳定长输不掉线`},
{icon: s1_check, text: `全国热门静态IP线路`},
]}/>
<Sec3Item
icon={s1_4}
title="企业级定制池"
terms={[
{icon: s1_check, text: `可视化监控设计`},
{icon: s1_check, text: `技术团队现场支持`},
]}/>
</ul>
</Section>
{/* 优势 2 */}
<Section title="HTTP 产品优势">
<div className="flex gap-36">
<ul className="flex-1 flex flex-col gap-6">
<Sec4Item icon={s4_1_1} title="安全合规" description="国内三大运营商支持"/>
<Sec4Item icon={s4_1_2} title="稳定链接" description="IP纯净度高达99.9%"/>
<Sec4Item icon={s4_1_3} title="超匿名性" description="稳定传输,保护隐私安全"/>
</ul>
<Image src={s4_1_main} alt="s2-1-main" className="w-0 flex-1 object-contain max-lg:hidden"/>
</div>
<div className="flex gap-36">
<Image src={s4_2_main} alt="s2-1-main" className="w-0 flex-1 object-contain max-lg:hidden"/>
<ul className="flex-1 flex flex-col gap-6">
<Sec4Item icon={s4_2_1} title="API接口文档" description="与第三方软件轻松集成"/>
<Sec4Item icon={s4_2_2} title="多种编程语言代码" description="C语言、GO语言、Python..."/>
<Sec4Item icon={s4_2_3} title="双重认证方式" description="API提取+账密认证"/>
</ul>
</div>
</Section>
{/* 推荐文章 */}
<Section title="推荐文章">
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
<ArticleCard
icon={<BookOpen className="w-12 h-12"/>}
title="浏览器设置代理教程"
description="快速上手5分钟学会在浏览器中配置代理服务器"
href="/docs/browser-proxy"
/>
<ArticleCard
icon={<Smartphone className="w-12 h-12"/>}
title="Windows10 代理配置"
description="详细图文教程,帮助你在 Windows 系统中设置代理"
href="/docs/windows10-proxy"
/>
<ArticleCard
icon={<HelpCircle className="w-12 h-12"/>}
title="常见问题总览"
description="解决使用过程中遇到的各类问题,快速找到答案"
href="/docs/faq-general"
/>
</div>
</Section>
</main>
)
}
function Section(props: {
title: string
children: ReactNode
}) {
return (
<section>
<div className="max-w-[1232px] mx-auto px-4 flex flex-col items-stretch">
<h2 className="text-center text-3xl mb-8 lg:mb-24">{props.title}</h2>
{props.children}
</div>
</section>
)
}
function Sec3Item(props: {
icon: StaticImageData
title: string
terms: {
icon: StaticImageData
text: string
}[]
}) {
return (
<li
className={[
`p-8 flex flex-col gap-5 shadow-[4px_4px_20px_4px] shadow-blue-50 bg-white rounded-lg`,
`max-md:items-center`,
].join(' ')}>
<Image src={props.icon} alt="s1-1" aria-hidden className="self-center w-44 h-44 object-cover"/>
<h3 className="text-xl">{props.title}</h3>
<div className="flex flex-col gap-3">
{props.terms.map((item, index) => {
return (
<p key={index} className="text-sm text-gray-500 flex gap-3 items-center">
<Image src={item.icon} alt="check" aria-hidden className="w-5 h-5"/>
<span>{item.text}</span>
</p>
)
})}
</div>
</li>
)
}
function ArticleCard(props: {
icon: ReactNode
title: string
description: string
href: string
}) {
return (
<Link
href={props.href}
className={[
`group block p-8 shadow-[4px_4px_20px_4px] shadow-blue-50 rounded-lg bg-white`,
`transition-all duration-200`,
].join(' ')}
>
<div className="flex flex-col items-center text-center gap-6">
<div className="p-4 rounded-xl bg-linear-to-br from-blue-500 to-cyan-400 text-white group-hover:scale-110 transition-transform">
{props.icon}
</div>
<div>
<h3 className="text-xl font-semibold mb-3 group-hover:text-blue-600 transition-colors">
{props.title}
</h3>
<p className="text-gray-500 text-sm leading-relaxed">
{props.description}
</p>
</div>
<div className="mt-2 text-blue-500 text-sm flex items-center gap-2 group-hover:gap-3 transition-all">
<span></span>
<span className="text-lg"></span>
</div>
</div>
</Link>
)
}
function Sec4Item(props: {
icon: StaticImageData
title: string
description: string
}) {
return (
<li className="flex gap-8 items-center p-4 lg:p-8 shadow-[4px_4px_20px_4px] shadow-blue-50 rounded-lg">
<Image src={props.icon} alt="s2-1-1" aria-hidden className="w-24 h-24 object-contain"/>
<div className="flex flex-col gap-3">
<h3 className="text-xl">{props.title}</h3>
<p>{props.description}</p>
</div>
</li>
)
}

View File

@@ -59,7 +59,7 @@ export default async function UserCenter() {
</>
)}
</div>
<div className="flex flex-col gap-1">
{/* <div className="flex flex-col gap-1">
<h4 className="text-sm text-weak">账户余额</h4>
<div className="flex justify-between items-baseline">
<p className="text-xl text-accent">
@@ -68,7 +68,7 @@ export default async function UserCenter() {
</p>
<RechargeModal/>
</div>
</div>
</div> */}
<div className="flex flex-col gap-3">
<h4 className="text-sm text-weak"></h4>
<div className="flex justify-around gap-2">

View File

@@ -35,9 +35,9 @@ export default async function ProfilePage(props: ProfilePageProps) {
{/* 块信息 */}
<div className="flex gap-4 max-md:flex-col max-sm:flex-col">
<Card className="flex-1 ">
{/* <Card className="flex-1 ">
<CardHeader>
<CardTitle className="font-normal"></CardTitle>
<CardTitle className="font-normal">账户余额(元)</CardTitle>
</CardHeader>
<CardContent className="flex-auto flex justify-between items-center px-8">
<p className="text-xl">{user.balance}</p>
@@ -45,6 +45,16 @@ export default async function ProfilePage(props: ProfilePageProps) {
trigger: `h-10 px-6`,
}}/>
</CardContent>
</Card> */}
<Card className="flex-1 ">
<CardHeader>
<CardTitle className="font-normal"></CardTitle>
</CardHeader>
<CardContent className="flex-auto flex justify-between items-center px-8">
<p>{user.phone}</p>
<ChangePasswordDialog triggerClassName="w-24 h-9"/>
</CardContent>
</Card>
<Card className="flex-1">
@@ -79,17 +89,6 @@ export default async function ProfilePage(props: ProfilePageProps) {
</div>
<div className="flex-none rounded-lg bg-white p-4 flex max-sm:flex-col flex-col gap-8">
{/* 安全信息 */}
<div className="flex flex-col gap-4">
<h3 className="font-normal"></h3>
<div className="flex gap-4 items-center">
<p>{user.phone}</p>
<ChangePasswordDialog triggerClassName="w-24 h-9"/>
</div>
</div>
{/* 基本信息 */}
<BasicForm profile={user}/>
</div>
</div>

View File

@@ -7,6 +7,7 @@ import {ProfileStoreProvider} from '@/components/stores/profile'
import {LayoutStoreProvider} from '@/components/stores/layout'
import {ClientStoreProvider} from '@/components/stores/client'
import {getProfile} from '@/actions/auth'
import Script from 'next/script'
export async function generateMetadata(): Promise<Metadata> {
return {
@@ -24,6 +25,7 @@ export default async function RootLayout(props: Readonly<{
<Effects>{props.children}</Effects>
</StoreProviders>
<Toaster position="top-center" richColors expand/>
<Script id="qd2852138148beb7882a4a6a3e5ff5b569436003e7dc" src="https://wp.qiye.qq.com/qidian/2852138148/beb7882a4a6a3e5ff5b569436003e7dc" charset="utf-8" async defer></Script>
</body>
</html>
)

View File

@@ -172,7 +172,7 @@ function BalanceOrLogin(props: {
onValueChange={field.onChange}
className="flex flex-col gap-3">
<div className="w-full p-3 flex flex-col gap-4 bg-gray-100 rounded-md">
{/* <div className="w-full p-3 flex flex-col gap-4 bg-gray-100 rounded-md">
<p className="flex items-center gap-3">
<Image src={balance} alt="余额icon"/>
<span className="text-sm text-gray-500">账户余额</span>
@@ -181,16 +181,16 @@ function BalanceOrLogin(props: {
<span className="text-xl">{profile?.balance}</span>
<RechargeModal/>
</p>
</div>
</div> */}
<FormOption
{/* <FormOption
id={`${id}-balance`}
value="balance"
compare={field.value}
className="p-3 w-full flex-row gap-2 justify-center">
<Image src={balance} alt="余额 icon"/>
<span>余额</span>
</FormOption>
</FormOption> */}
<FormOption
id={`${id}-wechat`}
value="wechat"

View File

@@ -173,7 +173,7 @@ function BalanceOrLogin(props: {
onValueChange={field.onChange}
className="flex flex-col gap-3">
<div className="w-full p-3 flex flex-col gap-4 bg-gray-100 rounded-md">
{/* <div className="w-full p-3 flex flex-col gap-4 bg-gray-100 rounded-md">
<p className="flex items-center gap-3">
<Image src={balance} alt="余额icon"/>
<span className="text-sm text-gray-500">账户余额</span>
@@ -182,16 +182,16 @@ function BalanceOrLogin(props: {
<span className="text-xl">{profile.balance}</span>
<RechargeModal/>
</p>
</div>
</div> */}
<FormOption
{/* <FormOption
id={`${id}-balance`}
value="balance"
compare={field.value}
className="p-3 w-full flex-row gap-2 justify-center">
<Image src={balance} alt="余额 icon"/>
<span>余额</span>
</FormOption>
</FormOption> */}
<FormOption
id={`${id}-wechat`}
value="wechat"