import React, { useState } from 'react'; import { invoke } from '@tauri-apps/api/core'; import { Database, RefreshCw, AlertTriangle, CheckCircle, XCircle } from 'lucide-react'; /** * 数据库调试面板组件 * 用于诊断和解决数据库连接问题 */ export const DatabaseDebugPanel: React.FC = () => { const [connectionStatus, setConnectionStatus] = useState(''); const [isChecking, setIsChecking] = useState(false); const [isReleasing, setIsReleasing] = useState(false); const [lastCheckTime, setLastCheckTime] = useState(''); // 检查数据库连接状态 const checkConnection = async () => { setIsChecking(true); try { const status = await invoke('check_database_connection'); setConnectionStatus(status); setLastCheckTime(new Date().toLocaleTimeString()); } catch (error) { setConnectionStatus(`检查失败: ${error}`); } finally { setIsChecking(false); } }; // 强制释放数据库连接 const forceReleaseConnection = async () => { setIsReleasing(true); try { const result = await invoke('force_release_database_connection'); setConnectionStatus(result); setLastCheckTime(new Date().toLocaleTimeString()); } catch (error) { setConnectionStatus(`释放失败: ${error}`); } finally { setIsReleasing(false); } }; // 获取状态图标 const getStatusIcon = () => { if (connectionStatus.includes('可用')) { return ; } else if (connectionStatus.includes('被占用')) { return ; } else if (connectionStatus.includes('损坏') || connectionStatus.includes('失败')) { return ; } return ; }; // 获取状态颜色 const getStatusColor = () => { if (connectionStatus.includes('可用')) { return 'text-green-700 bg-green-50 border-green-200'; } else if (connectionStatus.includes('被占用')) { return 'text-yellow-700 bg-yellow-50 border-yellow-200'; } else if (connectionStatus.includes('损坏') || connectionStatus.includes('失败')) { return 'text-red-700 bg-red-50 border-red-200'; } return 'text-gray-700 bg-gray-50 border-gray-200'; }; return (

数据库连接诊断

{/* 连接状态显示 */}
连接状态 {lastCheckTime && ( 最后检查: {lastCheckTime} )}
{connectionStatus ? (
{getStatusIcon()} {connectionStatus}
) : (
点击检查按钮获取连接状态
)}
{/* 操作按钮 */}
{/* 使用说明 */}

使用说明

  • 连接可用: 数据库连接正常,可以执行操作
  • 连接被占用: 其他操作正在使用连接,请稍等
  • 连接已损坏: 连接出现问题,需要强制释放
  • 强制释放: 紧急情况下使用,可能导致数据不一致
{/* 故障排除建议 */} {connectionStatus.includes('被占用') && (

故障排除建议

  • 1. 等待当前操作完成(通常几秒钟)
  • 2. 检查是否有长时间运行的导入或分析任务
  • 3. 如果问题持续,可以尝试强制释放连接
)} {connectionStatus.includes('损坏') && (

紧急处理

  • 1. 立即点击"强制释放连接"按钮
  • 2. 重新启动应用程序
  • 3. 如果问题持续,请联系技术支持
)}
); };