diff --git a/src/hooks/useExport.ts b/src/hooks/useExport.ts index 01213683..e33a3e78 100644 --- a/src/hooks/useExport.ts +++ b/src/hooks/useExport.ts @@ -6,7 +6,7 @@ import pptxgen from 'pptxgenjs' import tinycolor from 'tinycolor2' import { toPng, toJpeg } from 'html-to-image' import { useSlidesStore } from '@/store' -import { PPTElementOutline, PPTElementShadow, PPTElementLink } from '@/types/slides' +import { PPTElementOutline, PPTElementShadow, PPTElementLink, Slide } from '@/types/slides' import { getElementRange, getLineElementPath, getTableSubThemeColor } from '@/utils/element' import { AST, toAST } from '@/utils/htmlParser' import { SvgPoints, toPoints } from '@/utils/svgPathParser' @@ -331,7 +331,7 @@ export default () => { } // 导出PPTX文件 - const exportPPTX = () => { + const exportPPTX = (_slides: Slide[] = slides.value) => { exporting.value = true const pptx = new pptxgen() @@ -341,7 +341,7 @@ export default () => { background: { color: bgColor, transparency: (1 - bgAlpha) * 100 }, }) - for (const slide of slides.value) { + for (const slide of _slides) { const pptxSlide = pptx.addSlide() if (slide.background) { diff --git a/src/store/main.ts b/src/store/main.ts index fd59de01..7225978d 100644 --- a/src/store/main.ts +++ b/src/store/main.ts @@ -1,12 +1,15 @@ import { defineStore } from 'pinia' import { CreatingElement } from '@/types/edit' import { ToolbarStates } from '@/types/toolbar' +import { DialogForExportTypes } from '@/types/export' import { SYS_FONTS } from '@/configs/font' import { TextAttrs, defaultRichTextAttrs } from '@/utils/prosemirror/utils' import { isSupportFont } from '@/utils/font' import { useSlidesStore } from './slides' + + export interface MainState { activeElementIdList: string[]; handleElementId: string; @@ -27,6 +30,7 @@ export interface MainState { richTextAttrs: TextAttrs; selectedTableCells: string[]; selectedSlidesIndex: number[]; + dialogForExport: DialogForExportTypes; } export const useMainStore = defineStore('main', { @@ -50,6 +54,7 @@ export const useMainStore = defineStore('main', { selectedTableCells: [], // 选中的表格单元格 isScaling: false, // 正在进行元素缩放 selectedSlidesIndex: [], // 当前被选中的页面索引集合 + dialogForExport: '', // 导出面板 }), getters: { @@ -147,5 +152,9 @@ export const useMainStore = defineStore('main', { updateSelectedSlidesIndex(selectedSlidesIndex: number[]) { this.selectedSlidesIndex = selectedSlidesIndex }, + + setDialogForExport(type: DialogForExportTypes) { + this.dialogForExport = type + }, }, }) \ No newline at end of file diff --git a/src/types/export.ts b/src/types/export.ts new file mode 100644 index 00000000..54ecdb78 --- /dev/null +++ b/src/types/export.ts @@ -0,0 +1 @@ +export type DialogForExportTypes = 'image' | 'pdf' | 'json' | 'pptx' | '' \ No newline at end of file diff --git a/src/views/Editor/EditorHeader/index.vue b/src/views/Editor/EditorHeader/index.vue index 221d5389..1c3a2e16 100644 --- a/src/views/Editor/EditorHeader/index.vue +++ b/src/views/Editor/EditorHeader/index.vue @@ -5,10 +5,10 @@ @@ -65,30 +65,6 @@ > - - - - - - - - - - @@ -102,15 +78,11 @@ import useHistorySnapshot from '@/hooks/useHistorySnapshot' import useExport from '@/hooks/useExport' import HotkeyDoc from './HotkeyDoc.vue' -import ExportImgDialog from './ExportImgDialog.vue' -import ExportPDFDialog from './ExportPDFDialog.vue' export default defineComponent({ name: 'editor-header', components: { HotkeyDoc, - ExportImgDialog, - ExportPDFDialog, }, setup() { const mainStore = useMainStore() @@ -121,6 +93,8 @@ export default defineComponent({ const { redo, undo } = useHistorySnapshot() const { exporting, exportJSON, exportPPTX } = useExport() + const setDialogForExport = mainStore.setDialogForExport + const toggleGridLines = () => { mainStore.setGridLinesState(!showGridLines.value) } @@ -130,8 +104,6 @@ export default defineComponent({ } const hotkeyDrawerVisible = ref(false) - const exportImgDialogVisible = ref(false) - const exportPDFDialogVisible = ref(false) const goIssues = () => { window.open('https://github.com/pipipi-pikachu/PPTist/issues') @@ -143,9 +115,8 @@ export default defineComponent({ showGridLines, showRuler, hotkeyDrawerVisible, - exportImgDialogVisible, - exportPDFDialogVisible, exporting, + setDialogForExport, enterScreening, enterScreeningFromStart, createSlide, diff --git a/src/views/Editor/EditorHeader/ExportImgDialog.vue b/src/views/Editor/ExportDialog/ExportImage.vue similarity index 50% rename from src/views/Editor/EditorHeader/ExportImgDialog.vue rename to src/views/Editor/ExportDialog/ExportImage.vue index 093f76a8..dd2eaf8e 100644 --- a/src/views/Editor/EditorHeader/ExportImgDialog.vue +++ b/src/views/Editor/ExportDialog/ExportImage.vue @@ -4,7 +4,7 @@
- JPEG - PNG + JPEG + PNG
+
+
导出范围:
+ + 全部 + 当前页 + 自定义 + +
+
+
自定义范围:
+ +
图片质量:
@@ -37,18 +59,16 @@
忽略在线字体:
- + + +
+
-
- 提示:导出时默认会忽略在线字体,若您在幻灯片中使用了在线字体,且不希望导出图片中丢失相关样式,可以选择关闭【忽略在线字体】选项,但要注意,这将会导致导出用时大幅度增加。 -
- -
- - -
+
+ +
@@ -56,7 +76,7 @@ + + \ No newline at end of file diff --git a/src/views/Editor/EditorHeader/ExportPDFDialog.vue b/src/views/Editor/ExportDialog/ExportPDF.vue similarity index 81% rename from src/views/Editor/EditorHeader/ExportPDFDialog.vue rename to src/views/Editor/ExportDialog/ExportPDF.vue index 7062c3c7..fcf95a22 100644 --- a/src/views/Editor/EditorHeader/ExportPDFDialog.vue +++ b/src/views/Editor/ExportDialog/ExportPDF.vue @@ -6,7 +6,7 @@ class="thumbnail" :slide="currentSlide" :size="1600" - v-if="range === 'current'" + v-if="rangeType === 'current'" /> @@ -74,7 +74,7 @@ export default defineComponent({ const { slides, currentSlide } = storeToRefs(useSlidesStore()) const pdfThumbnailsRef = ref() - const range = ref<'all' | 'current'>('all') + const rangeType = ref<'all' | 'current'>('all') const count = ref(1) const padding = ref(true) @@ -84,7 +84,7 @@ export default defineComponent({ if (!pdfThumbnailsRef.value) return const pageSize = { width: 1600, - height: range.value === 'all' ? 900 * count.value : 900, + height: rangeType.value === 'all' ? 900 * count.value : 900, margin: padding.value ? 50 : 0, } print(pdfThumbnailsRef.value, pageSize) @@ -94,7 +94,7 @@ export default defineComponent({ pdfThumbnailsRef, slides, currentSlide, - range, + rangeType, count, padding, expPDF, @@ -106,9 +106,11 @@ export default defineComponent({ \ No newline at end of file diff --git a/src/views/Editor/ExportDialog/ExportPPTX.vue b/src/views/Editor/ExportDialog/ExportPPTX.vue new file mode 100644 index 00000000..111e5e77 --- /dev/null +++ b/src/views/Editor/ExportDialog/ExportPPTX.vue @@ -0,0 +1,136 @@ + + + + + \ No newline at end of file diff --git a/src/views/Editor/ExportDialog/index.vue b/src/views/Editor/ExportDialog/index.vue new file mode 100644 index 00000000..e47d0a74 --- /dev/null +++ b/src/views/Editor/ExportDialog/index.vue @@ -0,0 +1,108 @@ + + + + + \ No newline at end of file diff --git a/src/views/Editor/index.vue b/src/views/Editor/index.vue index 070f3b14..042accd8 100644 --- a/src/views/Editor/index.vue +++ b/src/views/Editor/index.vue @@ -15,11 +15,24 @@ + + + +