diff --git a/js/newsReports.js b/js/newsReports.js
index e93dc41..b0b6faf 100644
--- a/js/newsReports.js
+++ b/js/newsReports.js
@@ -14,7 +14,7 @@ var NewsReports = {
SECTION_ICONS: { xwlb: 'fa-tower-broadcast', news: 'fa-fire', cninfo: 'fa-clipboard-list', intl: 'fa-earth-asia' },
SENTIMENT: { positive: { icon: '🟢', cls: 'badge-pos', txt: '利好' }, negative: { icon: '🔴', cls: 'badge-neg', txt: '利空' }, neutral: { icon: '⚪', cls: 'badge-neu', txt: '中性' } },
- state: { reportType: '', startDate: '', endDate: '', currentId: null },
+ state: { reportType: '', startDate: '', endDate: '', currentId: null, eventsLoaded: false },
init: function () {
var now = new Date();
@@ -39,6 +39,12 @@ var NewsReports = {
bindEvents: function () {
var self = this;
+ // 视图切换 (日报列表 / 重要事件)
+ $('.view-tab').on('click', function () {
+ $('.view-tab').removeClass('tab-active');
+ $(this).addClass('tab-active');
+ self.switchView($(this).data('view'));
+ });
// 类型 Tabs
$('.type-tab').on('click', function () {
$('.type-tab').removeClass('tab-active');
@@ -52,12 +58,73 @@ var NewsReports = {
self.state.endDate = $('#endDate').val() || self.state.endDate;
self.loadReports();
});
+ // 重要事件查询
+ $('#btnEvQuery').on('click', function () {
+ self.loadEvents();
+ });
// 返回列表
$('#btnBack').on('click', function () {
self.showList();
});
},
+ // ==================== 重要事件聚合 ====================
+ switchView: function (view) {
+ if (view === 'events') {
+ $('#listView').addClass('hidden');
+ $('#detailView').addClass('hidden');
+ $('#eventsView').removeClass('hidden');
+ if (!this.state.eventsLoaded) this.loadEvents();
+ } else {
+ $('#eventsView').addClass('hidden');
+ $('#listView').removeClass('hidden');
+ }
+ },
+
+ loadEvents: function () {
+ var self = this;
+ this.showLoading('正在加载重要事件...');
+ var days = $('#evDays').val() || 7;
+ var imp = $('#evImportance').val() || 4;
+ var type = $('#evType').val() || '';
+ var url = this.API_EVENTS + '?days=' + days + '&importance=' + imp + '&limit=300';
+ if (type) url += '&report_type=' + type;
+ $.getJSON(url)
+ .done(function (data) {
+ self.renderEvents(data);
+ self.state.eventsLoaded = true;
+ self.hideLoading();
+ })
+ .fail(function (xhr) {
+ self.renderEventsError(xhr);
+ self.hideLoading();
+ });
+ },
+
+ renderEvents: function (list) {
+ var self = this;
+ if (!Array.isArray(list) || list.length === 0) {
+ $('#eventsList').html('
');
+ $('#eventsInfo').text('');
+ return;
+ }
+ $('#eventsInfo').text('共 ' + list.length + ' 条重要事件(按重要度、日期降序)');
+ var rows = list.map(function (e, i) {
+ var typeName = self.TYPE_NAMES[e.report_type] || e.report_type;
+ var secName = self.SECTION_NAMES[e.section] || e.section;
+ var extra = ['
' + selfEscape(e.report_date) + ' · ' + selfEscape(typeName) + ' · ' + selfEscape(secName) + ''];
+ return self.renderEventRow(e, i + 1, extra);
+ }).join('');
+ $('#eventsList').html('
重要事件聚合跨日报检索 · 重要度 ≥ ' + $('#evImportance').val() + '
' + rows + '
');
+ },
+
+ renderEventsError: function (xhr) {
+ var detail = '';
+ if (xhr && xhr.responseJSON && xhr.responseJSON.error) detail = xhr.responseJSON.error;
+ $('#eventsList').html('
重要事件加载失败
' + (detail ? '
' + selfEscape(detail) + '
' : '') + '
');
+ $('#eventsInfo').text('');
+ },
+
// ==================== 列表 ====================
loadReports: function () {
var self = this;
@@ -230,13 +297,14 @@ var NewsReports = {
'
';
},
- renderEventRow: function (e, idx) {
+ renderEventRow: function (e, idx, extraMeta) {
var sen = this.SENTIMENT[e.sentiment] || this.SENTIMENT.neutral;
var impCls = e.importance >= 5 ? 'imp-5' : (e.importance >= 4 ? 'imp-4' : '');
var title = selfEscape(e.title || '');
if (e.url) title = '
' : '';
var meta = [];
+ if (extraMeta) meta = meta.concat(extraMeta);
if (e.event_type) meta.push('
');
return '' +
@@ -291,6 +359,12 @@ var NewsReports = {
}
return;
}
+ if ('count' in item) {
+ // intl 英文键格式: {"importance":2,"count":2} / {"event_type":"宏观","count":15} / {"source":"X","count":30}
+ var lk2 = Object.keys(item).filter(function (k) { return k !== 'count'; })[0];
+ out.push({ label: lk2 ? item[lk2] : '—', value: item['count'] });
+ return;
+ }
var keys = Object.keys(item);
if (keys.length >= 2) out.push({ label: item[keys[0]], value: item[keys[1]] });
else if (keys.length === 1) out.push({ label: keys[0], value: item[keys[0]] });