mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { storeToRefs } from 'pinia'
|
|
import { useMainStore, useSlidesStore } from '@/store'
|
|
import { PPTElement } from '@/types/slides'
|
|
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
|
|
|
|
export default () => {
|
|
const mainStore = useMainStore()
|
|
const slidesStore = useSlidesStore()
|
|
const { activeElementIdList } = storeToRefs(mainStore)
|
|
const { currentSlide } = storeToRefs(slidesStore)
|
|
|
|
const { addHistorySnapshot } = useHistorySnapshot()
|
|
|
|
// 锁定选中的元素,并清空选中元素状态
|
|
const lockElement = () => {
|
|
const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))
|
|
|
|
for (const element of newElementList) {
|
|
if (activeElementIdList.value.includes(element.id)) element.lock = true
|
|
}
|
|
slidesStore.updateSlide({ elements: newElementList })
|
|
mainStore.setActiveElementIdList([])
|
|
addHistorySnapshot()
|
|
}
|
|
|
|
/**
|
|
* 解除元素的锁定状态,并将其设置为当前选择元素
|
|
* @param handleElement 需要解锁的元素
|
|
*/
|
|
const unlockElement = (handleElement: PPTElement) => {
|
|
const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))
|
|
|
|
if (handleElement.groupId) {
|
|
const groupElementIdList = []
|
|
for (const element of newElementList) {
|
|
if (element.groupId === handleElement.groupId) {
|
|
element.lock = false
|
|
groupElementIdList.push(element.id)
|
|
}
|
|
}
|
|
slidesStore.updateSlide({ elements: newElementList })
|
|
mainStore.setActiveElementIdList(groupElementIdList)
|
|
}
|
|
else {
|
|
for (const element of newElementList) {
|
|
if (element.id === handleElement.id) {
|
|
element.lock = false
|
|
break
|
|
}
|
|
}
|
|
slidesStore.updateSlide({ elements: newElementList })
|
|
mainStore.setActiveElementIdList([handleElement.id])
|
|
}
|
|
addHistorySnapshot()
|
|
}
|
|
|
|
return {
|
|
lockElement,
|
|
unlockElement,
|
|
}
|
|
} |