import React, { useEffect, useState, useRef, useMemo, useCallback } from 'react'; import { Form, Button, Typography, Row, Col, } from '@douyinfe/semi-ui'; import { Save, Activity } from 'lucide-react'; import { API, showError, showSuccess } from '../../../helpers'; import { useTranslation } from 'react-i18next'; const { Text } = Typography; const SettingsUptimeKuma = ({ options, refresh }) => { const { t } = useTranslation(); const [loading, setLoading] = useState(false); const formApiRef = useRef(null); const initValues = useMemo(() => ({ uptimeKumaUrl: options?.['console_setting.uptime_kuma_url'] || '', uptimeKumaSlug: options?.['console_setting.uptime_kuma_slug'] || '' }), [options?.['console_setting.uptime_kuma_url'], options?.['console_setting.uptime_kuma_slug']]); useEffect(() => { if (formApiRef.current) { formApiRef.current.setValues(initValues, { isOverride: true }); } }, [initValues]); const handleSave = async () => { const api = formApiRef.current; if (!api) { showError(t('表单未初始化')); return; } try { setLoading(true); const { uptimeKumaUrl, uptimeKumaSlug } = await api.validate(); const trimmedUrl = (uptimeKumaUrl || '').trim(); const trimmedSlug = (uptimeKumaSlug || '').trim(); if (trimmedUrl === options?.['console_setting.uptime_kuma_url'] && trimmedSlug === options?.['console_setting.uptime_kuma_slug']) { showSuccess(t('无需保存,配置未变动')); return; } const [urlRes, slugRes] = await Promise.all([ trimmedUrl === options?.['console_setting.uptime_kuma_url'] ? Promise.resolve({ data: { success: true } }) : API.put('/api/option/', { key: 'console_setting.uptime_kuma_url', value: trimmedUrl }), trimmedSlug === options?.['console_setting.uptime_kuma_slug'] ? Promise.resolve({ data: { success: true } }) : API.put('/api/option/', { key: 'console_setting.uptime_kuma_slug', value: trimmedSlug }) ]); if (!urlRes.data.success) throw new Error(urlRes.data.message || t('URL 保存失败')); if (!slugRes.data.success) throw new Error(slugRes.data.message || t('Slug 保存失败')); showSuccess(t('Uptime Kuma 设置保存成功')); refresh?.(); } catch (err) { console.error(err); showError(err.message || t('保存失败,请重试')); } finally { setLoading(false); } }; const isValidUrl = useCallback((string) => { try { new URL(string); return true; } catch (_) { return false; } }, []); const renderHeader = () => (
{t('配置')}  Uptime Kuma  {t('服务监控地址,用于展示服务状态信息')}
); return (
{ formApiRef.current = api; }} > { const url = (value || '').trim(); if (url && !isValidUrl(url)) { return Promise.reject(t('请输入有效的 URL 地址')); } return Promise.resolve(); } } ]} /> { const slug = (value || '').trim(); if (slug && !/^[a-zA-Z0-9_-]+$/.test(slug)) { return Promise.reject(t('Slug 只能包含字母、数字、下划线和连字符')); } return Promise.resolve(); } } ]} />
); }; export default SettingsUptimeKuma;