mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
perf: store代码优化
This commit is contained in:
parent
6e45f131c5
commit
24ba7ea576
@ -7,8 +7,8 @@ import useHistorySnapshot from './useHistorySnapshot'
|
|||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const { activeElementIdList, activeElementList, viewportSize } = storeToRefs(useMainStore())
|
const { activeElementIdList, activeElementList } = storeToRefs(useMainStore())
|
||||||
const { currentSlide, viewportRatio } = storeToRefs(slidesStore)
|
const { currentSlide, viewportRatio, viewportSize } = storeToRefs(slidesStore)
|
||||||
|
|
||||||
const { addHistorySnapshot } = useHistorySnapshot()
|
const { addHistorySnapshot } = useHistorySnapshot()
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@ interface CreateTextData {
|
|||||||
export default () => {
|
export default () => {
|
||||||
const mainStore = useMainStore()
|
const mainStore = useMainStore()
|
||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const { creatingElement, viewportSize } = storeToRefs(mainStore)
|
const { creatingElement } = storeToRefs(mainStore)
|
||||||
const { theme, viewportRatio } = storeToRefs(slidesStore)
|
const { theme, viewportRatio, viewportSize } = storeToRefs(slidesStore)
|
||||||
|
|
||||||
const { addHistorySnapshot } = useHistorySnapshot()
|
const { addHistorySnapshot } = useHistorySnapshot()
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import { saveAs } from 'file-saver'
|
|||||||
import pptxgen from 'pptxgenjs'
|
import pptxgen from 'pptxgenjs'
|
||||||
import tinycolor from 'tinycolor2'
|
import tinycolor from 'tinycolor2'
|
||||||
import { toPng, toJpeg } from 'html-to-image'
|
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 type { PPTElementOutline, PPTElementShadow, PPTElementLink, Slide } from '@/types/slides'
|
||||||
import { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element'
|
import { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element'
|
||||||
import { type AST, toAST } from '@/utils/htmlParser'
|
import { type AST, toAST } from '@/utils/htmlParser'
|
||||||
@ -22,8 +22,7 @@ interface ExportImageConfig {
|
|||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const { slides, theme, viewportRatio, title } = storeToRefs(slidesStore)
|
const { slides, theme, viewportRatio, title, viewportSize } = storeToRefs(slidesStore)
|
||||||
const { viewportSize } = storeToRefs(useMainStore())
|
|
||||||
|
|
||||||
const ratioPx2Inch = computed(() => {
|
const ratioPx2Inch = computed(() => {
|
||||||
return 96 * (viewportSize.value / 960)
|
return 96 * (viewportSize.value / 960)
|
||||||
|
@ -2,7 +2,7 @@ import { ref } from 'vue'
|
|||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { parse, type Shape, type Element, type ChartItem } from 'pptxtojson'
|
import { parse, type Shape, type Element, type ChartItem } from 'pptxtojson'
|
||||||
import { nanoid } from 'nanoid'
|
import { nanoid } from 'nanoid'
|
||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useSlidesStore } from '@/store'
|
||||||
import { decrypt } from '@/utils/crypto'
|
import { decrypt } from '@/utils/crypto'
|
||||||
import { type ShapePoolItem, SHAPE_LIST, SHAPE_PATH_FORMULAS } from '@/configs/shapes'
|
import { type ShapePoolItem, SHAPE_LIST, SHAPE_PATH_FORMULAS } from '@/configs/shapes'
|
||||||
import useAddSlidesOrElements from '@/hooks/useAddSlidesOrElements'
|
import useAddSlidesOrElements from '@/hooks/useAddSlidesOrElements'
|
||||||
@ -31,9 +31,6 @@ export default () => {
|
|||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const { theme } = storeToRefs(useSlidesStore())
|
const { theme } = storeToRefs(useSlidesStore())
|
||||||
|
|
||||||
const mainStore = useMainStore()
|
|
||||||
const { viewportSize } = storeToRefs(mainStore)
|
|
||||||
|
|
||||||
const { addSlidesFromData } = useAddSlidesOrElements()
|
const { addSlidesFromData } = useAddSlidesOrElements()
|
||||||
const { isEmptySlide } = useSlideHandler()
|
const { isEmptySlide } = useSlideHandler()
|
||||||
|
|
||||||
@ -111,7 +108,7 @@ export default () => {
|
|||||||
const ratio = 96 / 72
|
const ratio = 96 / 72
|
||||||
const width = json.size.width
|
const width = json.size.width
|
||||||
|
|
||||||
mainStore.setViewportSize(width * ratio)
|
slidesStore.setViewportSize(width * ratio)
|
||||||
|
|
||||||
const slides: Slide[] = []
|
const slides: Slide[] = []
|
||||||
for (const item of json.slides) {
|
for (const item of json.slides) {
|
||||||
|
@ -14,7 +14,6 @@ export interface MainState {
|
|||||||
handleElementId: string
|
handleElementId: string
|
||||||
activeGroupElementId: string
|
activeGroupElementId: string
|
||||||
hiddenElementIdList: string[]
|
hiddenElementIdList: string[]
|
||||||
viewportSize: number
|
|
||||||
canvasPercentage: number
|
canvasPercentage: number
|
||||||
canvasScale: number
|
canvasScale: number
|
||||||
canvasDragged: boolean
|
canvasDragged: boolean
|
||||||
@ -50,9 +49,8 @@ export const useMainStore = defineStore('main', {
|
|||||||
handleElementId: '', // 正在操作的元素ID
|
handleElementId: '', // 正在操作的元素ID
|
||||||
activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID
|
activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID
|
||||||
hiddenElementIdList: [], // 被隐藏的元素ID集合
|
hiddenElementIdList: [], // 被隐藏的元素ID集合
|
||||||
viewportSize: 1000, // 可视区域宽度基数
|
|
||||||
canvasPercentage: 90, // 画布可视区域百分比
|
canvasPercentage: 90, // 画布可视区域百分比
|
||||||
canvasScale: 1, // 画布缩放比例(基于宽度1000px)
|
canvasScale: 1, // 画布缩放比例(基于宽度{{slidesStore.viewportSize}}像素)
|
||||||
canvasDragged: false, // 画布被拖拽移动
|
canvasDragged: false, // 画布被拖拽移动
|
||||||
thumbnailsFocus: false, // 左侧导航缩略图区域聚焦
|
thumbnailsFocus: false, // 左侧导航缩略图区域聚焦
|
||||||
editorAreaFocus: false, // 编辑区域聚焦
|
editorAreaFocus: false, // 编辑区域聚焦
|
||||||
@ -117,10 +115,6 @@ export const useMainStore = defineStore('main', {
|
|||||||
this.canvasPercentage = percentage
|
this.canvasPercentage = percentage
|
||||||
},
|
},
|
||||||
|
|
||||||
setViewportSize(size: number) {
|
|
||||||
this.viewportSize = size
|
|
||||||
},
|
|
||||||
|
|
||||||
setCanvasScale(scale: number) {
|
setCanvasScale(scale: number) {
|
||||||
this.canvasScale = scale
|
this.canvasScale = scale
|
||||||
},
|
},
|
||||||
|
@ -27,6 +27,7 @@ export interface SlidesState {
|
|||||||
theme: SlideTheme
|
theme: SlideTheme
|
||||||
slides: Slide[]
|
slides: Slide[]
|
||||||
slideIndex: number
|
slideIndex: number
|
||||||
|
viewportSize: number
|
||||||
viewportRatio: number
|
viewportRatio: number
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ export const useSlidesStore = defineStore('slides', {
|
|||||||
theme: theme, // 主题样式
|
theme: theme, // 主题样式
|
||||||
slides: slides, // 幻灯片页面数据
|
slides: slides, // 幻灯片页面数据
|
||||||
slideIndex: 0, // 当前页面索引
|
slideIndex: 0, // 当前页面索引
|
||||||
|
viewportSize: 1000, // 可视区域宽度基数
|
||||||
viewportRatio: 0.5625, // 可视区域比例,默认16:9
|
viewportRatio: 0.5625, // 可视区域比例,默认16:9
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@ -116,6 +118,10 @@ export const useSlidesStore = defineStore('slides', {
|
|||||||
this.theme = { ...this.theme, ...themeProps }
|
this.theme = { ...this.theme, ...themeProps }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setViewportSize(size: number) {
|
||||||
|
this.viewportSize = size
|
||||||
|
},
|
||||||
|
|
||||||
setViewportRatio(viewportRatio: number) {
|
setViewportRatio(viewportRatio: number) {
|
||||||
this.viewportRatio = viewportRatio
|
this.viewportRatio = viewportRatio
|
||||||
},
|
},
|
||||||
|
@ -20,8 +20,8 @@ import { storeToRefs } from 'pinia'
|
|||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useMainStore, useSlidesStore } from '@/store'
|
||||||
import type { SlideBackground } from '@/types/slides'
|
import type { SlideBackground } from '@/types/slides'
|
||||||
|
|
||||||
const { canvasScale, gridLineSize, viewportSize } = storeToRefs(useMainStore())
|
const { canvasScale, gridLineSize } = storeToRefs(useMainStore())
|
||||||
const { currentSlide, viewportRatio } = storeToRefs(useSlidesStore())
|
const { currentSlide, viewportRatio, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
|
|
||||||
const background = computed<SlideBackground | undefined>(() => currentSlide.value?.background)
|
const background = computed<SlideBackground | undefined>(() => currentSlide.value?.background)
|
||||||
|
|
||||||
|
@ -72,8 +72,8 @@ const props = defineProps<{
|
|||||||
elementList: PPTElement[]
|
elementList: PPTElement[]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { canvasScale, activeElementIdList, viewportSize } = storeToRefs(useMainStore())
|
const { canvasScale, activeElementIdList } = storeToRefs(useMainStore())
|
||||||
const { viewportRatio } = storeToRefs(useSlidesStore())
|
const { viewportRatio, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
|
|
||||||
const elementListRange = ref<null | ReturnType<typeof getElementListRange>>(null)
|
const elementListRange = ref<null | ReturnType<typeof getElementListRange>>(null)
|
||||||
|
|
||||||
|
@ -12,9 +12,9 @@ export default (
|
|||||||
canvasScale: Ref<number>,
|
canvasScale: Ref<number>,
|
||||||
) => {
|
) => {
|
||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const { activeElementIdList, activeGroupElementId, viewportSize } = storeToRefs(useMainStore())
|
const { activeElementIdList, activeGroupElementId } = storeToRefs(useMainStore())
|
||||||
const { shiftKeyState } = storeToRefs(useKeyboardStore())
|
const { shiftKeyState } = storeToRefs(useKeyboardStore())
|
||||||
const { viewportRatio } = storeToRefs(slidesStore)
|
const { viewportRatio, viewportSize } = storeToRefs(slidesStore)
|
||||||
|
|
||||||
const { addHistorySnapshot } = useHistorySnapshot()
|
const { addHistorySnapshot } = useHistorySnapshot()
|
||||||
|
|
||||||
|
@ -99,8 +99,8 @@ export default (
|
|||||||
) => {
|
) => {
|
||||||
const mainStore = useMainStore()
|
const mainStore = useMainStore()
|
||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const { activeElementIdList, activeGroupElementId, viewportSize } = storeToRefs(mainStore)
|
const { activeElementIdList, activeGroupElementId } = storeToRefs(mainStore)
|
||||||
const { viewportRatio } = storeToRefs(slidesStore)
|
const { viewportRatio, viewportSize } = storeToRefs(slidesStore)
|
||||||
const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())
|
const { ctrlOrShiftKeyActive } = storeToRefs(useKeyboardStore())
|
||||||
|
|
||||||
const { addHistorySnapshot } = useHistorySnapshot()
|
const { addHistorySnapshot } = useHistorySnapshot()
|
||||||
|
@ -7,8 +7,8 @@ export default (canvasRef: Ref<HTMLElement | undefined>) => {
|
|||||||
const viewportTop = ref(0)
|
const viewportTop = ref(0)
|
||||||
|
|
||||||
const mainStore = useMainStore()
|
const mainStore = useMainStore()
|
||||||
const { canvasPercentage, canvasDragged, viewportSize } = storeToRefs(mainStore)
|
const { canvasPercentage, canvasDragged } = storeToRefs(mainStore)
|
||||||
const { viewportRatio } = storeToRefs(useSlidesStore())
|
const { viewportRatio, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
|
|
||||||
// 初始化画布可视区域的位置
|
// 初始化画布可视区域的位置
|
||||||
const initViewportPosition = () => {
|
const initViewportPosition = () => {
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useSlidesStore } from '@/store'
|
||||||
import useSlideHandler from '@/hooks/useSlideHandler'
|
import useSlideHandler from '@/hooks/useSlideHandler'
|
||||||
import useCreateElement from '@/hooks/useCreateElement'
|
import useCreateElement from '@/hooks/useCreateElement'
|
||||||
import { getImageDataURL } from '@/utils/image'
|
import { getImageDataURL } from '@/utils/image'
|
||||||
@ -44,8 +44,7 @@ import Button from '@/components/Button.vue'
|
|||||||
import ButtonGroup from '@/components/ButtonGroup.vue'
|
import ButtonGroup from '@/components/ButtonGroup.vue'
|
||||||
|
|
||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const { viewportRatio, currentSlide } = storeToRefs(slidesStore)
|
const { viewportRatio, currentSlide, viewportSize } = storeToRefs(slidesStore)
|
||||||
const { viewportSize } = storeToRefs(useMainStore())
|
|
||||||
|
|
||||||
const { createSlide, copyAndPasteSlide, deleteSlide, } = useSlideHandler()
|
const { createSlide, copyAndPasteSlide, deleteSlide, } = useSlideHandler()
|
||||||
const { createTextElement, createImageElement, createShapeElement } = useCreateElement()
|
const { createTextElement, createImageElement, createShapeElement } = useCreateElement()
|
||||||
|
@ -65,8 +65,8 @@ defineProps<{
|
|||||||
|
|
||||||
const slidesStore = useSlidesStore()
|
const slidesStore = useSlidesStore()
|
||||||
const mainStore = useMainStore()
|
const mainStore = useMainStore()
|
||||||
const { slideIndex, currentSlide, viewportRatio } = storeToRefs(slidesStore)
|
const { slideIndex, currentSlide, viewportRatio, viewportSize } = storeToRefs(slidesStore)
|
||||||
const { activeElementIdList, handleElement, viewportSize } = storeToRefs(mainStore)
|
const { activeElementIdList, handleElement } = storeToRefs(mainStore)
|
||||||
|
|
||||||
const contentRef = ref<HTMLElement>()
|
const contentRef = ref<HTMLElement>()
|
||||||
const viewportRef = ref<HTMLElement>()
|
const viewportRef = ref<HTMLElement>()
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, provide } from 'vue'
|
import { computed, provide } from 'vue'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useSlidesStore } from '@/store'
|
||||||
import type { Slide } from '@/types/slides'
|
import type { Slide } from '@/types/slides'
|
||||||
import { injectKeySlideId } from '@/types/injectKey'
|
import { injectKeySlideId } from '@/types/injectKey'
|
||||||
import useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'
|
import useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'
|
||||||
@ -38,8 +38,7 @@ const props = defineProps<{
|
|||||||
manualExitFullscreen: () => void
|
manualExitFullscreen: () => void
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { viewportRatio } = storeToRefs(useSlidesStore())
|
const { viewportRatio, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
const { viewportSize } = storeToRefs(useMainStore())
|
|
||||||
|
|
||||||
const background = computed(() => props.slide.background)
|
const background = computed(() => props.slide.background)
|
||||||
const { backgroundStyle } = useSlideBackgroundStyle(background)
|
const { backgroundStyle } = useSlideBackgroundStyle(background)
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, provide } from 'vue'
|
import { computed, provide } from 'vue'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useSlidesStore } from '@/store'
|
||||||
import { injectKeySlideScale } from '@/types/injectKey'
|
import { injectKeySlideScale } from '@/types/injectKey'
|
||||||
import { SLIDE_ANIMATIONS } from '@/configs/animation'
|
import { SLIDE_ANIMATIONS } from '@/configs/animation'
|
||||||
|
|
||||||
@ -51,8 +51,7 @@ const props = defineProps<{
|
|||||||
manualExitFullscreen: () => void
|
manualExitFullscreen: () => void
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { slides, slideIndex } = storeToRefs(useSlidesStore())
|
const { slides, slideIndex, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
const { viewportSize } = storeToRefs(useMainStore())
|
|
||||||
|
|
||||||
const slidesWithTurningMode = computed(() => {
|
const slidesWithTurningMode = computed(() => {
|
||||||
return slides.value.map(slide => {
|
return slides.value.map(slide => {
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, provide } from 'vue'
|
import { computed, provide } from 'vue'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useSlidesStore } from '@/store'
|
||||||
import type { Slide } from '@/types/slides'
|
import type { Slide } from '@/types/slides'
|
||||||
import { injectKeySlideScale } from '@/types/injectKey'
|
import { injectKeySlideScale } from '@/types/injectKey'
|
||||||
import useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'
|
import useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'
|
||||||
@ -44,8 +44,7 @@ const props = withDefaults(defineProps<{
|
|||||||
visible: true,
|
visible: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
const { viewportRatio } = storeToRefs(useSlidesStore())
|
const { viewportRatio, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
const { viewportSize } = storeToRefs(useMainStore())
|
|
||||||
|
|
||||||
const background = computed(() => props.slide.background)
|
const background = computed(() => props.slide.background)
|
||||||
const { backgroundStyle } = useSlideBackgroundStyle(background)
|
const { backgroundStyle } = useSlideBackgroundStyle(background)
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { computed, inject, ref } from 'vue'
|
import { computed, inject, ref } from 'vue'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useMainStore, useSlidesStore } from '@/store'
|
import { useSlidesStore } from '@/store'
|
||||||
import type { PPTAudioElement } from '@/types/slides'
|
import type { PPTAudioElement } from '@/types/slides'
|
||||||
import { injectKeySlideId, injectKeySlideScale } from '@/types/injectKey'
|
import { injectKeySlideId, injectKeySlideScale } from '@/types/injectKey'
|
||||||
|
|
||||||
@ -48,8 +48,7 @@ const props = defineProps<{
|
|||||||
elementInfo: PPTAudioElement
|
elementInfo: PPTAudioElement
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { viewportRatio, currentSlide } = storeToRefs(useSlidesStore())
|
const { viewportRatio, currentSlide, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
const { viewportSize } = storeToRefs(useMainStore())
|
|
||||||
|
|
||||||
const scale = inject(injectKeySlideScale) || ref(1)
|
const scale = inject(injectKeySlideScale) || ref(1)
|
||||||
const slideId = inject(injectKeySlideId) || ref('')
|
const slideId = inject(injectKeySlideId) || ref('')
|
||||||
|
@ -54,8 +54,8 @@ const props = defineProps<{
|
|||||||
contextmenus: () => ContextmenuItem[] | null
|
contextmenus: () => ContextmenuItem[] | null
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const { canvasScale, handleElementId, viewportSize } = storeToRefs(useMainStore())
|
const { canvasScale, handleElementId } = storeToRefs(useMainStore())
|
||||||
const { viewportRatio } = storeToRefs(useSlidesStore())
|
const { viewportRatio, viewportSize } = storeToRefs(useSlidesStore())
|
||||||
|
|
||||||
const audioIconSize = computed(() => {
|
const audioIconSize = computed(() => {
|
||||||
return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'
|
return Math.min(props.elementInfo.width, props.elementInfo.height) + 'px'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user