${h.id===state.familyId?'当前家庭':'独立家庭'}
${esc(h.name)}
${esc(h.note||'一户一家园')}
- 一家之主
- ${esc(h.ownerName||'待指定')}
- 备用负责人
- ${esc(h.successorName||'待指定')}
- 账号 / 空间
- ${h.members} 个 / ${h.sites} 处
${!h.successorId?'尚未指定备用负责人,建议提前安排家人接管。
':''}${h.canAssignOwner?``:''}
${h.leadershipHistory?.length?`交接记录
${h.leadershipHistory.slice().reverse().map(r=>`${esc(new Date(r.at).toLocaleString())} · ${esc(r.actor)}
${esc(r.reason)}
`).join('')} `:''}`).join('');
}
async function switchHousehold(id){
if(!isPlatformAdmin()||!id||id===state.familyId)return;
const user=currentUser;
// Invalidate outstanding API responses, video players and dialogs before changing scope.
clearPrivateView();
householdScope=id;currentUser=user;loggedIn=true;
await auth();
}
function openHousehold(id){
if(!isAdmin())return;
const item=(state.households||[]).find(h=>h.id===id);
if(!item&&!isPlatformAdmin())return;
fillForm($('#household-form'),item||{});$('#household-dialog').showModal();
}
async function openLeadership(id){
try{
if(id!==state.familyId)await switchHousehold(id);
const home=(state.households||[]).find(h=>h.id===id);
if(!home?.canAssignOwner)return;
const result=await api('/api/users');
const candidates=result.users.filter(u=>u.role==='family_admin'&&!u.disabled);
const f=$('#leadership-form'),options=candidates.map(u=>`