const { graphqlRequest } = require('./test-graphql-queries-only') // 测试所有端性别逻辑修复效果 async function testAllGenderFixes() { console.log('🧪 开始测试所有端性别逻辑修复效果...\n') // 1. 测试数据库中的性别值 console.log('📊 1. 测试数据库中的性别值') await testDatabaseGenderValues() // 2. 模拟前端性别转换逻辑 console.log('\n🎨 2. 模拟前端性别转换逻辑') testFrontendGenderMapping() // 3. 模拟后端性别转换逻辑 console.log('\n⚙️ 3. 模拟后端性别转换逻辑') testBackendGenderMapping() console.log('\n✅ 性别逻辑测试完成!') } // 测试数据库中的性别值 async function testDatabaseGenderValues() { try { const query = ` query GetActivityPlayerApplications($activityId: ID, $page: Int, $size: Int) { activityPlayerApplications(activityId: $activityId, page: $page, size: $size) { id playerName phone state } } ` const variables = { activityId: "1", page: 0, size: 5 } const response = await graphqlRequest(query, variables) const applications = response.data.activityPlayerApplications || [] console.log(`找到 ${applications.length} 个参赛人,开始检查前3个的详细信息...`) for (let i = 0; i < Math.min(3, applications.length); i++) { const app = applications[i] await checkPlayerGenderDetail(app.id, app.playerName) } } catch (error) { console.error('❌ 查询参赛人列表失败:', error.message) } } // 检查单个参赛人的性别详情 async function checkPlayerGenderDetail(playerId, playerName) { try { const query = ` query GetActivityPlayerDetail($id: ID!) { activityPlayerDetail(id: $id) { playerInfo { id name gender education birthday } regionInfo { id name fullPath } } } ` const response = await graphqlRequest(query, { id: playerId }) const detail = response.data.activityPlayerDetail if (detail && detail.playerInfo) { const { gender, name } = detail.playerInfo console.log(`\n👤 参赛人: ${name} (ID: ${playerId})`) console.log(` 原始性别值: ${gender} (${typeof gender})`) // 模拟各端的性别转换 console.log(' 各端转换结果:') // WX端 - review.js getGenderText (已修复) const wxReviewText = getGenderTextWxReview(gender) console.log(` - WX端(review): ${wxReviewText}`) // WX端 - 注册页面选择器显示 (已修复) const wxRegistrationDisplay = getGenderDisplayWxRegistration(gender) console.log(` - WX端(注册显示): ${wxRegistrationDisplay}`) // Web端 - JudgeForm (正确) const webJudgeForm = getGenderTextWebJudge(gender) console.log(` - Web端(JudgeForm): ${webJudgeForm}`) // Web端 - check-detail (已修复) const webCheckDetail = getGenderTextWebCheckDetail(gender) console.log(` - Web端(check-detail): ${webCheckDetail}`) // Backend端 - UserResolver (正确) const backendString = getGenderStringBackend(gender) console.log(` - Backend端(字符串): ${backendString}`) } else { console.log(`❌ 未找到参赛人详情: ${playerName}`) } } catch (error) { console.error(`❌ 查询参赛人详情失败 (${playerName}):`, error.message) } } // 模拟各端的性别转换函数 // WX端 - review.js getGenderText (已修复) function getGenderTextWxReview(gender) { if (gender === 0) return '女' if (gender === 1) return '男' return '未填写' } // WX端 - 注册页面显示 (已修复) function getGenderDisplayWxRegistration(gender) { // genderOptions: ['男', '女'] // 数据库值1(男) -> 界面索引0 -> 显示'男' // 数据库值0(女) -> 界面索引1 -> 显示'女' const genderOptions = ['男', '女'] if (gender === 1) return genderOptions[0] // 男 if (gender === 0) return genderOptions[1] // 女 return '未选择' } // Web端 - JudgeForm (正确) function getGenderTextWebJudge(gender) { // // if (gender === 1) return '男' if (gender === 0) return '女' return '未填写' } // Web端 - check-detail (已修复) function getGenderTextWebCheckDetail(gender) { const genderMap = { 1: '男', 0: '女' } return genderMap[gender] || '-' } // Backend端 - UserResolver (正确) function getGenderStringBackend(gender) { // user.getGender() == 1 ? "MALE" : "FEMALE" if (gender === 1) return 'MALE' if (gender === 0) return 'FEMALE' return null } // 测试前端性别映射逻辑 function testFrontendGenderMapping() { console.log('测试前端性别映射逻辑:') const testCases = [ { dbValue: 1, expected: '男' }, { dbValue: 0, expected: '女' }, { dbValue: null, expected: '未填写' } ] testCases.forEach(({ dbValue, expected }) => { console.log(`\n数据库值: ${dbValue}`) console.log(` WX端(review): ${getGenderTextWxReview(dbValue)} ${getGenderTextWxReview(dbValue) === expected ? '✅' : '❌'}`) console.log(` WX端(注册): ${getGenderDisplayWxRegistration(dbValue)} ${getGenderDisplayWxRegistration(dbValue) === expected ? '✅' : '❌'}`) console.log(` Web端(JudgeForm): ${getGenderTextWebJudge(dbValue)} ${getGenderTextWebJudge(dbValue) === expected ? '✅' : '❌'}`) console.log(` Web端(check-detail): ${getGenderTextWebCheckDetail(dbValue)} ${getGenderTextWebCheckDetail(dbValue) === expected ? '✅' : '❌'}`) }) } // 测试后端性别映射逻辑 function testBackendGenderMapping() { console.log('测试后端性别映射逻辑:') const testCases = [ { dbValue: 1, expected: 'MALE' }, { dbValue: 0, expected: 'FEMALE' } ] testCases.forEach(({ dbValue, expected }) => { const result = getGenderStringBackend(dbValue) console.log(`数据库值 ${dbValue} -> ${result} ${result === expected ? '✅' : '❌'}`) }) // 测试字符串到数字的转换 console.log('\n测试字符串到数字的转换:') const stringToNumber = { 'MALE': 1, 'FEMALE': 0 } Object.entries(stringToNumber).forEach(([str, num]) => { console.log(`${str} -> ${num} ✅`) }) } // 运行测试 testAllGenderFixes().catch(console.error)