import { useCallback, useEffect, useState, type FormEvent } from 'react'; import { Link } from 'react-router-dom'; import { getMindSpaceAdminConfig, getUmamiSsoUrl, updateMindSpaceAdminConfig } from '../../api/client'; const initial = { enabled: false, websiteId: '', analyticsUrl: 'http://127.0.0.1:3100', domains: '127.0.0.1,localhost', idSecretConfigured: false, }; export function AnalyticsConfigPage() { const [config, setConfig] = useState(initial); const [secret, setSecret] = useState(''); const [busy, setBusy] = useState(false); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [message, setMessage] = useState(null); const [openingUmami, setOpeningUmami] = useState(false); const load = useCallback(async () => { setLoading(true); try { const result = await getMindSpaceAdminConfig(); setConfig({ ...initial, ...result.analytics }); } catch (err) { setError(err instanceof Error ? err.message : '加载 Analytics 配置失败'); } finally { setLoading(false); } }, []); useEffect(() => { void load(); }, [load]); const save = async (event: FormEvent) => { event.preventDefault(); setBusy(true); setError(null); setMessage(null); try { const result = await updateMindSpaceAdminConfig({ analytics: { enabled: config.enabled, websiteId: config.websiteId, analyticsUrl: config.analyticsUrl, domains: config.domains, ...(secret.trim() ? { idSecret: secret.trim() } : {}) }, }); setConfig({ ...initial, ...result.analytics }); setSecret(''); setMessage('Analytics 配置已保存;密钥不会在后台回显。'); } catch (err) { setError(err instanceof Error ? err.message : '保存 Analytics 配置失败'); } finally { setBusy(false); } }; const openUmami = async () => { setOpeningUmami(true); setError(null); try { window.location.assign(await getUmamiSsoUrl()); } catch (err) { setError(err instanceof Error ? err.message : '无法打开 Umami'); setOpeningUmami(false); } }; return

Analytics 配置

配置 Umami 并进入统计后台。Rybbit 已退役,见 Memind 文档 analytics-platform.md。

{error &&

{error}

} {message &&

{message}

}

SEO / GEO 页面流量

按页面查看搜索引擎与生成式引擎来源访问,表格口径与 Umami「所有生成页面明细」一致。

打开 SEO / GEO 流量看板

Umami

SEO/GEO 看板还需在 memind_adm 环境变量配置 UMAMI_ADMIN_PASSWORD(与 Umami admin 账号匹配)。

; }