diff --git a/docs/CHANGELOG_web.md b/docs/CHANGELOG_web.md index 713116d..ff17fa6 100644 --- a/docs/CHANGELOG_web.md +++ b/docs/CHANGELOG_web.md @@ -46,6 +46,9 @@ The format loosely follows Keep a Changelog and can be adapted to the team's hab ### Fixed / 修复 +- Library upload now reports the real file count: the success toast read the live `FileList` after the file input had been reset (always 0, e.g. "已上传 0 个文件"), making successful uploads look broken while waiting for the scanner; the list is snapshotted before uploading. +- 库管理上传完成提示不再恒为「已上传 0 个文件」:此前成功提示在清空 file input 之后读取其活引用 FileList 的长度(始终为 0),上传明明成功却像没生效;现在在上传开始前对文件列表做快照,计数与遍历都用快照。 + - Comic continuous-scroll mode is contiguous again on phones: the size observer used to miss the scroll container (it was attached while the reader still showed "loading", so the box didn't exist), leaving page geometry computed from a stale 480px default width while pages rendered at the real (e.g. 390px) width — every page gained a constant dead gap. The observer now attaches when the box actually mounts; additionally, mobile address-bar show/hide no longer rebuilds the scroll geometry in continuous/whole-page modes, which used to wipe measured page heights and re-trigger a burst of image requests. - 手机端漫画「连读」模式页面不再上下脱节:尺寸监听器此前在阅读器还在「加载中」时就尝试挂载(滚动容器尚不存在),导致监听从未生效,页高按过时的 480px 默认宽计算而实际按手机真实宽度(如 390px)渲染,每页之间出现恒定空白断层;现改为容器真正挂载时再接管。另外,手机地址栏收展在连读/整页模式下不再重建滚动几何——此前会清空全部实测页高并引发一波图片重复请求。 diff --git a/frontend/src/pages/admin/Libraries.tsx b/frontend/src/pages/admin/Libraries.tsx index 4bd3286..226f3a8 100644 --- a/frontend/src/pages/admin/Libraries.tsx +++ b/frontend/src/pages/admin/Libraries.tsx @@ -30,10 +30,11 @@ export default function AdminLibraries() { }); async function onFiles(libId: number, list: FileList | null) { - if (!list?.length) return; + const files = Array.from(list ?? []); // FileList 是活引用,onChange 里 input.value="" 会清空它,必须先快照 + if (!files.length) return; try { - for (const f of Array.from(list)) await api.uploadBook(libId, f); // 串行,单个失败即止并报错 - toast("ok", `已上传 ${list.length} 个文件,等待 scanner 收编`); + for (const f of files) await api.uploadBook(libId, f); // 串行,单个失败即止并报错 + toast("ok", `已上传 ${files.length} 个文件,等待 scanner 收编`); void qc.invalidateQueries({ queryKey: ["books"] }); setTimeout(() => void qc.invalidateQueries({ queryKey: ["books"] }), 5000); } catch (e) {