diff --git a/frontend-vue/src/shared/components/ApiSecretSettingsPanel.vue b/frontend-vue/src/shared/components/ApiSecretSettingsPanel.vue index 5c945e79..518e8048 100644 --- a/frontend-vue/src/shared/components/ApiSecretSettingsPanel.vue +++ b/frontend-vue/src/shared/components/ApiSecretSettingsPanel.vue @@ -86,12 +86,27 @@ +
+ + + {{ proxyStatusText }} + +
+
正在读取代理配置... 代理配置读取失败,请关闭弹窗后重试 代理设置仅在桌面客户端中可用 正在查询代理余量... {{ balanceText }} + 余额查询暂不可用
@@ -151,6 +166,56 @@ const proxyReady = ref(false) const proxySupported = ref(false) const proxyDirty = ref(false) +const proxyChecking = ref(false) +const proxyCheckResult = ref(null) +const proxyCheckError = ref('') + +const proxyStatusText = computed(() => { + if (proxyChecking.value) return '正在检测...' + if (proxyCheckResult.value) { + const latency = proxyCheckResult.value.checkLatencyMs != null ? `(${proxyCheckResult.value.checkLatencyMs}ms)` : '' + if (proxyCheckResult.value.checkStatus === 'passed') return `代理连通正常${latency}` + return `${proxyCheckResult.value.checkMessage || '代理检测失败'}` + } + if (proxyCheckError.value) return proxyCheckError.value + return '' +}) + +const proxyResultClass = computed(() => { + const status = proxyCheckResult.value?.checkStatus + return { + 'check-result--ok': status === 'passed', + 'check-result--fail': status === 'failed', + 'check-result--warn': status === 'error', + } +}) + +/** 检测代理连通性:地址有改动时检测输入值(不落库),否则检测/落库已存值并刷新状态展示。 */ +async function runProxyCheck() { + if (proxyChecking.value) return + const inputValue = proxyUrl.value.trim() + const dirty = proxyDirty.value && inputValue + proxyChecking.value = true + proxyCheckError.value = '' + proxyCheckResult.value = null + try { + proxyCheckResult.value = await checkApiSecret('proxy', dirty ? inputValue : undefined) + const result = proxyCheckResult.value + if (result.checkStatus === 'failed') { + ElMessage.warning(result.checkMessage || '代理不可用') + } else if (result.checkStatus === 'error') { + ElMessage.warning(result.checkMessage || '暂时无法判定代理可用性') + } else { + ElMessage.success(dirty ? '输入地址连通正常(未保存)' : '代理连通正常') + } + } catch (error) { + proxyCheckError.value = error instanceof Error ? error.message : '代理检测失败' + ElMessage.error(proxyCheckError.value) + } finally { + proxyChecking.value = false + } +} + const balance = ref<{ surplus: string | null; balance: string | null } | null>(null) const balanceLoading = ref(false)