diff --git a/src/hooks/useAlignElementToCanvas.ts b/src/hooks/useAlignElementToCanvas.ts index 80959426..d1735459 100644 --- a/src/hooks/useAlignElementToCanvas.ts +++ b/src/hooks/useAlignElementToCanvas.ts @@ -7,8 +7,8 @@ import useHistorySnapshot from './useHistorySnapshot' export default () => { const slidesStore = useSlidesStore() - const { activeElementIdList, activeElementList, viewportSize } = storeToRefs(useMainStore()) - const { currentSlide, viewportRatio } = storeToRefs(slidesStore) + const { activeElementIdList, activeElementList } = storeToRefs(useMainStore()) + const { currentSlide, viewportRatio, viewportSize } = storeToRefs(slidesStore) const { addHistorySnapshot } = useHistorySnapshot() diff --git a/src/hooks/useCreateElement.ts b/src/hooks/useCreateElement.ts index 3c7fbbd0..3d79c221 100644 --- a/src/hooks/useCreateElement.ts +++ b/src/hooks/useCreateElement.ts @@ -30,8 +30,8 @@ interface CreateTextData { export default () => { const mainStore = useMainStore() const slidesStore = useSlidesStore() - const { creatingElement, viewportSize } = storeToRefs(mainStore) - const { theme, viewportRatio } = storeToRefs(slidesStore) + const { creatingElement } = storeToRefs(mainStore) + const { theme, viewportRatio, viewportSize } = storeToRefs(slidesStore) const { addHistorySnapshot } = useHistorySnapshot() diff --git a/src/hooks/useExport.ts b/src/hooks/useExport.ts index 3f4591cd..d8e5fdfc 100644 --- a/src/hooks/useExport.ts +++ b/src/hooks/useExport.ts @@ -5,7 +5,7 @@ import { saveAs } from 'file-saver' import pptxgen from 'pptxgenjs' import tinycolor from 'tinycolor2' import { toPng, toJpeg } from 'html-to-image' -import { useMainStore, useSlidesStore } from '@/store' +import { useSlidesStore } from '@/store' import type { PPTElementOutline, PPTElementShadow, PPTElementLink, Slide } from '@/types/slides' import { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element' import { type AST, toAST } from '@/utils/htmlParser' @@ -22,8 +22,7 @@ interface ExportImageConfig { export default () => { const slidesStore = useSlidesStore() - const { slides, theme, viewportRatio, title } = storeToRefs(slidesStore) - const { viewportSize } = storeToRefs(useMainStore()) + const { slides, theme, viewportRatio, title, viewportSize } = storeToRefs(slidesStore) const ratioPx2Inch = computed(() => { return 96 * (viewportSize.value / 960) diff --git a/src/hooks/useImport.ts b/src/hooks/useImport.ts index e0a9569b..03d5211b 100644 --- a/src/hooks/useImport.ts +++ b/src/hooks/useImport.ts @@ -2,7 +2,7 @@ import { ref } from 'vue' import { storeToRefs } from 'pinia' import { parse, type Shape, type Element, type ChartItem } from 'pptxtojson' import { nanoid } from 'nanoid' -import { useMainStore, useSlidesStore } from '@/store' +import { useSlidesStore } from '@/store' import { decrypt } from '@/utils/crypto' import { type ShapePoolItem, SHAPE_LIST, SHAPE_PATH_FORMULAS } from '@/configs/shapes' import useAddSlidesOrElements from '@/hooks/useAddSlidesOrElements' @@ -31,9 +31,6 @@ export default () => { const slidesStore = useSlidesStore() const { theme } = storeToRefs(useSlidesStore()) - const mainStore = useMainStore() - const { viewportSize } = storeToRefs(mainStore) - const { addSlidesFromData } = useAddSlidesOrElements() const { isEmptySlide } = useSlideHandler() @@ -111,7 +108,7 @@ export default () => { const ratio = 96 / 72 const width = json.size.width - mainStore.setViewportSize(width * ratio) + slidesStore.setViewportSize(width * ratio) const slides: Slide[] = [] for (const item of json.slides) { diff --git a/src/store/main.ts b/src/store/main.ts index 38f157d4..b71739e5 100644 --- a/src/store/main.ts +++ b/src/store/main.ts @@ -14,7 +14,6 @@ export interface MainState { handleElementId: string activeGroupElementId: string hiddenElementIdList: string[] - viewportSize: number canvasPercentage: number canvasScale: number canvasDragged: boolean @@ -50,9 +49,8 @@ export const useMainStore = defineStore('main', { handleElementId: '', // 正在操作的元素ID activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID hiddenElementIdList: [], // 被隐藏的元素ID集合 - viewportSize: 1000, // 可视区域宽度基数 canvasPercentage: 90, // 画布可视区域百分比 - canvasScale: 1, // 画布缩放比例(基于宽度1000px) + canvasScale: 1, // 画布缩放比例(基于宽度{{slidesStore.viewportSize}}像素) canvasDragged: false, // 画布被拖拽移动 thumbnailsFocus: false, // 左侧导航缩略图区域聚焦 editorAreaFocus: false, // 编辑区域聚焦 @@ -117,10 +115,6 @@ export const useMainStore = defineStore('main', { this.canvasPercentage = percentage }, - setViewportSize(size: number) { - this.viewportSize = size - }, - setCanvasScale(scale: number) { this.canvasScale = scale }, diff --git a/src/store/slides.ts b/src/store/slides.ts index 5028505d..350f3f3c 100644 --- a/src/store/slides.ts +++ b/src/store/slides.ts @@ -27,6 +27,7 @@ export interface SlidesState { theme: SlideTheme slides: Slide[] slideIndex: number + viewportSize: number viewportRatio: number } @@ -36,6 +37,7 @@ export const useSlidesStore = defineStore('slides', { theme: theme, // 主题样式 slides: slides, // 幻灯片页面数据 slideIndex: 0, // 当前页面索引 + viewportSize: 1000, // 可视区域宽度基数 viewportRatio: 0.5625, // 可视区域比例,默认16:9 }), @@ -116,6 +118,10 @@ export const useSlidesStore = defineStore('slides', { this.theme = { ...this.theme, ...themeProps } }, + setViewportSize(size: number) { + this.viewportSize = size + }, + setViewportRatio(viewportRatio: number) { this.viewportRatio = viewportRatio }, diff --git a/src/views/Editor/Canvas/GridLines.vue b/src/views/Editor/Canvas/GridLines.vue index 53c9eaed..13f968a0 100644 --- a/src/views/Editor/Canvas/GridLines.vue +++ b/src/views/Editor/Canvas/GridLines.vue @@ -20,8 +20,8 @@ import { storeToRefs } from 'pinia' import { useMainStore, useSlidesStore } from '@/store' import type { SlideBackground } from '@/types/slides' -const { canvasScale, gridLineSize, viewportSize } = storeToRefs(useMainStore()) -const { currentSlide, viewportRatio } = storeToRefs(useSlidesStore()) +const { canvasScale, gridLineSize } = storeToRefs(useMainStore()) +const { currentSlide, viewportRatio, viewportSize } = storeToRefs(useSlidesStore()) const background = computed(() => currentSlide.value?.background) diff --git a/src/views/Editor/Canvas/Ruler.vue b/src/views/Editor/Canvas/Ruler.vue index ecef2a11..888563bf 100644 --- a/src/views/Editor/Canvas/Ruler.vue +++ b/src/views/Editor/Canvas/Ruler.vue @@ -72,8 +72,8 @@ const props = defineProps<{ elementList: PPTElement[] }>() -const { canvasScale, activeElementIdList, viewportSize } = storeToRefs(useMainStore()) -const { viewportRatio } = storeToRefs(useSlidesStore()) +const { canvasScale, activeElementIdList } = storeToRefs(useMainStore()) +const { viewportRatio, viewportSize } = storeToRefs(useSlidesStore()) const elementListRange = ref>(null) diff --git a/src/views/Editor/Canvas/hooks/useDragElement.ts b/src/views/Editor/Canvas/hooks/useDragElement.ts index 7a2d1ffa..b47d3573 100644 --- a/src/views/Editor/Canvas/hooks/useDragElement.ts +++ b/src/views/Editor/Canvas/hooks/useDragElement.ts @@ -12,9 +12,9 @@ export default ( canvasScale: Ref, ) => { const slidesStore = useSlidesStore() - const { activeElementIdList, activeGroupElementId, viewportSize } = storeToRefs(useMainStore()) + const { activeElementIdList, activeGroupElementId } = storeToRefs(useMainStore()) const { shiftKeyState } = storeToRefs(useKeyboardStore()) - const { viewportRatio } = storeToRefs(slidesStore) + const { viewportRatio, viewportSize } = storeToRefs(slidesStore) const { addHistorySnapshot } = useHistorySnapshot() diff --git a/src/views/Editor/Canvas/hooks/useScaleElement.ts b/src/views/Editor/Canvas/hooks/useScaleElement.ts index b64fa915..f0db93cb 100644 --- a/src/views/Editor/Canvas/hooks/useScaleElement.ts +++ b/src/views/Editor/Canvas/hooks/useScaleElement.ts @@ -99,8 +99,8 @@ export default ( ) => { const mainStore = useMainStore() const slidesStore = useSlidesStore() - const { activeElementIdList, activeGroupElementId, viewportSize } = storeToRefs(mainStore) - const { viewportRatio } = storeToRefs(slidesStore) + const { activeElementIdList, activeGroupElementId } = storeToRefs(mainStore) + const { viewportRatio, viewportSize } = storeToRefs(slidesStore) const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore()) const { addHistorySnapshot } = useHistorySnapshot() diff --git a/src/views/Editor/Canvas/hooks/useViewportSize.ts b/src/views/Editor/Canvas/hooks/useViewportSize.ts index ec919eea..1d215bc0 100644 --- a/src/views/Editor/Canvas/hooks/useViewportSize.ts +++ b/src/views/Editor/Canvas/hooks/useViewportSize.ts @@ -7,8 +7,8 @@ export default (canvasRef: Ref) => { const viewportTop = ref(0) const mainStore = useMainStore() - const { canvasPercentage, canvasDragged, viewportSize } = storeToRefs(mainStore) - const { viewportRatio } = storeToRefs(useSlidesStore()) + const { canvasPercentage, canvasDragged } = storeToRefs(mainStore) + const { viewportRatio, viewportSize } = storeToRefs(useSlidesStore()) // 初始化画布可视区域的位置 const initViewportPosition = () => { diff --git a/src/views/Mobile/MobileEditor/SlideToolbar.vue b/src/views/Mobile/MobileEditor/SlideToolbar.vue index 897e0693..9c06c5a1 100644 --- a/src/views/Mobile/MobileEditor/SlideToolbar.vue +++ b/src/views/Mobile/MobileEditor/SlideToolbar.vue @@ -32,7 +32,7 @@