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> <script lang="ts" setup>
import {ref, nextTick, watch, computed} from 'vue' import {ref, nextTick, computed} from 'vue'
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import {ElMessageBox} from 'element-plus' import {ElMessageBox} from 'element-plus'
import {SelectPath, GetConfig, WriteConfig, StartUpload, StopUpload} from '../wailsjs/go/main/App'; 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 { try {
GetConfig().then((config: Config) => { GetConfig().then((config: Config) => {
@@ -109,25 +128,6 @@ try {
console.log(e) 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) => { EventsOn("is-run", (run) => {
isRunning.value = run isRunning.value = run
}) })
@@ -144,34 +144,34 @@ EventsOn("log", (msg) => {
<div class="left-panel"> <div class="left-panel">
<div class="form-item"> <div class="form-item">
<label>服务器地址</label> <label>服务器地址</label>
<el-input v-model="serverUrl" placeholder="请输入服务器地址" :disabled="isRunning"/> <el-input v-model="serverUrl" placeholder="请输入服务器地址" :disabled="isRunning" @change="writeServerUrl()"/>
</div> </div>
<div class="form-item"> <div class="form-item">
<label>Token</label> <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>
<div class="form-item"> <div class="form-item">
<label>检测目录</label> <label>检测目录</label>
<div class="dir-input"> <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> <el-button @click="selectDirectory" :disabled="isRunning">选择目录</el-button>
</div> </div>
</div> </div>
<div class="form-item"> <div class="form-item">
<label>同时处理文件数</label> <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>
<div class="form-item"> <div class="form-item">
<label>单文件上传线程</label> <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>
<div class="form-item"> <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>
<div class="form-item"> <div class="form-item">