/** 系统 T 区战队(不可在门店端编辑) */ export function isTAreaTeamName(name) { return !!(name && String(name).trim().endsWith('T区')) } export function mapPractitionerFromUser(u) { return { id: u.id, name: u.realName || u.account || u.id } } export function mapDetailToTeam(listRow, detailRes) { const payload = detailRes?.data || detailRes || {} const jsj = payload.jsj || payload const members = payload.members || [] const teamId = listRow?.id || jsj?.id || '' const teamName = listRow?.jsj || jsj?.jsj || '' return { id: teamId, jsj: teamName, members: (members || []).map((m, i) => ({ relationId: m.id, userId: m.userId, userName: m.userName || '无', isLeader: Number(m.isLeader) === 1 ? 1 : 0, sortOrder: m.sortOrder || i + 1 })) } } export function buildMembersPayload(selectedIds, leaderId, getMemberName) { const lid = leaderId || (selectedIds.length === 1 ? selectedIds[0] : '') return selectedIds.map((userId, i) => ({ userId, userName: getMemberName(userId), isLeader: userId === lid ? 1 : 0, sortOrder: i + 1 })) } /** * 编辑战队时同步成员:增删、顾问变更 */ export async function syncTeamMembers(teamId, oldMembers, newMembers, api) { const oldMap = new Map((oldMembers || []).map(m => [m.userId, m])) const newMap = new Map((newMembers || []).map(m => [m.userId, m])) for (const [userId, old] of oldMap) { const neu = newMap.get(userId) if (!neu) { if (old.relationId) { await api.deleteJsjUserRelation({ id: old.relationId }) } continue } if (Number(old.isLeader) !== Number(neu.isLeader) && old.relationId) { await api.deleteJsjUserRelation({ id: old.relationId }) await api.addUserToJsj({ jsjId: teamId, userId: neu.userId, userName: neu.userName, isLeader: neu.isLeader, sortOrder: neu.sortOrder, status: 'ACTIVE' }) } } for (const [userId, neu] of newMap) { if (!oldMap.has(userId)) { await api.addUserToJsj({ jsjId: teamId, userId: neu.userId, userName: neu.userName, isLeader: neu.isLeader, sortOrder: neu.sortOrder, status: 'ACTIVE' }) } } }