// 选择好友页面 const app = getApp(); const apiClient = require('../../../utils/api-client.js'); Page({ data: { // 好友列表 friends: [], // 选中的好友列表(多选) selectedFriends: [], // 搜索关键词 searchKeyword: '', // 加载状态 loading: false, // 模式:partial_visible 或 exclude_friends mode: 'partial_visible' }, onLoad(options) { // 获取传递的参数 let selectedFriendsStr = options.selectedFriends || '[]'; const mode = options.mode || 'partial_visible'; // 如果参数被编码了,需要解码 try { selectedFriendsStr = decodeURIComponent(selectedFriendsStr); } catch (e) { // 如果解码失败,使用原始值 console.log('参数未编码,使用原始值'); } try { const selectedFriends = JSON.parse(selectedFriendsStr); this.setData({ selectedFriends: selectedFriends || [], mode: mode }); } catch (e) { console.error('解析选中的好友失败:', e); this.setData({ selectedFriends: [], mode: mode }); } // 加载好友列表(在设置 selectedFriends 之后) this.loadFriends(); }, // 加载好友列表 loadFriends() { // TODO: 调用API加载好友列表 this.setData({ loading: true }); // 示例数据 setTimeout(() => { const friends = [ { id: 1, nickname: '张三', avatar: '/images/default-avatar.png', customId: 'user001' }, { id: 2, nickname: '李四', avatar: '/images/default-avatar.png', customId: 'user002' }, { id: 3, nickname: '王五', avatar: '/images/default-avatar.png', customId: 'user003' }, { id: 4, nickname: '赵六', avatar: '/images/default-avatar.png', customId: 'user004' }, { id: 5, nickname: '孙七', avatar: '/images/default-avatar.png', customId: 'user005' }, { id: 6, nickname: '周八', avatar: '/images/default-avatar.png', customId: 'user006' } ]; // 为每个好友添加 isSelected 属性 this.updateFriendsSelection(friends); this.setData({ friends: friends, loading: false }); }, 500); }, // 更新好友的选中状态 updateFriendsSelection(friends) { const { selectedFriends } = this.data; if (!friends || !selectedFriends) return; friends.forEach(friend => { friend.isSelected = selectedFriends.some(selected => selected.id === friend.id); }); }, // 选择好友(多选) selectFriend(e) { const friendId = e.currentTarget.dataset.friendId; const friend = this.data.friends.find(f => f.id === friendId); if (!friend) return; const selectedFriends = [...this.data.selectedFriends]; const index = selectedFriends.findIndex(f => f.id === friendId); if (index > -1) { // 取消选择 selectedFriends.splice(index, 1); friend.isSelected = false; } else { // 选择 selectedFriends.push(friend); friend.isSelected = true; } this.setData({ selectedFriends: selectedFriends, friends: this.data.friends }); }, // 搜索输入 onSearchInput(e) { this.setData({ searchKeyword: e.detail.value }); }, // 确认选择 confirmSelection() { const { selectedFriends, mode } = this.data; // 检查是否选择了好友 if (!selectedFriends || selectedFriends.length === 0) { wx.showToast({ title: '请选择好友', icon: 'none', duration: 2000 }); return; } // 计算好友总数 const friendsCount = selectedFriends.length; // 生成显示文本:多个好友昵称,用逗号分隔 const displayText = selectedFriends.map(friend => friend.nickname).join(','); // 返回上一页并传递选中的好友 const pages = getCurrentPages(); const prevPage = pages[pages.length - 2]; if (prevPage) { if (mode === 'exclude_friends') { // 排除模式 if (typeof prevPage.updateExcludeFriends === 'function') { prevPage.updateExcludeFriends(selectedFriends, friendsCount, displayText); } } else { // 部分可见模式 if (typeof prevPage.updateSelectedFriends === 'function') { prevPage.updateSelectedFriends(selectedFriends, friendsCount, displayText); } } } wx.navigateBack(); }, // 获取过滤后的好友列表 getFilteredFriends() { const { friends, searchKeyword } = this.data; if (!searchKeyword) { return friends; } return friends.filter(friend => { return friend.nickname.toLowerCase().includes(searchKeyword.toLowerCase()); }); }, // 返回 navigateBack() { wx.navigateBack(); } });