Files
Blizzard 11c4d490e6 feat(fe): 宠物照片替代默认头像,身份卡移到首页门面卡
- 首页/我的/切换条:上传过照片就用照片,没有才退回 emoji
- 报告页分享海报:先异步加载头像再开画,画成圆形头像
- 一起生活的天数改成从到家日期算,没填就显示「-」并可点去补
- 身份卡入口从「我的」页移到首页门面卡右上角

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 17:08:32 +08:00

46 lines
2.1 KiB
JavaScript

// 宠物档案里那些「有数据但没露出」的东西。字段后端早就返回了,只是没人用。
// 单独放一个文件而不是塞在 home.js 里:身份卡、宠友主页以后都要用同一套算法。
// 星座。按公历日期分段,边界日取「这一天起算下一个星座」
const ZODIAC = [
[1, 20, '水瓶座'], [2, 19, '双鱼座'], [3, 21, '白羊座'], [4, 20, '金牛座'],
[5, 21, '双子座'], [6, 22, '巨蟹座'], [7, 23, '狮子座'], [8, 23, '处女座'],
[9, 23, '天秤座'], [10, 24, '天蝎座'], [11, 23, '射手座'], [12, 22, '摩羯座'],
];
function zodiac(birthday) {
if (!birthday) return '';
const p = String(birthday).slice(0, 10).split('-');
if (p.length < 3) return '';
const m = +p[1], d = +p[2];
if (!m || !d) return '';
// 12 月 22 日之后到 1 月 19 日都是摩羯
for (let i = 0; i < ZODIAC.length; i++) {
const [zm, zd, name] = ZODIAC[i];
if (m === zm) return d >= zd ? name : ZODIAC[(i + 11) % 12][2];
}
return '';
}
// 一起生活了多少天。优先用到家日期——「我们一起生活的第 N 天」说的是
// 它到你家之后的日子,不是它出生之后的日子。没填到家日就退回建档日。
// 一起生活了多少天,只从「到家日期」算 —— 没填到家日就返回 null(首页显示「-」)。
// 原来会退回建档日兜底,但那是「在这个 App 上建档的日子」,不是「它到你家的日子」,
// 领养多年后才装 App 的会算出个很小的数,反而误导
function daysTogether(pet) {
const from = (pet && pet.arrived_at) || '';
if (!from) return null;
const d = new Date(String(from).slice(0, 10) + 'T00:00:00');
if (isNaN(d.getTime())) return null;
const days = Math.floor((Date.now() - d.getTime()) / 86400000) + 1;
return days > 0 ? days : null;
}
// 性别徽章。后端存的是「男孩 / 女孩 / 不确定」
function genderBadge(gender) {
if (gender === '男孩') return { icon: '♂', tone: 'male' };
if (gender === '女孩') return { icon: '♀', tone: 'female' };
return { icon: '', tone: '' };
}
module.exports = { zodiac, daysTogether, genderBadge };