优化站内信模块

This commit is contained in:
2026-06-17 23:07:39 +08:00
parent d3886e2475
commit 22e0e75c35
25 changed files with 2538 additions and 39 deletions
+14 -1
View File
@@ -75,6 +75,16 @@
/>
</el-form-item>
<el-form-item label="启用状态" prop="status">
<el-switch
v-model="emailForm.status"
:active-value="1"
:inactive-value="0"
active-text="启用"
inactive-text="关闭"
/>
</el-form-item>
<el-form-item label="测试收件邮箱">
<el-input
v-model="testEmail"
@@ -115,7 +125,8 @@ const emailForm = reactive({
port: "",
password: "",
encryption: "ssl",
timeout: 30
timeout: 30,
status: 1
});
const validatePassword = (
@@ -154,6 +165,7 @@ const loadEmailConfig = async () => {
emailForm.password = item.password || "";
emailForm.encryption = item.encryption || "ssl";
emailForm.timeout = item.timeout != null ? item.timeout : 30;
emailForm.status = item.status != null ? item.status : 1;
} else {
hasSavedConfig.value = false;
}
@@ -211,6 +223,7 @@ const handleReset = () => {
emailForm.password = "";
emailForm.encryption = "ssl";
emailForm.timeout = 30;
emailForm.status = 1;
testEmail.value = "";
emailFormRef.value?.clearValidate();
};
@@ -156,7 +156,8 @@
</template>
<el-form :model="formData.sitemsg" label-width="140px" label-position="right">
<el-form-item label="启用状态">
<el-switch v-model="formData.sitemsg.enabled" />
<el-switch v-model="formData.sitemsg.enabled" disabled />
<span class="form-tip-inline" style="margin-left: 10px;">站内信功能为系统核心功能,必须开启</span>
</el-form-item>
<el-form-item label="保留天数">
<el-input-number v-model="formData.sitemsg.retention_days" :min="1" :max="365" controls-position="right" />
@@ -393,6 +394,7 @@ import {
} from "@element-plus/icons-vue";
import { getSmsInfo, editSmsInfo, sendTestSms } from "@/api/sms";
import { getEmailInfo, editEmailInfo, sendTestEmail } from "@/api/email";
import { getSiteReminderConfig, saveSiteReminderConfig } from "@/api/sitereminder";
const STORAGE_KEY = "notification_settings_draft";
const activeSubTab = ref("email");
@@ -422,7 +424,7 @@ const formData = reactive({
testPhone: "",
},
sitemsg: {
enabled: false,
enabled: true,
retention_days: 30,
auto_read: false,
},
@@ -491,7 +493,7 @@ const loadEmailConfig = async () => {
formData.email.password = item.password || "";
formData.email.encryption = item.encryption || "ssl";
formData.email.timeout = item.timeout != null ? item.timeout : 30;
formData.email.enabled = Number(item.enabled ?? 0) === 1;
formData.email.enabled = Number(item.status ?? item.enabled ?? 0) === 1;
}
} catch (error) {
console.error("加载邮箱配置失败:", error);
@@ -511,6 +513,19 @@ const loadSmsConfig = async () => {
}
};
const loadSiteReminderConfig = async () => {
try {
const res = await getSiteReminderConfig();
if (res.code === 200 && res.data) {
formData.sitemsg.retention_days = res.data.retention_days ?? 30;
formData.sitemsg.auto_read = res.data.auto_read === 1;
formData.sitemsg.enabled = true;
}
} catch (error) {
console.error("加载站内信配置失败:", error);
}
};
const saveDraft = () => {
localStorage.setItem(STORAGE_KEY, JSON.stringify(formData));
};
@@ -519,7 +534,7 @@ const handleReset = () => {
const defaults = {
email: { enabled: false, fromAddress: "", fromName: "", host: "", port: "", password: "", encryption: "ssl", timeout: 30, testEmail: "" },
sms: { enabled: false, provider: "aliyun", access_key: "", secret_key: "", sign_name: "", template_code: "", backendUrl: "", apiKey: "", testPhone: "" },
sitemsg: { enabled: false, retention_days: 30, auto_read: false },
sitemsg: { enabled: true, retention_days: 30, auto_read: false },
dingtalk: { enabled: false, webhook_url: "", secret: "" },
webhook: { enabled: false, url: "", method: "POST", token: "" },
feishu: { enabled: false, webhook_url: "", secret: "" },
@@ -612,7 +627,7 @@ const handleSubmit = async () => {
password: formData.email.password,
encryption: formData.email.encryption,
timeout: formData.email.timeout,
enabled: formData.email.enabled ? 1 : 0
status: formData.email.enabled ? 1 : 0
});
if (res.code === 200) {
ElMessage.success("邮箱配置保存成功");
@@ -634,6 +649,16 @@ const handleSubmit = async () => {
} else {
throw new Error(res.msg || "保存自定义短信配置失败");
}
} else if (activeSubTab.value === 'sitemsg') {
const res = await saveSiteReminderConfig({
retention_days: formData.sitemsg.retention_days,
auto_read: formData.sitemsg.auto_read ? 1 : 0
});
if (res.code === 200) {
ElMessage.success("站内信配置保存成功");
} else {
throw new Error(res.msg || "保存站内信配置失败");
}
}
saveDraft();
@@ -649,6 +674,7 @@ onMounted(() => {
loadDraft();
loadSmsConfig();
loadEmailConfig();
loadSiteReminderConfig();
});
</script>