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

View File

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

View File

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

View File

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

View File

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