diff --git a/components.d.ts b/components.d.ts index 393e90d..ed64dd7 100644 --- a/components.d.ts +++ b/components.d.ts @@ -11,9 +11,7 @@ export {} /* prettier-ignore */ declare module 'vue' { export interface GlobalComponents { - 2: typeof import('./src/components/virtual-scroller/VirtualScroller copy 2.vue')['default'] Canvas: typeof import('./src/components/canvas/index.vue')['default'] - copy: typeof import('./src/components/virtual-scroller/VirtualScroller copy.vue')['default'] DialogBox: typeof import('./src/components/dialogBox/index.vue')['default'] ElButton: typeof import('element-plus/es')['ElButton'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] @@ -21,6 +19,7 @@ declare module 'vue' { ElUpload: typeof import('element-plus/es')['ElUpload'] IEpCalendar: typeof import('~icons/ep/calendar')['default'] IEpClose: typeof import('~icons/ep/close')['default'] + IEpDocumentCopy: typeof import('~icons/ep/document-copy')['default'] IEpLoading: typeof import('~icons/ep/loading')['default'] IEpPlus: typeof import('~icons/ep/plus')['default'] IEpStar: typeof import('~icons/ep/star')['default'] @@ -39,5 +38,6 @@ declare module 'vue' { VirtualScroller: typeof import('./src/components/virtual-scroller/VirtualScroller.vue')['default'] 'VirtualScroller copy': typeof import('./src/components/virtual-scroller/VirtualScroller copy.vue')['default'] 'VirtualScroller copy 2': typeof import('./src/components/virtual-scroller/VirtualScroller copy 2.vue')['default'] + 'VirtualScroller copy 3': typeof import('./src/components/virtual-scroller/VirtualScroller copy 3.vue')['default'] } } diff --git a/src/components/dialogBox/index.vue b/src/components/dialogBox/index.vue index da4120e..f86e29c 100644 --- a/src/components/dialogBox/index.vue +++ b/src/components/dialogBox/index.vue @@ -312,7 +312,8 @@ onMounted(async () => { diff --git a/src/components/virtual-scroller/VirtualScroller.vue b/src/components/virtual-scroller/VirtualScroller.vue index 55f5a2b..1a94268 100644 --- a/src/components/virtual-scroller/VirtualScroller.vue +++ b/src/components/virtual-scroller/VirtualScroller.vue @@ -316,7 +316,7 @@ const measureItem = (index, element) => { const firstChild = element.firstElementChild const targetElement = firstChild || element - const height = targetElement.getBoundingClientRect().height + const height = Math.ceil(targetElement.offsetHeight) if (height > 0) { const cachedHeight = itemHeights.value.get(index) @@ -506,6 +506,7 @@ watch(() => computedData.value, (newData, oldData) => { watch(visibleItems, (newItems) => { nextTick(() => { observeVisibleItems() + cleanupExtraItems(newItems) }) if (newItems.length > 0) { const firstItem = newItems[0] @@ -514,6 +515,43 @@ watch(visibleItems, (newItems) => { } }, { deep: true }) +const cleanupExtraItems = (visibleItems) => { + if (!itemRefs.size || !visibleItems.length) return + + const visibleIndices = new Set(visibleItems.map(item => item.index)) + const existingIndices = Array.from(itemRefs.keys()).sort((a, b) => a - b) + + const toRemove = [] + let lastValidIndex = -1 + + for (const index of existingIndices) { + if (visibleIndices.has(index)) { + if (lastValidIndex !== -1 && index !== lastValidIndex + 1) { + for (let i = lastValidIndex + 1; i < index; i++) { + if (itemRefs.has(i)) { + toRemove.push(i) + } + } + } + lastValidIndex = index + } else { + toRemove.push(index) + } + } + + for (const index of toRemove) { + const element = itemRefs.get(index) + if (element && element.parentNode) { + element.parentNode.removeChild(element) + } + itemRefs.delete(index) + } + + if (toRemove.length > 0) { + console.log(`清理了 ${toRemove.length} 个多余项目:`, toRemove) + } +} + onMounted(() => { setupResizeObserver() isInitialized.value = true @@ -526,6 +564,7 @@ onMounted(() => { } observeVisibleItems() + cleanupExtraItems(visibleItems.value) }) }) diff --git a/src/style.css b/src/style.css index 98cbd70..f62d7b9 100644 --- a/src/style.css +++ b/src/style.css @@ -22,7 +22,7 @@ body { margin: 0; width: 100%; height: 100vh; - min-width: 1500px; + min-width: 1300px; /* min-height: 960px; */ overflow-y: hidden; } diff --git a/src/views/home/display/components/set.vue b/src/views/home/display/components/set.vue index 6c91529..f2acb22 100644 --- a/src/views/home/display/components/set.vue +++ b/src/views/home/display/components/set.vue @@ -4,8 +4,11 @@