diff --git a/frontend/src/views/OverviewView.vue b/frontend/src/views/OverviewView.vue
index b97ccdb..36cc337 100644
--- a/frontend/src/views/OverviewView.vue
+++ b/frontend/src/views/OverviewView.vue
@@ -31,6 +31,11 @@ const top30WithIcon = computed(() =>
stats.value.top30.map(p => ({ ...p, emoji: iconOf(p.name) })),
)
+// 概览只展示需关注项(预警 + 异常),完整列表去检索页
+const attentionPackages = computed(() =>
+ state.packages.filter(p => p.status === 'warn' || p.status === 'broken'),
+)
+
async function openDrawer(pkg) {
drawerPkg.value = pkg
drawerVisible.value = true
@@ -91,29 +96,33 @@ function quickClean() {
-
+
- 🎁缓存包列表
- 共 {{ stats.pkgCount }} 个包 · 预警置顶 · 同状态按版本数降序
+ ⚠️需要关注
+ 共 {{ attentionPackages.length }} 个需关注 · 预警置顶
+
⏳ 加载中…
-
-
+
暂无缓存包,请检查 Verdaccio 缓存目录配置
+
+
+ 🎉 暂无需要关注的包
+
@@ -142,6 +151,8 @@ function quickClean() {
.sec-title { font-size: 17px; font-weight: 700; display: flex; align-items: center; gap: 10px; }
.sec-title .emo { font-size: 19px; }
.sec-sub { font-family: var(--num); font-size: 12px; color: var(--ink-faint); font-weight: 600; }
+.link-all { padding: 6px 14px; border: none; border-radius: 999px; background: var(--panel-soft); color: var(--orange); font-size: 13px; font-weight: 600; cursor: pointer; transition: transform .2s, box-shadow .2s; }
+.link-all:hover { transform: translateY(-1px); box-shadow: var(--shadow); }
.pkg-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.loading-tip { text-align: center; padding: 40px 0; color: var(--ink-faint); font-size: 13px; }
.empty-box { text-align: center; padding: 60px 0; color: var(--ink-faint); font-size: 13px; }