diff --git a/web/src/views/AccessResultCheck.vue b/web/src/views/AccessResultCheck.vue index a2c7258..2f0a212 100644 --- a/web/src/views/AccessResultCheck.vue +++ b/web/src/views/AccessResultCheck.vue @@ -55,14 +55,13 @@ - -
- -
正在解析各页面适配结果...
+ +
+ 正在解析各页面适配结果...
-
+
-
+
暂无访问结果
@@ -148,7 +147,7 @@ const rejecting = ref(false) const allConfigVersions = ref([]) const allResults = ref([]) -const pages = ref([]) +const pageParsed = ref({}) // url → parsed data const expandedSet = reactive(new Set()) const totalResults = computed(() => allResults.value.length) @@ -156,6 +155,30 @@ const validCount = computed(() => allResults.value.filter(r => r.isValid===true) const invalidCount = computed(() => allResults.value.filter(r => r.isValid===false).length) const uncheckedCount = computed(() => allResults.value.filter(r => r.isValid==null).length) +// 始终从 allResults 按 URL 分组生成 pages,解析数据注入 +const pages = computed(() => { + const map = new Map() + for (const r of allResults.value) { + const key = r.url || '(无URL)' + if (!map.has(key)) { + map.set(key, { url: key, statusCode: r.statusCode, responseTimeMs: r.responseTimeMs, + createdAt: r.createdAt, totalCount: 0, validCount: 0, invalidCount: 0, + uncheckedCount: 0, history: [], parsed: null }) + } + const p = map.get(key) + p.totalCount++ + if (r.isValid===true) p.validCount++ + else if (r.isValid===false) p.invalidCount++ + else p.uncheckedCount++ + if (p.history.length < 5) p.history.push(r) + } + // 合并解析数据 + for (const [url, parsed] of Object.entries(pageParsed.value)) { + if (map.has(url)) map.get(url).parsed = parsed + } + return Array.from(map.values()) +}) + // 加载配置版本列表 const loadConfigs = async () => { try { @@ -188,7 +211,6 @@ const onConfigChange = async () => { } } catch { selectedConfigJson.value = '' } - // 自动批量解析 await doBatchParse() } @@ -197,12 +219,12 @@ const doBatchParse = async () => { parseLoading.value = true try { const r = await api.adapter.parseBatch(selectedConfigId.value, siteId) - const data = r.data || {} - pages.value = (data.pages || []).map(p => ({ - ...p, - history: allResults.value.filter(r => r.url===p.url).slice(0, 5) - })) - } catch { ElMessage.error('批量解析失败') } + const map = {} + for (const p of (r.data?.pages || [])) { + if (p.parsed) map[p.url] = p.parsed + } + pageParsed.value = map + } catch { /* 非关键 */ } finally { parseLoading.value = false } } @@ -214,13 +236,7 @@ const refresh = async () => { const r = await api.accessResults.bySite(siteId) allResults.value = r.data||[] // 刷新解析数据 - if (selectedConfigId.value) { - const data = (await api.adapter.parseBatch(selectedConfigId.value, siteId)).data||{} - pages.value = (data.pages||[]).map(p => ({ - ...p, - history: allResults.value.filter(r => r.url===p.url).slice(0,5) - })) - } + if (selectedConfigId.value) await doBatchParse() } catch { ElMessage.error('获取访问结果失败') } finally { loading.value = false } }