| |
| |
| |
|
|
| const axios = require('axios') |
| const config = require('../config/config') |
|
|
| |
| const fs = require('fs') |
| const path = require('path') |
|
|
| async function testAccountDisplay() { |
| console.log('🔍 测试账号显示问题...\n') |
|
|
| try { |
| |
| const initPath = path.join(__dirname, '..', 'config', 'init.json') |
| if (!fs.existsSync(initPath)) { |
| console.error('❌ 找不到 init.json 文件,请运行 npm run setup') |
| process.exit(1) |
| } |
|
|
| const initData = JSON.parse(fs.readFileSync(initPath, 'utf8')) |
| const adminUser = initData.admins?.[0] |
| if (!adminUser) { |
| console.error('❌ 没有找到管理员账号') |
| process.exit(1) |
| } |
|
|
| const baseURL = `http://localhost:${config.server.port}` |
|
|
| |
| console.log('🔐 登录管理员账号...') |
| const loginResp = await axios.post(`${baseURL}/admin/login`, { |
| username: adminUser.username, |
| password: adminUser.password |
| }) |
|
|
| if (!loginResp.data.success) { |
| console.error('❌ 登录失败') |
| process.exit(1) |
| } |
|
|
| const { token } = loginResp.data |
| console.log('✅ 登录成功\n') |
|
|
| |
| const headers = { |
| Authorization: `Bearer ${token}`, |
| 'Content-Type': 'application/json' |
| } |
|
|
| |
| console.log('📋 获取 Claude OAuth 账号...') |
| const claudeResp = await axios.get(`${baseURL}/admin/claude-accounts`, { headers }) |
| const claudeAccounts = claudeResp.data.data || [] |
|
|
| console.log(`找到 ${claudeAccounts.length} 个 Claude OAuth 账号`) |
|
|
| |
| const claudeDedicated = claudeAccounts.filter((a) => a.accountType === 'dedicated') |
| const claudeGroup = claudeAccounts.filter((a) => a.accountType === 'group') |
| const claudeShared = claudeAccounts.filter((a) => a.accountType === 'shared') |
|
|
| console.log(`- 专属账号: ${claudeDedicated.length} 个`) |
| console.log(`- 分组账号: ${claudeGroup.length} 个`) |
| console.log(`- 共享账号: ${claudeShared.length} 个`) |
|
|
| |
| console.log('\n检查 platform 字段:') |
| claudeAccounts.slice(0, 3).forEach((acc) => { |
| console.log(`- ${acc.name}: platform=${acc.platform}, accountType=${acc.accountType}`) |
| }) |
|
|
| |
| console.log('\n📋 获取 Claude Console 账号...') |
| const consoleResp = await axios.get(`${baseURL}/admin/claude-console-accounts`, { headers }) |
| const consoleAccounts = consoleResp.data.data || [] |
|
|
| console.log(`找到 ${consoleAccounts.length} 个 Claude Console 账号`) |
|
|
| |
| const consoleDedicated = consoleAccounts.filter((a) => a.accountType === 'dedicated') |
| const consoleGroup = consoleAccounts.filter((a) => a.accountType === 'group') |
| const consoleShared = consoleAccounts.filter((a) => a.accountType === 'shared') |
|
|
| console.log(`- 专属账号: ${consoleDedicated.length} 个`) |
| console.log(`- 分组账号: ${consoleGroup.length} 个`) |
| console.log(`- 共享账号: ${consoleShared.length} 个`) |
|
|
| |
| console.log('\n检查 platform 字段:') |
| consoleAccounts.slice(0, 3).forEach((acc) => { |
| console.log(`- ${acc.name}: platform=${acc.platform}, accountType=${acc.accountType}`) |
| }) |
|
|
| |
| console.log('\n📋 获取账号分组...') |
| const groupsResp = await axios.get(`${baseURL}/admin/account-groups`, { headers }) |
| const groups = groupsResp.data.data || [] |
|
|
| console.log(`找到 ${groups.length} 个账号分组`) |
|
|
| const claudeGroups = groups.filter((g) => g.platform === 'claude') |
| const geminiGroups = groups.filter((g) => g.platform === 'gemini') |
|
|
| console.log(`- Claude 分组: ${claudeGroups.length} 个`) |
| console.log(`- Gemini 分组: ${geminiGroups.length} 个`) |
|
|
| |
| console.log('\n📊 测试结果总结:') |
| console.log('✅ Claude OAuth 账号已包含 platform 字段') |
| console.log('✅ Claude Console 账号已包含 platform 字段') |
| console.log('✅ 账号分组功能正常') |
|
|
| const totalDedicated = claudeDedicated.length + consoleDedicated.length |
| const totalGroups = claudeGroups.length |
|
|
| if (totalDedicated > 0) { |
| console.log(`\n✅ 共有 ${totalDedicated} 个专属账号应该显示在下拉框中`) |
| } else { |
| console.log('\n⚠️ 没有找到专属账号,请在账号管理页面设置账号类型为"专属账户"') |
| } |
|
|
| if (totalGroups > 0) { |
| console.log(`✅ 共有 ${totalGroups} 个分组应该显示在下拉框中`) |
| } |
|
|
| console.log('\n💡 请在浏览器中测试创建/编辑 API Key,检查下拉框是否正确显示三个类别:') |
| console.log(' 1. 调度分组') |
| console.log(' 2. Claude OAuth 账号') |
| console.log(' 3. Claude Console 账号') |
| } catch (error) { |
| console.error('❌ 测试失败:', error.message) |
| if (error.response) { |
| console.error('响应数据:', error.response.data) |
| } |
| } finally { |
| process.exit(0) |
| } |
| } |
|
|
| testAccountDisplay() |
|
|