Files
vps-management-bot/aff-monitor/src/routes/admin.js

43 lines
1.5 KiB
JavaScript
Raw Normal View History

2026-03-21 01:10:53 +08:00
/**
* 后台管理 仪表盘
*/
const router = require('express').Router();
const db = require('../db');
const { buildPushMessage } = require('../utils/pushTemplate');
router.get('/', (req, res) => {
const stats = {
merchants: db.prepare('SELECT COUNT(*) AS n FROM merchants').get().n,
products: db.prepare('SELECT COUNT(*) AS n FROM products').get().n,
channels: db.prepare('SELECT COUNT(*) AS n FROM tg_channels').get().n,
tasks: db.prepare('SELECT COUNT(*) AS n FROM monitor_tasks').get().n,
recentLogs: db.prepare(`SELECT COUNT(*) AS n FROM check_logs WHERE created_at >= datetime('now', '-1 day')`).get().n,
};
const sampleProduct = db.prepare(`
SELECT p.*, m.name AS merchant_name,
p.generated_aff_url AS product_aff_url,
(
SELECT url FROM aff_links a
WHERE a.product_id = p.id AND a.platform = 'telegram'
ORDER BY a.id DESC LIMIT 1
) AS tg_aff_url,
(
SELECT url FROM aff_links a
WHERE a.product_id = p.id
ORDER BY a.id DESC LIMIT 1
) AS any_aff_url
FROM products p
LEFT JOIN merchants m ON p.merchant_id = m.id
ORDER BY p.id DESC LIMIT 1
`).get();
const preview = sampleProduct
? buildPushMessage({ ...sampleProduct, aff_url: sampleProduct.product_aff_url || sampleProduct.tg_aff_url || sampleProduct.any_aff_url || sampleProduct.buy_url || sampleProduct.url || null })
: null;
res.render('admin/index', { stats, preview });
});
module.exports = router;