mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
fix: 复制页面时,未更新相关的元素ID
This commit is contained in:
parent
6358aa9b3c
commit
d14c858d87
@ -20,10 +20,13 @@ export default () => {
|
|||||||
const { createTextElement } = useCreateElement()
|
const { createTextElement } = useCreateElement()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 粘贴元素(一组)
|
* 以元素列表为基础,为每一个元素生成新的ID,并关联到旧ID形成一个字典
|
||||||
|
* 主要用于复制元素时,维持数据中各处元素ID原有的关系
|
||||||
|
* 例如:原本两个组合的元素拥有相同的groupId,复制后依然会拥有另一个相同的groupId
|
||||||
* @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,
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除当前页,若将删除全部页面,则执行重置幻灯片操作
|
// 删除当前页,若将删除全部页面,则执行重置幻灯片操作
|
||||||
|
Loading…
x
Reference in New Issue
Block a user