import React, { useState, useEffect } from 'react'; import { adminAPI } from '@/api'; const SVGIcon: React.FC<{ children: React.ReactNode; size?: number }> = ({ children, size = 16 }) => ( {children} ); const SiteSettings: React.FC = () => { const [brand, setBrand] = useState>({ logo: '', siteName: '', announcement: '', icpNumber: '', contactPhone: '', }); const [mail, setMail] = useState({ smtp_host: '', smtp_port: 587, username: '', password: '', from_address: '', use_tls: true, }); const [savedMsg, setSavedMsg] = useState(null); const [loading, setLoading] = useState(true); const [testResult, setTestResult] = useState(null); const [showEmailTest, setShowEmailTest] = useState(false); const [emailTestTo, setEmailTestTo] = useState(''); const [emailTestSubject, setEmailTestSubject] = useState(''); const [emailTestBody, setEmailTestBody] = useState(''); const [emailGenerating, setEmailGenerating] = useState(false); // AI生成测试邮件内容 const handleAIGenerateContent = async () => { setEmailGenerating(true); try { const res = await adminAPI.generateEmailContent('测试邮件'); const data = (res as any).data || res; setEmailTestSubject(data.subject || ''); setEmailTestBody(data.body || ''); } catch (e) { // 降级:使用客户端预设内容 const subjects = [ '【测试】AIFlow邮件服务配置验证', 'AIFlow平台 - 邮件投递测试', '测试邮件:您的SMTP服务已就绪', ]; const bodies = [ '您好!\n\n这是一封来自 AIFlow 智能自动化平台的测试邮件。\n\n如果您收到此邮件,说明SMTP邮件服务已配置成功。\n\n此致\nAIFlow 平台团队', 'Hi,\n\nThis is a test email from AIFlow Platform.\n\nIf you received this, the SMTP service works fine.\n\nBest regards,\nAIFlow Team', '【系统通知】\n邮件服务连通性测试通过。\n\n发件服务器配置正确。\n\n—— AIFlow', ]; setEmailTestSubject(subjects[Math.floor(Math.random() * subjects.length)]); setEmailTestBody(bodies[Math.floor(Math.random() * bodies.length)]); } finally { setEmailGenerating(false); } }; // 加载真实配置 useEffect(() => { async function loadConfig() { try { const [siteRes, emailRes, smsRes] = await Promise.all([ adminAPI.getSiteSettings(), adminAPI.getEmailConfig(), adminAPI.getSmsConfig(), ]); if (siteRes?.data) { setBrand({ logo: siteRes.data.logo || '', siteName: siteRes.data.site_name || siteRes.data.siteName || '', announcement: siteRes.data.announcement || '', icpNumber: siteRes.data.icp_number || siteRes.data.icpNumber || '', contactPhone: siteRes.data.contact_phone || siteRes.data.contactPhone || '', }); } if (emailRes?.data) { setMail({ smtp_host: emailRes.data.smtp_host || '', smtp_port: emailRes.data.smtp_port || 587, username: emailRes.data.username || '', password: emailRes.data.password || '', from_address: emailRes.data.from_address || '', use_tls: emailRes.data.use_tls !== false, }); } if (smsRes?.data) { setSms({ provider: smsRes.data.provider || '', api_key: smsRes.data.api_key || '', api_secret: smsRes.data.api_secret || '', sign_name: smsRes.data.sign_name || '', template_code: smsRes.data.template_code || '', }); } } catch (e) { console.error('加载配置失败:', e); } finally { setLoading(false); } } loadConfig(); }, []); const showSaved = (block: string) => { setSavedMsg(block + ' 保存成功'); setTimeout(() => setSavedMsg(null), 2000); }; const showTestResult = (result: string) => { setTestResult(result); setTimeout(() => setTestResult(null), 5000); }; // 保存品牌设置 const saveSiteSettings = async () => { try { await adminAPI.updateSiteSettings({ logo: brand.logo, site_name: brand.siteName, announcement: brand.announcement, icp_number: brand.icpNumber, contact_phone: brand.contactPhone, }); showSaved('品牌设置'); } catch (e: any) { alert('保存失败: ' + (e.detail || e.message)); } }; // 保存邮件配置 const saveEmailConfig = async () => { try { await adminAPI.updateEmailConfig({ smtp_host: mail.smtp_host, smtp_port: mail.smtp_port, username: mail.username, password: mail.password, from_address: mail.from_address, use_tls: mail.use_tls, }); showSaved('邮件配置'); } catch (e: any) { alert('保存失败: ' + (e.detail || e.message)); } }; // 保存短信配置 // 发送测试邮件 - 先保存配置再发送 const sendTestEmail = async () => { if (!emailTestTo.trim()) { showTestResult('请输入收件邮箱地址'); return; } try { // 测试前先保存邮件配置到数据库,确保使用最新配置 await adminAPI.updateEmailConfig({ smtp_host: mail.smtp_host, smtp_port: mail.smtp_port, username: mail.username, password: mail.password, from_address: mail.from_address, use_tls: mail.use_tls, }); const res = await adminAPI.testEmail({ test_to: emailTestTo.trim(), test_subject: emailTestSubject || undefined, test_body: emailTestBody || undefined, }); showTestResult('测试邮件已发送至 ' + emailTestTo + ': ' + ((res as any)?.message || 'OK')); setShowEmailTest(false); } catch (e: any) { showTestResult('测试邮件发送失败: ' + (e.detail || e.message)); } }; const openEmailTest = () => { setEmailTestTo(''); setEmailTestSubject(''); setEmailTestBody(''); setShowEmailTest(true); }; if (loading) { return
加载中...
; } return (

网站基础设置

{savedMsg && ( {' '}{savedMsg} )}
{/* Brand Settings */}

{' '}品牌设置

setBrand({ ...brand, logo: e.target.value })} />
setBrand({ ...brand, siteName: e.target.value })} />