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] =?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原有的关系