首页AI脚本卡片右下角显示脚本评分:listRecentScripts 关联最新 AI 复盘总分,无评分不显示徽章

This commit is contained in:
maogeigei committed 2026-09-03 15:30:33 +08:00
1 parent 0f315de830
commit 4f4e126e61
4 files changed
+23 -7

No files matched your search

@@ -311,13 +311,18 @@ function getStats() {
};
}
// 最近 AI 写剧本(首页快捷卡片):status=done 且有内容,按 id 倒序取前 N 条
// 最近 AI 写剧本(首页快捷卡片):status=done 且有内容,按 id 倒序取前 N 条;
// score = 该脚本最新一条已完成 AI 复盘(script_review type='ai')的总分,无复盘则为 null
function listRecentScripts(limit = 4) {
const d = getDb(); if (!d) return [];
const n = Math.max(1, Math.min(Number(limit) || 4, 20));
return d.prepare(`
SELECT r.id, r.title, r.script_text, r.created_time, r.video_id, r.account_id,
h.account_name, v.video_title
h.account_name, v.video_title,
(SELECT sr.total FROM script_review sr
WHERE sr.type='ai' AND sr.rewrite_id = r.id AND sr.status='done'
AND sr.total IS NOT NULL AND sr.total <> ''
ORDER BY sr.id DESC LIMIT 1) AS score
FROM rewrite_log r
LEFT JOIN hot_accounts h ON h.id = r.account_id
LEFT JOIN account_videos v ON v.id = r.video_id
@@ -424,15 +424,24 @@ async function loadRecentScripts() {
const items = (d.items || []);
if (!items.length) { el.innerHTML = '<span class="dim">暂无 AI 写剧本</span>'; return; }
_recentScriptsCache = {};
// 评分徽章配色与诊断页一致:≥75 绿 / ≥60 橙 / <60 红
const scoreColor = (v) => (v >= 75 ? '#3a9e6d' : v >= 60 ? '#d99a2b' : '#d9534f');
el.innerHTML = items.map((s) => {
_recentScriptsCache[s.id] = s;
const title = cleanTitle(s.title || s.video_title) || '未命名剧本';
const meta = [s.account_name, s.created_time ? fmtDate(s.created_time) : ''].filter(Boolean).join(' | ');
const preview = previewLines(s.script_text, 5);
// 有 AI 复盘评分 → 卡片右下角徽章;无评分不显示
const sc = Number(s.score);
const scoreBadge = (s.score !== null && s.score !== undefined && s.score !== '' && Number.isFinite(sc))
? `<span class="recent-card-score" style="background:${scoreColor(sc)}1a;color:${scoreColor(sc)}">评分 ${sc % 1 === 0 ? sc : sc.toFixed(1)}</span>` : '';
return `<button class="recent-card" data-script="${s.id}" title="点击查看完整剧本">
<span class="recent-card-title">${esc(title)}</span>
<span class="recent-card-preview">${preview.map((l) => `<span class="recent-preview-line">${esc(l)}</span>`).join('')}</span>
<span class="recent-card-meta">${esc(meta)}</span>
<span class="recent-card-foot">
<span class="recent-card-meta">${esc(meta)}</span>
${scoreBadge}
</span>
</button>`;
}).join('');
el.querySelectorAll('.recent-card').forEach((b) => b.addEventListener('click', () => {
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MCN工作台</title>
<link rel="stylesheet" href="style.css?v=20260903f">
<link rel="stylesheet" href="style.css?v=20260903g">
<script src="vendor/echarts.min.js"></script>
</head>
<body>
@@ -41,7 +41,7 @@
</div>
</div>
<script src="app.js?v=20260903f"></script>
<script src="data-pages.js?v=20260903f"></script>
<script src="app.js?v=20260903g"></script>
<script src="data-pages.js?v=20260903g"></script>
</body>
</html>
@@ -626,7 +626,9 @@ td.td-title { max-width: 240px; }
.recent-card-title { font-size: 15px; font-weight: 600; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 100%; display: flex; align-items: center; gap: 6px; }
.recent-card-preview { width: 100%; display: flex; flex-direction: column; gap: 2px; }
.recent-preview-line { display: block; font-size: 14px; color: #57606a; line-height: 1.55; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 100%; }
.recent-card-meta { font-size: 14px; color: var(--dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 100%; margin-top: auto; }
.recent-card-foot { width: 100%; margin-top: auto; display: flex; align-items: center; gap: 8px; }
.recent-card-meta { font-size: 14px; color: var(--dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; }
.recent-card-score { flex: none; font-size: 12px; font-weight: 600; padding: 2px 8px; border-radius: 10px; line-height: 1.5; }
.recent-meta { font-size: 14px; color: var(--dim); margin-bottom: 12px; }
/* ================= 扁平化向量图标 ================= */