refactor(App): 解决程序运行时重复写入配置

- 移除 watch 监听器,改用事件驱动方式保存配置
- 添加 writeServerUrl、writeToken 等配置保存方法
- 在表单项上绑定 change 事件触发配置保存
- 移除不再使用的 nextTick 导入
- 统一配置保存逻辑到独立函数中
This commit is contained in:
2026-04-28 14:53:19 +08:00
parent 602c4c8546
commit 7face117f3
+26 -26
View File
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import {ref, nextTick, watch, computed} from 'vue'
import {ref, nextTick, computed} from 'vue'
import {ElMessage} from 'element-plus'
import {ElMessageBox} from 'element-plus'
import {SelectPath, GetConfig, WriteConfig, StartUpload, StopUpload} from '../wailsjs/go/main/App';
@@ -93,6 +93,25 @@ const clearLog = () => {
})
}
const writeServerUrl =() => {
WriteConfig("url", serverUrl.value)
}
const writeToken =() => {
WriteConfig("token", token.value)
}
const writeCheckDir = () => {
WriteConfig("check-dir", checkDir.value)
}
const writeConcurrentFiles = () => {
WriteConfig("handle-file-count", concurrentFiles.value)
}
const writeUploadThreads =() => {
WriteConfig("thread-count", uploadThreads.value)
}
const writeAutoStart = () => {
WriteConfig("is-run-on-start", autoStart.value)
}
// 加载配置
try {
GetConfig().then((config: Config) => {
@@ -109,25 +128,6 @@ try {
console.log(e)
}
watch(serverUrl, () => {
WriteConfig("url", serverUrl.value)
})
watch(token, () => {
WriteConfig("token", token.value)
})
watch(checkDir, () => {
WriteConfig("check-dir", checkDir.value)
})
watch(concurrentFiles, () => {
WriteConfig("handle-file-count", concurrentFiles.value)
})
watch(uploadThreads, () => {
WriteConfig("thread-count", uploadThreads.value)
})
watch(autoStart, () => {
WriteConfig("is-run-on-start", autoStart.value)
})
EventsOn("is-run", (run) => {
isRunning.value = run
})
@@ -144,34 +144,34 @@ EventsOn("log", (msg) => {
<div class="left-panel">
<div class="form-item">
<label>服务器地址</label>
<el-input v-model="serverUrl" placeholder="请输入服务器地址" :disabled="isRunning"/>
<el-input v-model="serverUrl" placeholder="请输入服务器地址" :disabled="isRunning" @change="writeServerUrl()"/>
</div>
<div class="form-item">
<label>Token</label>
<el-input v-model="token" placeholder="请输入Token" :disabled="isRunning"/>
<el-input v-model="token" placeholder="请输入Token" :disabled="isRunning" @change="writeToken()"/>
</div>
<div class="form-item">
<label>检测目录</label>
<div class="dir-input">
<el-input v-model="checkDir" placeholder="请选择检测目录" :disabled="isRunning"/>
<el-input v-model="checkDir" placeholder="请选择检测目录" :disabled="isRunning" @change="writeCheckDir()"/>
<el-button @click="selectDirectory" :disabled="isRunning">选择目录</el-button>
</div>
</div>
<div class="form-item">
<label>同时处理文件数</label>
<el-input-number v-model="concurrentFiles" :min="1" :max="100" :disabled="isRunning"/>
<el-input-number v-model="concurrentFiles" :min="1" :max="100" :disabled="isRunning" @change="writeConcurrentFiles()"/>
</div>
<div class="form-item">
<label>单文件上传线程</label>
<el-input-number v-model="uploadThreads" :min="1" :max="100" :disabled="isRunning"/>
<el-input-number v-model="uploadThreads" :min="1" :max="100" :disabled="isRunning" @change="writeUploadThreads()"/>
</div>
<div class="form-item">
<el-checkbox v-model="autoStart" label="运行时自动启动上传" size="large" :disabled="isRunning"/>
<el-checkbox v-model="autoStart" label="运行时自动启动上传" size="large" :disabled="isRunning" @change="writeAutoStart()"/>
</div>
<div class="form-item">