feat(legal): 新增静态协议页并完善登录页合规入口
All checks were successful
CI / build (push) Successful in 2m18s

新增用户协议与隐私政策纯静态 HTML 页面,优化文档样式并补充合规占位信息。同时更新登录页备案号与协议链接,并移除 tsconfig 中不兼容的弃用配置。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-13 11:57:56 +08:00
parent 8018438f42
commit 0095291eb0
5 changed files with 318 additions and 9 deletions

148
public/privacy-policy.html Normal file
View File

@@ -0,0 +1,148 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>隐私政策 - ChatOne</title>
<style>
:root {
color-scheme: light;
}
body {
margin: 0;
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "PingFang SC",
"Hiragino Sans GB", "Microsoft YaHei", sans-serif;
color: #1f2329;
background: #f6f8fb;
line-height: 1.85;
}
.container {
max-width: 920px;
margin: 0 auto;
padding: 28px 16px 40px;
}
.card {
background: #fff;
border: 1px solid #e8edf3;
border-radius: 16px;
box-shadow: 0 6px 20px rgba(31, 35, 41, 0.06);
padding: 24px 20px;
}
.hero {
margin-bottom: 28px;
}
h1 {
margin: 6px 0 10px;
font-size: 28px;
line-height: 1.35;
}
.title-center {
text-align: center;
}
h2 {
margin: 28px 0 8px;
font-size: 19px;
line-height: 1.45;
}
p {
margin: 8px 0;
}
ul {
margin: 8px 0;
padding-left: 22px;
}
li {
margin: 2px 0;
}
.muted {
color: #667085;
font-size: 14px;
}
@media (max-width: 640px) {
.container {
padding: 16px 12px 24px;
}
.card {
border-radius: 12px;
padding: 18px 14px;
}
h1 {
font-size: 24px;
}
h2 {
font-size: 17px;
margin-top: 22px;
}
}
</style>
</head>
<body>
<main class="container">
<article class="card">
<header class="hero">
<h1 class="title-center">ChatOne隐私政策</h1>
<p class="muted">版本号:【待补充,例如 v1.0.0】</p>
<p class="muted">更新日期:【待补充】</p>
<p class="muted">生效日期:【待补充】</p>
</header>
<h2>0. 运营者信息</h2>
<p>运营主体:【待补充公司全称】</p>
<p>统一社会信用代码:【待补充】</p>
<p>注册地址:【待补充】</p>
<p>联系邮箱:【待补充】</p>
<p>联系电话:【待补充】</p>
<h2>1. 我们如何收集和使用个人信息</h2>
<p>为提供基础功能,我们可能收集并使用以下信息:</p>
<ul>
<li>账号信息:手机号、验证码;</li>
<li>使用信息:会话内容、操作日志、设备与网络基础信息;</li>
<li>服务保障信息:故障排查、安全风控所需的信息。</li>
</ul>
<p>
请补充“个人信息处理清单”(建议至少包含:信息类型、处理目的、处理方式、保存期限、删除规则)。
</p>
<h2>2. 处理个人信息的目的与依据</h2>
<p>
我们基于提供服务、履行法定义务、维护网络与运营安全等必要目的处理你的个人信息,并严格遵守《个人信息保护法》等法律法规。
</p>
<h2>3. 我们如何共享、转让、公开披露个人信息</h2>
<p>
除法律法规另有规定或获得你的单独同意外,我们不会向第三方共享、转让或公开披露你的个人信息。确需共享时,我们将说明共享目的、方式和范围,并要求接收方采取保护措施。
</p>
<p>请补充第三方清单:【待补充:第三方名称、共享字段、用途、隐私政策链接】。</p>
<h2>4. 信息存储与保护</h2>
<p>
我们采取合理的技术与管理措施保护个人信息安全,并在达到处理目的所必需的最短期限内保存你的个人信息。超出保存期限后将依法删除或匿名化处理。
</p>
<p>
如存在跨境传输,请补充:【待补充:接收方、国家/地区、类型、保护措施】;如无,请明确“我们不进行个人信息跨境传输”。
</p>
<h2>5. 你的权利</h2>
<p>
你可依法行使查阅、复制、更正、删除、撤回同意、注销账号等权利。你可通过本政策“联系我们”渠道提交请求。
</p>
<h2>6. 未成年人保护</h2>
<p>
若你是未满 14
周岁的未成年人,请在监护人同意与指导下使用本服务。我们将按照法律规定对未成年人个人信息采取特别保护措施。
</p>
<h2>7. 政策更新</h2>
<p>
我们可能适时更新本政策。若发生重大变更,我们将通过适当方式提示。变更后的政策公布后生效。
</p>
<h2>8. 联系我们</h2>
<p>如对本政策有疑问或需行使个人信息权利,请联系: 【待补充:邮箱 / 电话 / 通信地址】。</p>
</article>
</main>
</body>
</html>

148
public/user-agreement.html Normal file
View File

@@ -0,0 +1,148 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>用户协议 - ChatOne</title>
<style>
:root {
color-scheme: light;
}
body {
margin: 0;
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "PingFang SC",
"Hiragino Sans GB", "Microsoft YaHei", sans-serif;
color: #1f2329;
background: #f6f8fb;
line-height: 1.85;
}
.container {
max-width: 920px;
margin: 0 auto;
padding: 28px 16px 40px;
}
.card {
background: #fff;
border: 1px solid #e8edf3;
border-radius: 16px;
box-shadow: 0 6px 20px rgba(31, 35, 41, 0.06);
padding: 24px 20px;
}
.hero {
margin-bottom: 28px;
}
h1 {
margin: 6px 0 10px;
font-size: 28px;
line-height: 1.35;
}
.title-center {
text-align: center;
}
h2 {
margin: 28px 0 8px;
font-size: 19px;
line-height: 1.45;
}
p {
margin: 8px 0;
}
ul {
margin: 8px 0;
padding-left: 22px;
}
li {
margin: 2px 0;
}
.muted {
color: #667085;
font-size: 14px;
}
@media (max-width: 640px) {
.container {
padding: 16px 12px 24px;
}
.card {
border-radius: 12px;
padding: 18px 14px;
}
h1 {
font-size: 24px;
}
h2 {
font-size: 17px;
margin-top: 22px;
}
}
</style>
</head>
<body>
<main class="container">
<article class="card">
<header class="hero">
<h1 class="title-center">ChatOne用户协议</h1>
<p class="muted">版本号:【待补充,例如 v1.0.0】</p>
<p class="muted">更新日期:【待补充】</p>
<p class="muted">生效日期:【待补充】</p>
</header>
<h2>0. 运营者信息</h2>
<p>运营主体:【待补充公司全称】</p>
<p>统一社会信用代码:【待补充】</p>
<p>注册地址:【待补充】</p>
<p>联系邮箱:【待补充】</p>
<p>联系电话:【待补充】</p>
<h2>1. 协议范围</h2>
<p>
欢迎使用
ChatOne以下简称“本服务”。本协议是你与本服务运营方之间就使用本服务所订立的协议。你在注册、登录、使用本服务前应当仔细阅读并充分理解本协议全部条款。
</p>
<h2>2. 账号与安全</h2>
<p>
你应当使用合法、真实、有效的信息注册和使用账号,并妥善保管账号及验证码。因你保管不善导致的风险和损失由你自行承担。
</p>
<h2>3. 服务使用规范</h2>
<p>
你承诺不得利用本服务从事违反法律法规、公序良俗或侵害他人合法权益的行为,包括但不限于:
</p>
<ul>
<li>发布、传播违法违规信息;</li>
<li>侵害他人知识产权、名誉权、隐私权等合法权益;</li>
<li>干扰、破坏本服务正常运行或实施任何危害网络安全的行为。</li>
</ul>
<h2>4. AI 生成内容说明</h2>
<p>
本服务包含基于人工智能生成的内容。相关内容仅供参考,不构成任何专业建议或承诺。你应结合自身情况独立判断并自行承担使用风险。
</p>
<h2>5. 知识产权</h2>
<p>
本服务及相关软件、页面、标识、文本、图像等内容的知识产权归运营方或权利人所有。未经许可,不得擅自复制、传播、修改或用于其他商业用途。
</p>
<h2>6. 责任限制</h2>
<p>
在法律允许范围内,运营方对因不可抗力、网络故障、第三方原因或你自身原因导致的服务中断、数据丢失或其他损失,不承担超出法定范围的责任。
</p>
<h2>7. 协议变更与终止</h2>
<p>
运营方可根据法律法规或业务需要更新本协议。更新后的协议公布后生效。若你继续使用本服务,视为接受更新后的协议。
</p>
<h2>8. 争议解决</h2>
<p>
本协议的订立、执行和解释适用中华人民共和国法律。因本协议引起的争议,双方应先协商解决;协商不成的,提交【待补充:运营方所在地城市】有管辖权的人民法院诉讼解决。
</p>
<h2>9. 联系我们</h2>
<p>如有疑问,请通过以下方式联系: 【待补充:客服邮箱 / 电话 / 通信地址】。</p>
</article>
</main>
</body>
</html>

View File

@@ -135,7 +135,7 @@ export default function LoginPage() {
return ( return (
<main <main
className={tw( className={tw(
"flex h-dvh w-full items-center justify-center", "relative flex h-dvh w-full items-center justify-center",
"overflow-hidden bg-white px-4", "overflow-hidden bg-white px-4",
)} )}
> >
@@ -155,7 +155,7 @@ export default function LoginPage() {
/> />
</div> </div>
<div className="space-y-5"> <div className="space-y-2">
<div> <div>
<InputGroup className={loginGroupStateClass(phoneError)}> <InputGroup className={loginGroupStateClass(phoneError)}>
<InputGroupInput <InputGroupInput
@@ -230,16 +230,25 @@ export default function LoginPage() {
<p className="block text-[12px] leading-6 text-[#81858c] py-2"> <p className="block text-[12px] leading-6 text-[#81858c] py-2">
{" "} {" "}
<a href="#" className="text-[#333] underline"> <a
href="/user-agreement.html"
target="_blank"
rel="noreferrer"
className="text-[#333] underline"
>
</a>{" "} </a>{" "}
{" "} {" "}
<a href="#" className="text-[#333] underline"> <a
href="/privacy-policy.html"
target="_blank"
rel="noreferrer"
className="text-[#333] underline"
>
</a> </a>
</p> </p>
<Button <Button
type="button" type="button"
size="lg" size="lg"
@@ -253,6 +262,14 @@ export default function LoginPage() {
</Button> </Button>
</div> </div>
</section> </section>
<a
href="https://beian.miit.gov.cn/"
target="_blank"
rel="noreferrer"
className="absolute bottom-4 left-1/2 -translate-x-1/2 text-[12px] text-[#a0a3aa] hover:underline"
>
ICP备19037638号-2
</a>
</main> </main>
); );
} }

View File

@@ -12,8 +12,6 @@
"moduleDetection": "force", "moduleDetection": "force",
"noEmit": true, "noEmit": true,
"jsx": "react-jsx", "jsx": "react-jsx",
"ignoreDeprecations": "6.0",
"baseUrl": ".",
"paths": { "paths": {
"@/*": ["./src/*"] "@/*": ["./src/*"]
}, },

View File

@@ -1,7 +1,5 @@
{ {
"compilerOptions": { "compilerOptions": {
"ignoreDeprecations": "6.0",
"baseUrl": ".",
"paths": { "paths": {
"@/*": ["./src/*"] "@/*": ["./src/*"]
} }