看板增加ECharts图表(自托管): 近30天趋势折线/级别环形/学历柱状/期望城市TOP8/筛选漏斗; 统计接口扩充

This commit is contained in:
mzl92
2026-08-27 14:37:06 +08:00
parent 06a907acbf
commit 6e9470a980
4 changed files with 107 additions and 10 deletions
+5 -2
View File
@@ -153,10 +153,13 @@ app.get('/api/stats', requireAuth, (req, res) => {
today: rdb.prepare("SELECT COUNT(*) c FROM candidates WHERE scraped_at >= ?").get(today + 'T00:00').c,
greetedTotal: rdb.prepare('SELECT COUNT(*) c FROM candidates WHERE greeted = 1').get().c,
byLevel: rdb.prepare("SELECT COALESCE(score_level,'?') k, COUNT(*) c FROM candidates GROUP BY score_level").all(),
last7: rdb.prepare(`SELECT substr(scraped_at,1,10) d, COUNT(*) c,
byEducation: rdb.prepare("SELECT COALESCE(NULLIF(education,''),'未知') k, COUNT(*) c FROM candidates GROUP BY education ORDER BY c DESC LIMIT 8").all(),
byCity: rdb.prepare("SELECT expected_city k, COUNT(*) c FROM candidates WHERE expected_city != '' GROUP BY expected_city ORDER BY c DESC LIMIT 8").all(),
byAccount: rdb.prepare("SELECT COALESCE(NULLIF(account,''),'未知') k, COUNT(*) c, SUM(greeted) g FROM candidates GROUP BY account ORDER BY c DESC").all(),
last30: rdb.prepare(`SELECT substr(scraped_at,1,10) d, COUNT(*) c,
SUM(CASE WHEN score_level='推荐' THEN 1 ELSE 0 END) rec,
SUM(CASE WHEN greeted=1 THEN 1 ELSE 0 END) greeted
FROM candidates WHERE scraped_at >= date('now','localtime','-6 days','start of day')
FROM candidates WHERE scraped_at >= date('now','-29 days','start of day')
GROUP BY substr(scraped_at,1,10) ORDER BY d`).all(),
lastBatch: rdb.prepare('SELECT created_at, mode, new_count, greet_count FROM scrape_log ORDER BY id DESC LIMIT 1').get() || null,
});