🏗️ 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;

View File

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

View File

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

View File

@ -1,6 +1,5 @@
<script lang="ts" setup>
import { defineComponent, onMounted, onUnmounted, reactive, ref } from "vue";
import { ipcRenderer } from "electron";
import { ElMessage, ElMessageBox, FormInstance, FormRules } from "element-plus";
import Breadcrumb from "@/layout/compoenets/Breadcrumb.vue";
import { useDebounceFn } from "@vueuse/core";
@ -9,6 +8,7 @@ import IconifyIconOffline from "@/components/IconifyIcon/src/iconifyIconOffline"
import { on, removeRouterListeners, send } from "@/utils/ipcUtils";
import { ipcRouters } from "../../../electron/core/IpcRouter";
import _ from "lodash";
import confetti from "canvas-confetti/src/confetti.js";
defineComponent({
name: "Config"
@ -248,14 +248,14 @@ onMounted(() => {
console.log("data", data);
if (data) {
formData.value = data;
checkAndResetVersion();
}
loading.value--;
});
on(ipcRouters.VERSION.getDownloadedVersions, data => {
console.log("versions", data);
versions.value = data;
// checkAndResetVersion();
checkAndResetVersion();
});
on(ipcRouters.SERVER.saveConfig, data => {
@ -280,7 +280,7 @@ onMounted(() => {
// formData.value.tlsConfigTrustedCaFile = data as string;
break;
}
})
});
// ipcRenderer.on("Config.getConfig.hook", (event, 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 => {
const { canceled, path } = data;
if (!canceled) {
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, ``);
on(ipcRouters.SYSTEM.openAppData, () => {
@ -414,37 +417,18 @@ const handleSelectFile = (type: number, ext: string[]) => {
name: "",
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 shareConfig: ShareLinkConfig = {
// serverAddr: formData.value.serverAddr,
// serverPort: formData.value.serverPort,
// authMethod: formData.value.authMethod,
// authToken: formData.value.authToken,
// transportHeartbeatInterval: formData.value.transportHeartbeatInterval,
// transportHeartbeatTimeout: formData.value.transportHeartbeatTimeout,
// user: formData.value.user,
// metaToken: formData.value.metaToken
// };
const { _id, frpcVersion, ...shareConfig } = formData.value;
const { _id, frpcVersion, webServer, system, ...shareConfig } = _.cloneDeep(
formData.value
);
shareConfig.transport.tls.certFile = "";
shareConfig.transport.tls.keyFile = "";
shareConfig.transport.tls.trustedCaFile = "";
const base64str = Base64.encode(JSON.stringify(shareConfig));
copyServerConfigBase64.value = protocol.value + base64str;
visibles.copyServerConfig = true;
@ -513,7 +497,7 @@ const handleExportConfig = useDebounceFn(() => {
}, 300);
const handleImportConfig = () => {
ipcRenderer.send("config.importConfig");
send(ipcRouters.SERVER.importTomlConfig);
};
const handleResetConfig = () => {
@ -542,6 +526,7 @@ onUnmounted(() => {
removeRouterListeners(ipcRouters.VERSION.getDownloadedVersions);
removeRouterListeners(ipcRouters.SERVER.exportConfig);
removeRouterListeners(ipcRouters.SYSTEM.openAppData);
removeRouterListeners(ipcRouters.SERVER.importTomlConfig);
});
</script>
<template>