feat: 密钥调整为异步任务,取消数量限制

This commit is contained in:
tbphp
2025-07-20 08:52:54 +08:00
parent 86c28dc20c
commit 90498298bf
12 changed files with 213 additions and 40 deletions

View File

@@ -5,7 +5,7 @@ import { appState } from "@/utils/app-state";
import { NButton, NCard, NProgress, NText, useMessage } from "naive-ui";
import { onBeforeUnmount, onMounted, ref, watch } from "vue";
const taskInfo = ref<TaskInfo>({ is_running: false });
const taskInfo = ref<TaskInfo>({ is_running: false, task_type: "KEY_VALIDATION" });
const visible = ref(false);
let pollTimer: number | null = null;
let isPolling = false; // 添加标志位
@@ -46,8 +46,15 @@ async function pollOnce() {
if (task.result) {
const lastTask = localStorage.getItem("last_closed_task");
if (lastTask !== task.finished_at) {
const { total_keys, valid_keys, invalid_keys } = task.result;
const msg = `任务已完成,处理了 ${total_keys} 个密钥,其中 ${valid_keys} 个有效密钥,${invalid_keys} 个无效密钥。`;
let msg = "任务已完成。";
if (task.task_type === "KEY_VALIDATION") {
const result = task.result as import("@/types/models").KeyValidationResult;
msg = `密钥验证完成,处理了 ${result.total_keys} 个密钥,其中 ${result.valid_keys} 个有效,${result.invalid_keys} 个无效。`;
} else if (task.task_type === "KEY_IMPORT") {
const result = task.result as import("@/types/models").KeyImportResult;
msg = `密钥导入完成,成功添加 ${result.added_count} 个密钥,忽略了 ${result.ignored_count} 个。`;
}
message.info(msg, {
closable: true,
duration: 0,
@@ -92,6 +99,20 @@ function getProgressText(): string {
function handleClose() {
visible.value = false;
}
function getTaskTitle(): string {
if (!taskInfo.value) {
return "正在处理任务...";
}
switch (taskInfo.value.task_type) {
case "KEY_VALIDATION":
return `正在验证分组 [${taskInfo.value.group_name}] 的密钥`;
case "KEY_IMPORT":
return `正在向分组 [${taskInfo.value.group_name}] 导入密钥`;
default:
return "正在处理任务...";
}
}
</script>
<template>
@@ -102,7 +123,7 @@ function handleClose() {
<span class="progress-icon"></span>
<div class="progress-details">
<n-text strong class="progress-title">
正在处理分组 {{ taskInfo.group_name }} 的任务
{{ getTaskTitle() }}
</n-text>
<n-text depth="3" class="progress-subtitle">
{{ getProgressText() }} ({{ getProgressPercentage() }}%)

View File

@@ -1,5 +1,6 @@
<script setup lang="ts">
import { keysApi } from "@/api/keys";
import { appState } from "@/utils/app-state";
import { Close } from "@vicons/ionicons5";
import { NButton, NCard, NInput, NModal } from "naive-ui";
import { ref, watch } from "vue";
@@ -51,10 +52,11 @@ async function handleSubmit() {
try {
loading.value = true;
await keysApi.addMultipleKeys(props.groupId, keysText.value);
emit("success");
await keysApi.addKeysAsync(props.groupId, keysText.value);
resetForm();
handleClose();
window.$message.success("密钥导入任务已开始,请稍后在下方查看进度。");
appState.taskPollingTrigger++;
} finally {
loading.value = false;
}