diff --git a/backend/routes/auth.js b/backend/routes/auth.js
index a6f8265..7ac31b0 100644
--- a/backend/routes/auth.js
+++ b/backend/routes/auth.js
@@ -29,7 +29,8 @@ router.post('/send-verify-code', async (req, res) => {
code,
});
if (!sent) {
- await query('DELETE FROM captchas WHERE id = ?', [codeId]);
+ // SMTP 未配置/发送失败(dev 模式): 保留验证码记录, 前端直接显示验证码;
+ // 注册校验通过后会自动删除, 不会出现"验证码正确却报错"的问题
return res.status(200).json({ code_id: codeId, code, dev: true });
}
res.json({ code_id: codeId, message: '验证码已发送' });
diff --git a/public/js/pages/notifications.js b/public/js/pages/notifications.js
index ab8ab85..ae132ee 100644
--- a/public/js/pages/notifications.js
+++ b/public/js/pages/notifications.js
@@ -84,7 +84,7 @@ const NotificationsPage = {
async del(id) { if(await U.confirm('确认删除?')){ try { await API.req('DELETE',`/notifications/${id}`); this.load(); } catch(ex){alert(ex.message);} } }
};
-function EventOptions(current) { return ['all','ticket_created','ticket_claimed','ticket_transferred','ticket_updated'].map(e=>``).join(''); }
+function EventOptions(current) { return ['all','ticket_created','ticket_claimed','ticket_transferred','ticket_updated'].map(e=>``).join(''); }
function EventsLabel(v) { return v==='all'?'全部事件':v.split(',').map(s=>s.trim()).map(EventsLabelSingle).join(', '); }
function EventsLabelSingle(e) { return {all:'全部',ticket_created:'工单创建',ticket_claimed:'工单认领',ticket_transferred:'工单转交',ticket_updated:'工单更新'}[e]||e; }
function bindEventToggles() {