feat: MC Report System - MySQL + Express + Vanilla JS SPA
This commit is contained in:
59
public/js/utils.js
Normal file
59
public/js/utils.js
Normal file
@@ -0,0 +1,59 @@
|
||||
const U = {
|
||||
STATUS: { pending:'待处理', processing:'处理中', awaiting_info:'待补充', resolved:'已解决', rejected:'已驳回', closed:'已关闭' },
|
||||
TYPE: { report:'举报', suggestion:'建议', appeal:'申诉' },
|
||||
ROLE: { owner:'服主', admin:'管理员', player:'玩家' },
|
||||
PRIORITY: { low:'低', medium:'中', high:'高', urgent:'紧急' },
|
||||
|
||||
badge(s, t) {
|
||||
if (t === 'status') return `<span class="badge bg-${s}">${this.STATUS[s]||s}</span>`;
|
||||
if (t === 'type') return `<span class="badge bg-${s}">${this.TYPE[s]||s}</span>`;
|
||||
if (t === 'role') return `<span class="badge bg-${s}">${this.ROLE[s]||s}</span>`;
|
||||
if (t === 'priority') return `<span class="badge bg-${s}">${this.PRIORITY[s]||s}</span>`;
|
||||
return s;
|
||||
},
|
||||
|
||||
date(d) {
|
||||
if (!d) return '-';
|
||||
const dt = new Date(d);
|
||||
if (isNaN(dt.getTime())) return d;
|
||||
const p = n => String(n).padStart(2, '0');
|
||||
return `${dt.getFullYear()}-${p(dt.getMonth()+1)}-${p(dt.getDate())} ${p(dt.getHours())}:${p(dt.getMinutes())}`;
|
||||
},
|
||||
|
||||
esc(s) {
|
||||
if (!s) return '';
|
||||
return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
|
||||
},
|
||||
|
||||
showAlert(containerId, type, msg) {
|
||||
const ct = document.getElementById(containerId || 'page-content');
|
||||
const el = document.createElement('div');
|
||||
el.className = `alert alert-${type === 'success' ? 's' : type === 'error' ? 'e' : 'i'}`;
|
||||
el.textContent = msg;
|
||||
ct.prepend(el);
|
||||
setTimeout(() => el.remove(), 6000);
|
||||
},
|
||||
|
||||
loading(ct) { ct.innerHTML = '<div class="loading"><i class="fas fa-spinner"></i><p>加载中...</p></div>'; },
|
||||
|
||||
modal(title, html, w) {
|
||||
const o = document.getElementById('modal-overlay');
|
||||
document.getElementById('modal-title').textContent = title;
|
||||
document.getElementById('modal-body').innerHTML = html;
|
||||
if (w) o.querySelector('.modal-box').style.width = w;
|
||||
o.classList.remove('hidden');
|
||||
},
|
||||
|
||||
confirm(msg) {
|
||||
return new Promise(resolve => {
|
||||
this.modal('确认', `
|
||||
<p>${msg}</p>
|
||||
<div class="modal-f"><button class="btn btn-o btn-confirm-cancel">取消</button><button class="btn btn-p btn-confirm-ok">确认</button></div>
|
||||
`);
|
||||
setTimeout(() => {
|
||||
document.querySelector('.btn-confirm-cancel')?.addEventListener('click', () => { App.closeModal(); resolve(false); });
|
||||
document.querySelector('.btn-confirm-ok')?.addEventListener('click', () => { App.closeModal(); resolve(true); });
|
||||
}, 50);
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user