const axios = require('axios'); const colors = require('colors'); // 配置 const BASE_URL = 'http://localhost/dev-api'; // 获取Token async function getToken() { try { const { getToken } = require('./quick-token-getter'); return await getToken(); } catch (error) { console.log('获取Token失败,使用模拟Token'.yellow); return null; } } // 测试简单接口(不需要特殊权限) async function testSimpleAPIs(token) { console.log('\n🧪 测试基础接口(权限测试)'.blue.bold); console.log('='.repeat(60).blue); const headers = { 'Content-Type': 'application/json;charset=utf-8', clientid: 'e5cd7e4891bf95d1d19206ce24a7b32e', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', referer: 'http://localhost/login?redirect=%252Findex', }; if (token) { headers['Authorization'] = `Bearer ${token}`; } // 测试系统字典接口 try { console.log('1. 测试字典接口 (system:dict:list)'.cyan); const dictResult = await axios({ method: 'get', url: `${BASE_URL}/system/dict/data/list`, headers: headers, params: { pageNum: 1, pageSize: 5 }, timeout: 10000, }); console.log(`✅ 字典接口调用成功,状态: ${dictResult.status}`.green); if (dictResult.data && dictResult.data.data) { console.log( `📊 字典数据条数: ${dictResult.data.data.total || dictResult.data.data.length}` .yellow, ); } } catch (error) { console.log(`❌ 字典接口失败: ${error.response?.data?.msg || error.message}`.red); } // 测试菜单接口 try { console.log('\n2. 测试菜单接口 (system:menu:list)'.cyan); const menuResult = await axios({ method: 'get', url: `${BASE_URL}/system/menu/list`, headers: headers, timeout: 10000, }); console.log(`✅ 菜单接口调用成功,状态: ${menuResult.status}`.green); if (menuResult.data && menuResult.data.data) { console.log(`📊 菜单数据条数: ${menuResult.data.data.length}`.yellow); } } catch (error) { console.log(`❌ 菜单接口失败: ${error.response?.data?.msg || error.message}`.red); } // 测试报修工单接口(使用修改后的权限) try { console.log('\n3. 测试报修工单接口 (system:user:list权限)'.cyan); const repairResult = await axios({ method: 'get', url: `${BASE_URL}/pm/repairOrder/list`, headers: headers, params: { pageNum: 1, pageSize: 10 }, timeout: 10000, }); console.log(`✅ 报修工单接口调用成功,状态: ${repairResult.status}`.green); if (repairResult.data) { console.log(`📊 响应消息: ${repairResult.data.msg}`.yellow); if (repairResult.data.data) { if (repairResult.data.data.rows) { console.log(`📄 数据条数: ${repairResult.data.data.total}`.yellow); console.log(`📋 当前页: ${repairResult.data.data.rows.length}条`.yellow); } else if (Array.isArray(repairResult.data.data)) { console.log(`📄 数据数组长度: ${repairResult.data.data.length}`.yellow); } } else { console.log('⚠️ 响应中没有data字段'.yellow); } } } catch (error) { console.log(`❌ 报修工单接口失败: ${error.response?.data?.msg || error.message}`.red); if (error.response?.data) { console.log('详细错误信息:', JSON.stringify(error.response.data, null, 2)); } } // 测试维修分类接口 try { console.log('\n4. 测试维修分类接口'.cyan); const categoryResult = await axios({ method: 'get', url: `${BASE_URL}/pm/repairCategory/list`, headers: headers, params: { pageNum: 1, pageSize: 10 }, timeout: 10000, }); console.log(`✅ 维修分类接口调用成功,状态: ${categoryResult.status}`.green); if (categoryResult.data && categoryResult.data.data) { if (categoryResult.data.data.rows) { console.log(`📊 维修分类数据: ${categoryResult.data.data.total}条`.yellow); } } } catch (error) { console.log(`❌ 维修分类接口失败: ${error.response?.data?.msg || error.message}`.red); } } // 测试路径映射 async function testPathMappings(token) { console.log('\n🛣️ 测试路径映射'.blue.bold); console.log('='.repeat(60).blue); const headers = { 'Content-Type': 'application/json;charset=utf-8', clientid: 'e5cd7e4891bf95d1d19206ce24a7b32e', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', referer: 'http://localhost/login?redirect=%252Findex', }; if (token) { headers['Authorization'] = `Bearer ${token}`; } const testPaths = [ '/pm/repairOrder/list', '/pm/repairOrder/statistics', '/pm/repairCategory/list', '/pm/repairCategory/options', '/pm/repairCategory/tree', ]; for (let path of testPaths) { try { console.log(`测试路径: ${path}`.cyan); const result = await axios({ method: 'get', url: `${BASE_URL}${path}`, headers: headers, timeout: 5000, }); console.log(` ✅ ${path} - 状态: ${result.status}`.green); } catch (error) { const status = error.response?.status || 'timeout'; const message = error.response?.data?.msg || error.message; console.log(` ❌ ${path} - 状态: ${status}, 消息: ${message}`.red); } } } // 主函数 async function runDatabaseTest() { console.log('🔍 数据库和API简单测试工具'.rainbow.bold); console.log('='.repeat(80).rainbow); try { // 1. 获取Token console.log('\n🔐 获取认证Token'.magenta.bold); const token = await getToken(); if (token && token.length > 50) { console.log('✅ 获取到有效Token'.green); } else { console.log('⚠️ Token获取失败,将进行无认证测试'.yellow); } // 2. 测试基础接口 await testSimpleAPIs(token); // 3. 测试路径映射 await testPathMappings(token); console.log('\n📋 测试总结'.rainbow.bold); console.log('='.repeat(60).rainbow); console.log('如果报修工单接口仍然失败,可能的原因:'); console.log('1. 🔄 后端代码未重新编译'); console.log('2. 🏗️ Controller类包路径问题'); console.log('3. 🗄️ 数据库表不存在'); console.log('4. 🔐 权限配置问题'); console.log('5. 🌐 路由映射问题'); } catch (error) { console.error('\n💥 测试过程出错:'.red.bold, error.message); } } // 运行测试 if (require.main === module) { runDatabaseTest() .then(() => { console.log('\n👋 测试完成'.cyan); }) .catch((error) => { console.error('测试脚本执行失败:', error); process.exit(1); }); } module.exports = { runDatabaseTest };