diff --git a/src/hooks/useSlideHandler.ts b/src/hooks/useSlideHandler.ts index eb2c3f2b..cbe11d08 100644 --- a/src/hooks/useSlideHandler.ts +++ b/src/hooks/useSlideHandler.ts @@ -138,6 +138,18 @@ export default () => { mainStore.updateSelectedSlidesIndex(newSelectedSlidesIndex) } + // 拖拽调整幻灯片顺序同步数据 + const sortSlides = (newIndex: number, oldIndex: number) => { + if (oldIndex === newIndex) return + + const _slides = JSON.parse(JSON.stringify(slides.value)) + const _slide = _slides[oldIndex] + _slides.splice(oldIndex, 1) + _slides.splice(newIndex, 0, _slide) + slidesStore.setSlides(_slides) + slidesStore.updateSlideIndex(newIndex) + } + return { resetSlides, updateSlideIndex, @@ -149,5 +161,6 @@ export default () => { deleteSlide, cutSlide, selectAllSlide, + sortSlides, } } \ No newline at end of file diff --git a/src/views/Editor/Thumbnails/index.vue b/src/views/Editor/Thumbnails/index.vue index c01a224b..524d49fd 100644 --- a/src/views/Editor/Thumbnails/index.vue +++ b/src/views/Editor/Thumbnails/index.vue @@ -81,6 +81,7 @@ const { deleteSlide, cutSlide, selectAllSlide, + sortSlides, } = useSlideHandler() // 切换页面 @@ -153,14 +154,7 @@ const setThumbnailsFocus = (focus: boolean) => { // 拖拽调整顺序后进行数据的同步 const handleDragEnd = (eventData: { newIndex: number; oldIndex: number }) => { const { newIndex, oldIndex } = eventData - if (oldIndex === newIndex) return - - const _slides = JSON.parse(JSON.stringify(slides.value)) - const _slide = _slides[oldIndex] - _slides.splice(oldIndex, 1) - _slides.splice(newIndex, 0, _slide) - slidesStore.setSlides(_slides) - slidesStore.updateSlideIndex(newIndex) + sortSlides(newIndex, oldIndex) } const { enterScreening, enterScreeningFromStart } = useScreening() diff --git a/src/views/Mobile/MobileThumbnails.vue b/src/views/Mobile/MobileThumbnails.vue index 5d97a4be..4c74936f 100644 --- a/src/views/Mobile/MobileThumbnails.vue +++ b/src/views/Mobile/MobileThumbnails.vue @@ -1,15 +1,28 @@ @@ -17,16 +30,26 @@ import { storeToRefs } from 'pinia' import { useSlidesStore } from '@/store' import useLoadSlides from '@/hooks/useLoadSlides' +import useSlideHandler from '@/hooks/useSlideHandler' +import Draggable from 'vuedraggable' import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue' const slidesStore = useSlidesStore() const { slides, slideIndex } = storeToRefs(slidesStore) +const { sortSlides } = useSlideHandler() + const { slidesLoadLimit } = useLoadSlides() const changeSlideIndex = (index: number) => { slidesStore.updateSlideIndex(index) } + +// 拖拽调整顺序后进行数据的同步 +const handleDragEnd = (eventData: { newIndex: number; oldIndex: number }) => { + const { newIndex, oldIndex } = eventData + sortSlides(newIndex, oldIndex) +}