- 调整启动画面中的图片宽度,提升视觉效果 - 移除引导页面相关组件,简化应用结构 - 新增心情统计页面,支持用户查看和分析心情数据 - 优化心情卡片组件,增强用户交互体验 - 更新登录页面标题,提升品牌一致性 - 新增心情日历和编辑功能,支持用户记录和管理心情
193 lines
4.6 KiB
TypeScript
193 lines
4.6 KiB
TypeScript
import { PRIVACY_POLICY_URL, USER_AGREEMENT_URL } from '@/constants/Agree';
|
||
import React from 'react';
|
||
import {
|
||
Dimensions,
|
||
Linking,
|
||
Modal,
|
||
StyleSheet,
|
||
Text,
|
||
TouchableOpacity,
|
||
View
|
||
} from 'react-native';
|
||
|
||
const { width } = Dimensions.get('window');
|
||
|
||
interface PrivacyConsentModalProps {
|
||
visible: boolean;
|
||
onAgree: () => void;
|
||
onDisagree: () => void;
|
||
}
|
||
|
||
export default function PrivacyConsentModal({
|
||
visible,
|
||
onAgree,
|
||
onDisagree,
|
||
}: PrivacyConsentModalProps) {
|
||
const handleUserAgreementPress = () => {
|
||
Linking.openURL(USER_AGREEMENT_URL);
|
||
};
|
||
|
||
const handlePrivacyPolicyPress = () => {
|
||
Linking.openURL(PRIVACY_POLICY_URL);
|
||
};
|
||
|
||
return (
|
||
<Modal
|
||
visible={visible}
|
||
transparent
|
||
animationType="fade"
|
||
statusBarTranslucent
|
||
>
|
||
<View style={styles.overlay}>
|
||
<View style={styles.container}>
|
||
<Text style={styles.title}>欢迎来到Sealife</Text>
|
||
|
||
<View style={styles.contentContainer}>
|
||
<Text style={styles.description}>
|
||
点击"同意并继续"代表您已阅读并理解
|
||
</Text>
|
||
<View style={styles.linksContainer}>
|
||
<TouchableOpacity onPress={handleUserAgreementPress}>
|
||
<Text style={styles.link}>《用户协议》</Text>
|
||
</TouchableOpacity>
|
||
<Text style={styles.and}> 和 </Text>
|
||
<TouchableOpacity onPress={handlePrivacyPolicyPress}>
|
||
<Text style={styles.link}>《隐私政策》</Text>
|
||
</TouchableOpacity>
|
||
</View>
|
||
<Text style={styles.description}>
|
||
我们深知保护用户隐私信息的重要性,请认真进行阅读。
|
||
</Text>
|
||
<View style={styles.viewFullContainer}>
|
||
<Text style={styles.viewFull}>查看完整版 </Text>
|
||
<TouchableOpacity onPress={handleUserAgreementPress}>
|
||
<Text style={styles.link}>《用户协议》</Text>
|
||
</TouchableOpacity>
|
||
<Text style={styles.viewFull}> 和 </Text>
|
||
<TouchableOpacity onPress={handlePrivacyPolicyPress}>
|
||
<Text style={styles.link}>《隐私政策》</Text>
|
||
</TouchableOpacity>
|
||
</View>
|
||
</View>
|
||
|
||
<TouchableOpacity style={styles.agreeButton} onPress={onAgree}>
|
||
<Text style={styles.agreeButtonText}>同意并继续</Text>
|
||
</TouchableOpacity>
|
||
|
||
<TouchableOpacity style={styles.disagreeButton} onPress={onDisagree}>
|
||
<Text style={styles.disagreeButtonText}>不同意并退出</Text>
|
||
</TouchableOpacity>
|
||
</View>
|
||
</View>
|
||
</Modal>
|
||
);
|
||
}
|
||
|
||
const styles = StyleSheet.create({
|
||
overlay: {
|
||
flex: 1,
|
||
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
||
justifyContent: 'center',
|
||
alignItems: 'center',
|
||
paddingHorizontal: 20,
|
||
},
|
||
container: {
|
||
backgroundColor: 'white',
|
||
borderRadius: 20,
|
||
padding: 24,
|
||
width: width * 0.85,
|
||
maxWidth: 400,
|
||
alignItems: 'center',
|
||
},
|
||
iconContainer: {
|
||
marginBottom: 20,
|
||
alignItems: 'center',
|
||
},
|
||
characterContainer: {
|
||
position: 'relative',
|
||
alignItems: 'center',
|
||
},
|
||
iconText: {
|
||
fontSize: 48,
|
||
marginBottom: 8,
|
||
},
|
||
balloons: {
|
||
position: 'absolute',
|
||
top: -5,
|
||
right: -25,
|
||
flexDirection: 'row',
|
||
gap: 4,
|
||
},
|
||
balloon: {
|
||
width: 12,
|
||
height: 16,
|
||
borderRadius: 6,
|
||
},
|
||
title: {
|
||
fontSize: 20,
|
||
fontWeight: '600',
|
||
color: '#1F2937',
|
||
marginBottom: 20,
|
||
textAlign: 'center',
|
||
},
|
||
contentContainer: {
|
||
marginBottom: 24,
|
||
},
|
||
description: {
|
||
fontSize: 14,
|
||
color: '#6B7280',
|
||
lineHeight: 20,
|
||
textAlign: 'center',
|
||
},
|
||
linksContainer: {
|
||
flexDirection: 'row',
|
||
justifyContent: 'center',
|
||
alignItems: 'center',
|
||
flexWrap: 'wrap',
|
||
},
|
||
link: {
|
||
fontSize: 14,
|
||
color: '#8B5FE6',
|
||
textDecorationLine: 'underline',
|
||
},
|
||
and: {
|
||
fontSize: 14,
|
||
color: '#6B7280',
|
||
},
|
||
viewFullContainer: {
|
||
flexDirection: 'row',
|
||
justifyContent: 'center',
|
||
alignItems: 'center',
|
||
flexWrap: 'wrap',
|
||
marginTop: 4,
|
||
},
|
||
viewFull: {
|
||
fontSize: 14,
|
||
color: '#6B7280',
|
||
},
|
||
agreeButton: {
|
||
backgroundColor: '#8B5FE6',
|
||
borderRadius: 25,
|
||
paddingVertical: 14,
|
||
paddingHorizontal: 40,
|
||
width: '100%',
|
||
marginBottom: 12,
|
||
},
|
||
agreeButtonText: {
|
||
color: 'white',
|
||
fontSize: 16,
|
||
fontWeight: '600',
|
||
textAlign: 'center',
|
||
},
|
||
disagreeButton: {
|
||
paddingVertical: 14,
|
||
paddingHorizontal: 40,
|
||
},
|
||
disagreeButtonText: {
|
||
color: '#9CA3AF',
|
||
fontSize: 16,
|
||
fontWeight: '500',
|
||
textAlign: 'center',
|
||
},
|
||
});
|