feat(frontend):添加设置导出导入功能

- 在 App.d.ts 中添加 ExportConfig 函数声明
- 在 app.go 中实现 ExportConfig 方法,用于导出配置文件
- 在 App.js 中添加 ExportConfig 函数的 JavaScript 调用接口
- 在 settings.vue 中添加导出和导入配置的功能按钮,并实现相关逻辑
- 在 settings_api.go 中添加 Export 方法,用于生成配置文件的 JSON 字符串
This commit is contained in:
spark 2025-02-10 09:45:51 +08:00
parent 0006501cc8
commit 3a3e0b0543
5 changed files with 84 additions and 1 deletions

19
app.go
View File

@ -18,6 +18,7 @@ import (
"go-stock/backend/db"
"go-stock/backend/logger"
"go-stock/backend/models"
"os"
"strings"
"time"
)
@ -528,3 +529,21 @@ func (a *App) UpdateConfig(settings *data.Settings) string {
func (a *App) GetConfig() *data.Settings {
return data.NewSettingsApi(&data.Settings{}).GetConfig()
}
func (a *App) ExportConfig() string {
config := data.NewSettingsApi(&data.Settings{}).Export()
file, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{
Title: "导出配置文件",
CanCreateDirectories: true,
})
if err != nil {
logger.SugaredLogger.Errorf("导出配置文件失败:%s", err.Error())
return err.Error()
}
err = os.WriteFile(file, []byte(config), 0644)
if err != nil {
logger.SugaredLogger.Errorf("导出配置文件失败:%s", err.Error())
return err.Error()
}
return "导出成功:" + file
}

View File

@ -1,6 +1,7 @@
package data
import (
"encoding/json"
"go-stock/backend/db"
"go-stock/backend/logger"
"gorm.io/gorm"
@ -88,3 +89,8 @@ func (s SettingsApi) GetConfig() *Settings {
db.Dao.Model(&Settings{}).First(&settings)
return &settings
}
func (s SettingsApi) Export() string {
d, _ := json.MarshalIndent(s.GetConfig(), "", " ")
return string(d)
}

View File

@ -1,7 +1,7 @@
<script setup>
import {onMounted, ref, watch} from "vue";
import {GetConfig, SendDingDingMessageByType, UpdateConfig} from "../../wailsjs/go/main/App";
import {ExportConfig, GetConfig, SendDingDingMessageByType, UpdateConfig} from "../../wailsjs/go/main/App";
import {useMessage} from "naive-ui";
import {data} from "../../wailsjs/go/models";
const message = useMessage()
@ -106,6 +106,50 @@ function sendTestNotice(){
message.info(res)
})
}
function exportConfig(){
ExportConfig().then(res=>{
message.info(res)
})
}
function importConfig(){
let input = document.createElement('input');
input.type = 'file';
input.accept = '.json';
input.onchange = (e) => {
let file = e.target.files[0];
let reader = new FileReader();
reader.onload = (e) => {
let config = JSON.parse(e.target.result);
console.log(config)
formValue.value.ID = config.ID
formValue.value.tushareToken = config.tushareToken
formValue.value.dingPush = {
enable:config.dingPushEnable,
dingRobot:config.dingRobot
}
formValue.value.localPush = {
enable:config.localPushEnable,
}
formValue.value.updateBasicInfoOnStart = config.updateBasicInfoOnStart
formValue.value.refreshInterval = config.refreshInterval
formValue.value.openAI = {
enable:config.openAiEnable,
baseUrl: config.openAiBaseUrl,
apiKey:config.openAiApiKey,
model:config.openAiModelName,
temperature:config.openAiTemperature,
maxTokens:config.openAiMaxTokens,
prompt:config.prompt,
timeout:config.openAiApiTimeOut
}
formRef.value.resetFields()
};
reader.readAsText(file);
};
input.click();
}
</script>
<template>
@ -186,9 +230,17 @@ function sendTestNotice(){
<n-gi :span="24">
<div style="display: flex; justify-content: center">
<n-space>
<n-button type="primary" @click="saveConfig">
保存
</n-button>
<n-button type="info" @click="exportConfig">
导出
</n-button>
<n-button type="error" @click="importConfig">
导入
</n-button>
</n-space>
</div>
</n-gi>
</n-form>

View File

@ -3,6 +3,8 @@
import {models} from '../models';
import {data} from '../models';
export function ExportConfig():Promise<string>;
export function Follow(arg1:string):Promise<string>;
export function GetAIResponseResult(arg1:string):Promise<models.AIResponseResult>;

View File

@ -2,6 +2,10 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
export function ExportConfig() {
return window['go']['main']['App']['ExportConfig']();
}
export function Follow(arg1) {
return window['go']['main']['App']['Follow'](arg1);
}