🐛 Fix(custom): fix gallery scroll bug

This commit is contained in:
Kuingsmile
2025-11-14 14:53:29 +08:00
parent 30b54cbe10
commit 264fbbfdd8
2 changed files with 33 additions and 6 deletions

View File

@@ -94,6 +94,16 @@ export function useVirtualGrid(options: UseVirtualGridOptions) {
} }
}) })
watch(
() => items.value.length,
() => {
const { totalHeight } = gridCalculations.value
if (scrollTop.value > totalHeight - containerHeight.value) {
scrollTop.value = Math.max(0, totalHeight - containerHeight.value)
}
}
)
return { return {
gridCalculations, gridCalculations,
visibleIndexes, visibleIndexes,

View File

@@ -1067,7 +1067,7 @@ function getGallery(): IGalleryItem[] {
return { return {
...item, ...item,
src: item.galleryPath || item.imgUrl || '', src: item.galleryPath || item.imgUrl || '',
key: item.id || `item-${index}-${Date.now()}`, key: item.id || `item-${index}`,
intro: item.fileName || '' intro: item.fileName || ''
} }
}) })
@@ -1076,7 +1076,7 @@ function getGallery(): IGalleryItem[] {
return { return {
...item, ...item,
src: item.galleryPath || item.imgUrl || '', src: item.galleryPath || item.imgUrl || '',
key: item.id || `item-${index}-${Date.now()}`, key: item.id || `item-${index}`,
intro: item.fileName || '' intro: item.fileName || ''
} }
}) })
@@ -1089,9 +1089,14 @@ async function updateGallery() {
Object.keys(imageLoadStates).forEach(k => { Object.keys(imageLoadStates).forEach(k => {
if (!newIds.has(k)) delete imageLoadStates[k] if (!newIds.has(k)) delete imageLoadStates[k]
}) })
Object.keys(imageErrorStates).forEach(k => {
if (!newIds.has(k)) delete imageErrorStates[k]
})
images.value = newList images.value = newList
nextTick(() => { nextTick(() => {
virtualScrollerRef.value?.scrollToTop() if (virtualScrollerRef.value) {
virtualScrollerRef.value.refresh()
}
}) })
} }
@@ -1219,7 +1224,10 @@ function remove(item: ImgInfo, _: number) {
await $$db.removeById(item.id!) await $$db.removeById(item.id!)
const args = getRawData(file) const args = getRawData(file)
window.electron.sendRPC(IRPCActionType.GALLERY_REMOVE_FILES, [args]) window.electron.sendRPC(IRPCActionType.GALLERY_REMOVE_FILES, [args])
updateGallery() await updateGallery()
nextTick(() => {
virtualScrollerRef.value?.refresh()
})
if (!isNeedDeleteCloudFile) { if (!isNeedDeleteCloudFile) {
message.success(t('pages.gallery.operationSucceed')) message.success(t('pages.gallery.operationSucceed'))
} }
@@ -1253,7 +1261,10 @@ async function confirmModify() {
}) })
message.success(t('pages.gallery.operationSucceed')) message.success(t('pages.gallery.operationSucceed'))
dialogVisible.value = false dialogVisible.value = false
updateGallery() await updateGallery()
nextTick(() => {
virtualScrollerRef.value?.refresh()
})
} }
function cleanSearch() { function cleanSearch() {
@@ -1331,7 +1342,10 @@ function multiRemove() {
clearChoosedList() clearChoosedList()
window.electron.sendRPC(IRPCActionType.GALLERY_REMOVE_FILES, getRawData(files)) window.electron.sendRPC(IRPCActionType.GALLERY_REMOVE_FILES, getRawData(files))
updateGallery() await updateGallery()
nextTick(() => {
virtualScrollerRef.value?.refresh()
})
message.success(t('pages.gallery.operationSucceed')) message.success(t('pages.gallery.operationSucceed'))
}) })
} }
@@ -1469,6 +1483,9 @@ function handleBatchRename() {
.then(() => { .then(() => {
message.success(t('pages.gallery.operationSucceed')) message.success(t('pages.gallery.operationSucceed'))
updateGallery() updateGallery()
nextTick(() => {
virtualScrollerRef.value?.refresh()
})
}) })
.catch(() => { .catch(() => {
return true return true