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'"
/>
导出范围:
全部幻灯片
当前幻灯片
@@ -48,11 +48,11 @@
+
-
-
-
-
+
+
+
@@ -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 @@
+
+
+
+