import { Ionicons } from '@expo/vector-icons'; import { LinearGradient } from 'expo-linear-gradient'; import { useRouter } from 'expo-router'; import { useRef, useState } from 'react'; import { Pressable, ScrollView, StyleSheet, Text, useWindowDimensions, View, } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { colors, headerGradientShort } from '../src/theme'; import { useAuth } from '../src/context/AuthContext'; interface GuideSlide { icon: string; title: string; desc: string; } /** 引导页内容:聚焦职来四大差异化能力 */ const SLIDES: GuideSlide[] = [ { icon: 'compass-outline', title: '双向透明求职生态', desc: '看真实公司评价与行业声誉,让信息差不再成为求职的障碍。', }, { icon: 'options-outline', title: '自定义评价维度', desc: '按你的关注点设置权重,实时算出综合得分,找到最匹配的公司。', }, { icon: 'game-controller-outline', title: '通关小游戏', desc: '7 关闯关引导你走完「认识自己 → 签约」的完整求职链路。', }, { icon: 'shield-checkmark-outline', title: '阿布阿诺 AI 法律服务', desc: '免费咨询与模板,付费律师与合同审核,求职权益有保障。', }, ]; export default function GuideScreen() { const router = useRouter(); const { completeOnboarding } = useAuth(); const { width } = useWindowDimensions(); const [page, setPage] = useState(0); const scrollRef = useRef(null); const isLast = page === SLIDES.length - 1; const finish = () => { completeOnboarding(); router.replace('/login'); }; const goNext = () => { if (isLast) { finish(); return; } const next = page + 1; setPage(next); scrollRef.current?.scrollTo({ x: next * width, animated: true }); }; return ( 跳过 { const index = Math.round(e.nativeEvent.contentOffset.x / width); setPage(index); }} style={styles.pager} > {SLIDES.map((slide) => ( {slide.title} {slide.desc} ))} {SLIDES.map((slide, i) => ( ))} {isLast ? '立即体验' : '下一步'} {page + 1} / {SLIDES.length} ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.white }, topBar: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', paddingHorizontal: 16, paddingVertical: 10, }, topSpacer: { width: 40 }, skipText: { fontSize: 14, color: colors.textSecondary, paddingHorizontal: 4 }, pager: { flex: 1 }, slide: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 36, }, illus: { width: 132, height: 132, borderRadius: 36, alignItems: 'center', justifyContent: 'center', marginBottom: 36, }, slideTitle: { fontSize: 22, fontWeight: '800', color: colors.textPrimary, textAlign: 'center', marginBottom: 14, }, slideDesc: { fontSize: 15, color: colors.textSecondary, textAlign: 'center', lineHeight: 24, }, bottom: { alignItems: 'center', paddingHorizontal: 36, paddingBottom: 28, }, dots: { flexDirection: 'row', gap: 8, marginBottom: 24 }, dot: { width: 8, height: 8, borderRadius: 4, backgroundColor: colors.border, }, dotActive: { width: 22, backgroundColor: colors.primary }, nextBtn: { width: '100%', height: 50, borderRadius: 25, overflow: 'hidden', }, nextGradient: { flex: 1, alignItems: 'center', justifyContent: 'center', }, nextText: { fontSize: 16, fontWeight: '700', color: colors.textInverse }, pageHint: { marginTop: 16, fontSize: 13, color: colors.textHint, }, });