33 lines
2.9 KiB
JavaScript
33 lines
2.9 KiB
JavaScript
import { apiClient } from '/static/portal/common/api-client.js?v=20260913';
|
||
import { getAuthContext, requireOperator } from '/static/portal/common/auth.js?v=20260913';
|
||
import { escapeHtml, formatDateTime } from '/static/portal/common/formatters.js';
|
||
import { mountShell } from '/static/portal/common/layout/app-shell.js';
|
||
import { renderEmpty, renderError, renderLoading } from '/static/portal/common/state-view.js';
|
||
|
||
if (requireOperator()) {
|
||
mountShell({ active: 'operator-dashboard', mode: 'operator' });
|
||
const context = getAuthContext();
|
||
const mails = document.querySelector('[data-mails]');
|
||
const mailbox = document.querySelector('[data-mailbox]');
|
||
document.querySelector('[data-operator-name]').textContent = context?.username || '运营人员';
|
||
document.querySelector('[data-operator-scope]').textContent = `数据范围:${context?.dataScope || 'assigned'}`;
|
||
async function load() {
|
||
renderLoading(mails, 4); renderLoading(mailbox, 1);
|
||
try {
|
||
const [mailResponse, boxResponse] = await Promise.all([
|
||
apiClient.get('OFFSITE_MAILS', { query: { page: 1, page_size: 8 } }),
|
||
apiClient.get('OFFSITE_MAILBOX'),
|
||
]);
|
||
const payload = mailResponse.data || {};
|
||
const rows = Array.isArray(payload.items) ? payload.items : [];
|
||
const box = boxResponse.data || {};
|
||
document.querySelector('[data-operator-metrics]').innerHTML = [['待处理邮件', rows.length, `本页 ${payload.total ?? rows.length} 封`], ['收件监控', box.monitoring ? '运行中' : '未启用', '服务端状态'], ['游标状态', box.status || '--', box.blocked ? '需要恢复' : '正常']].map(([label, value, meta]) => `<article class="metric-card"><p class="metric-card__label">${label}</p><p class="metric-card__value">${escapeHtml(String(value))}</p><p class="metric-card__meta">${escapeHtml(String(meta))}</p></article>`).join('');
|
||
if (!rows.length) renderEmpty(mails, '暂无运营邮件', '当前收件箱没有可展示的场外基金邮件。');
|
||
else mails.innerHTML = rows.map((row) => `<article class="operator-mail"><div><h3 class="operator-mail__title">${escapeHtml(row.subject || row.mail_id || '未命名邮件')}</h3><p class="operator-mail__meta">${escapeHtml(row.sender || '--')} · ${escapeHtml(formatDateTime(row.received_at || row.created_at))}</p></div><span class="tag operator-mail__status">${escapeHtml(row.status || '待处理')}</span></article>`).join('');
|
||
mailbox.innerHTML = `<div class="operator-status__card"><strong>${escapeHtml(box.status || '未初始化')}</strong><p>邮箱:${escapeHtml(box.mailbox || '--')}<br>最后 UID:${escapeHtml(String(box.last_uid ?? '--'))}<br>${box.alert_message ? escapeHtml(box.alert_message) : '收件游标运行正常,失败邮件会保留待人工处理。'}</p></div>`;
|
||
} catch (error) { apiClient.reportError(error); renderError(mails, error, load); renderError(mailbox, error, load); }
|
||
}
|
||
document.querySelector('[data-refresh]').addEventListener('click', load);
|
||
load();
|
||
}
|