save
This commit is contained in:
1
components.d.ts
vendored
1
components.d.ts
vendored
@@ -56,6 +56,7 @@ declare module 'vue' {
|
||||
IconFluentChevronLeft28Filled: typeof import('~icons/fluent/chevron-left28-filled')['default']
|
||||
IconFluentDatabasePerson20Regular: typeof import('~icons/fluent/database-person20-regular')['default']
|
||||
IconFluentDelete20Regular: typeof import('~icons/fluent/delete20-regular')['default']
|
||||
IconFluentDismiss12Regular: typeof import('~icons/fluent/dismiss12-regular')['default']
|
||||
IconFluentDismiss20Regular: typeof import('~icons/fluent/dismiss20-regular')['default']
|
||||
IconFluentDismissCircle16Regular: typeof import('~icons/fluent/dismiss-circle16-regular')['default']
|
||||
IconFluentDismissCircle20Filled: typeof import('~icons/fluent/dismiss-circle20-filled')['default']
|
||||
|
||||
@@ -198,6 +198,7 @@ const vFocus = {
|
||||
height: 1.5rem;
|
||||
color: var(--color-input-color);
|
||||
background: transparent;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
144
src/pages/user/PrivacyPolicy.vue
Normal file
144
src/pages/user/PrivacyPolicy.vue
Normal file
@@ -0,0 +1,144 @@
|
||||
<script setup lang="ts">
|
||||
import BasePage from "@/components/BasePage.vue";
|
||||
import BackIcon from "@/components/BackIcon.vue";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BasePage>
|
||||
<div class="privacy-page">
|
||||
<BackIcon />
|
||||
<h1 class="page-title">隐私政策</h1>
|
||||
<div class="content">
|
||||
<section>
|
||||
<h2>一、引言</h2>
|
||||
<p>我们非常重视您的隐私保护。本隐私政策说明了我们如何收集、使用、存储和保护您的个人信息。在使用本应用之前,请您仔细阅读本隐私政策。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>二、信息收集</h2>
|
||||
<p>我们可能收集以下信息:</p>
|
||||
<p><strong>1. 账户信息:</strong>当您注册账户时,我们会收集您的手机号、邮箱地址、密码等信息。</p>
|
||||
<p><strong>2. 学习数据:</strong>我们会记录您的学习进度、学习记录、练习数据等信息,以便为您提供个性化的学习服务。</p>
|
||||
<p><strong>3. 设备信息:</strong>我们可能收集您的设备型号、操作系统版本、唯一设备标识符等信息,用于改善服务质量和安全性。</p>
|
||||
<p><strong>4. 日志信息:</strong>当您使用本应用时,我们可能自动收集某些信息,包括IP地址、访问时间、访问页面等。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>三、信息使用</h2>
|
||||
<p>我们使用收集的信息用于以下目的:</p>
|
||||
<p>1. 提供、维护和改进我们的服务;</p>
|
||||
<p>2. 处理您的注册、登录、学习记录等请求;</p>
|
||||
<p>3. 向您发送服务通知、更新和安全提醒;</p>
|
||||
<p>4. 进行数据分析,以改善用户体验和服务质量;</p>
|
||||
<p>5. 检测、预防和解决技术问题;</p>
|
||||
<p>6. 遵守法律法规要求。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>四、信息存储</h2>
|
||||
<p>1. 我们采用行业标准的安全措施来保护您的个人信息,防止未经授权的访问、使用或泄露。</p>
|
||||
<p>2. 您的个人信息将存储在安全的服务器上,我们会对数据进行加密处理。</p>
|
||||
<p>3. 我们仅在为实现本隐私政策所述目的所必需的期间内保留您的个人信息。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>五、信息共享</h2>
|
||||
<p>我们不会向第三方出售、交易或转让您的个人信息,除非:</p>
|
||||
<p>1. 获得您的明确同意;</p>
|
||||
<p>2. 法律法规要求或司法机关、行政机关依法要求提供;</p>
|
||||
<p>3. 为履行我们的服务协议或本隐私政策,我们可能需要与我们的服务提供商共享某些信息。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>六、Cookie和类似技术</h2>
|
||||
<p>我们可能使用Cookie和类似技术来收集信息、改善用户体验和分析服务使用情况。您可以通过浏览器设置管理Cookie,但这可能影响某些功能的正常使用。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>七、您的权利</h2>
|
||||
<p>根据相关法律法规,您对自己的个人信息享有以下权利:</p>
|
||||
<p>1. <strong>访问权:</strong>您有权访问我们持有的关于您的个人信息;</p>
|
||||
<p>2. <strong>更正权:</strong>您有权要求更正不准确的个人信息;</p>
|
||||
<p>3. <strong>删除权:</strong>在特定情况下,您有权要求删除您的个人信息;</p>
|
||||
<p>4. <strong>撤回同意:</strong>您有权随时撤回您之前给予的同意;</p>
|
||||
<p>5. <strong>投诉权:</strong>如果您认为我们对您个人信息的处理违反了相关法律法规,您有权向相关监管部门投诉。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>八、未成年人保护</h2>
|
||||
<p>我们非常重视未成年人的个人信息保护。如果您是未成年人,建议您请您的父母或监护人仔细阅读本隐私政策,并在征得您的父母或监护人同意的前提下使用我们的服务。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>九、隐私政策更新</h2>
|
||||
<p>我们可能会不时更新本隐私政策。我们会在本页面上发布新的隐私政策,并通过适当方式通知您。如果您不同意更新后的隐私政策,您可以选择停止使用我们的服务。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>十、联系我们</h2>
|
||||
<p>如果您对本隐私政策有任何疑问、意见或建议,或需要行使您的相关权利,请通过以下方式联系我们:</p>
|
||||
<p>邮箱:privacy@example.com</p>
|
||||
</section>
|
||||
|
||||
<div class="update-time">
|
||||
<p>最后更新时间:2024年1月1日</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</BasePage>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.privacy-page {
|
||||
padding: 2rem;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
font-size: 2rem;
|
||||
font-weight: 600;
|
||||
margin: 2rem 0;
|
||||
text-align: center;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.content {
|
||||
line-height: 1.8;
|
||||
color: var(--color-text);
|
||||
|
||||
section {
|
||||
margin-bottom: 2rem;
|
||||
|
||||
h2 {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 0.8rem;
|
||||
text-align: justify;
|
||||
color: var(--color-text-secondary, #666);
|
||||
|
||||
strong {
|
||||
color: var(--color-text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.update-time {
|
||||
margin-top: 3rem;
|
||||
padding-top: 2rem;
|
||||
border-top: 1px solid var(--color-border, #eee);
|
||||
text-align: center;
|
||||
|
||||
p {
|
||||
color: var(--color-text-secondary, #999);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
131
src/pages/user/UserAgreement.vue
Normal file
131
src/pages/user/UserAgreement.vue
Normal file
@@ -0,0 +1,131 @@
|
||||
<script setup lang="ts">
|
||||
import BasePage from "@/components/BasePage.vue";
|
||||
import BackIcon from "@/components/BackIcon.vue";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BasePage>
|
||||
<div class="agreement-page">
|
||||
<BackIcon />
|
||||
<h1 class="page-title">用户协议</h1>
|
||||
<div class="content">
|
||||
<section>
|
||||
<h2>一、总则</h2>
|
||||
<p>欢迎使用本应用!在使用本应用之前,请您仔细阅读本用户协议(以下简称"本协议")。当您注册、登录、使用(以下统称"使用")本应用时,即表示您已阅读、理解并同意接受本协议的全部内容。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>二、服务内容</h2>
|
||||
<p>本应用为用户提供单词学习、文章阅读等在线教育服务。我们保留随时修改或中断服务而不需通知用户的权利,我们行使修改或中断服务的权利,不需对用户或第三方负责。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>三、用户账户</h2>
|
||||
<p>1. 用户在使用本应用前需要注册一个账户。用户应当使用真实、准确、完整的信息注册账户。</p>
|
||||
<p>2. 用户有责任维护账户信息的安全,对账户下的所有活动负责。</p>
|
||||
<p>3. 用户不得将账户转让、出售或以其他方式提供给第三方使用。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>四、用户行为规范</h2>
|
||||
<p>用户在使用本应用时,应当遵守相关法律法规,不得从事以下行为:</p>
|
||||
<p>1. 发布、传播违法、有害、威胁、辱骂、骚扰、侵权、诽谤、淫秽、暴力或其他不当内容;</p>
|
||||
<p>2. 侵犯他人知识产权、隐私权或其他合法权益;</p>
|
||||
<p>3. 干扰或破坏本应用的正常运行;</p>
|
||||
<p>4. 使用自动化工具或脚本进行数据采集、批量操作等;</p>
|
||||
<p>5. 其他违反法律法规或本协议的行为。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>五、知识产权</h2>
|
||||
<p>1. 本应用的所有内容,包括但不限于文字、图片、音频、视频、软件、程序、版面设计等,均受知识产权法保护。</p>
|
||||
<p>2. 未经我们书面许可,用户不得复制、传播、展示、镜像、上传、下载本应用的任何内容。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>六、隐私保护</h2>
|
||||
<p>我们重视用户的隐私保护。关于我们如何收集、使用、存储和保护您的个人信息,请详见《隐私政策》。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>七、免责声明</h2>
|
||||
<p>1. 用户明确同意使用本应用的风险由用户个人承担。</p>
|
||||
<p>2. 我们不对因不可抗力或非我们原因造成的服务中断或终止承担责任。</p>
|
||||
<p>3. 我们不对用户在使用本应用过程中产生的任何直接、间接、偶然、特殊及后续的损害承担责任。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>八、协议修改</h2>
|
||||
<p>我们有权随时修改本协议的任何条款。一旦本协议的内容发生变动,我们将会通过适当方式向用户提示修改内容。如果用户不同意我们对本协议相关条款所做的修改,用户有权停止使用本应用。如果用户继续使用本应用,则视为用户接受我们对本协议相关条款所做的修改。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>九、法律适用与争议解决</h2>
|
||||
<p>1. 本协议的订立、执行和解释及争议的解决均应适用中华人民共和国法律。</p>
|
||||
<p>2. 如双方就本协议内容或其执行发生任何争议,双方应尽量友好协商解决;协商不成时,任何一方均可向我们所在地的人民法院提起诉讼。</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>十、其他</h2>
|
||||
<p>1. 本协议构成双方对本协议之约定事项及其他有关事宜的完整协议,除本协议规定的之外,未赋予本协议各方其他权利。</p>
|
||||
<p>2. 如本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力,本协议的其余条款仍应有效并且有约束力。</p>
|
||||
</section>
|
||||
|
||||
<div class="update-time">
|
||||
<p>最后更新时间:2024年1月1日</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</BasePage>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.agreement-page {
|
||||
padding: 2rem;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
font-size: 2rem;
|
||||
font-weight: 600;
|
||||
margin: 2rem 0;
|
||||
text-align: center;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.content {
|
||||
line-height: 1.8;
|
||||
color: var(--color-text);
|
||||
|
||||
section {
|
||||
margin-bottom: 2rem;
|
||||
|
||||
h2 {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 600;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 0.8rem;
|
||||
text-align: justify;
|
||||
color: var(--color-text-secondary, #666);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.update-time {
|
||||
margin-top: 3rem;
|
||||
padding-top: 2rem;
|
||||
border-top: 1px solid var(--color-border, #eee);
|
||||
text-align: center;
|
||||
|
||||
p {
|
||||
color: var(--color-text-secondary, #999);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,8 @@ import BookList from "@/pages/article/BookList.vue";
|
||||
import Setting from "@/pages/setting/Setting.vue";
|
||||
import Login from "@/pages/user/login.vue";
|
||||
import User from "@/pages/user/index.vue";
|
||||
import WechatCallback from "@/pages/user/wechat-callback.vue";
|
||||
import UserAgreement from "@/pages/user/UserAgreement.vue";
|
||||
import PrivacyPolicy from "@/pages/user/PrivacyPolicy.vue";
|
||||
import { useAuthStore } from "@/stores/auth.ts";
|
||||
|
||||
export const routes: RouteRecordRaw[] = [
|
||||
@@ -37,6 +38,8 @@ export const routes: RouteRecordRaw[] = [
|
||||
{path: 'setting', component: Setting},
|
||||
{path: 'login', component: Login},
|
||||
{path: 'user', component: User},
|
||||
{path: 'user-agreement', component: UserAgreement},
|
||||
{path: 'privacy-policy', component: PrivacyPolicy},
|
||||
]
|
||||
},
|
||||
{path: '/batch-edit-article', component: () => import("@/pages/article/BatchEditArticlePage.vue")},
|
||||
@@ -63,7 +66,7 @@ router.beforeEach(async (to: any, from: any) => {
|
||||
const authStore = useAuthStore()
|
||||
|
||||
// 公共路由,不需要登录验证
|
||||
const publicRoutes = ['/login', '/wechat/callback']
|
||||
const publicRoutes = ['/login', '/wechat/callback', '/user-agreement', '/privacy-policy']
|
||||
|
||||
// 如果目标路由是公共路由,直接放行
|
||||
if (publicRoutes.includes(to.path)) {
|
||||
|
||||
Reference in New Issue
Block a user