'use client'; import { Shield, Key, Smartphone, AlertTriangle, CheckCircle, Clock } from 'lucide-react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Progress } from '@/components/ui/progress'; import { Button } from '@/components/ui/button'; import type { SecuritySettings } from '../types'; interface SecurityOverviewProps { securitySettings: SecuritySettings | null; onTabChange: (tab: string) => void; } export function SecurityOverview({ securitySettings, onTabChange }: SecurityOverviewProps) { const securityScore = calculateSecurityScore(securitySettings); function calculateSecurityScore(settings: SecuritySettings | null): number { if (!settings) return 0; let score = 0; // 密码强度 (30%) if (settings.passwordStrength === 'strong') score += 30; else if (settings.passwordStrength === 'medium') score += 20; else score += 10; // 双因素认证 (25%) if (settings.twoFactorEnabled) score += 25; // 安全问题设置 (20%) if (settings.securityQuestions.length > 0) score += 20; // 登录提醒 (15%) if (settings.loginAlert) score += 15; // 信任设备管理 (10%) if (settings.trustedDevices.length <= 3) score += 10; return score; } const getSecurityLevel = (score: number) => { if (score >= 80) return { level: '高', color: 'text-green-600', bg: 'bg-green-50' }; if (score >= 60) return { level: '中', color: 'text-yellow-600', bg: 'bg-yellow-50' }; return { level: '低', color: 'text-red-600', bg: 'bg-red-50' }; }; const securityLevel = getSecurityLevel(securityScore); const securityItems = [ { title: '密码强度', icon: Key, status: securitySettings?.passwordStrength === 'strong' ? 'good' : securitySettings?.passwordStrength === 'medium' ? 'warning' : 'danger', description: securitySettings?.passwordStrength === 'strong' ? '强密码' : securitySettings?.passwordStrength === 'medium' ? '中等强度' : '弱密码', action: () => onTabChange('password') }, { title: '双因素认证', icon: Smartphone, status: securitySettings?.twoFactorEnabled ? 'good' : 'warning', description: securitySettings?.twoFactorEnabled ? '已启用' : '未启用', action: () => onTabChange('twoFactor') }, { title: '安全问题', icon: Shield, status: securitySettings?.securityQuestions.length > 0 ? 'good' : 'warning', description: securitySettings?.securityQuestions.length > 0 ? `已设置 ${securitySettings.securityQuestions.length} 个问题` : '未设置', action: () => onTabChange('questions') }, { title: '登录提醒', icon: Clock, status: securitySettings?.loginAlert ? 'good' : 'warning', description: securitySettings?.loginAlert ? '已启用' : '未启用', action: () => onTabChange('notifications') } ]; return (
基于密码强度、双因素认证、安全问题和通知设置综合评估
{item.description}
成功登录
{securitySettings?.lastLoginTime ? new Date(securitySettings.lastLoginTime).toLocaleString('zh-CN') : '未知时间' }
{securitySettings?.lastLoginIp}
当前设备