/** * MBTI 默认头像:与后台 system_config.mbti_avatars + GET /api/miniprogram/config/mbti-avatars 一致 */ const MBTI_RE = /^[EI][NS][FT][JP]$/ function normalizeMbti(m) { const s = (m && String(m).trim().toUpperCase()) || '' return MBTI_RE.test(s) ? s : '' } /** * 展示用头像:优先用户已设头像(补全相对路径),否则合法 MBTI + 映射表中有 URL 则用映射 * @param {string} avatar * @param {string} mbti * @param {Record} map * @param {string} baseUrl */ function resolveAvatarWithMbti(avatar, mbti, map, baseUrl) { let a = (avatar && String(avatar).trim()) || '' if (a) { if (!/^https?:\/\//i.test(a) && baseUrl) { if (a.startsWith('/')) a = baseUrl + a } return a } const key = normalizeMbti(mbti) if (!key || !map || typeof map !== 'object') return '' let u = (map[key] && String(map[key]).trim()) || '' if (!u) return '' if (!/^https?:\/\//i.test(u) && baseUrl && u.startsWith('/')) u = baseUrl + u return u } module.exports = { MBTI_RE, normalizeMbti, resolveAvatarWithMbti, }