// 调试小程序用户信息显示问题 - 修复后版本 console.log('=== 调试小程序用户信息显示问题 - 修复后版本 ==='); // 模拟小程序环境 - 使用正确的用户信息结构 const mockApp = { globalData: { userInfo: { userId: 'test123', name: '张三', phone: '13800138000', email: 'test@example.com', avatar: 'https://example.com/avatar.jpg', // 直接在userInfo下 gender: 'MALE', // 字符串格式或数字格式 birthday: '1990-05-15' // 直接在userInfo下 } } }; // 测试数字格式的性别 const mockAppWithNumericGender = { globalData: { userInfo: { userId: 'test456', name: '李四', phone: '13900139000', email: 'test2@example.com', avatarUrl: 'https://example.com/avatar2.jpg', // 兼容旧字段名 gender: 1, // 数字格式:0为男,1为女 birthDate: '1992-08-20' // 兼容旧字段名 } } }; // 模拟页面数据 const pageData = { formData: { name: '', phone: '', email: '', avatarUrl: '', gender: null, education: '', birthDate: '' }, displayUserInfo: {}, genderOptions: ['男', '女'], genderIndex: -1, educationOptions: ['高中及以下', '大专', '本科', '硕士', '博士'], educationIndex: -1, localAvatarPath: '' }; // 模拟修复后的 loadUserInfo 方法 function loadUserInfo(app = mockApp) { console.log('\n--- 执行修复后的 loadUserInfo ---'); const userInfo = app.globalData.userInfo; console.log('全局用户信息:', JSON.stringify(userInfo, null, 2)); if (userInfo) { let displayUserInfo = { name: userInfo.name || '', phone: userInfo.phone || '', avatarUrl: userInfo.avatar || userInfo.avatarUrl || '', gender: null, education: '', birthDate: '' }; // 处理性别信息 - 直接从userInfo获取 if (userInfo.gender !== undefined && userInfo.gender !== null) { // 如果是字符串格式,转换为数字 if (typeof userInfo.gender === 'string') { displayUserInfo.gender = userInfo.gender === 'MALE' ? 0 : 1; } else { displayUserInfo.gender = parseInt(userInfo.gender); } } // 处理生日信息 - 直接从userInfo获取 if (userInfo.birthday || userInfo.birthDate) { displayUserInfo.birthDate = userInfo.birthday || userInfo.birthDate; } pageData.displayUserInfo = displayUserInfo; console.log('设置 displayUserInfo:', JSON.stringify(pageData.displayUserInfo, null, 2)); } } // 模拟修复后的 prefillUserInfo 方法 function prefillUserInfo(app = mockApp) { console.log('\n--- 执行修复后的 prefillUserInfo ---'); const userInfo = app.globalData.userInfo; if (userInfo) { console.log('用户信息:', JSON.stringify(userInfo, null, 2)); // 更新 formData pageData.formData.name = userInfo.name || ''; pageData.formData.phone = userInfo.phone || ''; pageData.formData.email = userInfo.email || ''; pageData.formData.avatarUrl = userInfo.avatar || userInfo.avatarUrl || ''; // 处理性别信息 - 直接从userInfo获取 if (userInfo.gender !== undefined && userInfo.gender !== null) { let genderIndex; // 如果是字符串格式,转换为数字 if (typeof userInfo.gender === 'string') { genderIndex = userInfo.gender === 'MALE' ? 0 : 1; } else { genderIndex = parseInt(userInfo.gender); } pageData.formData.gender = genderIndex; pageData.genderIndex = genderIndex; console.log('设置性别:', genderIndex === 0 ? '男' : '女', '索引:', genderIndex); } // 处理生日信息 - 直接从userInfo获取 if (userInfo.birthday || userInfo.birthDate) { const birthDate = userInfo.birthday || userInfo.birthDate; pageData.formData.birthDate = birthDate; console.log('设置生日:', birthDate); } console.log('最终 formData:', JSON.stringify(pageData.formData, null, 2)); } } // 模拟模板显示逻辑 function simulateTemplateDisplay() { console.log('\n--- 模拟模板显示 ---'); // 头像显示逻辑 const avatarSrc = pageData.localAvatarPath || pageData.formData.avatarUrl || '../../images/default-avatar.svg'; console.log('头像显示路径:', avatarSrc); // 性别显示逻辑 const genderDisplay = pageData.formData.gender !== null ? pageData.genderOptions[pageData.formData.gender] : '请选择性别'; console.log('性别显示文本:', genderDisplay); // 生日显示逻辑 const birthDateDisplay = pageData.formData.birthDate || '请选择生日'; console.log('生日显示文本:', birthDateDisplay); // 检查问题 console.log('\n--- 问题诊断 ---'); if (!pageData.formData.avatarUrl) { console.log('❌ 头像URL为空'); } else { console.log('✅ 头像URL正常:', pageData.formData.avatarUrl); } if (pageData.formData.gender === null || pageData.formData.gender === undefined) { console.log('❌ 性别未设置'); } else { console.log('✅ 性别正常:', pageData.formData.gender, '显示为:', genderDisplay); } if (!pageData.formData.birthDate) { console.log('❌ 生日未设置'); } else { console.log('✅ 生日正常:', pageData.formData.birthDate); } } // 执行测试 console.log('\n=== 开始测试 - 字符串格式性别 ==='); // 1. 测试字符串格式的用户信息 loadUserInfo(mockApp); prefillUserInfo(mockApp); // 模拟模板显示逻辑 console.log('\n--- 模拟模板显示逻辑 (字符串格式) ---'); let avatarSrc = pageData.localAvatarPath || pageData.formData.avatarUrl || '/images/default-avatar.png'; console.log('头像显示:', avatarSrc); let genderDisplay = pageData.genderIndex !== -1 ? pageData.genderOptions[pageData.genderIndex] : '请选择性别'; console.log('性别显示:', genderDisplay); let birthDateDisplay = pageData.formData.birthDate || '请选择生日'; console.log('生日显示:', birthDateDisplay); console.log('\n=== 开始测试 - 数字格式性别 ==='); // 2. 重置页面数据 pageData.formData = { name: '', phone: '', email: '', avatarUrl: '', gender: -1, education: '', birthDate: '' }; pageData.genderIndex = -1; pageData.educationIndex = -1; // 测试数字格式的用户信息 loadUserInfo(mockAppWithNumericGender); prefillUserInfo(mockAppWithNumericGender); // 模拟模板显示逻辑 console.log('\n--- 模拟模板显示逻辑 (数字格式) ---'); avatarSrc = pageData.localAvatarPath || pageData.formData.avatarUrl || '/images/default-avatar.png'; console.log('头像显示:', avatarSrc); genderDisplay = pageData.genderIndex !== -1 ? pageData.genderOptions[pageData.genderIndex] : '请选择性别'; console.log('性别显示:', genderDisplay); birthDateDisplay = pageData.formData.birthDate || '请选择生日'; console.log('生日显示:', birthDateDisplay); // 4. 诊断结果 console.log('\n=== 诊断结果 ==='); console.log('头像URL:', pageData.formData.avatarUrl ? '✓ 正常' : '✗ 缺失'); console.log('性别信息:', pageData.genderIndex !== -1 ? '✓ 正常' : '✗ 缺失'); console.log('生日信息:', pageData.formData.birthDate ? '✓ 正常' : '✗ 缺失'); console.log('\n修复完成!用户信息结构已统一,支持多种格式的性别和生日字段。'); console.log('\n=== 调试完成 ===');