diff --git a/admin-frontend/src/api/smtp.js b/admin-frontend/src/api/smtp.js index 3603115..3622a4b 100644 --- a/admin-frontend/src/api/smtp.js +++ b/admin-frontend/src/api/smtp.js @@ -30,3 +30,7 @@ export async function setPrimarySmtpConfig(configId) { return data } +export async function clearPrimarySmtpConfig() { + const { data } = await api.post('/smtp/configs/primary/clear') + return data +} diff --git a/admin-frontend/src/pages/EmailPage.vue b/admin-frontend/src/pages/EmailPage.vue index 0d65312..72f3f32 100644 --- a/admin-frontend/src/pages/EmailPage.vue +++ b/admin-frontend/src/pages/EmailPage.vue @@ -5,6 +5,7 @@ import { ElMessage, ElMessageBox } from 'element-plus' import { cleanupEmailLogs, fetchEmailLogs, fetchEmailSettings, fetchEmailStats, updateEmailSettings } from '../api/email' import { createSmtpConfig, + clearPrimarySmtpConfig, deleteSmtpConfig, fetchSmtpConfigs, setPrimarySmtpConfig, @@ -85,6 +86,7 @@ const smtpConfigs = ref([]) const smtpDialogOpen = ref(false) const smtpEditMode = ref(false) const smtpHasPassword = ref(false) +const smtpIsPrimary = ref(false) const smtpForm = reactive({ id: null, @@ -231,6 +233,7 @@ function resetSmtpForm() { smtpForm.daily_limit = 0 smtpForm.priority = 0 smtpHasPassword.value = false + smtpIsPrimary.value = false smtpTemplateKey.value = 'custom' } @@ -270,6 +273,7 @@ function openEditSmtp(row) { smtpForm.daily_limit = row.daily_limit ?? 0 smtpForm.priority = row.priority ?? 0 smtpHasPassword.value = Boolean(row.has_password) + smtpIsPrimary.value = Boolean(row.is_primary) smtpTemplateKey.value = inferSmtpTemplateKey(row) smtpDialogOpen.value = true @@ -398,6 +402,32 @@ async function doSetPrimary() { } } +async function doClearPrimary() { + if (!smtpEditMode.value) return + try { + await ElMessageBox.confirm('确定取消主配置吗?取消后将按优先级选择可用SMTP。', '取消主配置', { + confirmButtonText: '取消主配置', + cancelButtonText: '保留', + type: 'warning', + }) + } catch { + return + } + + try { + const res = await clearPrimarySmtpConfig() + if (!res?.success) { + ElMessage.error(res?.error || '操作失败') + return + } + ElMessage.success('已取消主配置') + smtpDialogOpen.value = false + await loadSmtpConfigs() + } catch { + // handled by interceptor + } +} + async function doDeleteSmtp() { if (!smtpEditMode.value || !smtpForm.id) return try { @@ -781,7 +811,8 @@ onMounted(refreshAll)