🆕 重构全局通知方案

This commit is contained in:
chaos-zhu 2024-08-17 01:10:23 +08:00
parent 525cbef68f
commit 82a89f827a
3 changed files with 84 additions and 9 deletions

View File

@ -1,4 +1,5 @@
const { readNotifyConfig, writeNotifyConfig, readNotifyList, writeNotifyList } = require('../utils')
const { sctTest, emailTest } = require('../utils/test-notify')
// const commonTemp = require('../template/commonTemp')
async function getNotifyConfig({ res }) {
@ -9,8 +10,21 @@ async function getNotifyConfig({ res }) {
// 根据type待编写测试方法测试通过才保存到库
async function updateNotifyConfig({ res, request }) {
let { body: { noticeConfig } } = request
await writeNotifyConfig(noticeConfig)
return res.success()
let { type } = noticeConfig
try {
switch(type) {
case 'sct':
await sctTest(noticeConfig[type])
break
case 'email':
await emailTest(noticeConfig[type])
break
}
await writeNotifyConfig(noticeConfig)
return res.success({ msg: '测试通过 | 保存成功' })
} catch (error) {
return res.fail({ msg: error.message })
}
}
async function getNotifyList({ res }) {

View File

@ -0,0 +1,47 @@
const nodemailer = require('nodemailer')
const axios = require('axios')
module.exports.sctTest = function ({ sendKey }) {
// eslint-disable-next-line no-async-promise-executor
return new Promise((async (resolve, reject) => {
consola.info('server酱通知测试: ', sendKey)
try {
let { data } = await axios.get(`https://sctapi.ftqq.com/${ sendKey }.send?title=messagetitle`)
resolve(data)
consola.success('测试成功')
} catch (error) {
reject(error)
consola.error('测试失败: ', error)
}
}))
}
module.exports.emailTest = function (conf) {
// eslint-disable-next-line no-async-promise-executor
return new Promise((async (resolve, reject) => {
consola.info('邮箱通知测试: ', conf)
try {
const { service, user, pass } = conf
let transporter = nodemailer.createTransport({
service,
auth: {
user,
pass
}
})
let info = await transporter.sendMail({
from: user,
to: user,
subject: 'EasyNode: 测试邮件通知',
text: '测试邮件',
html: '<b>测试邮件</b>'
})
consola.info('Message sent: %s', info.messageId)
resolve()
consola.success('测试成功')
} catch (error) {
reject(error)
consola.error('测试失败: ', error)
}
}))
}

View File

@ -40,9 +40,10 @@
<el-input
v-model.trim="noticeConfig.email.service"
clearable
placeholder="邮箱服务商简写, 例如: Gmial、qq、126、163"
placeholder=""
autocomplete="off"
/>
<span class="tips">邮箱服务商, 例如: Gmialqq126163, 支持列表: <a class="link" href="https://github.com/nodemailer/nodemailer/blob/master/lib/well-known/services.json" target="_blank">点击查询</a> </span>
</el-form-item>
<el-form-item label="邮箱地址" prop="email.user" class="form_item">
<el-input
@ -63,7 +64,7 @@
</template>
<el-form-item label="" class="form_item">
<el-button type="primary" :loading="loading" @click="handleSave">
保存并测试
测试并保存
</el-button>
<!-- <el-tooltip effect="dark" content="重复添加的邮箱将会被覆盖" placement="right">
</el-tooltip> -->
@ -100,20 +101,28 @@ const rules = reactive({
const handleSave = () => {
formRef.value.validate(async (valid) => {
if (!valid) return
await $api.updateNotifyConfig({ noticeConfig: { ...noticeConfig.value } })
$message.success('保存成功')
try {
loading.value = true
await $api.updateNotifyConfig({ noticeConfig: { ...noticeConfig.value } })
// $message.success('')
$notification.success({
title: '测试通过 | 保存成功',
message: '请确认通知方式是否已收到通知'
})
} catch (error) {
console.error(error)
} finally {
loading.value = false
}
})
}
const getNotifyConfig = async () => {
try {
loading.value = true
let { data } = await $api.getNotifyConfig()
noticeConfig.value = data || {}
} catch (error) {
console.error(error)
} finally {
loading.value = false
}
}
@ -126,5 +135,10 @@ onMounted(() => {
<style lang="scss" scoped>
.form_item {
width: 350px;
.tips {
font-size: 12px;
color: #999;
}
}
</style>