diff --git a/platform/frontend/admin.html b/platform/frontend/admin.html index 33ce0fc..1937f6e 100644 --- a/platform/frontend/admin.html +++ b/platform/frontend/admin.html @@ -33,6 +33,7 @@ AI 助手 搜索API 搜索排名 + GEO 就绪度 配置管理 @@ -655,6 +656,70 @@ +
+
+ GEO 就绪度 — AI 搜索引用追踪 & 结构优化评分,每日 07:30 自动检查 + 手动追踪 +
+
加载中...
+ +
+
🔒 敏感词 @@ -1332,6 +1397,30 @@ const llmConfigs = ref([]); finally { rankingsLoading.value = false; } }; + const geoOverview = ref({ total_geo_checks: 0, total_cited: 0, citation_rate: 0, avg_geo_readiness: 0, engine_breakdown: {} }); + const geoReadinessScores = ref([]); + const geoLoading = ref(false); + const geoTracking = ref(false); + const loadGeoData = async () => { + geoLoading.value = true; + try { + const overview = await api.get('/api/seo/geo/overview'); + geoOverview.value = overview.data || { total_geo_checks: 0, total_cited: 0, citation_rate: 0, avg_geo_readiness: 0, engine_breakdown: {} }; + const scores = await api.get('/api/seo/geo/readiness?limit=50'); + geoReadinessScores.value = scores.data || []; + } catch (e) { console.error('加载 GEO 数据失败:', e); } + finally { geoLoading.value = false; } + }; + const triggerGeoTrack = async () => { + geoTracking.value = true; + try { + const r = await api.post('/api/seo/geo/track'); + ElMessage.success('GEO 追踪完成'); + await loadGeoData(); + } catch (e) { ElMessage.error('GEO 追踪失败: ' + e.message); } + finally { geoTracking.value = false; } + }; + const contentCleanRules = ref([]); const ccrLoading = ref(false); const ccrDialogVisible = ref(false); @@ -1382,6 +1471,7 @@ const llmConfigs = ref([]); logs: loadLogTypes, orgs: loadOrgs, roles: loadRoles, menus: loadMenus, assistant: loadAssistantConfig, searchproviders: loadSearchProviders, searchrankings: loadRankings, + geo: loadGeoData, configitems: () => { loadSensitiveWords(); loadContentCleanRules(); }, }; const loadedTabs = new Set([]); @@ -1442,6 +1532,7 @@ const llmConfigs = ref([]); contentCleanRules, ccrLoading, ccrDialogVisible, ccrDialogTitle, ccrSaving, ccrForm, editingCcrId, loadContentCleanRules, showAddCleanRule, editCleanRule, saveCleanRule, deleteCleanRule, rankings, rankingStats, rankingsLoading, loadRankings, + geoOverview, geoReadinessScores, geoLoading, geoTracking, loadGeoData, triggerGeoTrack, }; } });