40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
/**
|
|
* 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<string,string>} 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,
|
|
}
|