diff --git a/apps/miniprogram/src/app.config.ts b/apps/miniprogram/src/app.config.ts index fc2465f..a9fa819 100644 --- a/apps/miniprogram/src/app.config.ts +++ b/apps/miniprogram/src/app.config.ts @@ -19,6 +19,8 @@ export default defineAppConfig({ 'pages/profile/followups/index', 'pages/profile/medication/index', 'pages/profile/settings/index', + 'pages/legal/user-agreement', + 'pages/legal/privacy-policy', ], tabBar: { color: '#94A3B8', diff --git a/apps/miniprogram/src/pages/legal/index.scss b/apps/miniprogram/src/pages/legal/index.scss new file mode 100644 index 0000000..fc77055 --- /dev/null +++ b/apps/miniprogram/src/pages/legal/index.scss @@ -0,0 +1,46 @@ +@import '../../styles/variables.scss'; + +.legal-page { + min-height: 100vh; + background: $card; + padding: 32px 24px; + padding-bottom: 60px; +} + +.legal-content { + font-size: 28px; + color: $tx; + line-height: 1.8; + + h3 { + font-size: 34px; + font-weight: bold; + color: $tx; + margin-bottom: 12px; + } + + h4 { + font-size: 30px; + font-weight: bold; + color: $tx; + margin-top: 24px; + margin-bottom: 8px; + } + + p { + font-size: 26px; + color: $tx2; + margin-bottom: 8px; + line-height: 1.8; + } +} + +.legal-footer { + margin-top: 40px; + text-align: center; +} + +.legal-footer-text { + font-size: 24px; + color: $tx3; +} diff --git a/apps/miniprogram/src/pages/legal/privacy-policy.tsx b/apps/miniprogram/src/pages/legal/privacy-policy.tsx new file mode 100644 index 0000000..a787ed6 --- /dev/null +++ b/apps/miniprogram/src/pages/legal/privacy-policy.tsx @@ -0,0 +1,58 @@ +import { View, Text, RichText } from '@tarojs/components'; +import './index.scss'; + +const PRIVACY_CONTENT = ` +

隐私政策

+

更新日期:2026年4月24日

+

生效日期:2026年4月24日

+ +

一、我们收集的信息

+

为向您提供健康管理服务,我们会收集以下信息:

+

1. 注册信息:微信授权获取的 openid、手机号码

+

2. 健康数据:您主动录入的血压、血糖、心率、体重等健康指标

+

3. 就诊信息:预约记录、就诊人信息、体检报告

+

4. 设备信息:设备型号、操作系统版本

+ +

二、信息使用目的

+

我们收集的信息将用于:

+

1. 提供健康数据记录与趋势分析服务

+

2. 在线预约挂号与就诊提醒

+

3. 体检报告查看与解读

+

4. 随访管理与用药提醒

+

5. 服务改进与安全保障

+ +

三、信息存储与保护

+

1. 您的信息存储在中华人民共和国境内的安全服务器中

+

2. 我们采用加密传输(HTTPS)和加密存储等安全措施

+

3. 严格的内部数据访问权限控制

+

4. Token 等敏感凭证采用混淆加密存储

+ +

四、信息共享

+

未经您的同意,我们不会与任何第三方共享您的个人信息,以下情况除外:

+

1. 获得您的明确同意后

+

2. 基于法律法规的要求

+

3. 与授权医疗机构共享(仅限您预约的医生)

+ +

五、您的权利

+

您有权:

+

1. 查看和修改您的个人信息

+

2. 删除您的账号和相关数据

+

3. 撤回授权同意

+ +

六、未成年人保护

+

我们高度重视对未成年人个人信息的保护。若您是未满14周岁的未成年人,请在监护人指导下使用本服务。

+ +

七、联系我们

+

如对本隐私政策有任何疑问,请通过平台内的意见反馈功能联系我们。

+`; + +export default function PrivacyPolicy() { + return ( + + + + 如有疑问,请联系客服 + + + ); +} diff --git a/apps/miniprogram/src/pages/legal/user-agreement.tsx b/apps/miniprogram/src/pages/legal/user-agreement.tsx new file mode 100644 index 0000000..439289f --- /dev/null +++ b/apps/miniprogram/src/pages/legal/user-agreement.tsx @@ -0,0 +1,44 @@ +import { View, Text, RichText } from '@tarojs/components'; +import './index.scss'; + +const AGREEMENT_CONTENT = ` +

用户服务协议

+

更新日期:2026年4月24日

+

生效日期:2026年4月24日

+ +

一、服务条款的确认和接纳

+

本平台(以下简称"本平台")由健康管理平台运营。用户在注册及使用本平台服务前,请务必仔细阅读并充分理解本协议。

+ +

二、服务内容

+

本平台为用户提供以下健康管理服务:

+

1. 健康数据记录与查看(血压、血糖、心率等)

+

2. 在线预约挂号

+

3. 体检报告查看

+

4. 随访管理

+

5. 健康资讯阅读

+

6. 用药提醒

+ +

三、用户账号

+

用户通过微信授权方式注册账号。用户应妥善保管账号信息,因用户保管不善造成的损失由用户自行承担。

+ +

四、隐私保护

+

我们重视用户隐私保护,具体隐私政策请参阅《隐私政策》。我们将严格按照隐私政策收集、使用和保护您的个人信息。

+ +

五、免责声明

+

1. 本平台提供的健康数据仅供参考,不构成医疗诊断建议。如有健康问题,请及时就医。

+

2. 因不可抗力导致的服务中断,本平台不承担责任。

+ +

六、协议修改

+

本平台有权根据需要修改本协议条款,修改后的协议一经公布即替代原协议。

+`; + +export default function UserAgreement() { + return ( + + + + 如有疑问,请联系客服 + + + ); +} diff --git a/apps/miniprogram/src/pages/login/index.scss b/apps/miniprogram/src/pages/login/index.scss index 4e39f85..54b01b6 100644 --- a/apps/miniprogram/src/pages/login/index.scss +++ b/apps/miniprogram/src/pages/login/index.scss @@ -63,3 +63,44 @@ .login-body { width: 100%; } + +.agreement-row { + display: flex; + align-items: flex-start; + margin-top: 32px; + gap: 12px; +} + +.checkbox { + width: 32px; + height: 32px; + border: 2px solid rgba(255, 255, 255, 0.6); + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + margin-top: 2px; +} + +.checkbox.checked { + background: white; + border-color: white; +} + +.check-mark { + font-size: 22px; + color: $pri; + font-weight: bold; +} + +.agreement-text { + font-size: 24px; + color: rgba(255, 255, 255, 0.8); + line-height: 1.6; +} + +.agreement-link { + color: white; + font-weight: bold; +} diff --git a/apps/miniprogram/src/pages/login/index.tsx b/apps/miniprogram/src/pages/login/index.tsx index 3f0b667..d5d3819 100644 --- a/apps/miniprogram/src/pages/login/index.tsx +++ b/apps/miniprogram/src/pages/login/index.tsx @@ -6,9 +6,14 @@ import './index.scss'; export default function Login() { const [needBind, setNeedBind] = useState(false); + const [agreed, setAgreed] = useState(false); const { login, bindPhone, loading } = useAuthStore(); const handleWechatLogin = async () => { + if (!agreed) { + Taro.showToast({ title: '请先阅读并同意用户协议', icon: 'none' }); + return; + } try { const { code } = await Taro.login(); const success = await login(code); @@ -24,6 +29,10 @@ export default function Login() { }; const handleGetPhone = async (e: { detail: { errMsg: string; encryptedData: string; iv: string } }) => { + if (!agreed) { + Taro.showToast({ title: '请先阅读并同意用户协议', icon: 'none' }); + return; + } if (e.detail.errMsg !== 'getPhoneNumber:ok') { Taro.showToast({ title: '需要授权手机号', icon: 'none' }); return; @@ -63,6 +72,18 @@ export default function Login() { )} + + + setAgreed(!agreed)}> + {agreed && } + + + 我已阅读并同意 + Taro.navigateTo({ url: '/pages/legal/user-agreement' })}>《用户服务协议》 + 和 + Taro.navigateTo({ url: '/pages/legal/privacy-policy' })}>《隐私政策》 + + ); }