mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
perf: 连续粘贴优化(#70)
This commit is contained in:
parent
d2ca9af81d
commit
32212a992f
@ -3,7 +3,7 @@ import { storeToRefs } from 'pinia'
|
|||||||
import { nanoid } from 'nanoid'
|
import { nanoid } from 'nanoid'
|
||||||
import { useSlidesStore, useMainStore } from '@/store'
|
import { useSlidesStore, useMainStore } from '@/store'
|
||||||
import type { PPTElement, Slide } from '@/types/slides'
|
import type { PPTElement, Slide } from '@/types/slides'
|
||||||
import { createSlideIdMap, createElementIdMap } from '@/utils/element'
|
import { createSlideIdMap, createElementIdMap, getElementRange } from '@/utils/element'
|
||||||
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
|
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
@ -19,17 +19,39 @@ export default () => {
|
|||||||
*/
|
*/
|
||||||
const addElementsFromData = (elements: PPTElement[]) => {
|
const addElementsFromData = (elements: PPTElement[]) => {
|
||||||
const { groupIdMap, elIdMap } = createElementIdMap(elements)
|
const { groupIdMap, elIdMap } = createElementIdMap(elements)
|
||||||
const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id)
|
|
||||||
|
const firstElement = elements[0]
|
||||||
|
let offset = 0
|
||||||
|
let lastSameElement: PPTElement | undefined
|
||||||
|
|
||||||
|
do {
|
||||||
|
lastSameElement = currentSlide.value.elements.find(el => {
|
||||||
|
if (el.type !== firstElement.type) return false
|
||||||
|
|
||||||
|
const { minX: oMinX, maxX: oMaxX, minY: oMinY, maxY: oMaxY } = getElementRange(el)
|
||||||
|
const { minX: nMinX, maxX: nMaxX, minY: nMinY, maxY: nMaxY } = getElementRange({
|
||||||
|
...firstElement,
|
||||||
|
left: firstElement.left + offset,
|
||||||
|
top: firstElement.top + offset
|
||||||
|
})
|
||||||
|
if (
|
||||||
|
oMinX === nMinX &&
|
||||||
|
oMaxX === nMaxX &&
|
||||||
|
oMinY === nMinY &&
|
||||||
|
oMaxY === nMaxY
|
||||||
|
) return true
|
||||||
|
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
if (lastSameElement) offset += 10
|
||||||
|
|
||||||
|
} while (lastSameElement)
|
||||||
|
|
||||||
for (const element of elements) {
|
for (const element of elements) {
|
||||||
const inCurrentSlide = currentSlideElementIdList.includes(element.id)
|
|
||||||
|
|
||||||
element.id = elIdMap[element.id]
|
element.id = elIdMap[element.id]
|
||||||
|
|
||||||
if (inCurrentSlide) {
|
element.left = element.left + offset
|
||||||
element.left = element.left + 10
|
element.top = element.top + offset
|
||||||
element.top = element.top + 10
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element.groupId) element.groupId = groupIdMap[element.groupId]
|
if (element.groupId) element.groupId = groupIdMap[element.groupId]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user