🏗️ refactor config handling and implement TOML import functionality

This commit is contained in:
刘嘉伟 2025-02-25 17:37:52 +08:00
parent 7da8bf025b
commit cd5122c6cf
4 changed files with 40 additions and 45 deletions

View File

@ -100,6 +100,12 @@ class ConfigController extends BaseController {
} }
}); });
} }
importTomlConfig(req: ControllerParam) {
this._serverService.importTomlConfig().then(() => {
req.event.reply(req.channel, ResponseUtils.success());
});
}
} }
export default ConfigController; export default ConfigController;

View File

@ -16,6 +16,10 @@ export const ipcRouters: IpcRouters = {
exportConfig: { exportConfig: {
path: "server/exportConfig", path: "server/exportConfig",
controller: "configController.exportConfig" controller: "configController.exportConfig"
},
importTomlConfig: {
path: "server/importTomlConfig",
controller: "configController.importTomlConfig"
} }
}, },
LOG: { LOG: {

View File

@ -79,7 +79,7 @@ class ServerService extends BaseService<OpenSourceFrpcDesktopServer> {
const result = await dialog.showOpenDialog(win, { const result = await dialog.showOpenDialog(win, {
properties: ["openFile"], properties: ["openFile"],
filters: [ filters: [
{ name: "Frpc", extensions: ["tar.gz", "zip"] } // 允许选择的文件类型,分开后缀以确保可以选择 { name: "Frpc Toml ConfigFile", extensions: ["toml"] }
] ]
}); });
if (result.canceled) { if (result.canceled) {

View File

@ -1,6 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { defineComponent, onMounted, onUnmounted, reactive, ref } from "vue"; import { defineComponent, onMounted, onUnmounted, reactive, ref } from "vue";
import { ipcRenderer } from "electron";
import { ElMessage, ElMessageBox, FormInstance, FormRules } from "element-plus"; import { ElMessage, ElMessageBox, FormInstance, FormRules } from "element-plus";
import Breadcrumb from "@/layout/compoenets/Breadcrumb.vue"; import Breadcrumb from "@/layout/compoenets/Breadcrumb.vue";
import { useDebounceFn } from "@vueuse/core"; import { useDebounceFn } from "@vueuse/core";
@ -9,6 +8,7 @@ import IconifyIconOffline from "@/components/IconifyIcon/src/iconifyIconOffline"
import { on, removeRouterListeners, send } from "@/utils/ipcUtils"; import { on, removeRouterListeners, send } from "@/utils/ipcUtils";
import { ipcRouters } from "../../../electron/core/IpcRouter"; import { ipcRouters } from "../../../electron/core/IpcRouter";
import _ from "lodash"; import _ from "lodash";
import confetti from "canvas-confetti/src/confetti.js";
defineComponent({ defineComponent({
name: "Config" name: "Config"
@ -248,14 +248,14 @@ onMounted(() => {
console.log("data", data); console.log("data", data);
if (data) { if (data) {
formData.value = data; formData.value = data;
checkAndResetVersion();
} }
loading.value--; loading.value--;
}); });
on(ipcRouters.VERSION.getDownloadedVersions, data => { on(ipcRouters.VERSION.getDownloadedVersions, data => {
console.log("versions", data);
versions.value = data; versions.value = data;
// checkAndResetVersion(); checkAndResetVersion();
}); });
on(ipcRouters.SERVER.saveConfig, data => { on(ipcRouters.SERVER.saveConfig, data => {
@ -280,7 +280,7 @@ onMounted(() => {
// formData.value.tlsConfigTrustedCaFile = data as string; // formData.value.tlsConfigTrustedCaFile = data as string;
break; break;
} }
}) });
// ipcRenderer.on("Config.getConfig.hook", (event, args) => { // ipcRenderer.on("Config.getConfig.hook", (event, args) => {
// const { err, data } = args; // const { err, data } = args;
@ -379,25 +379,28 @@ onMounted(() => {
}); });
}); });
on(ipcRouters.SERVER.importTomlConfig, data => {
//
confetti({
zIndex: 12002,
particleCount: 200,
spread: 70,
origin: { y: 0.6 }
});
ElMessageBox.alert("🎉 恭喜你,导入成功 请重启软件", `提示`, {
closeOnClickModal: false,
showClose: false,
confirmButtonText: "立即重启"
}).then(() => {
send(ipcRouters.SYSTEM.relaunchApp);
});
});
on(ipcRouters.SERVER.exportConfig, data => { on(ipcRouters.SERVER.exportConfig, data => {
const { canceled, path } = data; const { canceled, path } = data;
if (!canceled) { if (!canceled) {
ElMessageBox.alert(`配置路径:${path}`, `🎉 导出成功`); ElMessageBox.alert(`配置路径:${path}`, `🎉 导出成功`);
} }
// //
// confetti({
// zIndex: 12002,
// particleCount: 200,
// spread: 70,
// origin: { y: 0.6 }
// });
// ElMessageBox.alert("🎉 ", ``, {
// closeOnClickModal: false,
// showClose: false,
// confirmButtonText: ""
// }).then(() => {
// send(ipcRouters.SYSTEM.relaunchApp);
// });
}); });
// ElMessageBox.alert(data, ``); // ElMessageBox.alert(data, ``);
on(ipcRouters.SYSTEM.openAppData, () => { on(ipcRouters.SYSTEM.openAppData, () => {
@ -414,37 +417,18 @@ const handleSelectFile = (type: number, ext: string[]) => {
name: "", name: "",
extensions: ext extensions: ext
}); });
// ipcRenderer.invoke("file.selectFile", ext).then(r => {
// switch (type) {
// case 1:
// formData.value.tlsConfigCertFile = r[0];
// break;
// case 2:
// formData.value.tlsConfigKeyFile = r[0];
// break;
// case 3:
// formData.value.tlsConfigTrustedCaFile = r[0];
// break;
// }
// console.log(r);
// });
}; };
/** /**
* 分享配置 * 分享配置
*/ */
const handleCopyServerConfig2Base64 = useDebounceFn(() => { const handleCopyServerConfig2Base64 = useDebounceFn(() => {
// const shareConfig: ShareLinkConfig = { const { _id, frpcVersion, webServer, system, ...shareConfig } = _.cloneDeep(
// serverAddr: formData.value.serverAddr, formData.value
// serverPort: formData.value.serverPort, );
// authMethod: formData.value.authMethod, shareConfig.transport.tls.certFile = "";
// authToken: formData.value.authToken, shareConfig.transport.tls.keyFile = "";
// transportHeartbeatInterval: formData.value.transportHeartbeatInterval, shareConfig.transport.tls.trustedCaFile = "";
// transportHeartbeatTimeout: formData.value.transportHeartbeatTimeout,
// user: formData.value.user,
// metaToken: formData.value.metaToken
// };
const { _id, frpcVersion, ...shareConfig } = formData.value;
const base64str = Base64.encode(JSON.stringify(shareConfig)); const base64str = Base64.encode(JSON.stringify(shareConfig));
copyServerConfigBase64.value = protocol.value + base64str; copyServerConfigBase64.value = protocol.value + base64str;
visibles.copyServerConfig = true; visibles.copyServerConfig = true;
@ -513,7 +497,7 @@ const handleExportConfig = useDebounceFn(() => {
}, 300); }, 300);
const handleImportConfig = () => { const handleImportConfig = () => {
ipcRenderer.send("config.importConfig"); send(ipcRouters.SERVER.importTomlConfig);
}; };
const handleResetConfig = () => { const handleResetConfig = () => {
@ -542,6 +526,7 @@ onUnmounted(() => {
removeRouterListeners(ipcRouters.VERSION.getDownloadedVersions); removeRouterListeners(ipcRouters.VERSION.getDownloadedVersions);
removeRouterListeners(ipcRouters.SERVER.exportConfig); removeRouterListeners(ipcRouters.SERVER.exportConfig);
removeRouterListeners(ipcRouters.SYSTEM.openAppData); removeRouterListeners(ipcRouters.SYSTEM.openAppData);
removeRouterListeners(ipcRouters.SERVER.importTomlConfig);
}); });
</script> </script>
<template> <template>