easynode/web/src/views/setting/components/notify-config.vue
2024-12-24 22:40:14 +08:00

194 lines
5.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- <el-alert type="success" :closable="false">
<template #title>
<span style="letter-spacing: 2px;"> 保存并测试通过后才会收到通知 </span>
</template>
</el-alert> -->
<!-- <br> -->
<el-form
ref="formRef"
:model="noticeConfig"
:rules="rules"
:inline="false"
:hide-required-asterisk="true"
:show-message="false"
label-width="100px"
label-suffix=""
>
<el-form-item label="通知方式" prop="type" class="form_item">
<el-select v-model="noticeConfig.type" placeholder="" class="input">
<el-option
v-for="item in noticeTypeList"
:key="item.type"
:label="item.desc"
:value="item.type"
/>
</el-select>
</el-form-item>
<!-- server酱 -->
<template v-if="noticeConfig.type === 'sct'">
<el-form-item label="SendKey" prop="sct.sendKey" class="form_item">
<el-input
v-model.trim="noticeConfig.sct.sendKey"
clearable
placeholder="SCT******"
autocomplete="off"
class="input"
/>
<p class="tips">普通用户每日最多支持5条有条件建议开通会员服务防止丢失重要通知<a class="link" href="https://sct.ftqq.com/r/9338" target="_blank">Server酱官网</a> </p>
</el-form-item>
</template>
<!-- 邮箱 -->
<template v-if="noticeConfig.type === 'email'">
<el-form-item label="服务商" prop="email.service" class="form_item">
<el-input
v-model.trim="noticeConfig.email.service"
clearable
placeholder=""
autocomplete="off"
class="input"
/>
<span class="tips">邮箱服务商, 例如: QQ126163Gmial, 支持列表: <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
v-model.trim="noticeConfig.email.user"
clearable
placeholder="邮箱地址"
autocomplete="off"
class="input"
/>
</el-form-item>
<el-form-item label="SMTP" prop="auth.pass" class="form_item">
<el-input
v-model.trim="noticeConfig.email.pass"
clearable
placeholder="SMTP授权码/密码"
autocomplete="off"
class="input"
/>
</el-form-item>
</template>
<!-- Telegram -->
<template v-if="noticeConfig.type === 'tg'">
<el-form-item label="Token" prop="tg.token" class="form_item">
<el-input
v-model.trim="noticeConfig.tg.token"
clearable
placeholder="Telegram Token"
autocomplete="off"
class="input"
/>
</el-form-item>
<el-form-item label="ChatId" prop="tg.chatId" class="form_item">
<el-input
v-model="noticeConfig.tg.chatId"
clearable
placeholder="Telegram ChatId"
autocomplete="off"
class="input"
/>
<span class="tips">Telegram Token/ChatId 获取: <a class="link" href="https://easynode.chaoszhu.com/zh/guide/get-tg-token" target="_blank">查看教程</a> </span>
</el-form-item>
</template>
<el-form-item label="" class="form_item">
<el-button
type="primary"
:loading="loading"
@click="handleSave"
>
测试并保存
</el-button>
</el-form-item>
</el-form>
</template>
<script setup>
import { ref, reactive, onMounted, getCurrentInstance, computed } from 'vue'
// import PlusSupportTip from '@/components/common/PlusSupportTip.vue'
const { proxy: { $api, $notification, $store } } = getCurrentInstance()
const loading = ref(false)
const noticeConfig = ref({})
const noticeTypeList = ref([
{
type: 'email',
desc: '邮箱'
},
{
type: 'sct',
desc: 'Server酱'
},
{
type: 'tg',
desc: 'Telegram'
},
])
const formRef = ref(null)
const isPlusActive = computed(() => $store.isPlusActive)
const rules = reactive({
'sct.sendKey': { required: true, message: '需输入sendKey', trigger: 'change' },
'email.service': { required: true, message: '需输入邮箱提供商', trigger: 'change' },
'email.user': { required: true, type: 'email', message: '需输入邮箱', trigger: 'change' },
'email.pass': { required: true, message: '需输入邮箱SMTP授权码', trigger: 'change' },
'tg.token': { required: true, message: '需输入Telegram Token', trigger: 'change' },
'tg.chatId': [
{ required: true, message: '需输入Telegram ChatId', trigger: 'change' },
{
pattern: /^-?\d+$/,
message: 'ChatId必须为数字',
trigger: ['blur', 'change',]
},
]
})
const handleSave = () => {
formRef.value.validate(async (valid) => {
if (!valid) return
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 {
let { data } = await $api.getNotifyConfig()
noticeConfig.value = data || {}
} catch (error) {
console.error(error)
}
}
onMounted(() => {
getNotifyConfig()
})
</script>
<style lang="scss" scoped>
.form_item {
// width: 350px;
.input {
width: 450px;
}
.tips {
width: 100%;
font-size: 14px;
color: #999;
}
}
</style>