diff --git a/web/src/views/AccessResultCheck.vue b/web/src/views/AccessResultCheck.vue
index 110599a..66d7d09 100644
--- a/web/src/views/AccessResultCheck.vue
+++ b/web/src/views/AccessResultCheck.vue
@@ -78,9 +78,17 @@
-
+
+
{{ page.parsed.message || '解析失败' }}
-
未解析
+
未解析
暂无访问结果
@@ -122,7 +130,7 @@ const loading = ref(false), parseLoading = ref(false)
const selectedConfigId = ref(null), selectedConfig = ref(null)
const scriptContent = ref(''), saving = ref(false), approving = ref(false), rejecting = ref(false)
const allConfigVersions = ref([]), allResults = ref([])
-const pageParsed = ref({}), reparsingUrls = reactive(new Set())
+const pageParsed = ref({}), reparsingUrls = reactive(new Set()), expanded = reactive(new Set())
const rawVisible = ref(false), rawLoading = ref(false), rawContent = ref('')
const totalResults = computed(() => allResults.value.length)
@@ -141,7 +149,18 @@ const pages = computed(() => {
p.historyIds.push({ id: r.id, time: (r.createdAt||'').substring(5,16) })
}
for (const [url, parsed] of Object.entries(pageParsed.value)) {
- if (map.has(url)) map.get(url).parsed = parsed
+ if (map.has(url)) {
+ const p = map.get(url)
+ p.parsed = parsed
+ // 计算空值数
+ if (parsed?.extracted?.length) {
+ let nulls = 0
+ for (const row of parsed.extracted) {
+ for (const v of Object.values(row)) { if (v == null) nulls++ }
+ }
+ p.nullCount = nulls
+ }
+ }
}
return Array.from(map.values())
})
@@ -219,6 +238,10 @@ const refresh = async () => {
finally { loading.value = false }
}
+const toggleExpand = (page) => {
+ expanded.has(page.url) ? expanded.delete(page.url) : expanded.add(page.url)
+}
+
const viewRaw = async (page) => {
rawVisible.value = true; rawLoading.value = true; rawContent.value = ''
try { rawContent.value = (await api.accessResults.get(page.activeId)).data?.content || '(空)' }