Files
xianyan/docs/toolsapi/agreements/account-agreement.html
Developer adfa0af825 chore: 汇总2026-05-30全量更新
### 详细变更:
1.  **文档与配置**:更新AGENTS.md添加命令超时约束,升级Rive依赖至0.14.7并替换平台插件引用
2.  **UI优化**:重构AppInfo页面布局、移除图表冗余配置、锁定部分系统设置项
3.  **功能增强**:
    - 新增工具面板拖拽状态管理与介绍弹窗
    - 新增进度页面编辑/重排/清空用户进度功能
    - 新增摇一摇路由作用域拦截逻辑
4.  **体验优化**:
    - 统一外部链接跳转弹窗,添加文件打开确认逻辑
    - 修复设备卡片IP溢出、Android权限声明问题
    - 后台任务初始化增加协议校验
5.  **代码重构**:拆分工具面板配置、拖拽逻辑与动画参数,优化状态管理代码
6.  **工具脚本**:新增协议文件上传脚本
2026-05-30 05:29:50 +08:00

505 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>账号使用协议 - 闲言APP</title>
<style>
:root {
--primary: #6C5CE7;
--primary-light: #A29BFE;
--primary-dark: #5A4BD1;
--bg: #F2F2F7;
--bg-card: #FFFFFF;
--text: #1C1C1E;
--text-secondary: #8E8E93;
--text-tertiary: #AEAEB2;
--border: #E5E5EA;
--highlight-bg: rgba(108, 92, 231, 0.08);
--shadow-sm: 0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.06);
--shadow-md: 0 4px 12px rgba(0,0,0,0.08);
--radius-sm: 8px;
--radius-md: 12px;
--radius-lg: 16px;
--radius-xl: 20px;
--font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Helvetica Neue', 'PingFang SC', 'Microsoft YaHei', sans-serif;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: var(--font-family);
background: var(--bg);
color: var(--text);
line-height: 1.8;
-webkit-font-smoothing: antialiased;
}
.lang-switch {
position: fixed;
top: 16px;
right: 16px;
z-index: 100;
display: flex;
background: rgba(255,255,255,0.85);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-radius: 20px;
padding: 3px;
box-shadow: 0 2px 12px rgba(0,0,0,0.1);
border: 0.5px solid rgba(108, 92, 231, 0.15);
}
.lang-btn {
padding: 6px 14px;
border: none;
background: transparent;
color: var(--text-secondary);
font-size: 13px;
font-weight: 500;
cursor: pointer;
border-radius: 17px;
transition: all 0.25s ease;
font-family: var(--font-family);
}
.lang-btn.active {
background: var(--primary);
color: #FFF;
box-shadow: 0 2px 8px rgba(108, 92, 231, 0.3);
}
.lang-btn:hover:not(.active) {
background: rgba(108, 92, 231, 0.08);
color: var(--primary);
}
.header {
background: linear-gradient(135deg, #6C5CE7 0%, #5A4BD1 50%, #4A3DB5 100%);
padding: 48px 20px 44px;
text-align: center;
position: relative;
overflow: hidden;
}
.header::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: radial-gradient(circle at 30% 50%, rgba(255,255,255,0.1) 0%, transparent 50%);
pointer-events: none;
}
.header::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 32px;
background: var(--bg);
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
}
.header-icon { font-size: 40px; margin-bottom: 10px; display: block; }
.header h1 { color: #FFF; font-size: 24px; font-weight: 700; letter-spacing: -0.3px; margin-bottom: 4px; }
.header p { color: rgba(255,255,255,0.75); font-size: 14px; }
.container { max-width: 800px; margin: 0 auto; padding: 20px 16px 40px; }
.content-card {
background: var(--bg-card);
border-radius: var(--radius-lg);
padding: 28px 24px;
margin-bottom: 20px;
box-shadow: var(--shadow-sm);
}
h1 {
font-size: 22px;
font-weight: 700;
color: var(--text);
margin: 28px 0 12px;
}
h2 {
font-size: 20px;
font-weight: 700;
color: var(--text);
margin: 32px 0 16px;
padding-bottom: 10px;
border-bottom: 2px solid var(--primary);
display: inline-block;
}
h3 {
font-size: 17px;
font-weight: 600;
color: var(--text);
margin: 24px 0 12px;
}
p {
font-size: 15px;
color: var(--text);
margin-bottom: 12px;
line-height: 1.8;
}
p.note {
background: rgba(108, 92, 231, 0.06);
border-left: 3px solid var(--primary);
padding: 12px 16px;
border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
margin: 12px 0;
}
.highlight {
color: var(--primary);
font-weight: 600;
background: var(--highlight-bg);
padding: 1px 6px;
border-radius: 4px;
}
.copyright-cert {
margin: 20px 0;
text-align: center;
padding: 20px;
background: rgba(108, 92, 231, 0.04);
border-radius: var(--radius-md);
border: 1px solid rgba(108, 92, 231, 0.12);
}
.cert-image {
max-width: 100%;
max-height: 500px;
border-radius: var(--radius-sm);
box-shadow: var(--shadow-md);
}
.cert-caption {
margin-top: 12px;
font-size: 14px;
color: var(--text-secondary);
font-weight: 500;
}
ul {
list-style: none;
padding: 0;
margin: 0 0 16px;
}
li {
font-size: 15px;
color: var(--text);
padding: 6px 0 6px 20px;
position: relative;
line-height: 1.7;
}
li::before {
content: '\2022';
color: var(--primary);
font-weight: 700;
position: absolute;
left: 4px;
top: 6px;
}
table {
width: 100%;
border-collapse: collapse;
margin: 16px 0;
font-size: 14px;
}
th {
background: var(--primary);
color: #FFF;
padding: 10px 12px;
text-align: left;
font-weight: 600;
font-size: 13px;
}
td {
padding: 10px 12px;
border-bottom: 0.5px solid var(--border);
line-height: 1.6;
}
tr:hover td {
background: rgba(108, 92, 231, 0.04);
}
.back-link {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--primary);
text-decoration: none;
font-size: 15px;
font-weight: 500;
padding: 12px 0;
transition: opacity 0.2s;
}
.back-link:hover { opacity: 0.7; }
.footer {
text-align: center;
padding: 24px 20px 40px;
color: var(--text-secondary);
font-size: 13px;
line-height: 1.8;
border-top: 0.5px solid var(--border);
margin-top: 20px;
}
.footer .company { font-weight: 500; color: var(--text); margin-bottom: 4px; }
@media (max-width: 640px) {
.lang-switch { top: 10px; right: 10px; }
.lang-btn { padding: 5px 10px; font-size: 12px; }
.header { padding: 40px 16px 36px; }
.header h1 { font-size: 20px; }
.container { padding: 16px 12px 32px; }
.content-card { padding: 20px 16px; }
h2 { font-size: 18px; }
h3 { font-size: 16px; }
p, li { font-size: 14px; }
table { font-size: 12px; }
th, td { padding: 8px 6px; }
}
</style>
</head>
<body>
<div class="lang-switch">
<button class="lang-btn active" onclick="switchLang('zh')" id="btn-zh">中文</button>
<button class="lang-btn" onclick="switchLang('en')" id="btn-en">EN</button>
</div>
<div class="header">
<span class="header-icon">👤</span>
<h1 id="header-title">账号使用协议</h1>
<p id="header-subtitle">账号注册、安全、注销等相关规定</p>
</div>
<div class="container">
<div class="content-card">
<div id="content-zh" class="lang-content">
<p><strong>闲言APP</strong> 账号使用协议</p>
<p>版本号V6.5</p>
<p>更新日期2026年5月20日</p>
<p>生效日期2026年5月21日</p>
<p>本协议是您与<strong>弥勒市朋普镇微风暴网络科技工作室</strong>关于<strong>闲言APP</strong>账号注册、使用、安全及注销等事项的约定。请您仔细阅读并充分理解本协议。</p>
<h2>一、账号注册</h2>
<h3>1.1 注册资格</h3>
<ul>
<li>您须达到您所在地区法律规定的最低年龄要求方可注册**闲言APP**账号(中国大陆地区为<span class="highlight">14周岁</span>欧盟地区为16周岁或所在成员国规定的较低年龄美国为13周岁</li>
<li><span class="highlight">14周岁以下</span>未成年人不得注册和使用**闲言APP**账号</li>
<li>如我们发现在未获监护人同意的情况下收集了未成年人信息,将立即删除相关信息</li>
<li>每位用户仅可注册<span class="highlight">一个账号</span>,不得买卖、转让、出借账号</li>
</ul>
<h3>1.2 注册方式</h3>
<ul>
<li>手机号注册:通过手机号接收验证码完成注册</li>
<li>邮箱注册:通过邮箱接收验证码完成注册</li>
<li>第三方登录:通过授权第三方账号快捷登录</li>
</ul>
<h3>1.3 注册信息</h3>
<p>您在注册时应提供<span class="highlight">真实、准确、完整</span>的信息,并在信息发生变更时及时更新。因注册信息不真实导致的问题和损失,由您自行承担。</p>
<h2>二、账号安全</h2>
<h3>2.1 密码安全</h3>
<ul>
<li>您应设置复杂度较高的密码,并定期更换</li>
<li>不得将密码告知他人</li>
<li>如发现账号被盗用,应<span class="highlight">立即通知</span>我们</li>
</ul>
<h3>2.2 安全措施</h3>
<ul>
<li>我们提供应用锁功能,您可开启以增强账号安全</li>
<li>我们提供密保问题功能,可用于密码找回</li>
<li>建议您开启登录验证等安全功能</li>
</ul>
<h3>2.3 安全义务</h3>
<ul>
<li>您应妥善保管账号和密码,因您的原因导致账号泄露的,由您<span class="highlight">自行承担损失</span></li>
<li>您不得将账号出借、出租、出售给他人使用</li>
<li>您应对账号下的<span class="highlight">所有行为负责</span></li>
</ul>
<h2>三、账号使用</h2>
<h3>3.1 实名认证</h3>
<p>根据《中华人民共和国网络安全法》等法律法规要求,您在使用部分功能时可能需要进行<span class="highlight">实名认证</span></p>
<h3>3.2 账号信息</h3>
<ul>
<li>您的昵称、头像、签名等信息不得违反法律法规和公序良俗</li>
<li>不得冒充他人或机构</li>
<li>不得使用涉及政治、色情、暴力等不当内容</li>
</ul>
<h3>3.3 账号限制</h3>
<p>以下情形我们有权限制您的账号使用:</p>
<ul>
<li>账号存在安全风险</li>
<li>违反用户服务协议</li>
<li>涉嫌违法违规活动</li>
<li>长期未登录(超过<span class="highlight">2年</span></li>
</ul>
<h2>四、账号注销</h2>
<h3>4.1 注销条件</h3>
<p>您有权随时申请注销账号,注销前请确保:</p>
<ul>
<li>账号无未处理的纠纷或投诉</li>
<li>账号无未完成的交易或服务</li>
<li>已备份需要保留的数据</li>
</ul>
<h3>4.2 注销流程</h3>
<ul>
<li>您可通过"设置 → 账户设置 → 注销账号"发起注销申请</li>
<li>第一步:阅读注销警告,确认了解注销后果</li>
<li>第二步:安全验证——需输入"DELETE"确认操作,并可填写注销原因(选填)</li>
<li>第三步:提交申请后进入<span class="highlight">3天审核期</span></li>
<li>第四步:管理员审核通过或审核期超时后,账号将被<span class="highlight">永久注销</span></li>
<li>审核期内您可随时取消注销申请,取消后账号恢复正常使用</li>
</ul>
<h3>4.3 注销状态查询</h3>
<ul>
<li>您可在注销页面查看当前申请状态(待审核/已通过/已拒绝/已撤销)</li>
<li>页面将显示申请时间、注销原因、预计自动注销时间等信息</li>
<li>审核期内页面将显示倒计时提示</li>
</ul>
<h3>4.4 注销后果</h3>
<ul>
<li>账号注销后,您将<span class="highlight">无法登录</span>和使用该账号</li>
<li>以下数据将被永久删除且<span class="highlight">不可恢复</span></li>
<li>所有收藏和笔记</li>
<li>签到记录和积分</li>
<li>个人资料和设置</li>
<li>文章和互动数据</li>
<li>会员权益、积分、金币等虚拟财产将清零且<span class="highlight">不可恢复</span></li>
<li>注销后<span class="highlight">无法恢复</span>,请谨慎操作</li>
</ul>
<h2>五、账号冻结与解冻</h2>
<h3>5.1 冻结情形</h3>
<p>以下情形我们有权冻结您的账号:</p>
<ul>
<li>收到司法机关协助冻结通知</li>
<li>账号涉嫌违法违规</li>
<li>账号存在严重安全风险</li>
<li>用户申请临时冻结</li>
</ul>
<h3>5.2 解冻流程</h3>
<ul>
<li>司法冻结:根据司法机关通知解冻</li>
<li>违规冻结:申诉通过后解冻</li>
<li>安全冻结:完成安全验证后解冻</li>
<li>临时冻结:到期自动解冻或申请解冻</li>
</ul>
<h2>六、数据与隐私</h2>
<h3>6.1 账号相关数据的收集、使用、存储请参阅《隐私政策》</h3>
<h3>6.2 您可通过"数据导出"功能导出您的个人数据</h3>
<h3>6.3 账号注销后,我们将依法<span class="highlight">删除或匿名化处理</span>您的个人信息</h3>
<h2>七、法律适用与争议解决</h2>
<h3>7.1 本协议适用<span class="highlight">中华人民共和国法律</span></h3>
<h3>7.2 因本协议产生的争议,双方应友好协商解决;协商不成的,任何一方均可向我们所在地有管辖权的<span class="highlight">人民法院</span>提起诉讼。</h3>
<h2>八、联系方式</h2>
<ul>
<li>邮箱2821981550@qq.com</li>
<li>通信地址云南省昆明市西山区滇池度假区碧鸡街道车家壁513号</li>
<li>开发者:**弥勒市朋普镇微风暴网络科技工作室**</li>
</ul>
<h2>九、法律适用与争议解决</h2>
<h3>9.1 本协议适用<span class="highlight">中华人民共和国法律</span></h3>
<h3>9.2 因本协议产生的争议,双方应友好协商解决;协商不成的,任何一方均可向我们所在地有管辖权的<span class="highlight">人民法院</span>提起诉讼。</h3>
<p>本协议中任何条款被认定为无效或不可执行的,不影响其他条款的效力。</p>
</div>
<div id="content-en" class="lang-content" style="display:none;">
<p><strong>Xianyan APP</strong> Account Usage Agreement</p>
<p>Version: V6.5</p>
<p>Updated: May 20, 2026</p>
<p>Effective: May 21, 2026</p>
<h2>I. Account Registration</h2>
<h3>1.1 You must be at least 14 years old to register an account</h3>
<h3>1.2 You need to provide a valid phone number or email for registration</h3>
<h3>1.3 The information you provide must be true, accurate, and complete</h3>
<h3>1.4 Each person may only register one account</h3>
<h2>II. Account Security</h2>
<h3>2.1 You are responsible for keeping your account password secure</h3>
<h3>2.2 Do not use easily guessable passwords</h3>
<h3>2.3 If you discover your account has been used without authorization, please contact us immediately</h3>
<h3>2.4 We are not responsible for losses caused by your failure to keep your account secure</h3>
<h2>III. Account Usage</h2>
<h3>3.1 You may not lend, transfer, or sell your account</h3>
<h3>3.2 You may not use your account for illegal activities</h3>
<h3>3.3 You may not use technical means to obtain other users' account information</h3>
<h2>IV. Account Deletion</h2>
<h3>4.1 You can apply for account deletion at: My → Settings → Account Settings → Delete Account</h3>
<h3>4.2 Deletion process:</h3>
<ul>
<li>Submit a deletion request and undergo security verification</li>
<li>3-day review period (countdown displayed)</li>
<li>During the review period, you can cancel the deletion request</li>
<li>After the review is complete, the account and related data will be permanently deleted</li>
</ul>
<h3>4.3 After account deletion:</h3>
<ul>
<li>All personal information will be deleted or anonymized</li>
<li>Published content will be handled according to your choice</li>
<li>Account cannot be recovered after deletion</li>
</ul>
<h2>V. Account Freeze</h2>
<h3>5.1 We have the right to freeze accounts in the following circumstances:</h3>
<ul>
<li>Violation of laws and regulations</li>
<li>Violation of this Agreement</li>
<li>Receipt of legitimate complaints from multiple users</li>
<li>Suspected fraudulent or illegal activities</li>
</ul>
<h2>VI. Contact Information</h2>
<ul>
<li>Email: 2821981550@qq.com</li>
<li>Mailing address: Dianchi Resort Area, Xishan District, Kunming, Yunnan Province, China (Bijie Subdistrict, Chejiabi No. 513)</li>
<li>Developer: **Mile City Pengpu Town Weifengbao Network Technology Studio**</li>
</ul>
<h2>VII. Legal Application and Dispute Resolution</h2>
<h3>7.1 This Agreement is governed by the laws of the People's Republic of China.</h3>
<h3>7.2 Disputes shall be resolved through friendly negotiation; if negotiation fails, either party may file a lawsuit with the People's Court having jurisdiction over our location.</h3>
<p>If any provision of this agreement is found to be invalid or unenforceable, the validity of the remaining provisions shall not be affected.</p>
</div>
</div>
<a href="index.html" class="back-link" id="back-link">← 返回协议列表</a>
</div>
<div class="footer" id="footer">
<div class="company" id="footer-company">弥勒市朋普镇微风暴网络科技工作室</div>
<div id="footer-contact">📧 2821981550@qq.com &nbsp;|&nbsp; 📧 2572560133@qq.com &nbsp;|&nbsp; 📍 云南省昆明市西山区滇池度假区碧鸡街道车家壁513号</div>
<div style="margin-top: 8px;" id="footer-credit">统一社会信用代码92532526MA6PCX153W</div>
<div style="margin-top: 4px;" id="footer-icp">滇ICP备2022000863号-18A</div>
<div style="margin-top: 4px; color: var(--text-tertiary);">© 2026 Xianyan. All rights reserved.</div>
</div>
<script>
const DATA = {
zh: {
title: '账号使用协议',
subtitle: '账号注册、安全、注销等相关规定',
backLink: '← 返回协议列表',
company: '弥勒市朋普镇微风暴网络科技工作室',
contact: '📧 2821981550@qq.com &nbsp;|&nbsp; 📧 2572560133@qq.com &nbsp;|&nbsp; 📍 云南省昆明市西山区滇池度假区碧鸡街道车家壁513号',
credit: '统一社会信用代码92532526MA6PCX153W',
icp: '滇ICP备2022000863号-18A'
},
en: {
title: 'Account Agreement',
subtitle: 'Rules for account registration, security, and deletion',
backLink: '← Back to Agreement List',
company: 'Mile City Pengpu Town Weifengbao Network Technology Studio',
contact: '📧 2821981550@qq.com &nbsp;|&nbsp; 📧 2572560133@qq.com &nbsp;|&nbsp; 📍 Dianchi Resort, Xishan District, Kunming, Yunnan, China',
credit: 'Unified Social Credit Code: 92532526MA6PCX153W',
icp: 'ICP License: 滇ICP备2022000863号-18A'
}
};
function switchLang(lang) {
document.getElementById('content-zh').style.display = lang === 'zh' ? 'block' : 'none';
document.getElementById('content-en').style.display = lang === 'en' ? 'block' : 'none';
document.getElementById('header-title').textContent = DATA[lang].title;
document.getElementById('header-subtitle').textContent = DATA[lang].subtitle;
document.getElementById('back-link').textContent = DATA[lang].backLink;
document.getElementById('footer-company').textContent = DATA[lang].company;
document.getElementById('footer-contact').innerHTML = DATA[lang].contact;
document.getElementById('footer-credit').textContent = DATA[lang].credit;
document.getElementById('footer-icp').textContent = DATA[lang].icp;
document.getElementById('btn-zh').className = 'lang-btn' + (lang === 'zh' ? ' active' : '');
document.getElementById('btn-en').className = 'lang-btn' + (lang === 'en' ? ' active' : '');
document.documentElement.lang = lang === 'zh' ? 'zh-CN' : 'en';
const url = new URL(window.location);
if (lang === 'en') {
url.searchParams.set('lang', 'en');
} else {
url.searchParams.delete('lang');
}
history.replaceState(null, '', url);
}
(function() {
const params = new URLSearchParams(window.location.search);
const lang = params.get('lang');
if (lang === 'en') switchLang('en');
})();
</script>
</body>
</html>