diff --git a/apps/example/src/types/components.d.ts b/apps/example/src/types/components.d.ts index 01fb2258..f896644a 100755 --- a/apps/example/src/types/components.d.ts +++ b/apps/example/src/types/components.d.ts @@ -185,4 +185,4 @@ declare global { const FaTooltip: typeof import('@fantastic-admin/components')['FaTooltip'] const FaTree: typeof import('@fantastic-admin/components')['FaTree'] const FaTrend: typeof import('@fantastic-admin/components')['FaTrend'] -} +} \ No newline at end of file diff --git a/apps/example/src/views/component_example/image_upload/_demo2.vue b/apps/example/src/views/component_example/image_upload/_demo2.vue index 3c253da1..f7ba2edf 100755 --- a/apps/example/src/views/component_example/image_upload/_demo2.vue +++ b/apps/example/src/views/component_example/image_upload/_demo2.vue @@ -10,7 +10,7 @@ function handleSuccess() { diff --git a/apps/example/src/views/component_example/image_upload/_demo3.vue b/apps/example/src/views/component_example/image_upload/_demo3.vue index 9027b3a6..4df58e2d 100755 --- a/apps/example/src/views/component_example/image_upload/_demo3.vue +++ b/apps/example/src/views/component_example/image_upload/_demo3.vue @@ -10,7 +10,7 @@ function handleSuccess() { ('modelValue', { required: true }) +interface ImageItem { + key: string + src: string +} + const activeUploadCount = ref(0) const uploadProgress = ref(0) +const imageItemSeed = shallowRef(0) +const imageItems = ref([]) const containerRef = useTemplateRef('containerRef') const fileInputRef = useTemplateRef('fileInputRef') const isHoveringContainer = ref(false) @@ -63,6 +70,35 @@ const canHandlePaste = computed(() => && (isHoveringContainer.value || isContainerFocused.value), ) +watch(images, (currentImages) => { + const reusableItems = new Map() + imageItems.value.forEach((item) => { + const itemsForSrc = reusableItems.get(item.src) + if (itemsForSrc) { + itemsForSrc.push(item) + } + else { + reusableItems.set(item.src, [item]) + } + }) + + imageItems.value = currentImages.map((src) => { + const reusableItem = reusableItems.get(src)?.shift() + if (reusableItem) { + return reusableItem + } + + imageItemSeed.value += 1 + return { + key: `fa-image-upload-item-${imageItemSeed.value}`, + src, + } + }) +}, { + deep: true, + immediate: true, +}) + function normalizeExt(ext?: string) { if (!ext) { return '' @@ -231,6 +267,20 @@ function onMove(index: number, direction: 'forward' | 'backward') { images.value[index] = images.value.splice(index + 1, 1, images.value[index])[0] } } + +function onBeforeLeave(el: Element) { + if (!(el instanceof HTMLElement) || !(el.parentElement instanceof HTMLElement)) { + return + } + + const elementRect = el.getBoundingClientRect() + const listRect = el.parentElement.getBoundingClientRect() + + el.style.left = `${elementRect.left - listRect.left}px` + el.style.top = `${elementRect.top - listRect.top}px` + el.style.width = `${elementRect.width}px` + el.style.height = `${elementRect.height}px` +} @@ -243,14 +293,19 @@ function onMove(index: number, direction: 'forward' | 'backward') { @focusin="onContainerFocusIn" @focusout="onContainerFocusOut" > - + - + @@ -300,7 +355,7 @@ function onMove(index: number, direction: 'forward' | 'backward') { - + 建议尺寸为 {{ props.dimension.width }}*{{ props.dimension.height }} @@ -320,3 +375,39 @@ function onMove(index: number, direction: 'forward' | 'backward') { + +