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)