95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
const auth = require('../../../utils/auth');
|
|
const { formatDateTime } = require('../../../utils/format');
|
|
|
|
function genderText(v) {
|
|
if (v === '男' || v === '女') return v;
|
|
const n = Number(v);
|
|
if (n === 0) return '男';
|
|
if (n === 1) return '女';
|
|
if (n === 2) return '未知';
|
|
return v != null && v !== '' ? String(v) : '—';
|
|
}
|
|
|
|
function safeNumber(v, fallback = 0) {
|
|
const n = Number(v);
|
|
return Number.isNaN(n) ? fallback : n;
|
|
}
|
|
|
|
function normalizeMember(m) {
|
|
const mm = m && typeof m === 'object' ? m : {};
|
|
const id = mm.id != null ? mm.id : mm.Id;
|
|
const name = mm.name || mm.Name || '—';
|
|
const gender = genderText(mm.gender != null ? mm.gender : mm.Gender);
|
|
const age = mm.age != null ? safeNumber(mm.age, '—') : mm.Age != null ? safeNumber(mm.Age, '—') : '—';
|
|
return { id: id != null ? id : `${name}-${gender}-${age}`, name, gender, age };
|
|
}
|
|
|
|
function normalizeTeamDetail(raw) {
|
|
const d = raw && typeof raw === 'object' ? raw : {};
|
|
const leader = d.leader && typeof d.leader === 'object' ? d.leader : null;
|
|
const coach = d.coach && typeof d.coach === 'object' ? d.coach : null;
|
|
const membersRaw = (Array.isArray(d.members) ? d.members : []).filter(m => {
|
|
const pt = m && (m.personType != null ? m.personType : m.PersonType);
|
|
return Number(pt) === 1;
|
|
});
|
|
|
|
const createdTime = d.createdTime || d.CreatedTime || d.createTime || d.CreateTime || '';
|
|
|
|
return {
|
|
id: d.id != null ? d.id : d.Id,
|
|
name: d.name || d.Name || '—',
|
|
memberCount: safeNumber(d.memberCount != null ? d.memberCount : d.MemberCount, membersRaw.length),
|
|
leaderName: (leader && (leader.name || leader.Name)) || d.leaderName || d.LeaderName || '',
|
|
coachName: (coach && (coach.name || coach.Name)) || d.coachName || d.CoachName || '',
|
|
createdTimeStr: createdTime ? formatDateTime(String(createdTime)) : '-',
|
|
members: membersRaw.map(normalizeMember)
|
|
};
|
|
}
|
|
|
|
Page({
|
|
data: {
|
|
id: null,
|
|
loading: false,
|
|
detail: {
|
|
name: '',
|
|
memberCount: 0,
|
|
leaderName: '',
|
|
coachName: '',
|
|
createdTimeStr: '',
|
|
members: []
|
|
}
|
|
},
|
|
|
|
onLoad(options) {
|
|
const id = options && options.id ? Number(options.id) : null;
|
|
this.setData({ id });
|
|
if (!id) {
|
|
wx.showToast({ title: '缺少团队ID', icon: 'none' });
|
|
return;
|
|
}
|
|
this.loadDetail(id);
|
|
},
|
|
|
|
async loadDetail(id) {
|
|
if (this.data.loading) return;
|
|
this.setData({ loading: true });
|
|
try {
|
|
const res = await auth.fetchMyTeamDetail(id);
|
|
const detail = normalizeTeamDetail(res);
|
|
this.setData({ detail });
|
|
} catch (err) {
|
|
wx.showToast({ title: err?.message || '加载失败', icon: 'none' });
|
|
} finally {
|
|
this.setData({ loading: false });
|
|
}
|
|
},
|
|
|
|
onBack() {
|
|
if (getCurrentPages().length > 1) {
|
|
wx.navigateBack();
|
|
} else {
|
|
wx.navigateTo({ url: '/subpackages/mine/team/team' });
|
|
}
|
|
}
|
|
});
|