From 8d8b8d223c5a18954e5968b08cefd35b3e694e6a Mon Sep 17 00:00:00 2001 From: zdg Date: Tue, 21 Jan 2025 14:15:15 +0800 Subject: [PATCH 1/2] =?UTF-8?q?ppt=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/views/prepare/index.vue | 93 +++++++++++++++--------- 1 file changed, 59 insertions(+), 34 deletions(-) diff --git a/src/renderer/src/views/prepare/index.vue b/src/renderer/src/views/prepare/index.vue index 6d69db6..8a9d5c6 100644 --- a/src/renderer/src/views/prepare/index.vue +++ b/src/renderer/src/views/prepare/index.vue @@ -289,7 +289,8 @@ export default { { color: '#5cb87a', percentage: 100 }, // 绿色 ] } - } + }, + pptMedia: {} // ppt媒体数据 } }, computed: { @@ -591,52 +592,76 @@ export default { this.createAIPPTByFile(file, this.currentNode.itemtitle + '.aippt') } }, + // 将图片|音频|视频 转换为线上地址 + getOnlineFileUrl(data, name){ + return new Promise(async (resolve, reject) => { + let file + if (data instanceof Blob) { // blob类型判断 + const fileName = Date.now() + `.${name||'png'}` + file = commUtils.blobToFile(data, fileName) + } else if (data instanceof File) { // file类型判断 + file = data + } else { // 其他类型 base64 + const blob = commUtils.base64ToBlob(data) + const fileName = Date.now() + `.${name||'png'}` + file = commUtils.blobToFile(blob, fileName) + } + const formData = new FormData() + formData.append('file', file) + const res = await Api_server.Other.uploadFile(formData) + if (res && res.code == 200){ + resolve(res?.url) + } else { // 失败 + reject(res?.msg||'上传失败') + } + }) + }, async toRousrceUrl(o) { if (!!o.src) { // 如果有src就转换 const isBase64 = /^data:image\/(\w+);base64,/.test(o.src) const isBlobUrl = /^blob:/.test(o.src) - // console.log('isBase64', o, isBase64) - if (isBase64) { - const bolb = commUtils.base64ToBlob(o.src) - const fileName = Date.now() + '.png' - const file = commUtils.blobToFile(bolb, fileName) - // o.src = fileName - // console.log('file', file) - const formData = new FormData() - formData.append('file', file) - const res = await Api_server.Other.uploadFile(formData) - if (res && res.code == 200){ - const url = res?.url - url &&(o.src = url) - } - } else if (isBlobUrl) { // 视频和音频 - const res = await fetch(o.src) - const blob = await res.blob() - const fileName = o.type=='video'? Date.now() + '.mp4':Date.now() + '.mp3' - const file = commUtils.blobToFile(blob, fileName) - // o.src = fileName - // console.log('file', file) - const formData = new FormData() - formData.append('file', file) - const ress = await Api_server.Other.uploadFile(formData) - if (ress && ress.code == 200){ - const url = ress?.url + let onLineUrl = '' // 线上地址 + if (!!o.zipPath) onLineUrl = this.pptMedia[o.zipPath] || '' // 是否已上传过 + if (onLineUrl) o.src = onLineUrl // 已存在线上地址直接赋值 + else { // 不存在重新上传 + if (isBase64) { // 相同资源处理 + const url = await this.getOnlineFileUrl(o.src) + url && o.zipPath && (this.pptMedia[o.zipPath] = url) // 缓存 + } else if (isBlobUrl) { // 视频和音频 + const res = await fetch(o.src) + const blob = await res.blob() + const url = await this.getOnlineFileUrl(blob, o.type=='video'?'mp4':'mp3') + URL.revokeObjectURL(o.src) // 释放内存 url &&(o.src = url) + url && o.zipPath && (this.pptMedia[o.zipPath] = url) // 缓存 } } } - + // 处理元素为shape 可能存在背景图等 + const isBg = o?.gradient?.type == 'image' && !!o?.gradient?.image + if (isBg) { + const {src, zipPath} = o.gradient.image || {} + let onLineUrl = '' // 线上地址 + if (!!zipPath) onLineUrl = this.pptMedia[zipPath] || '' // 是否已上传过 + if (onLineUrl) o.gradient.image.src = onLineUrl // 已存在线上地址直接赋值 + else { // 重新上传 + const url = await this.getOnlineFileUrl(src) + o.gradient.image.src = url + url && zipPath && (this.pptMedia[zipPath] = url) // 缓存 + } + } + if (o?.background?.image) await this.toRousrceUrl(o.background.image) - // if (o?.elements) o.elements.forEach(async o => {await this.toRousrceUrl(o)}) - if(o?.elements){ - for (let element of o.elements) { - await this.toRousrceUrl(element); - } - } + if(o?.elements){ + for (let element of o.elements) { + await this.toRousrceUrl(element); + } + } }, async createAIPPTByFile(file,fileShowName) { this.pgDialog.visible = true this.pgDialog.pg.percentage = 0 + this.pptMedia = {} // 清空媒体数据 const resPptJson = await PPTXFileToJson(file).catch(() => { ElMessageBox.alert('PPT文件转换失败!请点击素材右侧...下载文件后打开另存为PPTX文件格式再进行导入!') this.pgDialog.visible = false From 3c0e7777f8a86de117edffa0e2c4bed074cba93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=9D=A8?= <666> Date: Tue, 21 Jan 2025 14:22:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=EF=BC=9A=E9=BB=98=E8=AE=A4=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/layout/components/Aside.vue | 7 ++++++- src/renderer/src/views/profile/userAvatar.vue | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/layout/components/Aside.vue b/src/renderer/src/layout/components/Aside.vue index d87208d..ecc7566 100644 --- a/src/renderer/src/layout/components/Aside.vue +++ b/src/renderer/src/layout/components/Aside.vue @@ -5,7 +5,11 @@ @@ -65,6 +69,7 @@ import {toLinkLeftWeb} from "@/utils/tool" const { ipcRenderer } = window.electron || {} const dev_api = ref(import.meta.env.VITE_APP_BASE_API) +const route_path = ref(import.meta.env.VITE_APP_BUILD_BASE_PATH) const userStore = useUserStore() const router = useRouter() const currentRoute = ref('') diff --git a/src/renderer/src/views/profile/userAvatar.vue b/src/renderer/src/views/profile/userAvatar.vue index 755a3f6..531f3c7 100644 --- a/src/renderer/src/views/profile/userAvatar.vue +++ b/src/renderer/src/views/profile/userAvatar.vue @@ -1,6 +1,11 @@