// 临时用户资料预览页(扫码非好友进入) const friendAPI = require('../../../utils/friend-api.js'); const apiClient = require('../../../utils/api-client.js'); const app = getApp(); Page({ data:{ customId:'', user:{}, loading:true, error:'', relationStatus:'', showAddButton:false, privacyBlocked:false, blockedRelation:false, statusAdd:0 // 0 不是好友 1 已发送添加好友申请 2 已好友 }, onLoad(query){ const customId = (query?.customId || '10703945')+"" ; if(!customId){ this.setData({ error:'缺少用户ID', loading:false }); return; } this.setData({ customId }); this.loadUser(customId); }, async loadUser(customId){ this.setData({ loading:true, error:'' }); try{ // 使用新的接口 /user/info/{customId} 获取用户信息 const response = await apiClient.getUserInfoByCustomId(customId); if(!response || response.code !== 0 || !response.data){ this.setData({ error:'用户不存在', loading:false }); return; } const user = response.data; console.log('✅ 获取用户信息成功:', user); // 处理关系状态 let relationStatus = user.relationStatus || 'can_add'; if(!relationStatus){ relationStatus = 'can_add'; // 未提供时默认可添加 } // 处理年龄:优先使用接口返回的 age,如果没有则根据 birthday 计算 let calculatedAge = user.age; if(!calculatedAge && user.birthday){ calculatedAge = this.calculateAge(user.birthday); } // 处理家乡地址:将数组转换为字符串 let hometownText = ''; if (user.hometown) { if (Array.isArray(user.hometown)) { hometownText = user.hometown.filter(item => item).join(' '); } else if (typeof user.hometown === 'string') { hometownText = user.hometown; } } // 判断是否显示添加好友按钮和状态 // 根据 relationStatus 判断: // - "self": 自己,不显示添加按钮 // - "friend": 已是好友,statusAdd = 2 // - "pending": 已发送申请,statusAdd = 1 // - 其他: 可添加,statusAdd = 0 let showAddButton = false; let statusAdd = 0; if (relationStatus === 'self') { // 自己,不显示添加按钮 showAddButton = false; statusAdd = 0; } else if (relationStatus === 'friend') { // 已是好友 showAddButton = false; statusAdd = 2; } else if (relationStatus === 'pending' || relationStatus === 'requested') { // 已发送申请 showAddButton = false; statusAdd = 1; } else { // 可以添加好友 showAddButton = true; statusAdd = 0; } console.log('👀 用户预览信息:', { relationStatus, showAddButton, statusAdd, calculatedAge, hometownText }); this.setData({ user: user, // 使用完整的用户数据对象 relationStatus, showAddButton, privacyBlocked: relationStatus === 'privacy_limited', blockedRelation: relationStatus === 'blocked', calculatedAge: calculatedAge, hometownText: hometownText, loading: false, statusAdd: statusAdd }); }catch(e){ console.error('❌ 加载用户失败:', e); let errorMessage = '加载失败'; if(e.message){ errorMessage = e.message; } else if(e.errMsg){ errorMessage = e.errMsg; } this.setData({ error: errorMessage, loading:false }); } }, reload(){ if(this.data.customId){ this.loadUser(this.data.customId); } }, async addFriend(){ if(!this.data.user.customId) return; try{ const dialogRes = await this.showAddFriendDialog(this.data.user.nickname||this.data.user.customId); if(!dialogRes.confirm) return; wx.showLoading({ title:'发送中...' }); const frienRes = await friendAPI.addFriend(this.data.user.customId, dialogRes.message); console.log('frienRes -------frienRes ',frienRes); wx.hideLoading(); wx.showToast({ title:'请求已发送', icon:'success' }); this.setData({ relationStatus:'pending', showAddButton:false,statusAdd:1 }); }catch(e){ wx.hideLoading(); wx.showToast({ title:e.message||'发送失败', icon:'none' }); } }, goChat(){ const { user } = this.data; if(!user.customId) return; wx.navigateTo({ url:`/pages/message/chat/chat?targetId=${user.customId}&name=${encodeURIComponent(user.nickname||'好友')}&chatType=0` }); }, previewImage(e) { try { // 获取当前点击的图片索引和动态索引 const avatar = e.currentTarget.dataset.avatar; // 🔥 设置标志,防止预览关闭后触发页面刷新 this._skipNextOnShowReload = true; const imageUrls=[avatar]; // 调用微信小程序的图片预览API wx.previewImage({ current: avatar, urls: imageUrls, success: () => { // 预览打开成功,标志已设置,关闭时会触发 onShow }, fail: (err) => { console.error('图片预览失败:', err); // 预览失败,清除标志 this._skipNextOnShowReload = false; wx.showToast({ title: '预览图片失败', icon: 'none' }); } }); } catch (error) { console.error('图片预览过程中出错:', error); // 出错时清除标志 this._skipNextOnShowReload = false; wx.showToast({ title: '预览图片失败', icon: 'none' }); } }, // 发送消息(与 goChat 功能相同) sendMessage() { const { user } = this.data; if (!user || !user.customId) { wx.showToast({ title: '用户信息不存在', icon: 'none' }); return; } wx.navigateTo({ url: `/pages/message/chat/chat?targetId=${user.customId}&name=${encodeURIComponent(user.nickname || user.customId || '好友')}&chatType=0` }); }, showAddFriendDialog(nickname){ return new Promise(resolve=>{ wx.showModal({ title:`添加 ${nickname} 为好友`, editable:true, placeholderText:'请输入验证消息', content:`我是 ${app.globalData.userInfo?.user?.nickname||''}`, success:(res)=>{ resolve({ confirm:res.confirm, message:res.content || `我是 ${app.globalData.userInfo?.user?.nickname||''}` }); }, fail:()=>resolve({ confirm:false }) }); }); }, // 根据生日计算年龄 calculateAge(birthday) { if (!birthday) { return null; } try { // 处理 YYYY-MM-DD 格式的日期 let birthDate; if (typeof birthday === 'string' && birthday.includes('-')) { const dateParts = birthday.split('-'); if (dateParts.length === 3) { birthDate = new Date(parseInt(dateParts[0]), parseInt(dateParts[1]) - 1, parseInt(dateParts[2])); } else { birthDate = new Date(birthday); } } else { birthDate = new Date(birthday); } if (isNaN(birthDate.getTime())) { return null; } const today = new Date(); let age = today.getFullYear() - birthDate.getFullYear(); const monthDiff = today.getMonth() - birthDate.getMonth(); // 如果还没过生日,年龄减1 if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) { age--; } // 年龄应该大于等于0 return age >= 0 ? age : null; } catch (error) { console.error('计算年龄失败:', error, birthday); return null; } }, // 复制ID copyId() { const { user } = this.data; const id = user?.customId || (user?.id ? 'findme_' + user.id : '未设置'); if (!id || id === '未设置') { wx.showToast({ title: 'ID不存在', icon: 'none' }); return; } wx.setClipboardData({ data: id, success: () => { wx.showToast({ title: '复制成功', icon: 'success', duration: 2000 }); }, fail: () => { wx.showToast({ title: '复制失败', icon: 'none' }); } }); }, // 跳转到二维码页面 navigateToQRCode() { const { user } = this.data; if (!user || !user.customId) { wx.showToast({ title: '用户信息不存在', icon: 'none' }); return; } // 传递陌生人的 customId 参数 wx.navigateTo({ url: `/subpackages/qr/qr-code/qr-code?customId=${user.customId}`, success: (res) => { console.log('跳转二维码页面成功', res); }, fail: (err) => { console.error('跳转二维码页面失败', err); wx.showToast({ title: '跳转失败', icon: 'none' }); } }); } });