fix: 复制页面时,未更新相关的元素ID

This commit is contained in:
pipipi-pikachu 2021-06-28 21:11:04 +08:00
parent 6358aa9b3c
commit d14c858d87
2 changed files with 38 additions and 12 deletions

View File

@ -20,10 +20,13 @@ export default () => {
const { createTextElement } = useCreateElement() const { createTextElement } = useCreateElement()
/** /**
* * IDID形成一个字典
* ID原有的关系
* groupIdgroupId
* @param elements * @param elements
* @returns
*/ */
const pasteElement = (elements: PPTElement[]) => { const createElementIdMap = (elements: PPTElement[]) => {
const groupIdMap = {} const groupIdMap = {}
const elIdMap = {} const elIdMap = {}
for (const element of elements) { for (const element of elements) {
@ -33,6 +36,18 @@ export default () => {
} }
elIdMap[element.id] = createRandomCode() elIdMap[element.id] = createRandomCode()
} }
return {
groupIdMap,
elIdMap,
}
}
/**
*
* @param elements
*/
const pasteElement = (elements: PPTElement[]) => {
const { groupIdMap, elIdMap } = createElementIdMap(elements)
const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id) const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id)
for (const element of elements) { for (const element of elements) {
@ -57,10 +72,23 @@ export default () => {
* @param slide * @param slide
*/ */
const pasteSlides = (slides: Slide[]) => { const pasteSlides = (slides: Slide[]) => {
const newSlides = slides.map(slide => ({ const newSlides = slides.map(slide => {
...slide, const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)
id: createRandomCode(8),
})) for (const element of slide.elements) {
element.id = elIdMap[element.id]
if (element.groupId) element.groupId = groupIdMap[element.groupId]
}
if (slide.animations) {
for (const animation of slide.animations) {
animation.elId = elIdMap[animation.elId]
}
}
return {
...slide,
id: createRandomCode(8),
}
})
store.commit(MutationTypes.ADD_SLIDE, newSlides) store.commit(MutationTypes.ADD_SLIDE, newSlides)
addHistorySnapshot() addHistorySnapshot()
} }
@ -111,6 +139,7 @@ export default () => {
} }
return { return {
pasteSlides,
pasteTextClipboardData, pasteTextClipboardData,
} }
} }

View File

@ -20,7 +20,7 @@ export default () => {
const selectedSlides = computed(() => slides.value.filter((item, index) => selectedSlidesIndex.value.includes(index))) const selectedSlides = computed(() => slides.value.filter((item, index) => selectedSlidesIndex.value.includes(index)))
const selectedSlidesId = computed(() => selectedSlides.value.map(item => item.id)) const selectedSlidesId = computed(() => selectedSlides.value.map(item => item.id))
const { pasteTextClipboardData } = usePasteTextClipboardData() const { pasteTextClipboardData, pasteSlides } = usePasteTextClipboardData()
const { addHistorySnapshot } = useHistorySnapshot() const { addHistorySnapshot } = useHistorySnapshot()
// 重置幻灯片 // 重置幻灯片
@ -87,11 +87,8 @@ export default () => {
// 将当前页复制一份到下一页 // 将当前页复制一份到下一页
const copyAndPasteSlide = () => { const copyAndPasteSlide = () => {
store.commit(MutationTypes.ADD_SLIDE, { const slide = JSON.parse(JSON.stringify(currentSlide.value))
...currentSlide.value, pasteSlides([slide])
id: createRandomCode(8),
})
addHistorySnapshot()
} }
// 删除当前页,若将删除全部页面,则执行重置幻灯片操作 // 删除当前页,若将删除全部页面,则执行重置幻灯片操作