Merge remote-tracking branch 'origin/main'

This commit is contained in:
朱浩 2025-01-21 14:23:33 +08:00
commit b31e975efd
3 changed files with 72 additions and 36 deletions

View File

@ -5,7 +5,11 @@
<el-popover ref="popoverRef" placement="right" trigger="hover" popper-class="popoverStyle" :tabindex="999" > <el-popover ref="popoverRef" placement="right" trigger="hover" popper-class="popoverStyle" :tabindex="999" >
<template #reference> <template #reference>
<div class="user-info"> <div class="user-info">
<el-image class="user-img" :src="img" /> <el-image class="user-img" :src="img">
<template #error>
<img :src="route_path + userStore.user.avatar">
</template>
</el-image>
<span>{{ userStore.user.nickName }}</span> <span>{{ userStore.user.nickName }}</span>
</div> </div>
</template> </template>
@ -65,6 +69,7 @@ import {toLinkLeftWeb} from "@/utils/tool"
const { ipcRenderer } = window.electron || {} const { ipcRenderer } = window.electron || {}
const dev_api = ref(import.meta.env.VITE_APP_BASE_API) 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 userStore = useUserStore()
const router = useRouter() const router = useRouter()
const currentRoute = ref('') const currentRoute = ref('')

View File

@ -289,7 +289,8 @@ export default {
{ color: '#5cb87a', percentage: 100 }, // 绿 { color: '#5cb87a', percentage: 100 }, // 绿
] ]
} }
} },
pptMedia: {} // ppt
} }
}, },
computed: { computed: {
@ -591,43 +592,66 @@ export default {
this.createAIPPTByFile(file, this.currentNode.itemtitle + '.aippt') this.createAIPPTByFile(file, this.currentNode.itemtitle + '.aippt')
} }
}, },
async toRousrceUrl(o) { // || 线
if (!!o.src) { // src getOnlineFileUrl(data, name){
const isBase64 = /^data:image\/(\w+);base64,/.test(o.src) return new Promise(async (resolve, reject) => {
const isBlobUrl = /^blob:/.test(o.src) let file
// console.log('isBase64', o, isBase64) if (data instanceof Blob) { // blob
if (isBase64) { const fileName = Date.now() + `.${name||'png'}`
const bolb = commUtils.base64ToBlob(o.src) file = commUtils.blobToFile(data, fileName)
const fileName = Date.now() + '.png' } else if (data instanceof File) { // file
const file = commUtils.blobToFile(bolb, fileName) file = data
// o.src = fileName } else { // base64
// console.log('file', file) const blob = commUtils.base64ToBlob(data)
const fileName = Date.now() + `.${name||'png'}`
file = commUtils.blobToFile(blob, fileName)
}
const formData = new FormData() const formData = new FormData()
formData.append('file', file) formData.append('file', file)
const res = await Api_server.Other.uploadFile(formData) const res = await Api_server.Other.uploadFile(formData)
if (res && res.code == 200){ if (res && res.code == 200){
const url = res?.url resolve(res?.url)
url &&(o.src = 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)
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) { // } else if (isBlobUrl) { //
const res = await fetch(o.src) const res = await fetch(o.src)
const blob = await res.blob() const blob = await res.blob()
const fileName = o.type=='video'? Date.now() + '.mp4':Date.now() + '.mp3' const url = await this.getOnlineFileUrl(blob, o.type=='video'?'mp4':'mp3')
const file = commUtils.blobToFile(blob, fileName) URL.revokeObjectURL(o.src) //
// 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
url &&(o.src = url) 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?.background?.image) await this.toRousrceUrl(o.background.image)
// if (o?.elements) o.elements.forEach(async o => {await this.toRousrceUrl(o)})
if(o?.elements){ if(o?.elements){
for (let element of o.elements) { for (let element of o.elements) {
await this.toRousrceUrl(element); await this.toRousrceUrl(element);
@ -637,6 +661,7 @@ export default {
async createAIPPTByFile(file,fileShowName) { async createAIPPTByFile(file,fileShowName) {
this.pgDialog.visible = true this.pgDialog.visible = true
this.pgDialog.pg.percentage = 0 this.pgDialog.pg.percentage = 0
this.pptMedia = {} //
const resPptJson = await PPTXFileToJson(file).catch(() => { const resPptJson = await PPTXFileToJson(file).catch(() => {
ElMessageBox.alert('PPT文件转换失败请点击素材右侧...下载文件后打开另存为PPTX文件格式再进行导入') ElMessageBox.alert('PPT文件转换失败请点击素材右侧...下载文件后打开另存为PPTX文件格式再进行导入')
this.pgDialog.visible = false this.pgDialog.visible = false

View File

@ -1,6 +1,11 @@
<template> <template>
<div class="user-info-head" @click="editCropper()"> <div class="user-info-head" @click="editCropper()">
<img :src="options.img" title="点击上传头像" class="img-circle img-lg" /> <!-- <img :src="options.img" title="点击上传头像" class="img-circle img-lg" /> -->
<el-image class="user-img" :src="options.img" style="width: 120px;">
<template #error>
<img :src="route_path + userStore.user.avatar">
</template>
</el-image>
<el-dialog <el-dialog
v-model="open" v-model="open"
append-to-body append-to-body
@ -31,6 +36,7 @@ const userStore = useUserStore()
const open = ref(false) const open = ref(false)
const visible = ref(false) const visible = ref(false)
const dev_api = ref(import.meta.env.VITE_APP_BASE_API) const dev_api = ref(import.meta.env.VITE_APP_BASE_API)
const route_path = ref(import.meta.env.VITE_APP_BUILD_BASE_PATH)
const defaultImg = ['/img/avatar-default.jpg','/images/img-avatar.png','/src/assets/images/img-avatar.png'] const defaultImg = ['/img/avatar-default.jpg','/images/img-avatar.png','/src/assets/images/img-avatar.png']
// //