36 lines
1.4 KiB
JavaScript
36 lines
1.4 KiB
JavaScript
// 演示证书图片索引:demo 播种时按记录标题匹配,附加对应证书 WebP 附件。
|
|
// 图片为 Pillow 离线绘制的获奖证书(720x508 WebP + 480px 缩略图),仅作演示数据。
|
|
// 如需替换:直接覆盖 demo-certs/*.webp 即可,无需改代码。
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const DIR = path.join(__dirname, 'demo-certs');
|
|
|
|
/**
|
|
* 主名(如 cert-ctf)→ 证书附件负载(attachment_add 所需格式);文件缺失返回 undefined
|
|
*/
|
|
export function loadCert(assetName) {
|
|
try {
|
|
const data = fs.readFileSync(path.join(DIR, assetName + '.webp'));
|
|
let thumbB64 = '';
|
|
try { thumbB64 = fs.readFileSync(path.join(DIR, assetName + '.thumb.webp')).toString('base64'); } catch {}
|
|
return {
|
|
file_name: '获奖证书.webp', mime: 'image/webp',
|
|
data_b64: data.toString('base64'), thumb_b64: thumbB64, size: data.length,
|
|
};
|
|
} catch { return undefined; }
|
|
}
|
|
|
|
/** 记录标题 → 证书资源名(demo 播种时逐条匹配) */
|
|
export const CERT_BY_TITLE = [
|
|
[/信息安全竞赛/, 'cert-ctf'],
|
|
[/数学建模/, 'cert-math'],
|
|
[/蓝桥杯/, 'cert-lanqiao'],
|
|
[/计算机设计大赛/, 'cert-cd'],
|
|
[/英语竞赛/, 'cert-eng'],
|
|
[/ACM-ICPC/, 'cert-acm'],
|
|
[/优秀共青团员/, 'cert-wusi'],
|
|
];
|