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()
/**
*
* IDID形成一个字典
* ID原有的关系
* groupIdgroupId
* @param elements
* @returns
*/
const pasteElement = (elements: PPTElement[]) => {
const createElementIdMap = (elements: PPTElement[]) => {
const groupIdMap = {}
const elIdMap = {}
for (const element of elements) {
@ -33,6 +36,18 @@ export default () => {
}
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)
for (const element of elements) {
@ -57,10 +72,23 @@ export default () => {
* @param slide
*/
const pasteSlides = (slides: Slide[]) => {
const newSlides = slides.map(slide => ({
const newSlides = slides.map(slide => {
const { groupIdMap, elIdMap } = createElementIdMap(slide.elements)
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)
addHistorySnapshot()
}
@ -111,6 +139,7 @@ export default () => {
}
return {
pasteSlides,
pasteTextClipboardData,
}
}

View File

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