ai-clone/frontend-ai/pages/settings/privacy-policy.vue

342 lines
11 KiB
Vue
Raw Normal View History

2026-03-05 14:29:21 +08:00
<template>
<view class="privacy-container">
<view class="privacy-content">
<!-- 标题 -->
<view class="page-header">
<text class="header-title">隐私政策</text>
<text class="header-subtitle" v-if="updateDate">更新日期{{ updateDate }}</text>
</view>
<!-- 内容区域 -->
<view class="content-section">
<scroll-view scroll-y class="scroll-content">
<!-- 引言 -->
<view class="section-block">
<view class="block-title">引言</view>
<view class="block-content">
欢迎使用时光意境·AI声音克隆应用我们深知个人信息对您的重要性并会尽全力保护您的个人信息安全可靠我们致力于维持您对我们的信任恪守以下原则保护您的个人信息权责一致原则目的明确原则选择同意原则最少够用原则确保安全原则主体参与原则公开透明原则等
</view>
</view>
<!-- 信息收集 -->
<view class="section-block">
<view class="block-title">我们如何收集和使用您的个人信息</view>
<view class="block-subtitle">1.1 账号注册</view>
<view class="block-content">
当您注册账号时我们会收集您的手机号码密码等信息用于创建您的账号并保障账号安全
</view>
<view class="block-subtitle">1.2 服务使用</view>
<view class="block-content">
<text class="highlight">声音克隆</text>我们会收集您上传的音频文件用于创建专属音色<br/>
<text class="highlight">照片复活</text>我们会收集您上传的照片和音频用于生成复活视频<br/>
<text class="highlight">视频通话</text>我们会收集您的语音对话内容用于实现AI对话功能
</view>
<view class="block-subtitle">1.3 设备信息</view>
<view class="block-content">
为了保障服务的稳定性和安全性我们可能会收集您的设备型号操作系统版本设备标识符等信息
</view>
</view>
<!-- 信息使用 -->
<view class="section-block">
<view class="block-title">我们如何使用Cookie和同类技术</view>
<view class="block-content">
我们使用Cookie和类似技术来识别您的身份记录您的偏好设置提供更好的服务体验您可以通过浏览器设置管理Cookie
</view>
</view>
<!-- 信息共享 -->
<view class="section-block">
<view class="block-title">我们如何共享转让公开披露您的个人信息</view>
<view class="block-subtitle">3.1 共享</view>
<view class="block-content">
我们不会与任何公司组织和个人分享您的个人信息但以下情况除外<br/>
事先获得您的明确同意<br/>
根据法律法规或政府主管部门的要求<br/>
与我们的关联公司共享但仅限于实现本政策目的所必需
</view>
<view class="block-subtitle">3.2 转让</view>
<view class="block-content">
我们不会将您的个人信息转让给任何公司组织和个人但以下情况除外<br/>
事先获得您的明确同意<br/>
在涉及合并收购或破产清算时如涉及到个人信息转让我们会要求新的持有您个人信息的公司组织继续受本政策的约束
</view>
<view class="block-subtitle">3.3 公开披露</view>
<view class="block-content">
我们仅会在以下情况下公开披露您的个人信息<br/>
获得您的明确同意<br/>
基于法律的披露在法律法律程序诉讼或政府主管部门强制性要求的情况下
</view>
</view>
<!-- 信息存储 -->
<view class="section-block">
<view class="block-title">我们如何保护和保存您的个人信息</view>
<view class="block-subtitle">4.1 安全措施</view>
<view class="block-content">
我们采用业界领先的技术和管理措施保护您的个人信息<br/>
使用加密技术确保数据传输安全<br/>
采用访问控制机制确保只有授权人员才可访问个人信息<br/>
定期进行安全审计和风险评估
</view>
<view class="block-subtitle">4.2 存储期限</view>
<view class="block-content">
我们仅在为实现目的所必需的期间内保留您的个人信息当您注销账号或服务终止后我们将删除或匿名化处理您的个人信息
</view>
</view>
<!-- 用户权利 -->
<view class="section-block">
<view class="block-title">您的权利</view>
<view class="block-content">
按照中国相关的法律法规您对自己的个人信息享有以下权利<br/>
<text class="highlight">访问权</text>您有权访问您的个人信息<br/>
<text class="highlight">更正权</text>您有权更正不准确或不完整的个人信息<br/>
<text class="highlight">删除权</text>您有权要求我们删除您的个人信息<br/>
<text class="highlight">撤回同意</text>您有权撤回您对个人信息处理的同意<br/>
<text class="highlight">注销账号</text>您有权注销您的账号
</view>
</view>
<!-- 未成年人保护 -->
<view class="section-block">
<view class="block-title">未成年人保护</view>
<view class="block-content">
我们非常重视对未成年人个人信息的保护如果您是未成年人建议您请您的父母或监护人仔细阅读本隐私政策并在征得您的父母或监护人同意的前提下使用我们的服务或向我们提供信息
</view>
</view>
<!-- 政策更新 -->
<view class="section-block">
<view class="block-title">本政策如何更新</view>
<view class="block-content">
我们可能适时修订本政策内容如该等变更会导致您在本政策项下权利的实质减损我们将在变更生效前通过在页面显著位置提示向您发送电子邮件等方式通知您
</view>
</view>
<!-- 联系我们 -->
<view class="section-block">
<view class="block-title">如何联系我们</view>
<view class="block-content">
如果您对本隐私政策有任何疑问意见或建议请通过以下方式与我们联系<br/><br/>
<text class="contact-info" v-if="serviceEmail">邮箱{{ serviceEmail }}</text><br v-if="serviceEmail"/>
<text class="contact-info" v-if="servicePhone">电话{{ servicePhone }}</text><br v-if="servicePhone"/>
</view>
</view>
</scroll-view>
</view>
<!-- 同意按钮 -->
<view class="button-section">
<button class="agree-btn" @click="handleAgree">我已阅读并同意</button>
</view>
</view>
</view>
</template>
<script>
import { API_BASE, API_ENDPOINTS } from '@/config/api.js';
export default {
data() {
return {
serviceEmail: '',
servicePhone: '',
updateDate: ''
};
},
onLoad() {
this.loadConfig();
},
methods: {
async loadConfig() {
try {
// 从本地存储读取缓存
const cachedConfig = uni.getStorageSync('appConfig');
if (cachedConfig) {
if (cachedConfig.common) {
this.serviceEmail = cachedConfig.common.serviceEmail || '';
this.servicePhone = cachedConfig.common.servicePhone || '';
}
if (cachedConfig.privacy) {
this.updateDate = cachedConfig.privacy.updateDate || '';
}
}
// 从后端获取最新配置(公开接口,不需要认证)
const res = await uni.request({
url: `${API_BASE}${API_ENDPOINTS.config.getAppConfig}`,
method: 'GET',
header: {
'Content-Type': 'application/json'
// 不添加认证头,因为这是公开接口
}
});
// 兼容不同平台的返回格式:可能是 [error, res] 或直接是 res
const response = Array.isArray(res) ? res[1] : res;
if (response && response.data && response.data.success && response.data.data) {
const config = response.data.data;
uni.setStorageSync('appConfig', config);
if (config.common) {
this.serviceEmail = config.common.serviceEmail || '';
this.servicePhone = config.common.servicePhone || '';
}
if (config.privacy) {
this.updateDate = config.privacy.updateDate || '';
}
}
} catch (error) {
console.error('加载配置失败:', error);
}
},
handleAgree() {
uni.showToast({
title: '感谢您的信任',
icon: 'success'
});
setTimeout(() => {
uni.navigateBack();
}, 1500);
}
}
};
</script>
<style lang="scss" scoped>
.privacy-container {
min-height: 100vh;
background: #FDF8F2;
}
.privacy-content {
display: flex;
flex-direction: column;
min-height: 100vh;
padding: 30upx 30upx 30upx 20upx;
/* 小程序平台需要额外的顶部间距(导航栏 + 状态栏) */
/* #ifdef MP-WEIXIN */
padding-top: calc(30upx + 88px);
/* #endif */
/* App 平台使用安全区域(状态栏高度) */
/* #ifdef APP-PLUS */
padding-top: calc(30upx + 44px + env(safe-area-inset-top));
/* #endif */
/* H5 和其他平台使用安全区域 */
/* #ifndef MP-WEIXIN || APP-PLUS */
padding-top: calc(30upx + constant(safe-area-inset-top));
padding-top: calc(30upx + env(safe-area-inset-top));
/* #endif */
}
/* 页面标题 */
.page-header {
text-align: center;
margin-bottom: 30upx;
.header-title {
display: block;
font-size: 44upx;
font-weight: 700;
color: #333;
margin-bottom: 15upx;
}
.header-subtitle {
display: block;
font-size: 24upx;
color: #999;
}
}
/* 内容区域 */
.content-section {
flex: 1;
background: white;
border-radius: 30upx;
overflow: hidden;
box-shadow: 0 8upx 40upx rgba(0, 0, 0, 0.08);
max-width: 95%;
margin-left: 20upx;
}
.scroll-content {
height: 100%;
padding: 40upx 25upx;
}
/* 内容块 */
.section-block {
margin-bottom: 40upx;
&:last-child {
margin-bottom: 0;
}
.block-title {
font-size: 30upx;
font-weight: 700;
color: #333;
margin-bottom: 20upx;
padding-left: 20upx;
border-left: 6upx solid #8B7355;
}
.block-subtitle {
font-size: 28upx;
font-weight: 600;
color: #555;
margin: 20upx 0 15upx;
}
.block-content {
font-size: 26upx;
color: #666;
line-height: 2;
text-align: justify;
.highlight {
color: #8B7355;
font-weight: 600;
}
.contact-info {
color: #8B7355;
font-weight: 600;
}
}
}
/* 按钮区域 */
.button-section {
padding: 30upx 0 0;
}
.agree-btn {
width: 100%;
padding: 32upx;
background: linear-gradient(135deg, #8B7355 0%, #6D8B8B 100%);
border-radius: 50upx;
color: white;
font-size: 32upx;
font-weight: 600;
box-shadow: 0 10upx 40upx rgba(139, 115, 85, 0.3);
border: none;
&:active {
opacity: 0.8;
transform: scale(0.98);
}
}
</style>