EmailConfig.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <div class="email-config-page">
  3. <a-card title="阿里云邮件推送配置">
  4. <template #extra><a-button :loading="loading" @click="loadConfig">刷新</a-button></template>
  5. <a-alert message="PC邮箱登录和注册共用此配置。请使用已有授权的发信地址,生产环境应开启SSL校验。" type="info" show-icon class="config-tip" />
  6. <a-spin :spinning="loading">
  7. <a-form :model="form" layout="vertical" @finish="onSubmit">
  8. <a-form-item label="AccessKey ID" name="access_key_id" :rules="[{ required: true, message: '请输入AccessKey ID' }]"><a-input v-model:value="form.access_key_id" :maxlength="100" autocomplete="off" /></a-form-item>
  9. <a-form-item label="AccessKey Secret" name="access_key_secret" :rules="[{ required: true, message: '请输入AccessKey Secret' }]"><a-input-password v-model:value="form.access_key_secret" :maxlength="200" autocomplete="new-password" /></a-form-item>
  10. <a-form-item label="发信地址" name="account_name" :rules="[{ required: true, type: 'email', message: '请输入正确的发信地址' }]"><a-input v-model:value="form.account_name" :maxlength="100" placeholder="no-reply@example.com" /></a-form-item>
  11. <a-form-item label="发信别名" name="from_alias"><a-input v-model:value="form.from_alias" :maxlength="15" placeholder="留空使用站点名称" /></a-form-item>
  12. <a-form-item label="允许回复"><a-switch v-model:checked="form.reply_to_address" /></a-form-item>
  13. <a-form-item label="SSL校验"><a-switch v-model:checked="form.ssl_verify" /></a-form-item>
  14. <a-button type="primary" html-type="submit" :loading="saving" :disabled="loading || !loaded">保存配置</a-button>
  15. </a-form>
  16. </a-spin>
  17. </a-card>
  18. </div>
  19. </template>
  20. <script setup>
  21. import { onMounted, reactive, ref } from 'vue'
  22. import { message } from 'ant-design-vue'
  23. import { getPlatformConfig, saveConfig } from '@/api/config'
  24. const loading = ref(false)
  25. const saving = ref(false)
  26. const loaded = ref(false)
  27. const form = reactive({
  28. access_key_id: '', access_key_secret: '', account_name: '', from_alias: '',
  29. reply_to_address: false, ssl_verify: true
  30. })
  31. async function loadConfig() {
  32. loading.value = true
  33. loaded.value = false
  34. try {
  35. const response = await getPlatformConfig({ key: 'aliyun_direct_mail' })
  36. if (response.code !== 200) return
  37. Object.assign(form, response.result.value)
  38. loaded.value = true
  39. } finally {
  40. loading.value = false
  41. }
  42. }
  43. async function onSubmit() {
  44. saving.value = true
  45. try {
  46. const response = await saveConfig({ key: 'aliyun_direct_mail', name: '阿里云邮件推送配置', value: { ...form } })
  47. if (response.code === 200) message.success('配置已保存')
  48. } finally {
  49. saving.value = false
  50. }
  51. }
  52. onMounted(loadConfig)
  53. </script>
  54. <style scoped>
  55. .email-config-page { max-width: 880px; }
  56. .config-tip { margin-bottom: 24px; }
  57. </style>