import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import styles from './Settings.module.css'; interface Settings { messageRouterUrl: string; accountServiceUrl: string; autoBackup: boolean; backupPath: string; } export default function Settings() { const navigate = useNavigate(); const [settings, setSettings] = useState({ messageRouterUrl: 'mpc-grpc.szaiai.com:443', // 生产环境默认地址 accountServiceUrl: 'https://rwaapi.szaiai.com', // Account 服务默认地址 autoBackup: false, backupPath: '', }); const [kavaNetwork, setKavaNetwork] = useState<'mainnet' | 'testnet'>('mainnet'); const [isLoading, setIsLoading] = useState(true); const [isSaving, setIsSaving] = useState(false); const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null); useEffect(() => { loadSettings(); }, []); const loadSettings = async () => { try { const result = await window.electronAPI.storage.getSettings(); const accountUrl = await window.electronAPI.account.getUrl(); const networkResult = await window.electronAPI.kava.getNetwork(); if (result) { setSettings({ ...result, accountServiceUrl: accountUrl || 'https://rwaapi.szaiai.com', }); } setKavaNetwork(networkResult.network); } catch (err) { console.error('Failed to load settings:', err); } finally { setIsLoading(false); } }; const handleSave = async () => { setIsSaving(true); setMessage(null); try { await window.electronAPI.storage.saveSettings(settings); await window.electronAPI.account.updateUrl(settings.accountServiceUrl); setMessage({ type: 'success', text: '设置已保存' }); } catch (err) { setMessage({ type: 'error', text: '保存设置失败' }); } finally { setIsSaving(false); } }; const handleTestConnection = async () => { setMessage(null); try { const result = await window.electronAPI.grpc.testConnection(settings.messageRouterUrl); if (result.success) { setMessage({ type: 'success', text: 'Message Router 连接成功' }); } else { setMessage({ type: 'error', text: result.error || 'Message Router 连接失败' }); } } catch (err) { setMessage({ type: 'error', text: 'Message Router 连接测试失败' }); } }; const handleTestAccountConnection = async () => { setMessage(null); try { // 先更新 URL await window.electronAPI.account.updateUrl(settings.accountServiceUrl); const result = await window.electronAPI.account.testConnection(); if (result.success) { setMessage({ type: 'success', text: 'Account 服务连接成功' }); } else { setMessage({ type: 'error', text: result.error || 'Account 服务连接失败' }); } } catch (err) { setMessage({ type: 'error', text: 'Account 服务连接测试失败' }); } }; const handleSelectBackupPath = async () => { try { const path = await window.electronAPI.dialog.selectDirectory(); if (path) { setSettings(prev => ({ ...prev, backupPath: path })); } } catch (err) { console.error('Failed to select directory:', err); } }; if (isLoading) { return (

加载设置...

); } return (

设置

{/* 连接设置 */}

连接设置

setSettings(prev => ({ ...prev, messageRouterUrl: e.target.value }))} placeholder="mpc-grpc.szaiai.com:443" className={styles.input} />

输入 Message Router 服务的 gRPC 地址 (生产环境: mpc-grpc.szaiai.com:443)

setSettings(prev => ({ ...prev, accountServiceUrl: e.target.value }))} placeholder="https://rwaapi.szaiai.com" className={styles.input} />

输入 Account 服务的 HTTP 地址 (生产环境: https://rwaapi.szaiai.com)

{/* 区块链网络设置 */}

区块链网络

{kavaNetwork === 'testnet' ? '当前使用测试网 (kava_2221-16000),适合开发测试' : '当前使用主网 (kava_2222-10),请谨慎操作'}

{/* 备份设置 */}

备份设置

setSettings(prev => ({ ...prev, autoBackup: e.target.checked }))} className={styles.checkbox} />

创建新的密钥份额后自动备份到指定目录

{settings.autoBackup && (
setSettings(prev => ({ ...prev, backupPath: e.target.value }))} placeholder="选择备份目录" className={styles.input} readOnly />
)}
{/* 数据管理 */}

数据管理

将所有密钥份额导出为加密文件

从加密备份文件导入密钥份额

删除所有本地存储的密钥份额。此操作不可恢复!

{/* 关于 */}

关于

应用名称 Service Party
版本 1.0.0
项目 RWADurian MPC System
{message && (
{message.text}
)}
); }