story-summary: facts UI split + relationships from facts

This commit is contained in:
2026-02-02 22:48:07 +08:00
parent fb8ed8037c
commit 1128d1494e
5 changed files with 67 additions and 75 deletions

View File

@@ -1862,52 +1862,39 @@ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "
function renderFacts(facts) {
summaryData.facts = facts || [];
summaryData.facts = facts || [];
const container = $('facts-list');
if (!container) return;
const container = $('facts-list');
if (!container) return;
const activeFacts = (facts || []).filter(f => !f.retracted);
const isRelation = f => /^.+/.test(f.p);
const stateFacts = (facts || []).filter(f => !f.retracted && !isRelation(f));
if (!activeFacts.length) {
setHtml(container, '<div class="empty">暂无事实记录</div>');
return;
}
if (!stateFacts.length) {
setHtml(container, '<div class="empty">暂无状态记录</div>');
return;
}
const relations = activeFacts.filter(f => /^.+/.test(f.p));
const states = activeFacts.filter(f => !/^对.+的/.test(f.p));
const grouped = new Map();
for (const f of stateFacts) {
if (!grouped.has(f.s)) grouped.set(f.s, []);
grouped.get(f.s).push(f);
}
let html = '';
if (states.length) {
html += `<div class="fact-group">
<div class="fact-group-title">状态/属性</div>
${states.map(f => `
let html = '';
for (const [subject, items] of grouped) {
html += `<div class="fact-group">
<div class="fact-group-title">${h(subject)}</div>
${items.map(f => `
<div class="fact-item">
<span class="fact-subject">${h(f.s)}</span>
<span class="fact-predicate">${h(f.p)}</span>
<span class="fact-object">${h(f.o)}</span>
<span class="fact-since">#${(f.since || 0) + 1}</span>
</div>
`).join('')}
</div>`;
}
}
if (relations.length) {
html += `<div class="fact-group">
<div class="fact-group-title">人物关系</div>
${relations.map(f => `
<div class="fact-item">
<span class="fact-subject">${h(f.s)}</span>
<span class="fact-predicate">${h(f.p)}</span>
<span class="fact-object">${h(f.o)}</span>
${f.trend ? `<span class="fact-trend ${TREND_CLASS[f.trend] || ''}">${h(f.trend)}</span>` : ''}
<span class="fact-since">#${(f.since || 0) + 1}</span>
</div>
`).join('')}
</div>`;
setHtml(container, html);
}
setHtml(container, html);
}
})();