fix: notifications page crash + email code dev-mode false error

- notifications.js: EventOptions(current) referenced undefined 'Current'
  (case typo) -> ReferenceError crashed add/edit modal, page unusable
- auth.js send-verify-code: dev mode (SMTP down) deleted captcha row before
  returning code, so register always failed with '验证码无效或已过期'
  even with correct code. Keep row; it's deleted after successful verify.
This commit is contained in:
2026-08-17 04:50:10 +08:00
parent 1d669fd1d0
commit 8d6c3c4a8d
2 changed files with 3 additions and 2 deletions

View File

@@ -29,7 +29,8 @@ router.post('/send-verify-code', async (req, res) => {
code, code,
}); });
if (!sent) { if (!sent) {
await query('DELETE FROM captchas WHERE id = ?', [codeId]); // SMTP 未配置/发送失败(dev 模式): 保留验证码记录, 前端直接显示验证码;
// 注册校验通过后会自动删除, 不会出现"验证码正确却报错"的问题
return res.status(200).json({ code_id: codeId, code, dev: true }); return res.status(200).json({ code_id: codeId, code, dev: true });
} }
res.json({ code_id: codeId, message: '验证码已发送' }); res.json({ code_id: codeId, message: '验证码已发送' });

View File

@@ -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);} } } 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=>`<label style="cursor:pointer;font-size:12px"><input type="checkbox" value="${e}" class="ev-check" ${Current.split(',').map(s=>s.trim()).includes(e)?'checked':''}> ${EventsLabelSingle(e)}</label>`).join(''); } function EventOptions(current) { return ['all','ticket_created','ticket_claimed','ticket_transferred','ticket_updated'].map(e=>`<label style="cursor:pointer;font-size:12px"><input type="checkbox" value="${e}" class="ev-check" ${String(current||'').split(',').map(s=>s.trim()).includes(e)?'checked':''}> ${EventsLabelSingle(e)}</label>`).join(''); }
function EventsLabel(v) { return v==='all'?'全部事件':v.split(',').map(s=>s.trim()).map(EventsLabelSingle).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 EventsLabelSingle(e) { return {all:'全部',ticket_created:'工单创建',ticket_claimed:'工单认领',ticket_transferred:'工单转交',ticket_updated:'工单更新'}[e]||e; }
function bindEventToggles() { function bindEventToggles() {