feat: file-handling API test

This commit is contained in:
pipipi-pikachu 2022-05-31 23:00:44 +08:00
parent 335238973c
commit 16094c7292
4 changed files with 27 additions and 3 deletions

View File

@ -10,6 +10,7 @@ import { storeToRefs } from 'pinia'
import { useScreenStore, useMainStore, useSnapshotStore } from '@/store' import { useScreenStore, useMainStore, useSnapshotStore } from '@/store'
import { LOCALSTORAGE_KEY_DISCARDED_DB } from '@/configs/storage' import { LOCALSTORAGE_KEY_DISCARDED_DB } from '@/configs/storage'
import { isPC } from './utils/common' import { isPC } from './utils/common'
import useExport from './hooks/useExport'
import Editor from './views/Editor/index.vue' import Editor from './views/Editor/index.vue'
import Screen from './views/Screen/index.vue' import Screen from './views/Screen/index.vue'
@ -35,6 +36,18 @@ export default defineComponent({
onMounted(() => { onMounted(() => {
snapshotStore.initSnapshotDatabase() snapshotStore.initSnapshotDatabase()
mainStore.setAvailableFonts() mainStore.setAvailableFonts()
const { importSpecificFile } = useExport()
if ('launchQueue' in window) {
/* eslint-disable-next-line */
(window as any).launchQueue.setConsumer(async (launchParams: any) => {
if (launchParams.files && launchParams.files.length) {
const files: File[] = launchParams.files
importSpecificFile(files, true)
}
})
}
}) })
// localStorage indexedDB ID // localStorage indexedDB ID

View File

@ -22,7 +22,8 @@ interface ExportImageConfig {
} }
export default () => { export default () => {
const { slides, theme, viewportRatio } = storeToRefs(useSlidesStore()) const slidesStore = useSlidesStore()
const { slides, theme, viewportRatio } = storeToRefs(slidesStore)
const { addSlidesFromData } = useAddSlidesOrElements() const { addSlidesFromData } = useAddSlidesOrElements()
@ -61,14 +62,15 @@ export default () => {
} }
// 导入pptist文件 // 导入pptist文件
const importSpecificFile = (files: File[]) => { const importSpecificFile = (files: File[], cover = false) => {
const file = files[0] const file = files[0]
const reader = new FileReader() const reader = new FileReader()
reader.addEventListener('load', () => { reader.addEventListener('load', () => {
try { try {
const slides = JSON.parse(decrypt(reader.result as string)) const slides = JSON.parse(decrypt(reader.result as string))
addSlidesFromData(slides) if (cover) slidesStore.setSlides(slides)
else addSlidesFromData(slides)
} }
catch { catch {
message.error('无法正确读取 / 解析该文件') message.error('无法正确读取 / 解析该文件')

View File

@ -10,6 +10,7 @@
</FileInput> </FileInput>
<MenuItem @click="setDialogForExport('pptx')">导出 PPTX</MenuItem> <MenuItem @click="setDialogForExport('pptx')">导出 PPTX</MenuItem>
<MenuItem @click="setDialogForExport('image')">导出图片</MenuItem> <MenuItem @click="setDialogForExport('image')">导出图片</MenuItem>
<MenuItem @click="setDialogForExport('pptist')">导出 .pptist 文件</MenuItem>
<MenuItem @click="setDialogForExport('json')">导出 JSON</MenuItem> <MenuItem @click="setDialogForExport('json')">导出 JSON</MenuItem>
<MenuItem @click="setDialogForExport('pdf')">打印 / 导出 PDF</MenuItem> <MenuItem @click="setDialogForExport('pdf')">打印 / 导出 PDF</MenuItem>
</Menu> </Menu>

View File

@ -67,6 +67,14 @@ module.exports = {
type: 'image/png', type: 'image/png',
purpose: 'maskable' purpose: 'maskable'
}], }],
file_handlers: [
{
action: '/',
accept: {
'*': ['.pptist'],
}
}
],
start_url: '.', start_url: '.',
display: 'standalone', display: 'standalone',
background_color: '#000000', background_color: '#000000',