更新: 74 个文件 - 2026-03-17 03:15:00
这个提交包含在:
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `26`
|
- 待人工/缺浏览器证据: `26`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:49+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:18+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:49+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:18+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:47+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:17+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `14`
|
- 待人工/缺浏览器证据: `14`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `12`
|
- 待人工/缺浏览器证据: `12`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:19+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:49+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:18+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `1`
|
- 阻塞数: `1`
|
||||||
- 待人工/缺浏览器证据: `36`
|
- 待人工/缺浏览器证据: `36`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:53+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:22+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:53+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:22+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:53+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:22+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:53+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:22+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:53+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:22+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:53+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:22+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:53+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:22+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- 已实证(synthetic): `0`
|
- 已实证(synthetic): `0`
|
||||||
- 阻塞数: `0`
|
- 阻塞数: `0`
|
||||||
- 待人工/缺浏览器证据: `0`
|
- 待人工/缺浏览器证据: `0`
|
||||||
- 最近渲染时间: `2026-03-17T09:29:50+00:00`
|
- 最近渲染时间: `2026-03-17T09:39:20+00:00`
|
||||||
|
|
||||||
## 目标约束
|
## 目标约束
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generated_at": "2026-03-17T09:30:03+00:00",
|
"generated_at": "2026-03-17T09:39:33+00:00",
|
||||||
"title": "\u5f53\u524d\u67b6\u6784\u5e93",
|
"title": "\u5f53\u524d\u67b6\u6784\u5e93",
|
||||||
"summary": "\u5de5\u4f5c\u53f0\u3001\u63a7\u5236\u9762\u3001\u6570\u636e\u5c42\u3001\u6388\u6743\u8fb9\u754c\u4e0e\u7cfb\u7edf\u8986\u76d6\u7684\u5f53\u524d\u771f\u503c\u89c6\u56fe\u3002",
|
"summary": "\u5de5\u4f5c\u53f0\u3001\u63a7\u5236\u9762\u3001\u6570\u636e\u5c42\u3001\u6388\u6743\u8fb9\u754c\u4e0e\u7cfb\u7edf\u8986\u76d6\u7684\u5f53\u524d\u771f\u503c\u89c6\u56fe\u3002",
|
||||||
"sections": [
|
"sections": [
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "\u751f\u6210\u65f6\u95f4",
|
"label": "\u751f\u6210\u65f6\u95f4",
|
||||||
"value": "2026-03-17T09:30:03+00:00"
|
"value": "2026-03-17T09:39:33+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
|
|||||||
@@ -20,10 +20,6 @@
|
|||||||
<span>授权攻防实验工作台</span>
|
<span>授权攻防实验工作台</span>
|
||||||
</div>
|
</div>
|
||||||
<h1>本地攻防实证工作台</h1>
|
<h1>本地攻防实证工作台</h1>
|
||||||
<p>
|
|
||||||
Lovart 设计外壳已本地化并接入真实 run bundle 数据。页面只面向授权实验资产,
|
|
||||||
聚合漏洞条目、时间线、证据、日志、来源、原始 JSON、当前架构库与失败原因。
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="hero-actions">
|
<div class="hero-actions">
|
||||||
|
|||||||
@@ -20,10 +20,6 @@
|
|||||||
<span>授权攻防实验工作台</span>
|
<span>授权攻防实验工作台</span>
|
||||||
</div>
|
</div>
|
||||||
<h1>本地攻防实证工作台</h1>
|
<h1>本地攻防实证工作台</h1>
|
||||||
<p>
|
|
||||||
Lovart 设计外壳已本地化并接入真实 run bundle 数据。页面只面向授权实验资产,
|
|
||||||
聚合漏洞条目、时间线、证据、日志、来源、原始 JSON、当前架构库与失败原因。
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="hero-actions">
|
<div class="hero-actions">
|
||||||
|
|||||||
@@ -87,7 +87,7 @@
|
|||||||
<h1>当前架构库镜像</h1>
|
<h1>当前架构库镜像</h1>
|
||||||
<div class="meta">工作台内置镜像页:当前架构库结构化数据镜像。</div>
|
<div class="meta">工作台内置镜像页:当前架构库结构化数据镜像。</div>
|
||||||
<pre>{
|
<pre>{
|
||||||
"generated_at": "2026-03-17T09:30:03+00:00",
|
"generated_at": "2026-03-17T09:39:33+00:00",
|
||||||
"title": "当前架构库",
|
"title": "当前架构库",
|
||||||
"summary": "工作台、控制面、数据层、授权边界与系统覆盖的当前真值视图。",
|
"summary": "工作台、控制面、数据层、授权边界与系统覆盖的当前真值视图。",
|
||||||
"sections": [
|
"sections": [
|
||||||
@@ -137,7 +137,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "生成时间",
|
"label": "生成时间",
|
||||||
"value": "2026-03-17T09:30:03+00:00"
|
"value": "2026-03-17T09:39:33+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"links": [
|
"links": [
|
||||||
|
|||||||
@@ -20,10 +20,6 @@
|
|||||||
<span>授权攻防实验工作台</span>
|
<span>授权攻防实验工作台</span>
|
||||||
</div>
|
</div>
|
||||||
<h1>本地攻防实证工作台</h1>
|
<h1>本地攻防实证工作台</h1>
|
||||||
<p>
|
|
||||||
Lovart 设计外壳已本地化并接入真实 run bundle 数据。页面只面向授权实验资产,
|
|
||||||
聚合漏洞条目、时间线、证据、日志、来源、原始 JSON、当前架构库与失败原因。
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="hero-actions">
|
<div class="hero-actions">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generated_at": "2026-03-17T09:30:03+00:00",
|
"generated_at": "2026-03-17T09:39:33+00:00",
|
||||||
"advisory_count": 89,
|
"advisory_count": 89,
|
||||||
"run_count": 3,
|
"run_count": 3,
|
||||||
"statuses": {
|
"statuses": {
|
||||||
|
|||||||
@@ -20,10 +20,6 @@
|
|||||||
<span>授权攻防实验工作台</span>
|
<span>授权攻防实验工作台</span>
|
||||||
</div>
|
</div>
|
||||||
<h1>本地攻防实证工作台</h1>
|
<h1>本地攻防实证工作台</h1>
|
||||||
<p>
|
|
||||||
Lovart 设计外壳已本地化并接入真实 run bundle 数据。页面只面向授权实验资产,
|
|
||||||
聚合漏洞条目、时间线、证据、日志、来源、原始 JSON、当前架构库与失败原因。
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="hero-actions">
|
<div class="hero-actions">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 最新同步摘要
|
# 最新同步摘要
|
||||||
|
|
||||||
- 渲染时间: `2026-03-17T09:30:03+00:00`
|
- 渲染时间: `2026-03-17T09:39:33+00:00`
|
||||||
- 系统数量: `62`
|
- 系统数量: `62`
|
||||||
- Advisory 数量: `89`
|
- Advisory 数量: `89`
|
||||||
- 重点 Markdown 数量: `89`
|
- 重点 Markdown 数量: `89`
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generated_at": "2026-03-17T09:30:03+00:00",
|
"generated_at": "2026-03-17T09:39:33+00:00",
|
||||||
"system_count": 62,
|
"system_count": 62,
|
||||||
"advisory_count": 89,
|
"advisory_count": 89,
|
||||||
"markdown_count": 89,
|
"markdown_count": 89,
|
||||||
|
|||||||
@@ -59,6 +59,23 @@ const DATA_HUB_ITEMS = [
|
|||||||
{ title: "最新同步摘要", href: "/docs/coverage-matrix.html", description: "覆盖矩阵与本地生成态入口。", badge: "generated" }
|
{ title: "最新同步摘要", href: "/docs/coverage-matrix.html", description: "覆盖矩阵与本地生成态入口。", badge: "generated" }
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const HERO_FOLD_STORAGE_KEY = "websafe.dashboard.heroFolded";
|
||||||
|
|
||||||
|
function readHeroFolded() {
|
||||||
|
try {
|
||||||
|
return window.localStorage.getItem(HERO_FOLD_STORAGE_KEY) === "1";
|
||||||
|
} catch (_error) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeHeroFolded(value) {
|
||||||
|
try {
|
||||||
|
window.localStorage.setItem(HERO_FOLD_STORAGE_KEY, value ? "1" : "0");
|
||||||
|
} catch (_error) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
routeSection: resolveRouteSection(),
|
routeSection: resolveRouteSection(),
|
||||||
summary: null,
|
summary: null,
|
||||||
@@ -72,6 +89,12 @@ const state = {
|
|||||||
refreshHandle: null,
|
refreshHandle: null,
|
||||||
refreshMs: 5000,
|
refreshMs: 5000,
|
||||||
autoRefresh: true,
|
autoRefresh: true,
|
||||||
|
heroFolded: readHeroFolded(),
|
||||||
|
syncStatus: {
|
||||||
|
kind: "boot",
|
||||||
|
title: "启动中",
|
||||||
|
detail: "正在载入本地生成数据"
|
||||||
|
},
|
||||||
filters: {
|
filters: {
|
||||||
search: "",
|
search: "",
|
||||||
status: "",
|
status: "",
|
||||||
@@ -303,6 +326,7 @@ function renderMetrics() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderSyncState(kind, title, detail) {
|
function renderSyncState(kind, title, detail) {
|
||||||
|
state.syncStatus = { kind, title, detail };
|
||||||
$("syncState").innerHTML = `
|
$("syncState").innerHTML = `
|
||||||
${icon("sync", "icon icon-sync")}
|
${icon("sync", "icon icon-sync")}
|
||||||
<div>
|
<div>
|
||||||
@@ -311,6 +335,7 @@ function renderSyncState(kind, title, detail) {
|
|||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
$("syncState").dataset.kind = kind;
|
$("syncState").dataset.kind = kind;
|
||||||
|
renderHeroChrome();
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSectionNav() {
|
function renderSectionNav() {
|
||||||
@@ -1244,14 +1269,34 @@ function renderWorkspace() {
|
|||||||
workspace.innerHTML = html;
|
workspace.innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderHeroChrome() {
|
||||||
|
const meta = sectionMeta();
|
||||||
|
const chip = $("heroSectionChip");
|
||||||
|
const title = $("heroSummaryTitle");
|
||||||
|
const detail = $("heroSummaryDetail");
|
||||||
|
const toggle = $("toggleHeroCollapse");
|
||||||
|
const toggleLabel = $("heroToggleLabel");
|
||||||
|
if (!chip || !title || !detail || !toggle || !toggleLabel) return;
|
||||||
|
|
||||||
|
chip.innerHTML = `${icon(meta.icon)}<span>${escapeHtml(meta.label)}</span>`;
|
||||||
|
title.textContent = state.heroFolded ? `${meta.label} · 顶部区域已折叠` : `${meta.label} · 顶部操作区`;
|
||||||
|
detail.textContent = state.heroFolded
|
||||||
|
? `${state.syncStatus.title} · ${state.syncStatus.detail}`
|
||||||
|
: `${meta.description} · ${state.syncStatus.detail}`;
|
||||||
|
toggleLabel.textContent = state.heroFolded ? "展开顶部" : "折叠顶部";
|
||||||
|
toggle.setAttribute("aria-expanded", String(!state.heroFolded));
|
||||||
|
}
|
||||||
|
|
||||||
function syncRouteChrome() {
|
function syncRouteChrome() {
|
||||||
const compactHero = state.routeSection !== "overview";
|
const compactHero = state.routeSection !== "overview";
|
||||||
document.body.dataset.routeSection = state.routeSection;
|
document.body.dataset.routeSection = state.routeSection;
|
||||||
document.body.classList.toggle("hero-compact", compactHero);
|
document.body.classList.toggle("hero-compact", compactHero);
|
||||||
|
document.body.classList.toggle("hero-folded", state.heroFolded);
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderAll() {
|
function renderAll() {
|
||||||
syncRouteChrome();
|
syncRouteChrome();
|
||||||
|
renderHeroChrome();
|
||||||
renderMetrics();
|
renderMetrics();
|
||||||
renderSectionNav();
|
renderSectionNav();
|
||||||
renderTopMenus();
|
renderTopMenus();
|
||||||
@@ -1285,6 +1330,14 @@ function clearFilters() {
|
|||||||
|
|
||||||
function attachGlobalEvents() {
|
function attachGlobalEvents() {
|
||||||
document.addEventListener("click", (event) => {
|
document.addEventListener("click", (event) => {
|
||||||
|
const heroToggle = event.target.closest("[data-hero-toggle]");
|
||||||
|
if (heroToggle) {
|
||||||
|
state.heroFolded = !state.heroFolded;
|
||||||
|
writeHeroFolded(state.heroFolded);
|
||||||
|
renderAll();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const toggle = event.target.closest("[data-panel-toggle]");
|
const toggle = event.target.closest("[data-panel-toggle]");
|
||||||
if (toggle) {
|
if (toggle) {
|
||||||
const key = toggle.dataset.panelToggle;
|
const key = toggle.dataset.panelToggle;
|
||||||
|
|||||||
@@ -148,6 +148,72 @@ select {
|
|||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hero-collapse-bar {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 16px;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
border-bottom: 1px solid rgba(148, 163, 184, 0.14);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-collapse-summary {
|
||||||
|
display: grid;
|
||||||
|
gap: 8px;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-summary-topline {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-section-chip {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
min-height: 30px;
|
||||||
|
padding: 6px 12px;
|
||||||
|
border-radius: 999px;
|
||||||
|
border: 1px solid rgba(77, 141, 255, 0.28);
|
||||||
|
background: rgba(77, 141, 255, 0.12);
|
||||||
|
color: #dce7ff;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-summary-title {
|
||||||
|
display: block;
|
||||||
|
font-size: 1.02rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-summary-detail {
|
||||||
|
color: var(--text-secondary);
|
||||||
|
line-height: 1.5;
|
||||||
|
font-size: 0.86rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-collapse-button {
|
||||||
|
min-width: 128px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-collapse-icon {
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-foldable {
|
||||||
|
display: grid;
|
||||||
|
max-height: 2200px;
|
||||||
|
opacity: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
transform: translateY(0);
|
||||||
|
transition: max-height 0.28s ease, opacity 0.22s ease, transform 0.22s ease;
|
||||||
|
}
|
||||||
|
|
||||||
.hero-actions {
|
.hero-actions {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: grid;
|
display: grid;
|
||||||
@@ -329,6 +395,31 @@ body.hero-compact .hero-glow {
|
|||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.hero-folded .hero {
|
||||||
|
padding: 16px 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.hero-folded .hero-collapse-bar {
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
border-bottom-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.hero-folded .hero-collapse-icon {
|
||||||
|
transform: rotate(-90deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.hero-folded .hero-foldable {
|
||||||
|
max-height: 0;
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-10px);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.hero-folded .hero-glow {
|
||||||
|
opacity: 0.42;
|
||||||
|
}
|
||||||
|
|
||||||
.metrics-row {
|
.metrics-row {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: grid;
|
display: grid;
|
||||||
@@ -1454,6 +1545,8 @@ body.hero-compact .hero-glow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.hero-links,
|
.hero-links,
|
||||||
|
.hero-collapse-bar,
|
||||||
|
.hero-summary-topline,
|
||||||
.route-note,
|
.route-note,
|
||||||
.detail-actions,
|
.detail-actions,
|
||||||
.tag-row,
|
.tag-row,
|
||||||
@@ -1469,6 +1562,10 @@ body.hero-compact .hero-glow {
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hero-collapse-button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 640px) {
|
@media (max-width: 640px) {
|
||||||
|
|||||||
@@ -13,58 +13,78 @@
|
|||||||
<div class="hero-glow hero-glow-left" aria-hidden="true"></div>
|
<div class="hero-glow hero-glow-left" aria-hidden="true"></div>
|
||||||
<div class="hero-glow hero-glow-right" aria-hidden="true"></div>
|
<div class="hero-glow hero-glow-right" aria-hidden="true"></div>
|
||||||
|
|
||||||
<div class="hero-top">
|
<div class="hero-collapse-bar">
|
||||||
<div class="hero-copy">
|
<div class="hero-collapse-summary">
|
||||||
<div class="hero-eyebrow">
|
<div class="hero-summary-topline">
|
||||||
<svg class="icon"><use href="/assets/icons.svg#spark"></use></svg>
|
<span id="heroSectionChip" class="hero-section-chip">
|
||||||
<span>授权攻防实验工作台</span>
|
<svg class="icon"><use href="/assets/icons.svg#spark"></use></svg>
|
||||||
</div>
|
<span>总览</span>
|
||||||
<h1>本地攻防实证工作台</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="hero-actions">
|
|
||||||
<button id="refreshDashboard" class="button button-primary" type="button">
|
|
||||||
<svg class="icon"><use href="/assets/icons.svg#refresh"></use></svg>
|
|
||||||
<span>立即刷新</span>
|
|
||||||
</button>
|
|
||||||
<label class="toggle-card">
|
|
||||||
<span class="toggle-label">自动刷新</span>
|
|
||||||
<span class="toggle-switch">
|
|
||||||
<input id="autoRefresh" type="checkbox" checked>
|
|
||||||
<span class="toggle-slider"></span>
|
|
||||||
</span>
|
</span>
|
||||||
</label>
|
<span class="hero-eyebrow">授权攻防实验工作台</span>
|
||||||
<div id="syncState" class="sync-state">
|
|
||||||
<svg class="icon icon-sync"><use href="/assets/icons.svg#sync"></use></svg>
|
|
||||||
<div>
|
|
||||||
<strong>启动中</strong>
|
|
||||||
<span>正在载入本地生成数据</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="hero-links">
|
|
||||||
<a class="button button-secondary" href="/docs/project-features.html" target="_blank" rel="noreferrer">
|
|
||||||
<svg class="icon"><use href="/assets/icons.svg#docs"></use></svg>
|
|
||||||
<span>功能文档</span>
|
|
||||||
</a>
|
|
||||||
<a class="button button-secondary" href="/docs/frontend-dashboard-design.html" target="_blank" rel="noreferrer">
|
|
||||||
<svg class="icon"><use href="/assets/icons.svg#playbook"></use></svg>
|
|
||||||
<span>前端设计</span>
|
|
||||||
</a>
|
|
||||||
<a class="button button-secondary" href="/docs/architecture-library.html" target="_blank" rel="noreferrer">
|
|
||||||
<svg class="icon"><use href="/assets/icons.svg#systems"></use></svg>
|
|
||||||
<span>架构镜像</span>
|
|
||||||
</a>
|
|
||||||
<a class="button button-secondary" href="/legacy/index.html" target="_blank" rel="noreferrer">
|
|
||||||
<svg class="icon"><use href="/assets/icons.svg#legacy"></use></svg>
|
|
||||||
<span>旧版工作台</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
<strong id="heroSummaryTitle" class="hero-summary-title">总览 · 顶部操作区</strong>
|
||||||
|
<span id="heroSummaryDetail" class="hero-summary-detail">这里包含刷新、同步状态、指标卡、板块导航和顶部筛选。</span>
|
||||||
</div>
|
</div>
|
||||||
|
<button id="toggleHeroCollapse" class="button button-secondary hero-collapse-button" type="button" data-hero-toggle="1" aria-expanded="true">
|
||||||
|
<svg class="icon hero-collapse-icon"><use href="/assets/icons.svg#chevron"></use></svg>
|
||||||
|
<span id="heroToggleLabel">折叠顶部</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="metricCards" class="metrics-row"></div>
|
<div class="hero-foldable">
|
||||||
<nav id="sectionNav" class="section-nav" aria-label="工作台板块导航"></nav>
|
<div class="hero-top">
|
||||||
<div id="topMenus" class="top-menus" aria-label="顶部筛选与分类菜单"></div>
|
<div class="hero-copy">
|
||||||
|
<div class="hero-eyebrow">
|
||||||
|
<svg class="icon"><use href="/assets/icons.svg#spark"></use></svg>
|
||||||
|
<span>授权攻防实验工作台</span>
|
||||||
|
</div>
|
||||||
|
<h1>本地攻防实证工作台</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hero-actions">
|
||||||
|
<button id="refreshDashboard" class="button button-primary" type="button">
|
||||||
|
<svg class="icon"><use href="/assets/icons.svg#refresh"></use></svg>
|
||||||
|
<span>立即刷新</span>
|
||||||
|
</button>
|
||||||
|
<label class="toggle-card">
|
||||||
|
<span class="toggle-label">自动刷新</span>
|
||||||
|
<span class="toggle-switch">
|
||||||
|
<input id="autoRefresh" type="checkbox" checked>
|
||||||
|
<span class="toggle-slider"></span>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<div id="syncState" class="sync-state">
|
||||||
|
<svg class="icon icon-sync"><use href="/assets/icons.svg#sync"></use></svg>
|
||||||
|
<div>
|
||||||
|
<strong>启动中</strong>
|
||||||
|
<span>正在载入本地生成数据</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="hero-links">
|
||||||
|
<a class="button button-secondary" href="/docs/project-features.html" target="_blank" rel="noreferrer">
|
||||||
|
<svg class="icon"><use href="/assets/icons.svg#docs"></use></svg>
|
||||||
|
<span>功能文档</span>
|
||||||
|
</a>
|
||||||
|
<a class="button button-secondary" href="/docs/frontend-dashboard-design.html" target="_blank" rel="noreferrer">
|
||||||
|
<svg class="icon"><use href="/assets/icons.svg#playbook"></use></svg>
|
||||||
|
<span>前端设计</span>
|
||||||
|
</a>
|
||||||
|
<a class="button button-secondary" href="/docs/architecture-library.html" target="_blank" rel="noreferrer">
|
||||||
|
<svg class="icon"><use href="/assets/icons.svg#systems"></use></svg>
|
||||||
|
<span>架构镜像</span>
|
||||||
|
</a>
|
||||||
|
<a class="button button-secondary" href="/legacy/index.html" target="_blank" rel="noreferrer">
|
||||||
|
<svg class="icon"><use href="/assets/icons.svg#legacy"></use></svg>
|
||||||
|
<span>旧版工作台</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="metricCards" class="metrics-row"></div>
|
||||||
|
<nav id="sectionNav" class="section-nav" aria-label="工作台板块导航"></nav>
|
||||||
|
<div id="topMenus" class="top-menus" aria-label="顶部筛选与分类菜单"></div>
|
||||||
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main class="main-container">
|
<main class="main-container">
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户