"use client" import { SiteHeader } from "@/components/site-header" import { useFamily } from "@/context/family-context" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Download, Upload, AlertTriangle, RefreshCw, FileText, Bell, History, Database } from "lucide-react" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" import { useRef, useState } from "react" import { exportToGedcom, importFromGedcom } from "@/lib/gedcom" import { NotificationSettings } from "@/components/settings/notification-settings" import { ActivityLogViewer } from "@/components/settings/activity-log-viewer" import { upgradeDatabase } from "@/lib/db-upgrade" import { ErrorBoundary } from "@/components/error-boundary" export default function SettingsPage() { const { treeData, loadData, resetData } = useFamily() const [importStatus, setImportStatus] = useState("") const [gedcomStatus, setGedcomStatus] = useState("") const fileInputRef = useRef(null) const gedcomInputRef = useRef(null) return (

系统设置 (Settings)

{/* 通知设置和数据备份 - 两列布局 */}
数据备份 (Backup) 将家族数据导出为 JSON 文件进行本地保存。
{/* 数据恢复和 GEDCOM - 两列布局 */}
数据恢复 (Restore) 从 JSON 备份文件恢复数据。注意:这将覆盖当前的所有数据。 警告 导入操作不可撤销。建议在导入前先导出当前数据备份。
{ const file = e.target.files?.[0] if (!file) return const reader = new FileReader() reader.onload = async (event) => { try { const jsonStr = event.target?.result as string const data = JSON.parse(jsonStr) await loadData(data) setImportStatus("导入成功!") if (fileInputRef.current) fileInputRef.current.value = "" } catch (err) { console.error(err) setImportStatus("错误:无法解析 JSON 文件") } } reader.readAsText(file) }} /> {importStatus}
GEDCOM 格式 导入/导出标准 GEDCOM 格式,兼容其他家谱软件(如 Ancestry、MyHeritage)。
{ const file = e.target.files?.[0] if (!file) return const reader = new FileReader() reader.onload = async (event) => { try { const gedcomText = event.target?.result as string const importedData = importFromGedcom(gedcomText) await loadData(importedData) setGedcomStatus("GEDCOM 导入成功!") if (gedcomInputRef.current) gedcomInputRef.current.value = "" } catch (err) { console.error(err) setGedcomStatus("错误:无法解析 GEDCOM 文件") } } reader.readAsText(file) }} /> {gedcomStatus && {gedcomStatus}}
{/* 数据库和系统管理 - 两列布局 */}
数据库维护 升级数据库以支持新功能(如操作日志) 如果操作日志功能不工作,请点击下方按钮升级数据库。升级会保留所有现有数据。 危险区域 (Danger Zone) 这些操作不可逆,请谨慎使用。
{/* 操作日志 - 全宽 */}
) }