feat(news_reports): 事件支持多新闻源 sources + 页面底部访问计数器

- /api/news/events/ 事件行: sources 字段非空时显示多个新闻源, 为空回退 source 单源 (兼容数组/对象/JSON 字符串)
- footer 参考 index-2.php 深色样式, 增加 page_counter 访问计数
- 文档: AGENTS.md/CLAUDE.md 更新表数量 16->18 张, 补充 news_report/news_event 说明
This commit is contained in:
2026-08-12 15:08:00 +08:00
parent 10569bb828
commit 2855cb51ca
4 changed files with 40 additions and 8 deletions
+20 -1
View File
@@ -301,6 +301,17 @@ var NewsReports = {
'</div>';
},
// 解析事件新闻源: sources 字段(json 数组/对象/字符串), 归一化为字符串数组
parseSources: function (s) {
if (!s) return null;
if (typeof s === 'string') {
try { s = JSON.parse(s); } catch (err) { return null; }
}
if (Array.isArray(s)) return s.filter(function (x) { return x && String(x).trim(); });
if (typeof s === 'object') return Object.keys(s).filter(function (k) { return k && String(k).trim(); });
return null;
},
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' : '');
@@ -310,7 +321,15 @@ var NewsReports = {
var meta = [];
if (extraMeta) meta = meta.concat(extraMeta);
if (e.event_type) meta.push('<span class="meta-item"><i class="fa-regular fa-tag mr-1"></i>' + selfEscape(e.event_type) + '</span>');
if (e.source) meta.push('<span class="meta-item"><i class="fa-regular fa-newspaper mr-1"></i>' + selfEscape(e.source) + '</span>');
// 新闻源: 优先显示 sources(多源, json 数组/对象), 为空则回退 source(单源)
var srcs = this.parseSources(e.sources);
if (srcs && srcs.length) {
for (var i = 0; i < srcs.length; i++) {
meta.push('<span class="meta-item"><i class="fa-regular fa-newspaper mr-1"></i>' + selfEscape(srcs[i]) + '</span>');
}
} else if (e.source) {
meta.push('<span class="meta-item"><i class="fa-regular fa-newspaper mr-1"></i>' + selfEscape(e.source) + '</span>');
}
return '' +
'<div class="event-row">' +
'<div class="event-left">' +