()
| 622 | } |
| 623 | |
| 624 | function StepsBlock() { |
| 625 | const dark = useTheme().palette.mode === 'dark'; |
| 626 | const steps = [ |
| 627 | {n: 1, icon: <TravelExploreOutlined/>, title: '浏览与检索', desc: '在项目信息表和数据汇总里查看项目与历年真实案例,用筛选快速锁定目标。'}, |
| 628 | {n: 2, icon: <EditNoteOutlined/>, title: '建立你的档案', desc: '注册后在个人主页添加申请人与申请记录,数据会自动汇入数据汇总。'}, |
| 629 | {n: 3, icon: <AutoGraphOutlined/>, title: '分享与互助', desc: '撰写经验帖、补充项目信息,把经验传递给学弟学妹,让社区一起成长。'}, |
| 630 | ]; |
| 631 | return ( |
| 632 | <Box sx={{width: '100%', maxWidth: 980}}> |
| 633 | <SectionHeading title='三步开始使用' subtitle='从浏览到贡献,几分钟就能上手'/> |
| 634 | <Box sx={{display: 'grid', gridTemplateColumns: {xs: '1fr', md: 'repeat(3, 1fr)'}, gap: {xs: 2, md: 2.5}}}> |
| 635 | {steps.map((s) => ( |
| 636 | <Box key={s.n} className='GlassCard' |
| 637 | sx={glassSx(dark, {p: {xs: '1.5rem', md: '1.75rem'}, display: 'flex', flexDirection: 'column', gap: 1})}> |
| 638 | <Box sx={{display: 'flex', alignItems: 'center', gap: 1.5, mb: 0.5}}> |
| 639 | <Box sx={{ |
| 640 | width: 36, height: 36, borderRadius: '50%', flexShrink: 0, |
| 641 | display: 'flex', alignItems: 'center', justifyContent: 'center', |
| 642 | background: brandGradient(dark), color: '#fff', fontWeight: 700, |
| 643 | boxShadow: dark ? '0 6px 16px rgba(107,166,232,0.32)' : '0 6px 16px rgba(28,91,170,0.26)', |
| 644 | }}>{s.n}</Box> |
| 645 | <Box sx={{color: 'primary.main', display: 'flex'}}>{s.icon}</Box> |
| 646 | </Box> |
| 647 | <Typography sx={{fontWeight: 700}}>{s.title}</Typography> |
| 648 | <Typography variant='body2' sx={{color: 'text.secondary', lineHeight: 1.8}}>{s.desc}</Typography> |
| 649 | </Box> |
| 650 | ))} |
| 651 | </Box> |
| 652 | </Box> |
| 653 | ); |
| 654 | } |
| 655 | |
| 656 | function StatNumber({value}) { |
| 657 | const [n, setN] = useState(0); |
nothing calls this directly
no test coverage detected