From 160240d2db2e58b3083fda36826ccf777d904da1 Mon Sep 17 00:00:00 2001 From: ChaoXxxx <474142438@qq.com> Date: Fri, 5 Aug 2022 18:23:53 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=97=B6=E8=8B=A5element=E5=AD=98=E5=9C=A8li?= =?UTF-8?q?nk=E6=A3=80=E6=9F=A5=E5=B9=B6=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useAddSlidesOrElements.ts | 13 ++++++++++++- src/utils/element.ts | 13 +++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/hooks/useAddSlidesOrElements.ts b/src/hooks/useAddSlidesOrElements.ts index 2ff2505e..1b0e63a9 100644 --- a/src/hooks/useAddSlidesOrElements.ts +++ b/src/hooks/useAddSlidesOrElements.ts @@ -2,7 +2,7 @@ import { storeToRefs } from 'pinia' import { nanoid } from 'nanoid' import { useSlidesStore, useMainStore } from '@/store' import { PPTElement, Slide } from '@/types/slides' -import { createElementIdMap } from '@/utils/element' +import { createSlideIdMap, createElementIdMap } from '@/utils/element' import useHistorySnapshot from '@/hooks/useHistorySnapshot' export default () => { @@ -42,12 +42,23 @@ export default () => { * @param slide 页面数据 */ const addSlidesFromData = (slides: Slide[]) => { + const slideIdMap = createSlideIdMap(slides) 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] + + // 判断element跳转链接,如为slide且复制页面含target则替换,否则重置为undefined + if (element?.link && element.link.type === 'slide') { + if (slideIdMap[element.link.target]) { + element.link.target = slideIdMap[element.link.target] + } + else { + element.link = undefined + } + } } // 动画id替换 if (slide.animations) { diff --git a/src/utils/element.ts b/src/utils/element.ts index f1646f44..1e063d24 100644 --- a/src/utils/element.ts +++ b/src/utils/element.ts @@ -152,6 +152,19 @@ export const uniqAlignLines = (lines: AlignLine[]) => { return uniqLines } +/** + * 以页面列表为基础,为每一个页面生成新的ID,并关联到旧ID形成一个字典 + * 主要用于页面元素时,维持数据中各处页面ID原有的关系 + * @param slides 页面列表 + */ +export const createSlideIdMap = (slides: Slide[]) => { + const slideIdMap = {} + for (const slide of slides) { + slideIdMap[slide.id] = nanoid(10) + } + return slideIdMap +} + /** * 以元素列表为基础,为每一个元素生成新的ID,并关联到旧ID形成一个字典 * 主要用于复制元素时,维持数据中各处元素ID原有的关系 From c452c7402578943ff6ab892883d47e33cb77d811 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Sun, 7 Aug 2022 12:25:33 +0800 Subject: [PATCH 2/2] fix: PR #136 bug fix --- src/hooks/useAddSlidesOrElements.ts | 13 +++++++------ src/utils/element.ts | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/hooks/useAddSlidesOrElements.ts b/src/hooks/useAddSlidesOrElements.ts index 1b0e63a9..5666b29c 100644 --- a/src/hooks/useAddSlidesOrElements.ts +++ b/src/hooks/useAddSlidesOrElements.ts @@ -50,14 +50,15 @@ export default () => { element.id = elIdMap[element.id] if (element.groupId) element.groupId = groupIdMap[element.groupId] - // 判断element跳转链接,如为slide且复制页面含target则替换,否则重置为undefined - if (element?.link && element.link.type === 'slide') { + // 若元素绑定了页面跳转链接 + if (element.link && element.link.type === 'slide') { + + // 待添加页面中包含该页面,则替换相关绑定关系 if (slideIdMap[element.link.target]) { element.link.target = slideIdMap[element.link.target] } - else { - element.link = undefined - } + // 待添加页面中不包含该页面,则删除该元素绑定的页面跳转 + else delete element.link } } // 动画id替换 @@ -69,7 +70,7 @@ export default () => { } return { ...slide, - id: nanoid(10), + id: slideIdMap[slide.id], } }) slidesStore.addSlide(newSlides) diff --git a/src/utils/element.ts b/src/utils/element.ts index 1e063d24..5937b19d 100644 --- a/src/utils/element.ts +++ b/src/utils/element.ts @@ -1,6 +1,6 @@ import tinycolor from 'tinycolor2' import { nanoid } from 'nanoid' -import { PPTElement, PPTLineElement } from '@/types/slides' +import { PPTElement, PPTLineElement, Slide } from '@/types/slides' interface RotatedElementData { left: number