Codex Assistant
昨天 58d9f460b2f8c34430285115e2557d18333c5cab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// 模拟小程序调试 - 检查用户数据结构
console.log('=== 模拟小程序调试:检查用户数据结构 ===\n');
 
// 模拟从本地存储获取的用户数据(基于后端日志分析)
const mockUserInfoFromStorage = {
  userId: "-83348",
  name: "测试用户",
  phone: "138****8888",
  avatar: "https://example.com/avatar.jpg",
  roles: ["PLAYER"]
  // 注意:这里可能缺少 gender 和 birthday 字段
};
 
console.log('📱 模拟小程序启动...');
console.log('🔍 从本地存储恢复的用户数据:', JSON.stringify(mockUserInfoFromStorage, null, 2));
 
// 模拟注册页面的 loadUserInfo 方法
function simulateLoadUserInfo(userInfo) {
  console.log('\n🔄 模拟 loadUserInfo 方法执行...');
  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) {
      console.log('👤 发现性别字段:', userInfo.gender, '类型:', typeof userInfo.gender);
      // 如果是字符串格式,转换为数字
      if (typeof userInfo.gender === 'string') {
        displayUserInfo.gender = userInfo.gender === 'MALE' ? 0 : 1;
      } else {
        displayUserInfo.gender = parseInt(userInfo.gender);
      }
      console.log('👤 处理后的性别:', displayUserInfo.gender);
    } else {
      console.log('❌ 未找到性别字段或字段为空');
    }
    
    // 处理生日信息 - 直接从userInfo获取
    if (userInfo.birthday || userInfo.birthDate) {
      const birthDate = userInfo.birthday || userInfo.birthDate;
      console.log('🎂 发现生日字段:', birthDate);
      displayUserInfo.birthDate = birthDate;
    } else {
      console.log('❌ 未找到生日字段 (birthday 或 birthDate)');
    }
    
    console.log('✅ 最终 displayUserInfo:', JSON.stringify(displayUserInfo, null, 2));
    return displayUserInfo;
  } else {
    console.log('⚠️ 未找到用户信息');
    return null;
  }
}
 
// 模拟注册页面的 prefillUserInfo 方法
function simulatePrefillUserInfo(userInfo) {
  console.log('\n🔄 模拟 prefillUserInfo 方法执行...');
  console.log('🔍 预填充用户信息:', userInfo);
  
  if (userInfo) {
    const updateData = {
      'formData.name': userInfo.name || '',
      'formData.phone': userInfo.phone || '',
      'formData.email': userInfo.email || '',
      'formData.avatarUrl': userInfo.avatar || userInfo.avatarUrl || ''
    };
    
    // 处理性别信息 - 直接从userInfo获取
    if (userInfo.gender !== undefined && userInfo.gender !== null) {
      let genderIndex;
      console.log('👤 处理性别字段:', userInfo.gender, '类型:', typeof userInfo.gender);
      // 如果是字符串格式,转换为数字
      if (typeof userInfo.gender === 'string') {
        genderIndex = userInfo.gender === 'MALE' ? 0 : 1;
      } else {
        genderIndex = parseInt(userInfo.gender);
      }
      updateData['formData.gender'] = genderIndex;
      updateData['genderIndex'] = genderIndex;
      console.log('👤 设置性别:', genderIndex === 0 ? '男' : '女');
    } else {
      console.log('❌ 性别字段缺失,无法预填充');
    }
    
    // 处理生日信息 - 直接从userInfo获取
    if (userInfo.birthday || userInfo.birthDate) {
      const birthDate = userInfo.birthday || userInfo.birthDate;
      updateData['formData.birthDate'] = birthDate;
      console.log('🎂 设置生日:', birthDate);
    } else {
      console.log('❌ 生日字段缺失,无法预填充');
    }
    
    console.log('✅ 预填充数据:', JSON.stringify(updateData, null, 2));
    console.log('🖼️ 设置头像URL:', updateData['formData.avatarUrl']);
    
    return updateData;
  } else {
    console.log('⚠️ 未找到用户信息,跳过预填充');
    return null;
  }
}
 
// 执行模拟测试
console.log('\n=== 开始模拟测试 ===');
 
// 测试1:缺少性别和生日字段的情况
console.log('\n📋 测试1:缺少性别和生日字段的用户数据');
simulateLoadUserInfo(mockUserInfoFromStorage);
simulatePrefillUserInfo(mockUserInfoFromStorage);
 
// 测试2:包含性别和生日字段的情况
console.log('\n📋 测试2:包含性别和生日字段的用户数据');
const completeUserInfo = {
  ...mockUserInfoFromStorage,
  gender: 0, // 男性
  birthday: '1990-01-01'
};
simulateLoadUserInfo(completeUserInfo);
simulatePrefillUserInfo(completeUserInfo);
 
// 测试3:字符串格式的性别
console.log('\n📋 测试3:字符串格式的性别');
const stringGenderUserInfo = {
  ...mockUserInfoFromStorage,
  gender: 'MALE',
  birthDate: '1995-05-15'
};
simulateLoadUserInfo(stringGenderUserInfo);
simulatePrefillUserInfo(stringGenderUserInfo);
 
console.log('\n=== 模拟测试完成 ===');
console.log('\n🔍 分析结果:');
console.log('1. 如果后端返回的用户数据中缺少 gender 和 birthday/birthDate 字段,');
console.log('   那么这些字段就不会被预填充到表单中。');
console.log('2. 需要检查后端 GraphQL 查询是否包含了这些字段。');
console.log('3. 需要检查后端数据库中是否存储了这些字段的值。');