|
|
@ -10,6 +10,8 @@ import { isShareFile } from "@/util/sharePath.ts"; |
|
|
|
import { inject, onMounted, onUnmounted, ref, toRaw } from "vue"; |
|
|
|
import { askAi } from "@/hook/useAi"; |
|
|
|
import { useChooseStore } from "@/stores/choose"; |
|
|
|
import { nanoid } from "nanoid"; |
|
|
|
import eventBus from "@/util/eventBus"; |
|
|
|
const SP = getSplit(); |
|
|
|
|
|
|
|
const sys: any = inject<System>("system"); |
|
|
@ -28,21 +30,15 @@ const props = defineProps({ |
|
|
|
default: "md", |
|
|
|
}, |
|
|
|
}); |
|
|
|
//console.log('iframe: ', props); |
|
|
|
|
|
|
|
//console.log(props); |
|
|
|
//let path = win?.config?.path; |
|
|
|
// let currentPath = ref('') |
|
|
|
const storeRef = ref<HTMLIFrameElement | null>(null); |
|
|
|
let hasInit = false; |
|
|
|
|
|
|
|
const choose = useChooseStore(); |
|
|
|
const eventHandler = async (e: MessageEvent) => { |
|
|
|
const eventData = e.data; |
|
|
|
if (eventData.type == props.eventType) { |
|
|
|
let data = JSON.parse(eventData.data); |
|
|
|
let title = data.title; |
|
|
|
let path; |
|
|
|
const componentID = nanoid(); |
|
|
|
// console.log("唯一ID:", componentID); |
|
|
|
const saveFile = async (e: any) => { |
|
|
|
if (e.componentID !== componentID) return; |
|
|
|
let data = JSON.parse(e.eventData.data); |
|
|
|
let ext: any = props.ext; |
|
|
|
if (ext instanceof Array) { |
|
|
|
ext = ext[0]; |
|
|
@ -50,33 +46,24 @@ const eventHandler = async (e: MessageEvent) => { |
|
|
|
if (data.ext) { |
|
|
|
ext = data.ext; |
|
|
|
} |
|
|
|
if (title.indexOf('.' + ext) > -1) { |
|
|
|
title = title.replace('.' + ext, ""); |
|
|
|
} |
|
|
|
if (win.config && win.config.path) { |
|
|
|
path = win.config.path; |
|
|
|
|
|
|
|
//去除重复文件名后的(1) |
|
|
|
let fileTitleArr = path.split(SP).pop().split("."); |
|
|
|
let oldExt = fileTitleArr.pop(); |
|
|
|
let fileTitle = fileTitleArr.join("."); |
|
|
|
if (fileTitle != title) { |
|
|
|
path = path.replace(fileTitle, title); |
|
|
|
} |
|
|
|
if (oldExt != ext) { |
|
|
|
path = path.replace("." + oldExt, "." + ext); |
|
|
|
} |
|
|
|
} else { |
|
|
|
choose.saveFile('选择地址','*') |
|
|
|
path = `${SP}C${SP}Users${SP}Desktop${SP}${title}.${ext}`; |
|
|
|
} |
|
|
|
//判断是否共享文件,以及编辑权限 |
|
|
|
let path:string |
|
|
|
e.filePath !== "" |
|
|
|
? (path = `${e.filePath}/${e.fileName}.${ext}`) |
|
|
|
: (path = `${SP}C${SP}Users${SP}Desktop${SP}${e.fileName}.${ext}`); |
|
|
|
// console.log('路径:',path); |
|
|
|
await writeFile(path, data, e.fileName); |
|
|
|
}; |
|
|
|
eventBus.on("saveFile", saveFile); |
|
|
|
const writeFile = async (path: string, data: any, title: string) => { |
|
|
|
const isShare = ref(false); |
|
|
|
const isWrite = ref(0); |
|
|
|
if (isShareFile(path)) { |
|
|
|
const file = await sys?.fs.getShareInfo(path); |
|
|
|
isShare.value = true; |
|
|
|
isWrite.value = file.fs.sender === getSystemConfig().userInfo.id ? 1 : file.fs.is_write; |
|
|
|
isWrite.value = |
|
|
|
file.fs.sender === getSystemConfig().userInfo.id |
|
|
|
? 1 |
|
|
|
: file.fs.is_write; |
|
|
|
if ( |
|
|
|
!isWrite.value && |
|
|
|
file.fs.sender !== getSystemConfig().userInfo.id |
|
|
@ -111,19 +98,54 @@ const eventHandler = async (e: MessageEvent) => { |
|
|
|
} |
|
|
|
|
|
|
|
const res = isShare.value |
|
|
|
? await sys?.fs.writeShareFile( |
|
|
|
path, |
|
|
|
data.content, |
|
|
|
isWrite.value |
|
|
|
) |
|
|
|
? await sys?.fs.writeShareFile(path, data.content, isWrite.value) |
|
|
|
: await sys?.fs.writeFile(path, data.content); |
|
|
|
// console.log("编写文件:", res, isShare); |
|
|
|
new Notify({ |
|
|
|
title: "提示", |
|
|
|
content: res.message |
|
|
|
content: res.message, |
|
|
|
// content: res.code === 0 ? "文件已保存" : res.message, |
|
|
|
}); |
|
|
|
sys.refershAppList(); |
|
|
|
}; |
|
|
|
const eventHandler = async (e: MessageEvent) => { |
|
|
|
const eventData = e.data; |
|
|
|
// console.log('是否同一个:', componentID == eventData.componentID); |
|
|
|
if (eventData.type == props.eventType) { |
|
|
|
// if (eventData.componentID !== componentID) return; |
|
|
|
let data = JSON.parse(eventData.data); |
|
|
|
let title = data.title; |
|
|
|
let path; |
|
|
|
let ext: any = props.ext; |
|
|
|
if (ext instanceof Array) { |
|
|
|
ext = ext[0]; |
|
|
|
} |
|
|
|
if (data.ext) { |
|
|
|
ext = data.ext; |
|
|
|
} |
|
|
|
if (title.indexOf("." + ext) > -1) { |
|
|
|
title = title.replace("." + ext, ""); |
|
|
|
} |
|
|
|
|
|
|
|
if (win.config && win.config.path) { |
|
|
|
path = win.config.path; |
|
|
|
|
|
|
|
//去除重复文件名后的(1) |
|
|
|
let fileTitleArr = path.split(SP).pop().split("."); |
|
|
|
let oldExt = fileTitleArr.pop(); |
|
|
|
let fileTitle = fileTitleArr.join("."); |
|
|
|
if (fileTitle != title) { |
|
|
|
path = path.replace(fileTitle, title); |
|
|
|
} |
|
|
|
if (oldExt != ext) { |
|
|
|
path = path.replace("." + oldExt, "." + ext); |
|
|
|
} |
|
|
|
} else { |
|
|
|
choose.saveFile("选择地址", "*", componentID, eventData); |
|
|
|
return; |
|
|
|
// path = `${SP}C${SP}Users${SP}Desktop${SP}${title}.${ext}`; |
|
|
|
} |
|
|
|
writeFile(path, data, title); |
|
|
|
} else if (eventData.type == "initSuccess") { |
|
|
|
if (hasInit) { |
|
|
|
return; |
|
|
@ -154,6 +176,7 @@ const eventHandler = async (e: MessageEvent) => { |
|
|
|
{ |
|
|
|
type: "init", |
|
|
|
data: { content, title }, |
|
|
|
componentID, |
|
|
|
}, |
|
|
|
"*" |
|
|
|
); |
|
|
@ -162,16 +185,15 @@ const eventHandler = async (e: MessageEvent) => { |
|
|
|
{ |
|
|
|
type: "start", |
|
|
|
title, |
|
|
|
componentID, |
|
|
|
}, |
|
|
|
"*" |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (eventData.type == "close") { |
|
|
|
} else if (eventData.type == "close") { |
|
|
|
// console.log("关闭"); |
|
|
|
win.close(); |
|
|
|
} |
|
|
|
else if (eventData.type == "saveMind") { |
|
|
|
} else if (eventData.type == "saveMind") { |
|
|
|
// console.log("保存"); |
|
|
|
const data = eventData.data; |
|
|
|
const path = win?.config?.path; |
|
|
@ -181,9 +203,9 @@ const eventHandler = async (e: MessageEvent) => { |
|
|
|
url: "/mind/index.html", |
|
|
|
frame: true, |
|
|
|
config: { |
|
|
|
ext: 'mind', |
|
|
|
ext: "mind", |
|
|
|
path: path, |
|
|
|
content: data.content |
|
|
|
content: data.content, |
|
|
|
}, |
|
|
|
icon: "gallery", |
|
|
|
width: 700, |
|
|
@ -194,29 +216,27 @@ const eventHandler = async (e: MessageEvent) => { |
|
|
|
minimizable: false, |
|
|
|
resizable: true, |
|
|
|
}); |
|
|
|
winMind.show() |
|
|
|
|
|
|
|
} |
|
|
|
else if (eventData.type == 'aiCreater') { |
|
|
|
console.log('传递内容: ', eventData) |
|
|
|
let postData: any = {} |
|
|
|
winMind.show(); |
|
|
|
} else if (eventData.type == "aiCreater") { |
|
|
|
console.log("传递内容: ", eventData); |
|
|
|
let postData: any = {}; |
|
|
|
if (eventData.data) { |
|
|
|
postData.content = eventData.data |
|
|
|
postData.content = eventData.data; |
|
|
|
} |
|
|
|
if (eventData.title) { |
|
|
|
postData.title = eventData.title |
|
|
|
postData.title = eventData.title; |
|
|
|
} |
|
|
|
if (eventData.category) { |
|
|
|
postData.category = eventData.category |
|
|
|
postData.category = eventData.category; |
|
|
|
} |
|
|
|
//console.log(postData,eventData.action) |
|
|
|
// 模拟AI返回数据 |
|
|
|
const res: any = await askAi(postData, eventData.action); |
|
|
|
storeRef.value?.contentWindow?.postMessage( |
|
|
|
{ |
|
|
|
type: 'aiReciver', |
|
|
|
type: "aiReciver", |
|
|
|
data: res, |
|
|
|
action: eventData.action |
|
|
|
action: eventData.action, |
|
|
|
}, |
|
|
|
"*" |
|
|
|
); |
|
|
|