From a4c1b39f221165de880d1678e3f9debafd503c24 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Sun, 10 Sep 2023 10:56:11 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AF=BC=E5=85=A5pptx=20demo=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 18 ++++++++++-------- package.json | 2 +- src/hooks/useAddSlidesOrElements.ts | 10 +++++++++- src/hooks/useImport.ts | 14 ++++++++++++-- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28c1641f..ac300b16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,9 +23,8 @@ "mitt": "^3.0.1", "nanoid": "^4.0.2", "pinia": "^2.1.4", - "postcss-scss": "^4.0.6", "pptxgenjs": "^3.12.0", - "pptxtojson": "^0.0.10", + "pptxtojson": "^0.0.11", "prosemirror-commands": "^1.3.0", "prosemirror-dropcursor": "^1.6.0", "prosemirror-gapcursor": "^1.3.1", @@ -67,6 +66,7 @@ "eslint-plugin-vue": "^9.9.0", "husky": "8.0.3", "postcss-html": "^1.5.0", + "postcss-scss": "^4.0.6", "sass": "^1.32.13", "sass-loader": "^8.0.2", "stylelint": "^15.10.2", @@ -10739,6 +10739,7 @@ "version": "4.0.6", "resolved": "https://registry.npmmirror.com/postcss-scss/-/postcss-scss-4.0.6.tgz", "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", + "dev": true, "engines": { "node": ">=12.0" }, @@ -10824,9 +10825,9 @@ "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==" }, "node_modules/pptxtojson": { - "version": "0.0.10", - "resolved": "https://registry.npmmirror.com/pptxtojson/-/pptxtojson-0.0.10.tgz", - "integrity": "sha512-OOVbl4y5tgnGkQIlSyZ742oBRivVSBYJV7dOwbhXEcnRZvPRVGBu8KPo7PE9QP2tDwpvuXJvqFrRaG7mbnfSfA==", + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/pptxtojson/-/pptxtojson-0.0.11.tgz", + "integrity": "sha512-LzOtJEvl2rb++l/TnKxHxxviv1lSRJvwFs24vy53a8r5PmVmHRfPO8MfcNbOVK+tbxCrQMjz58354oPLS2jEpQ==", "dependencies": { "jszip": "^3.10.1", "tinycolor2": "1.6.0", @@ -23098,6 +23099,7 @@ "version": "4.0.6", "resolved": "https://registry.npmmirror.com/postcss-scss/-/postcss-scss-4.0.6.tgz", "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", + "dev": true, "requires": {} }, "postcss-selector-parser": { @@ -23154,9 +23156,9 @@ } }, "pptxtojson": { - "version": "0.0.10", - "resolved": "https://registry.npmmirror.com/pptxtojson/-/pptxtojson-0.0.10.tgz", - "integrity": "sha512-OOVbl4y5tgnGkQIlSyZ742oBRivVSBYJV7dOwbhXEcnRZvPRVGBu8KPo7PE9QP2tDwpvuXJvqFrRaG7mbnfSfA==", + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/pptxtojson/-/pptxtojson-0.0.11.tgz", + "integrity": "sha512-LzOtJEvl2rb++l/TnKxHxxviv1lSRJvwFs24vy53a8r5PmVmHRfPO8MfcNbOVK+tbxCrQMjz58354oPLS2jEpQ==", "requires": { "jszip": "^3.10.1", "tinycolor2": "1.6.0", diff --git a/package.json b/package.json index 594736e6..1e495c6b 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "nanoid": "^4.0.2", "pinia": "^2.1.4", "pptxgenjs": "^3.12.0", - "pptxtojson": "^0.0.10", + "pptxtojson": "^0.0.11", "prosemirror-commands": "^1.3.0", "prosemirror-dropcursor": "^1.6.0", "prosemirror-gapcursor": "^1.3.1", diff --git a/src/hooks/useAddSlidesOrElements.ts b/src/hooks/useAddSlidesOrElements.ts index 045bca6e..598d9fcd 100644 --- a/src/hooks/useAddSlidesOrElements.ts +++ b/src/hooks/useAddSlidesOrElements.ts @@ -1,3 +1,4 @@ +import { computed } from 'vue' import { storeToRefs } from 'pinia' import { nanoid } from 'nanoid' import { useSlidesStore, useMainStore } from '@/store' @@ -8,7 +9,7 @@ import useHistorySnapshot from '@/hooks/useHistorySnapshot' export default () => { const mainStore = useMainStore() const slidesStore = useSlidesStore() - const { currentSlide } = storeToRefs(slidesStore) + const { currentSlide, slides } = storeToRefs(slidesStore) const { addHistorySnapshot } = useHistorySnapshot() @@ -77,8 +78,15 @@ export default () => { addHistorySnapshot() } + const isEmptySlide = computed(() => { + if (slides.value.length > 1) return false + if (slides.value[0].elements.length > 0) return false + return true + }) + return { addElementsFromData, addSlidesFromData, + isEmptySlide, } } \ No newline at end of file diff --git a/src/hooks/useImport.ts b/src/hooks/useImport.ts index b24661cc..41a6924e 100644 --- a/src/hooks/useImport.ts +++ b/src/hooks/useImport.ts @@ -15,7 +15,7 @@ export default () => { const slidesStore = useSlidesStore() const { theme } = storeToRefs(useSlidesStore()) - const { addSlidesFromData } = useAddSlidesOrElements() + const { addSlidesFromData, isEmptySlide } = useAddSlidesOrElements() const exporting = ref(false) @@ -28,6 +28,7 @@ export default () => { try { const slides = JSON.parse(decrypt(reader.result as string)) if (cover) slidesStore.setSlides(slides) + else if (isEmptySlide.value) slidesStore.setSlides(slides) else addSlidesFromData(slides) } catch { @@ -101,6 +102,14 @@ export default () => { imageSize: 'cover', } } + else if (type === 'gradient') { + background = { + type: 'gradient', + gradientType: 'linear', + gradientColor: [value.colors[0], value.colors[1]], + gradientRotate: value.rot, + } + } else { background = { type: 'solid', @@ -332,7 +341,8 @@ export default () => { parseElements(item.elements) slides.push(slide) } - addSlidesFromData(slides) + if (isEmptySlide.value) slidesStore.setSlides(slides) + else addSlidesFromData(slides) exporting.value = false } reader.readAsArrayBuffer(file)