You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

44 lines
1.5 KiB

import { storeToRefs } from 'pinia'
import { useMainStore, useSlidesStore } from '@/store'
import type { PPTElement } from '@/types/slides'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
export default () => {
const mainStore = useMainStore()
const slidesStore = useSlidesStore()
const { activeElementIdList, activeGroupElementId } = storeToRefs(mainStore)
const { currentSlide } = storeToRefs(slidesStore)
const { addHistorySnapshot } = useHistorySnapshot()
// 删除全部选中元素
// 组合元素成员中,存在被选中可独立操作的元素时,优先删除该元素。否则默认删除所有被选中的元素
const deleteElement = () => {
if (!activeElementIdList.value.length) return
let newElementList: PPTElement[] = []
if (activeGroupElementId.value) {
newElementList = currentSlide.value.elements.filter(el => el.id !== activeGroupElementId.value)
}
else {
newElementList = currentSlide.value.elements.filter(el => !activeElementIdList.value.includes(el.id))
}
mainStore.setActiveElementIdList([])
slidesStore.updateSlide({ elements: newElementList })
addHistorySnapshot()
}
// 删除内面内全部元素(无论是否选中)
const deleteAllElements = () => {
if (!currentSlide.value.elements.length) return
mainStore.setActiveElementIdList([])
slidesStore.updateSlide({ elements: [] })
addHistorySnapshot()
}
return {
deleteElement,
deleteAllElements,
}
}