|
<script setup lang="ts"> |
|
import { ref, onMounted } from 'vue'; |
|
import { MessagePlugin } from 'tdesign-vue-next'; |
|
import { settingApi, type Settings } from '../services/settingApi'; |
|
import moment from 'moment-timezone'; |
|
|
|
const settings = ref<Settings>({ |
|
feishu: { |
|
app_id: '', |
|
app_secret: '', |
|
verification_token: '', |
|
encrypt_key: '', |
|
receive_id: '' |
|
}, |
|
emailMonitor: [] |
|
}); |
|
|
|
const loading = ref(false); |
|
|
|
onMounted(async () => { |
|
try { |
|
const data = await settingApi.get(); |
|
|
|
settings.value = { |
|
feishu: { |
|
...settings.value.feishu, |
|
...data.feishu |
|
}, |
|
emailMonitor: data.emailMonitor || [] |
|
}; |
|
} catch (error) { |
|
MessagePlugin.error('获取设置失败'); |
|
} |
|
}); |
|
|
|
const handleSave = async () => { |
|
loading.value = true; |
|
try { |
|
if(!settings.value) |
|
{ |
|
return |
|
} |
|
await settingApi.update(settings.value); |
|
MessagePlugin.success('保存成功'); |
|
} catch (error) { |
|
MessagePlugin.error('保存失败'); |
|
} finally { |
|
loading.value = false; |
|
} |
|
}; |
|
|
|
|
|
const addEmailMonitor = () => { |
|
if (!settings.value.emailMonitor) { |
|
settings.value.emailMonitor = []; |
|
} |
|
|
|
|
|
const shanghaiTime = moment().tz('Asia/Shanghai'); |
|
|
|
settings.value.emailMonitor.push({ |
|
email: '', |
|
lastEmailTimestamp: shanghaiTime.format('YYYY-MM-DD HH:mm:ss'), |
|
checkInterval: 60 |
|
}); |
|
}; |
|
|
|
|
|
const removeEmailMonitor = (index: number) => { |
|
if (settings.value.emailMonitor) { |
|
settings.value.emailMonitor.splice(index, 1); |
|
} |
|
}; |
|
|
|
|
|
</script> |
|
|
|
<template> |
|
<div class="setting-container p-2 md:p-5"> |
|
|
|
<t-form :data="settings" @submit="handleSave"> |
|
<t-card bordered> |
|
<t-divider>飞书配置</t-divider> |
|
<t-form-item label="应用ID" name="feishu.app_id"> |
|
<t-input v-model="settings.feishu.app_id" placeholder="请输入飞书应用ID" /> |
|
</t-form-item> |
|
<t-form-item label="应用密钥" name="feishu.app_secret"> |
|
<t-input v-model="settings.feishu.app_secret" type="password" placeholder="请输入飞书应用密钥" /> |
|
</t-form-item> |
|
<t-form-item label="验证Token" name="feishu.verification_token"> |
|
<t-input v-model="settings.feishu.verification_token" placeholder="请输入飞书应用验证Token" /> |
|
</t-form-item> |
|
<t-form-item label="加密Key" name="feishu.encrypt_key"> |
|
<t-input v-model="settings.feishu.encrypt_key" placeholder="请输入飞书应用加密Key" /> |
|
</t-form-item> |
|
<t-form-item label="接收ID" name="feishu.receive_id"> |
|
<t-input v-model="settings.feishu.receive_id" placeholder="请输入飞书机器人接收ID" /> |
|
</t-form-item> |
|
|
|
<t-divider>监控邮箱配置</t-divider> |
|
<div class="mb-4 flex justify-end"> |
|
<t-button theme="default" @click="addEmailMonitor"> |
|
<template #icon><t-icon name="add" /></template> |
|
添加监控邮箱 |
|
</t-button> |
|
</div> |
|
|
|
<div v-if="settings.emailMonitor && settings.emailMonitor.length > 0" class="mb-4"> |
|
|
|
<div class="grid grid-cols-4 gap-4 mb-2 font-bold"> |
|
<div>邮箱地址</div> |
|
<div>检查间隔(分钟)</div> |
|
<div>邮件时间</div> |
|
<div>操作</div> |
|
</div> |
|
|
|
|
|
<div v-for="(item, index) in settings.emailMonitor" :key="index" class="grid grid-cols-4 gap-4 mb-3 items-center"> |
|
<div> |
|
<t-input v-model="item.email" placeholder="请输入邮箱地址" /> |
|
</div> |
|
<div> |
|
<t-input-number v-model="item.checkInterval" :min="1" :max="1440" placeholder="请输入检查间隔" /> |
|
</div> |
|
<div> |
|
<t-date-picker |
|
v-model="item.lastEmailTimestamp" |
|
enable-time-picker |
|
clearable |
|
placeholder="请选择上次邮件时间" |
|
format="YYYY-MM-DD HH:mm:ss" |
|
:timezone="{ name: 'Asia/Shanghai', offset: 8 }" |
|
/> |
|
</div> |
|
<div> |
|
<t-button theme="danger" variant="text" @click="removeEmailMonitor(index)"> |
|
<template #icon><t-icon name="delete" /></template> |
|
删除 |
|
</t-button> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<t-form-item class="flex justify-center"> |
|
<t-button theme="primary" type="submit" :loading="loading">保存设置</t-button> |
|
</t-form-item> |
|
</t-card> |
|
</t-form> |
|
</div> |
|
</template> |
|
|
|
<style scoped> |
|
|
|
</style> |
|
|