perf: 导出相关优化

This commit is contained in:
pipipi-pikachu 2022-05-22 20:20:43 +08:00
parent 6536114ef5
commit dfee3f8f4b
5 changed files with 24 additions and 16 deletions

View File

@ -331,7 +331,7 @@ export default () => {
}
// 导出PPTX文件
const exportPPTX = (_slides: Slide[] = slides.value) => {
const exportPPTX = (_slides: Slide[], masterOverwrite: boolean) => {
exporting.value = true
const pptx = new pptxgen()
@ -339,11 +339,13 @@ export default () => {
else if (viewportRatio.value === 0.75) pptx.layout = 'LAYOUT_4x3'
else pptx.layout = 'LAYOUT_16x9'
const { color: bgColor, alpha: bgAlpha } = formatColor(theme.value.backgroundColor)
pptx.defineSlideMaster({
title: 'PPTIST_MASTER',
background: { color: bgColor, transparency: (1 - bgAlpha) * 100 },
})
if (masterOverwrite) {
const { color: bgColor, alpha: bgAlpha } = formatColor(theme.value.backgroundColor)
pptx.defineSlideMaster({
title: 'PPTIST_MASTER',
background: { color: bgColor, transparency: (1 - bgAlpha) * 100 },
})
}
for (const slide of _slides) {
const pptxSlide = pptx.addSlide()

View File

@ -97,7 +97,6 @@ import {
ListView,
Magic,
HighLight,
Printer,
Share,
} from '@icon-park/vue-next'
@ -197,7 +196,6 @@ const icons = {
ListView,
Magic,
HighLight,
Printer,
Share,
}

View File

@ -47,9 +47,14 @@
</div>
<div class="right">
<Tooltip :mouseLeaveDelay="0" title="导出">
<div class="menu-item" @click="setDialogForExport('pptx')">
<IconShare size="18" fill="#666" />
</div>
</Tooltip>
<Tooltip :mouseLeaveDelay="0" title="幻灯片放映">
<div class="menu-item" @click="enterScreening()">
<IconPpt size="18" fill="#666" style="margin-top: 2px;" />
<IconPpt size="19" fill="#666" style="margin-top: 1px;" />
</div>
</Tooltip>
<a href="https://github.com/pipipi-pikachu/PPTist" target="_blank">
@ -75,7 +80,6 @@ import { useMainStore } from '@/store'
import useScreening from '@/hooks/useScreening'
import useSlideHandler from '@/hooks/useSlideHandler'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
import useExport from '@/hooks/useExport'
import HotkeyDoc from './HotkeyDoc.vue'
@ -91,7 +95,6 @@ export default defineComponent({
const { enterScreening, enterScreeningFromStart } = useScreening()
const { createSlide, deleteSlide, resetSlides } = useSlideHandler()
const { redo, undo } = useHistorySnapshot()
const { exporting, exportJSON, exportPPTX } = useExport()
const setDialogForExport = mainStore.setDialogForExport
@ -115,7 +118,6 @@ export default defineComponent({
showGridLines,
showRuler,
hotkeyDrawerVisible,
exporting,
setDialogForExport,
enterScreening,
enterScreeningFromStart,
@ -124,8 +126,6 @@ export default defineComponent({
toggleGridLines,
toggleRuler,
resetSlides,
exportJSON,
exportPPTX,
goIssues,
}
},

View File

@ -23,9 +23,15 @@
v-model:value="range"
/>
</div>
<div class="row">
<div class="title">覆盖默认母版</div>
<div class="config-item">
<Switch v-model:checked="masterOverwrite" />
</div>
</div>
</div>
<div class="btns">
<Button class="btn export" type="primary" @click="exportPPTX(selectedSlides)">导出 PPTX</Button>
<Button class="btn export" type="primary" @click="exportPPTX(selectedSlides, masterOverwrite)">导出 PPTX</Button>
<Button class="btn close" @click="close()">关闭</Button>
</div>
@ -46,6 +52,7 @@ export default defineComponent({
const rangeType = ref<'all' | 'current' | 'custom'>('all')
const range = ref<[number, number]>([1, slides.value.length])
const masterOverwrite = ref(true)
const selectedSlides = computed(() => {
if (rangeType.value === 'all') return slides.value
@ -64,6 +71,7 @@ export default defineComponent({
slides,
rangeType,
range,
masterOverwrite,
exporting,
selectedSlides,
exportPPTX,

View File

@ -99,7 +99,7 @@ export default defineComponent({
}
}
.content {
height: 500px;
height: 460px;
padding: 12px;
font-size: 13px;