(function () {
'use strict';
var Api = function () { return window.AdminApi; };
var Ui = function () { return window.AdminUi; };
var I = function () { return window.AdminI18n; };
var State = function () { return window.AdminState; };
var Filter = function () { return window.AdminFilter; };
var Router = function () { return window.AdminRouter; };
var ACTION_OPTS = [
{ v: '', l: '全部操作' },
{ v: 'users.setStatus', l: '变更用户状态' },
{ v: 'users.create', l: '创建用户' },
{ v: 'users.update', l: '编辑用户' },
{ v: 'users.delete', l: '删除用户' },
{ v: 'users.setPassword', l: '重置密码' },
{ v: 'users.setSubscription', l: '设置会员' },
{ v: 'users.detail', l: '查看用户详情' },
{ v: 'orders.detail', l: '查看订单详情' },
{ v: 'orders.cancel', l: '取消订单' },
{ v: 'orders.refundApprove', l: '通过退款' },
{ v: 'orders.refundReject', l: '拒绝退款' },
{ v: 'plans.upsert', l: '编辑套餐' },
{ v: 'settings.set', l: '修改系统设置' },
{ v: 'settings.set_batch', l: '批量修改设置' },
{ v: 'payment.key.upload', l: '上传支付密钥' },
];
function buildQuery() {
var st = State().audits;
var q = 'audits?page=' + st.page + '&size=' + st.size;
if (st.q) q += '&q=' + encodeURIComponent(st.q);
if (st.from) q += '&from=' + encodeURIComponent(st.from);
if (st.to) q += '&to=' + encodeURIComponent(st.to);
if (st.action) q += '&action=' + encodeURIComponent(st.action);
return q;
}
function actionOptions(selected) {
return ACTION_OPTS.map(function (o) {
return '' + o.l + ' ';
}).join('');
}
function formatContext(ctx) {
if (!ctx) return '';
var body;
try {
body = '
' + I().esc(JSON.stringify(JSON.parse(ctx), null, 2)) + ' ';
} catch (e) {
body = '' + I().esc(ctx) + '
';
}
return '查看上下文 ' + body + ' ';
}
function renderFilterBar(st) {
return Filter().bar(
Filter().field('关键词', Filter().searchInput('auditQ', st.q, '操作、目标或管理员')) +
Filter().field('操作类型', Filter().select('auditAction', actionOptions(st.action))) +
Ui().filterDateField('auditFrom', '从', st.from) +
Ui().filterDateField('auditTo', '至', st.to),
'查询 ' +
'重置 '
);
}
function bindFilters(st) {
var searchBtn = Ui().el('auditSearchBtn');
var resetBtn = Ui().el('auditResetBtn');
var qInput = Ui().el('auditQ');
if (searchBtn) {
searchBtn.onclick = function () {
st.q = qInput ? qInput.value.trim() : '';
st.action = Ui().el('auditAction').value;
st.from = Ui().el('auditFrom').value;
st.to = Ui().el('auditTo').value;
if (st.from && st.to && st.from > st.to) {
soonToast('开始日期不能晚于结束日期', 'warn');
return;
}
st.page = 1;
Router().syncQuery();
render();
};
}
if (qInput) {
qInput.onkeydown = function (e) {
if (e.key === 'Enter' && searchBtn) searchBtn.click();
};
}
if (resetBtn) {
resetBtn.onclick = function () {
State().audits = { page: 1, size: 50, q: '', from: '', to: '', action: '' };
Router().syncQuery();
render();
};
}
}
function renderTimeline(items) {
if (!items.length) {
return Ui().emptyBlock('暂无审计记录', '调整筛选条件或等待管理员操作产生日志', '');
}
return items.map(function (a) {
return '' +
I().esc(I().tAction(a.action)) + ' · ' + I().esc(a.target) + '
' +
'
' + I().esc(a.admin_email || '') + ' · ' +
I().formatDateTime(a.created_at) + '
' + formatContext(a.context) + '
';
}).join('');
}
function render() {
var panel = Ui().el('panel-audits');
if (!panel) return;
var st = State().audits;
var header = Ui().pageHeader('审计日志', '管理员操作记录,支持按操作类型与时间筛选');
panel.innerHTML = '' + header + renderFilterBar(st) + Ui().skeletonTable() + '
';
Api().get(buildQuery()).then(function (j) {
if (!j) {
panel.innerHTML = '' + header + renderFilterBar(st) +
Ui().listError('审计日志加载失败', 'auditsListRetry') + '
';
bindFilters(st);
Ui().el('auditsListRetry').onclick = render;
return;
}
var items = j.data.items || [];
panel.innerHTML = '' + header + renderFilterBar(st) +
'
' + renderTimeline(items) + '
' +
Ui().pagerHtml(j.data.page, j.data.size, j.data.total) + '
';
bindFilters(st);
Ui().bindPager(panel, j.data.page, j.data.size, j.data.total, function (p, newSize) {
st.page = p;
if (newSize) st.size = newSize;
Router().syncQuery();
render();
});
});
}
window.AdminViews = window.AdminViews || {};
window.AdminViews.audits = { render: render };
})();