const NotificationsPage = { async render() { return '
'; }, async mount() { document.getElementById('page-title').textContent = '通知配置'; document.getElementById('page-actions').innerHTML = ''; await this.load(); }, async load() { const ct = document.getElementById('page-content'); try { const cfgs = await API.get('/notifications'); ct.innerHTML = cfgs.length ? cfgs.map(c => `
${U.esc(c.name)}${c.active?`启用`:`禁用`}
类型${c.type==='webhook'?'Webhook':'邮件'}
${c.webhook_url?`
地址${U.esc(c.webhook_url)}
`:''}
事件${EventsLabel(c.events)}
`).join('') : '

暂无通知配置

添加Webhook后可自动推送工单状态变更通知

'; } catch (e) { ct.innerHTML = `
${e.message}
`; } }, showCreate() { U.modal('添加Webhook', `
${EventOptions('all')}
`); bindEventToggles(); document.getElementById('nc-form').onsubmit = async e => { e.preventDefault(); try { await API.post('/notifications',{name:document.getElementById('nc-name').value,type:'webhook',webhook_url:document.getElementById('nc-url').value,events:document.getElementById('nc-events').value}); App.closeModal(); this.load(); } catch(ex){alert(ex.message);} }; }, showEdit(id,name,type,url,events,active) { U.modal('编辑通知', `
${EventOptions(events)}
`); bindEventToggles(); document.getElementById('ne-form').onsubmit = async e => { e.preventDefault(); try { await API.put(`/notifications/${id}`,{name:document.getElementById('ne-name').value,webhook_url:document.getElementById('ne-url').value,events:document.getElementById('ne-events').value,active:document.getElementById('ne-active').value==='1'}); App.closeModal(); this.load(); } catch(ex){alert(ex.message);} }; }, async test(id) { try { alert((await API.post(`/notifications/${id}/test`)).message); } catch(ex){alert(ex.message);} }, async del(id) { if(await U.confirm('确认删除此通知配置?')){ await API.req('DELETE',`/notifications/${id}`); this.load(); } } }; 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() { document.querySelectorAll('.ev-check').forEach(cb=>{ cb.onchange=()=>{ const all=document.querySelectorAll('.ev-check'); const v=Array.from(all).filter(c=>c.checked).map(c=>c.value).join(','); const hid=cb.closest('form').querySelector('input[type="hidden"]'); if(hid)hid.value=v; }; }); }