From f0bbba80322dcee365ae4d3bf0dde2c3a806aa3e Mon Sep 17 00:00:00 2001 From: Estrella Pan Date: Thu, 22 Oct 2026 06:10:42 +0200 Subject: [PATCH] =?UTF-8?q?fix(webui):=20=E6=89=8B=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E8=AF=84=E5=AE=A1=E4=BF=AE=E6=AD=A3=E2=80=94=E2=80=94=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=B8=82=E5=9C=BA=E5=88=86=E7=B1=BB=E4=B8=8B=E5=88=92?= =?UTF-8?q?=E7=BA=BF=E4=B8=8E=E7=84=A6=E7=82=B9=E6=A1=86=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E8=A2=AB=E8=A3=81=E3=80=81=E9=80=9A=E7=9F=A5=E6=8A=BD=E5=B1=89?= =?UTF-8?q?=E5=8E=BB=E5=B5=8C=E5=A5=97=E6=BB=9A=E5=8A=A8=E5=B9=B6=E8=A1=A5?= =?UTF-8?q?=E6=97=A0=E9=9A=9C=E7=A2=8D=E5=90=8D=E7=A7=B0=E3=80=81WebKit=20?= =?UTF-8?q?=E9=9A=90=E8=97=8F=20summary=20=E5=8E=9F=E7=94=9F=E7=AE=AD?= =?UTF-8?q?=E5=A4=B4=E3=80=81=E4=BB=85=20Windows=20=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E6=8C=89=E5=8F=8D=E6=96=9C=E6=9D=A0=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/layout/ab-notification-center.vue | 11 ++++++++++- webui/src/components/setting/config-plugins.vue | 5 +++++ webui/src/pages/index/market/[[id]].vue | 8 ++++++++ webui/src/store/__tests__/downloader.test.ts | 1 + webui/src/store/downloader.ts | 4 +++- 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/webui/src/components/layout/ab-notification-center.vue b/webui/src/components/layout/ab-notification-center.vue index 1c069b8d..47dc0588 100644 --- a/webui/src/components/layout/ab-notification-center.vue +++ b/webui/src/components/layout/ab-notification-center.vue @@ -181,6 +181,7 @@ function onClearClick() { { display: flex; align-items: center; gap: 4px; + list-style: none; min-height: var(--touch-target); cursor: pointer; font-size: 13px; @@ -389,6 +390,10 @@ onActivated(async () => { flex-shrink: 0; transition: transform var(--transition-normal); } + + &::-webkit-details-marker { + display: none; + } } .plugin__options[open] > summary { diff --git a/webui/src/pages/index/market/[[id]].vue b/webui/src/pages/index/market/[[id]].vue index e6a96566..b12e26f8 100644 --- a/webui/src/pages/index/market/[[id]].vue +++ b/webui/src/pages/index/market/[[id]].vue @@ -507,6 +507,14 @@ function permissionLabel(id: string) { max-width: 100%; overflow-x: auto; scrollbar-width: none; + // overflow-x 让 overflow-y 也成了 auto,裁剪到 padding 盒:盒外的边框盖不到 + // 选中下划线(margin-bottom:-1px),焦点框也被裁。上下留 4px 并用背景线画边框, + // 负 margin 抵消留白,布局与边线位置不变。 + padding-block: 4px; + margin-block: -4px -3px; + border-bottom: none; + background: linear-gradient(var(--color-border), var(--color-border)) + left bottom 3px / 100% 1px no-repeat; &::-webkit-scrollbar { display: none; diff --git a/webui/src/store/__tests__/downloader.test.ts b/webui/src/store/__tests__/downloader.test.ts index fb34587f..5562e877 100644 --- a/webui/src/store/__tests__/downloader.test.ts +++ b/webui/src/store/__tests__/downloader.test.ts @@ -153,6 +153,7 @@ describe('downloader store', () => { it.each([ ['/downloads/Bangumi/Frieren/Season 1/', 'Frieren / Season 1'], ['D:\\Downloads\\Bangumi\\Frieren\\Season 1\\', 'Frieren / Season 1'], + ['/downloads/Fate\\Zero/Season 1/', 'Fate\\Zero / Season 1'], ])( 'should label the group with the last folders when save_path is %s', (savePath, expected) => { diff --git a/webui/src/store/downloader.ts b/webui/src/store/downloader.ts index 0cb6b6eb..a3c2c870 100644 --- a/webui/src/store/downloader.ts +++ b/webui/src/store/downloader.ts @@ -44,7 +44,9 @@ export const useDownloaderStore = defineStore('downloader', () => { const seasonOnlyRegex = /^(Season\s*\d+|S\d+|第\d+季)$/i; for (const [savePath, items] of map) { - const parts = savePath.split(/[\\/]/).filter(Boolean); + // 仅 Windows 路径(盘符或 UNC)按反斜杠分割;POSIX 文件夹名可含反斜杠 + const isWindows = /^([a-z]:|\\\\)/i.test(savePath); + const parts = savePath.split(isWindows ? /[\\/]/ : '/').filter(Boolean); let name = parts[parts.length - 1] || savePath; // If the last part is just a season folder, include the parent folder too if (parts.length >= 2 && seasonOnlyRegex.test(name)) {