Files
group_fqcd_jr/app/static/portal/employee-operations/dashboard/dashboard.js
T

33 lines
2.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}