From ce756d87ccd9507ee5abaa43cb1bc24c5ef068af Mon Sep 17 00:00:00 2001 From: Estrella Pan Date: Thu, 22 Oct 2026 06:01:55 +0200 Subject: [PATCH] =?UTF-8?q?fix(webui):=20=E6=89=8B=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=BA=A2=E5=87=BA=E4=B8=8E=E9=87=8D=E5=8F=A0?= =?UTF-8?q?=E2=80=94=E2=80=94=E9=A1=B6=E6=A0=8F=E3=80=81=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E3=80=81=E5=BA=95=E9=83=A8=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E3=80=81=E8=A7=84=E5=88=99=E7=BC=96=E8=BE=91=E3=80=81RSS?= =?UTF-8?q?=E3=80=81=E6=97=A5=E5=8E=86=E3=80=81=E4=B8=8B=E8=BD=BD=E5=99=A8?= =?UTF-8?q?=E3=80=81=E6=8F=92=E4=BB=B6=E5=B8=82=E5=9C=BA=E4=B8=8E=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webui/src/api/search.ts | 2 +- webui/src/components/ab-container.vue | 2 +- webui/src/components/ab-edit-rule.vue | 4 +- webui/src/components/ab-torrent-list-page.vue | 7 +- webui/src/components/bangumi-filter-field.vue | 8 + .../calendar/calendar-mobile-list.vue | 13 +- webui/src/components/layout/ab-mobile-nav.vue | 2 +- .../layout/ab-notification-center.vue | 166 ++++++++++-------- webui/src/components/layout/ab-topbar.vue | 5 + .../src/components/setting/config-access.vue | 7 + webui/src/components/setting/config-llm.vue | 4 + .../setting/config-notification.vue | 6 + .../src/components/setting/config-plugins.vue | 21 ++- webui/src/pages/index/bangumi.vue | 2 +- webui/src/pages/index/downloader.vue | 21 ++- webui/src/pages/index/market/[[id]].vue | 18 ++ webui/src/pages/index/rss.vue | 6 +- webui/src/store/__tests__/downloader.test.ts | 13 ++ webui/src/store/downloader.ts | 2 +- 19 files changed, 219 insertions(+), 90 deletions(-) diff --git a/webui/src/api/search.ts b/webui/src/api/search.ts index 1405b30b..53baf80e 100644 --- a/webui/src/api/search.ts +++ b/webui/src/api/search.ts @@ -62,11 +62,11 @@ export const apiSearch = { es.close(); return; } - console.error('EventSource error:', err); // onerror also fires when the server closes the stream after a // successful search — only count it as a failure when the connection // never opened (auth/server/network problem). if (status.value === 'CONNECTING') { + console.error('EventSource error:', err); error.value = true; } close(); diff --git a/webui/src/components/ab-container.vue b/webui/src/components/ab-container.vue index 03db031d..27b171ce 100644 --- a/webui/src/components/ab-container.vue +++ b/webui/src/components/ab-container.vue @@ -37,7 +37,7 @@ const { title = 'title', flush = false } = defineProps<{ align-items: center; justify-content: space-between; padding: 0 14px; - height: 34px; + min-height: 34px; background: transparent; color: var(--color-text-secondary); border-bottom: 1px solid var(--color-border); diff --git a/webui/src/components/ab-edit-rule.vue b/webui/src/components/ab-edit-rule.vue index 9b28f52e..cf9daa3b 100644 --- a/webui/src/components/ab-edit-rule.vue +++ b/webui/src/components/ab-edit-rule.vue @@ -456,6 +456,7 @@ function emitUnarchive() { // Review warning banner .review-warning { display: flex; + flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; @@ -470,7 +471,7 @@ function emitUnarchive() { display: flex; align-items: center; gap: 10px; - flex: 1; + flex: 1 1 200px; min-width: 0; } @@ -502,6 +503,7 @@ function emitUnarchive() { align-items: center; gap: 8px; flex-shrink: 0; + margin-left: auto; } .review-warning-actions .detect-btn, diff --git a/webui/src/components/ab-torrent-list-page.vue b/webui/src/components/ab-torrent-list-page.vue index 40044a0a..9c4b782f 100644 --- a/webui/src/components/ab-torrent-list-page.vue +++ b/webui/src/components/ab-torrent-list-page.vue @@ -257,10 +257,11 @@ onActivated(load); } .torrent-name { - display: block; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + overflow-wrap: anywhere; font-size: 13px; color: var(--color-text); } diff --git a/webui/src/components/bangumi-filter-field.vue b/webui/src/components/bangumi-filter-field.vue index 787b699b..9206afb9 100644 --- a/webui/src/components/bangumi-filter-field.vue +++ b/webui/src/components/bangumi-filter-field.vue @@ -47,16 +47,24 @@ const emit = defineEmits<{ .advanced-control { display: flex; justify-content: flex-end; + min-width: 0; :deep(.n-dynamic-tags) { justify-content: flex-end; min-height: 32px; + min-width: 0; .n-tag { height: 28px; + max-width: calc(100% - 6px); margin: 2px 0 2px 6px !important; } + .n-tag__content { + overflow: hidden; + text-overflow: ellipsis; + } + .n-button { height: 28px; } diff --git a/webui/src/components/calendar/calendar-mobile-list.vue b/webui/src/components/calendar/calendar-mobile-list.vue index 2daa36b3..a899716f 100644 --- a/webui/src/components/calendar/calendar-mobile-list.vue +++ b/webui/src/components/calendar/calendar-mobile-list.vue @@ -75,7 +75,7 @@ function posterSrc(link: string | null | undefined): string {
- {{ group.primary.official_title }} + {{ group.primary.official_title }} {{ group.rules.length }} @@ -216,11 +216,17 @@ function posterSrc(link: string | null | undefined): string { font-size: 14px; font-weight: 500; color: var(--color-text); + display: flex; + align-items: center; + margin-bottom: 4px; + transition: color var(--transition-normal); +} + +.calendar-row-title-text { + min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - margin-bottom: 4px; - transition: color var(--transition-normal); } .calendar-row-meta { @@ -230,6 +236,7 @@ function posterSrc(link: string | null | undefined): string { } .calendar-row-badge { + flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; diff --git a/webui/src/components/layout/ab-mobile-nav.vue b/webui/src/components/layout/ab-mobile-nav.vue index 8952c473..33a9f758 100644 --- a/webui/src/components/layout/ab-mobile-nav.vue +++ b/webui/src/components/layout/ab-mobile-nav.vue @@ -119,7 +119,7 @@ const visibleItems = computed(() => { &__item { // 不收缩:项多时导航栏横向滚动,保持 44px 以上的触控区域 flex: 1 0 auto; - min-width: 56px; + min-width: var(--touch-target); display: flex; flex-direction: column; align-items: center; diff --git a/webui/src/components/layout/ab-notification-center.vue b/webui/src/components/layout/ab-notification-center.vue index c5b89db7..1c069b8d 100644 --- a/webui/src/components/layout/ab-notification-center.vue +++ b/webui/src/components/layout/ab-notification-center.vue @@ -1,5 +1,6 @@