feat(app): 添加文件清空确认对话框功能

- 引入 ConfirmClearDialog 组件用于清空文件确认
- 添加 clear-files-no-prompt 配置项控制是否显示确认弹窗
- 实现清空文件列表显示和确认逻辑
- 集成 Element Plus 图标组件库
- 优化日志输出格式增加空格分隔
- 重构配置写入方法使用统一的 configModel 枚举
- 添加事件监听处理清空文件操作
- 实现勾选不再提示选项并保存配置
This commit is contained in:
2026-05-01 20:45:17 +08:00
parent 03e4e6f45b
commit 3f6e999783
7 changed files with 195 additions and 33 deletions
+55 -32
View File
@@ -1,11 +1,12 @@
<script lang="ts" setup>
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';
import {computed, nextTick, ref} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import ConfirmClearDialog from './components/ConfirmClearDialog.vue'
import {GetConfig, SelectPath, StartUpload, StopUpload, WriteConfig} from '../wailsjs/go/main/App';
import {config} from "../wailsjs/go/models.ts";
import Config = config.Config;
import {EventsOn, LogPrint} from "../wailsjs/runtime";
import {configModel} from "@/model.ts";
import Config = config.Config;
// const serverUrl = ref('')
const token = ref('')
@@ -19,6 +20,10 @@ const logOutput = ref<string[]>([])
const logContentRef = ref<HTMLElement>()
const logRoll = ref(true)
const clearDialogVisible = ref(false)
const filesToClear = ref<string[]>([])
const noPromptClear = ref(false)
interface FileProgress {
name: string
uploaded: number
@@ -41,7 +46,7 @@ const sortedProgressList = computed(() => {
})
const addLog = (msg: string) => {
logOutput.value.push(`[${new Date().toLocaleString()}]` + msg)
logOutput.value.push(`[${new Date().toLocaleString()}] ` + msg)
nextTick(() => {
if (logContentRef.value && logRoll.value) {
logContentRef.value.scrollTop = logContentRef.value.scrollHeight
@@ -52,9 +57,9 @@ const addLog = (msg: string) => {
const selectDirectory = () => {
// ElMessage.info('请手动输入检测目录路径')
SelectPath().then((path) => {
if (path){
if (path) {
checkDir.value = path
}else {
} else {
ElMessage.warning('未选择目录,不更改配置')
}
})
@@ -99,17 +104,17 @@ const clearLog = () => {
// const writeServerUrl =() => {
// WriteConfig("url", serverUrl.value)
// }
const writeToken =() => {
WriteConfig("token", token.value)
const writeToken = () => {
WriteConfig(configModel.Token, token.value)
}
const writeCheckDir = () => {
WriteConfig("check-dir", checkDir.value)
WriteConfig(configModel.CheckDir, checkDir.value)
}
const writeConcurrentFiles = () => {
WriteConfig("handle-file-count", concurrentFiles.value)
WriteConfig(configModel.HandleFileCount, concurrentFiles.value)
}
const writeUploadThreads =() => {
WriteConfig("thread-count", uploadThreads.value)
const writeUploadThreads = () => {
WriteConfig(configModel.ThreadCount, uploadThreads.value)
}
// const writeAutoStart = () => {
// WriteConfig("is-run-on-start", autoStart.value)
@@ -124,6 +129,7 @@ try {
concurrentFiles.value = config.handle_file_count
uploadThreads.value = config.thread_count
// autoStart.value = config.is_run_on_start
noPromptClear.value = config.clear_files_no_prompt
LogPrint(`[${new Date().toLocaleString()}] 配置已加载`)
})
@@ -131,24 +137,34 @@ try {
console.log(e)
}
EventsOn("is-run", (run) => {
isRunning.value = run
})
EventsOn("progress", (progress) => {
progressList.value = progress
})
EventsOn("log", (msg) => {
addLog(msg)
})
try {
EventsOn("is-run", (run) => {
isRunning.value = run
})
EventsOn("progress", (progress) => {
progressList.value = progress
})
EventsOn("log", (msg) => {
addLog(msg)
})
EventsOn("clear-files", (files) => {
filesToClear.value = files
if (!noPromptClear.value) {
clearDialogVisible.value = true
}
})
} catch (e) {
console.log(e)
}
</script>
<template>
<div class="container">
<div class="left-panel">
<!-- <div class="form-item">-->
<!-- <label>服务器地址</label>-->
<!-- <el-input v-model="serverUrl" placeholder="请输入服务器地址" :disabled="isRunning" @change="writeServerUrl()"/>-->
<!-- </div>-->
<!-- <div class="form-item">-->
<!-- <label>服务器地址</label>-->
<!-- <el-input v-model="serverUrl" placeholder="请输入服务器地址" :disabled="isRunning" @change="writeServerUrl()"/>-->
<!-- </div>-->
<div class="form-item">
<label>Token</label>
@@ -165,17 +181,19 @@ EventsOn("log", (msg) => {
<div class="form-item">
<label>同时处理文件数</label>
<el-input-number v-model="concurrentFiles" :min="1" :max="100" :disabled="isRunning" @change="writeConcurrentFiles()"/>
<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" @change="writeUploadThreads()"/>
<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" @change="writeAutoStart()"/>-->
<!-- </div>-->
<!-- <div class="form-item">-->
<!-- <el-checkbox v-model="autoStart" label="运行时自动启动上传" size="large" :disabled="isRunning" @change="writeAutoStart()"/>-->
<!-- </div>-->
<div class="form-item">
<label>上传进度</label>
@@ -205,6 +223,11 @@ EventsOn("log", (msg) => {
</div>
</div>
</div>
<ConfirmClearDialog
v-model:visible="clearDialogVisible"
:file-list="filesToClear"
/>
</template>
<style scoped>