Merge branch 'master' of github.com:pipipi-pikachu/ppt_online_editor

This commit is contained in:
pipipi-pikachu 2021-05-31 21:02:23 +08:00
commit 07c3b74ce3

View File

@ -1,128 +1,133 @@
import { computed } from 'vue' import { computed } from 'vue'
import { MutationTypes, useStore } from '@/store' import { MutationTypes, useStore } from '@/store'
import { Slide } from '@/types/slides' import { Slide } from '@/types/slides'
import { createRandomCode } from '@/utils/common' import { createRandomCode } from '@/utils/common'
import { copyText, readClipboard } from '@/utils/clipboard' import { copyText, readClipboard } from '@/utils/clipboard'
import { encrypt } from '@/utils/crypto' import { encrypt } from '@/utils/crypto'
import { KEYS } from '@/configs/hotkey' import { KEYS } from '@/configs/hotkey'
import { message } from 'ant-design-vue' import { message } from 'ant-design-vue'
import usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData' import usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData'
import useHistorySnapshot from '@/hooks/useHistorySnapshot' import useHistorySnapshot from '@/hooks/useHistorySnapshot'
export default () => { export default () => {
const store = useStore() const store = useStore()
const slideIndex = computed(() => store.state.slideIndex) const slideIndex = computed(() => store.state.slideIndex)
const theme = computed(() => store.state.theme) const theme = computed(() => store.state.theme)
const slides = computed(() => store.state.slides) const slides = computed(() => store.state.slides)
const currentSlide = computed<Slide>(() => store.getters.currentSlide) const currentSlide = computed<Slide>(() => store.getters.currentSlide)
const selectedSlidesIndex = computed(() => [...store.state.selectedSlidesIndex, slideIndex.value]) const selectedSlidesIndex = computed(() => [...store.state.selectedSlidesIndex, slideIndex.value])
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 } = usePasteTextClipboardData()
const { addHistorySnapshot } = useHistorySnapshot() const { addHistorySnapshot } = useHistorySnapshot()
// 重置幻灯片 // 重置幻灯片
const resetSlides = () => { const resetSlides = () => {
store.commit(MutationTypes.UPDATE_SLIDE_INDEX, 0) const emptySlide = {
store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, []) id: createRandomCode(8),
store.commit(MutationTypes.SET_SLIDES, [{ elements: [],
id: createRandomCode(8), background: {
elements: [], type: 'solid',
}]) color: theme.value.backgroundColor,
} },
}
/** store.commit(MutationTypes.UPDATE_SLIDE_INDEX, 0)
* store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])
* @param command store.commit(MutationTypes.SET_SLIDES, [emptySlide])
*/ }
const updateSlideIndex = (command: string) => {
if (command === KEYS.UP && slideIndex.value > 0) { /**
store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1) *
} * @param command
else if (command === KEYS.DOWN && slideIndex.value < slides.value.length - 1) { */
store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1) const updateSlideIndex = (command: string) => {
} if (command === KEYS.UP && slideIndex.value > 0) {
} store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value - 1)
}
// 将当前页面数据加密后复制到剪贴板 else if (command === KEYS.DOWN && slideIndex.value < slides.value.length - 1) {
const copySlide = () => { store.commit(MutationTypes.UPDATE_SLIDE_INDEX, slideIndex.value + 1)
const text = encrypt(JSON.stringify({ }
type: 'slides', }
data: selectedSlides.value,
})) // 将当前页面数据加密后复制到剪贴板
const copySlide = () => {
copyText(text).then(() => { const text = encrypt(JSON.stringify({
store.commit(MutationTypes.SET_THUMBNAILS_FOCUS, true) type: 'slides',
}) data: selectedSlides.value,
} }))
// 尝试将剪贴板页面数据解密后添加到下一页(粘贴) copyText(text).then(() => {
const pasteSlide = () => { store.commit(MutationTypes.SET_THUMBNAILS_FOCUS, true)
readClipboard().then(text => { })
pasteTextClipboardData(text, { onlySlide: true }) }
}).catch(err => message.warning(err))
} // 尝试将剪贴板页面数据解密后添加到下一页(粘贴)
const pasteSlide = () => {
// 创建一页空白页并添加到下一页 readClipboard().then(text => {
const createSlide = () => { pasteTextClipboardData(text, { onlySlide: true })
const emptySlide = { }).catch(err => message.warning(err))
id: createRandomCode(8), }
elements: [],
background: { // 创建一页空白页并添加到下一页
type: 'solid', const createSlide = () => {
color: theme.value.backgroundColor, const emptySlide = {
}, id: createRandomCode(8),
} elements: [],
store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, []) background: {
store.commit(MutationTypes.ADD_SLIDE, emptySlide) type: 'solid',
addHistorySnapshot() color: theme.value.backgroundColor,
} },
}
// 将当前页复制一份到下一页 store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])
const copyAndPasteSlide = () => { store.commit(MutationTypes.ADD_SLIDE, emptySlide)
store.commit(MutationTypes.ADD_SLIDE, { addHistorySnapshot()
...currentSlide.value, }
id: createRandomCode(8),
}) // 将当前页复制一份到下一页
addHistorySnapshot() const copyAndPasteSlide = () => {
} store.commit(MutationTypes.ADD_SLIDE, {
...currentSlide.value,
// 删除当前页,若将删除全部页面,则执行重置幻灯片操作 id: createRandomCode(8),
const deleteSlide = (targetSlidesId = selectedSlidesId.value) => { })
if (slides.value.length === targetSlidesId.length) resetSlides() addHistorySnapshot()
else store.commit(MutationTypes.DELETE_SLIDE, targetSlidesId) }
store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, []) // 删除当前页,若将删除全部页面,则执行重置幻灯片操作
const deleteSlide = (targetSlidesId = selectedSlidesId.value) => {
addHistorySnapshot() if (slides.value.length === targetSlidesId.length) resetSlides()
} else store.commit(MutationTypes.DELETE_SLIDE, targetSlidesId)
// 将当前页复制后删除(剪切) store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, [])
// 由于复制操作会导致多选状态消失所以需要提前将需要删除的页面ID进行缓存
const cutSlide = () => { addHistorySnapshot()
const targetSlidesId = [...selectedSlidesId.value] }
copySlide()
deleteSlide(targetSlidesId) // 将当前页复制后删除(剪切)
} // 由于复制操作会导致多选状态消失所以需要提前将需要删除的页面ID进行缓存
const cutSlide = () => {
// 选中全部幻灯片 const targetSlidesId = [...selectedSlidesId.value]
const selectAllSlide = () => { copySlide()
const newSelectedSlidesIndex = Array.from(Array(slides.value.length), (item, index) => index) deleteSlide(targetSlidesId)
store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, []) }
store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)
} // 选中全部幻灯片
const selectAllSlide = () => {
return { const newSelectedSlidesIndex = Array.from(Array(slides.value.length), (item, index) => index)
resetSlides, store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, [])
updateSlideIndex, store.commit(MutationTypes.UPDATE_SELECTED_SLIDES_INDEX, newSelectedSlidesIndex)
copySlide, }
pasteSlide,
createSlide, return {
copyAndPasteSlide, resetSlides,
deleteSlide, updateSlideIndex,
cutSlide, copySlide,
selectAllSlide, pasteSlide,
} createSlide,
copyAndPasteSlide,
deleteSlide,
cutSlide,
selectAllSlide,
}
} }