import { ref, computed } from 'vue' import api from '@/utils/api.js' import useTeamStore from '@/store/team.js' /** * 群聊头像管理hook - 为消息列表中的每个群聊获取成员头像 * 用于在消息列表中显示群聊的group-avatar组件 */ export default function useGroupAvatars() { const groupAvatarMap = ref({}) // { groupID: [avatarUrl1, avatarUrl2, ...] } const teamStore = useTeamStore() const patientDefaultAvatar = '/static/default-patient-avatar.png' const teamMemberDefaultAvatar = '/static/default-avatar.png' /** * 获取单个群聊的头像列表 * @param {string} groupID 群组ID * @param {string} teamId 团队ID * @param {string} patientId 患者ID * @returns {Promise} 头像URL数组(仅包含团队成员头像,不包含患者头像) */ async function getGroupAvatarList(groupID, teamId, patientId) { try { if (!teamId) { console.warn(`群聊 ${groupID} 没有 teamId,无法获取头像`) return [] } // 获取团队成员的头像和名称 const memberMap = await teamStore.getTeamMemberAvatarsAndName(teamId) if (!memberMap || Object.keys(memberMap).length === 0) { console.warn(`群聊 ${groupID} 的团队成员为空`) return [] } // 提取头像列表(过滤掉空头像,使用默认头像替代) const avatarList = Object.values(memberMap) .map(member => { // 如果成员有头像且不为空,使用成员头像;否则使用团队成员默认头像 return (member.avatar && member.avatar.trim() !== '') ? member.avatar : teamMemberDefaultAvatar }) console.log(`群聊 ${groupID} 的头像列表已加载,共 ${avatarList.length} 个团队成员头像`) return avatarList } catch (error) { console.error(`获取群聊 ${groupID} 的头像列表失败:`, error) return [] } } /** * 批量获取多个群聊的头像列表 * @param {Array} conversationList 会话列表 * @returns {Promise} */ async function loadGroupAvatars(conversationList) { if (!conversationList || conversationList.length === 0) { return } try { // 并发加载所有群聊的头像 const promises = conversationList.map(async (conversation) => { const avatarList = await getGroupAvatarList( conversation.groupID, conversation.teamId, conversation.patientId ) groupAvatarMap.value[conversation.groupID] = avatarList }) await Promise.all(promises) console.log('所有群聊头像加载完成') } catch (error) { console.error('批量加载群聊头像失败:', error) } } /** * 获取指定群聊的头像列表 * @param {string} groupID 群组ID * @returns {Array} 头像URL数组(仅包含团队成员头像) */ function getAvatarList(groupID) { return groupAvatarMap.value[groupID] || [] } /** * 清空缓存 */ function clearCache() { groupAvatarMap.value = {} } return { groupAvatarMap, getGroupAvatarList, loadGroupAvatars, getAvatarList, clearCache } }