Files
hzdyjs/test/repair-order-list-debug.js
T
2025-06-30 20:33:58 +08:00

362 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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进行测试'.yellow);
return 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...'; // 模拟Token
}
}
// 通用API测试方法
async function testAPI(endpoint, method = 'GET', data = null, token = null) {
try {
const config = {
method: method.toLowerCase(),
url: `${BASE_URL}${endpoint}`,
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',
},
timeout: 10000,
};
if (token) {
config.headers['Authorization'] = `Bearer ${token}`;
}
if (data && (method.toUpperCase() === 'POST' || method.toUpperCase() === 'PUT')) {
config.data = data;
} else if (data && method.toUpperCase() === 'GET') {
config.params = data;
}
const response = await axios(config);
return {
success: true,
data: response.data,
status: response.status,
};
} catch (error) {
return {
success: false,
error: error.response?.data || error.message,
status: error.response?.status,
};
}
}
// 测试报修工单列表接口
async function testRepairOrderList(token) {
console.log('\n📋 测试报修工单列表接口'.blue.bold);
console.log('='.repeat(60).blue);
// 1. 测试基本列表查询
console.log('\n1. 测试基本列表查询(无参数)'.cyan);
const basicResult = await testAPI('/pm/repairOrder/list', 'GET', null, token);
if (basicResult.success) {
console.log('✅ 接口调用成功'.green);
console.log(`📊 响应状态: ${basicResult.status}`.green);
console.log(`📝 响应消息: ${basicResult.data.msg}`.green);
if (basicResult.data.data) {
if (basicResult.data.data.rows) {
// 分页格式
console.log(`📈 总记录数: ${basicResult.data.data.total || 0}`.yellow);
console.log(`📄 当前页记录数: ${basicResult.data.data.rows.length}`.yellow);
if (basicResult.data.data.rows.length > 0) {
console.log('📋 第一条数据示例:'.yellow);
console.log(
JSON.stringify(basicResult.data.data.rows[0], null, 2).substring(0, 500) +
'...',
);
} else {
console.log('⚠️ 数据库中没有记录'.yellow);
}
} else if (Array.isArray(basicResult.data.data)) {
// 直接数组格式
console.log(`📄 记录数: ${basicResult.data.data.length}`.yellow);
if (basicResult.data.data.length > 0) {
console.log('📋 第一条数据示例:'.yellow);
console.log(
JSON.stringify(basicResult.data.data[0], null, 2).substring(0, 500) + '...',
);
} else {
console.log('⚠️ 数据库中没有记录'.yellow);
}
} else {
console.log('⚠️ 数据格式异常:'.yellow, typeof basicResult.data.data);
console.log(JSON.stringify(basicResult.data.data, null, 2));
}
} else {
console.log('⚠️ 响应中没有data字段'.yellow);
}
} else {
console.log('❌ 接口调用失败'.red);
console.log(`📊 错误状态: ${basicResult.status}`.red);
console.log(`📝 错误信息: ${JSON.stringify(basicResult.error, null, 2)}`.red);
}
// 2. 测试分页查询
console.log('\n2. 测试分页查询'.cyan);
const pageResult = await testAPI(
'/pm/repairOrder/list',
'GET',
{
pageNum: 1,
pageSize: 10,
},
token,
);
if (pageResult.success) {
console.log('✅ 分页查询成功'.green);
if (pageResult.data.data && pageResult.data.data.rows) {
console.log(`📈 分页总数: ${pageResult.data.data.total}`.yellow);
console.log(`📄 当前页数据量: ${pageResult.data.data.rows.length}`.yellow);
}
} else {
console.log('❌ 分页查询失败'.red);
console.log(`📝 错误: ${JSON.stringify(pageResult.error, null, 2)}`.red);
}
// 3. 测试带条件查询
console.log('\n3. 测试带条件查询'.cyan);
const conditionResult = await testAPI(
'/pm/repairOrder/list',
'GET',
{
pageNum: 1,
pageSize: 10,
orderStatus: '1', // 查询待分派状态的工单
},
token,
);
if (conditionResult.success) {
console.log('✅ 条件查询成功'.green);
if (conditionResult.data.data && conditionResult.data.data.rows) {
console.log(`📈 条件查询结果数: ${conditionResult.data.data.total}`.yellow);
}
} else {
console.log('❌ 条件查询失败'.red);
}
return basicResult;
}
// 测试数据库连接和基础接口
async function testDatabaseConnection(token) {
console.log('\n🔗 测试数据库连接和基础接口'.blue.bold);
console.log('='.repeat(60).blue);
// 测试维修分类接口(检查数据库连接)
console.log('\n1. 测试维修分类接口'.cyan);
const categoryResult = await testAPI(
'/pm/repairCategory/list',
'GET',
{
pageNum: 1,
pageSize: 10,
},
token,
);
if (categoryResult.success) {
console.log('✅ 维修分类接口正常'.green);
if (categoryResult.data.data && categoryResult.data.data.rows) {
console.log(`📈 维修分类数量: ${categoryResult.data.data.total}`.yellow);
}
} else {
console.log('❌ 维修分类接口失败'.red);
}
// 测试用户信息接口(检查认证)
console.log('\n2. 测试用户信息接口'.cyan);
const userResult = await testAPI('/system/user/getInfo', 'GET', null, token);
if (userResult.success) {
console.log('✅ 用户认证正常'.green);
if (userResult.data.data && userResult.data.data.user) {
console.log(`👤 当前用户: ${userResult.data.data.user.userName}`.yellow);
console.log(`🔑 用户权限: ${userResult.data.data.permissions.join(', ')}`.yellow);
}
} else {
console.log('❌ 用户认证失败'.red);
}
return {
categoryResult,
userResult,
};
}
// 创建测试数据
async function createTestData(token) {
console.log('\n➕ 创建测试数据'.blue.bold);
console.log('='.repeat(60).blue);
// 首先获取维修分类
const categoryResult = await testAPI('/pm/repairCategory/options', 'GET', null, token);
let categoryId = 1; // 默认分类ID
if (categoryResult.success && categoryResult.data.data && categoryResult.data.data.length > 0) {
categoryId = categoryResult.data.data[0].value;
console.log(`✅ 获取到维修分类ID: ${categoryId}`.green);
} else {
console.log('⚠️ 使用默认分类ID: 1'.yellow);
}
// 创建测试工单数据
const testOrderData = {
title: '测试报修工单 - 办公室空调故障',
description: '办公室空调不制冷,温度显示异常,需要维修检查。',
repairLocation: '行政楼二楼201办公室',
categoryId: categoryId,
priorityLevel: 2,
reporterName: '测试用户',
reporterPhone: '13900139001',
reporterDept: '信息技术部',
remark: '紧急处理,影响办公',
};
console.log('\n1. 创建测试工单'.cyan);
const createResult = await testAPI('/pm/repairOrder', 'POST', testOrderData, token);
if (createResult.success) {
console.log('✅ 测试工单创建成功'.green);
console.log(`📝 响应: ${JSON.stringify(createResult.data, null, 2)}`.green);
return true;
} else {
console.log('❌ 测试工单创建失败'.red);
console.log(`📝 错误: ${JSON.stringify(createResult.error, null, 2)}`.red);
return false;
}
}
// 主调试函数
async function debugRepairOrderList() {
console.log('🔍 报修管理列表数据调试工具'.rainbow.bold);
console.log('='.repeat(80).rainbow);
const startTime = new Date();
try {
// 1. 获取认证Token
console.log('\n🔐 步骤1: 获取认证Token'.magenta.bold);
const token = await getToken();
if (token.includes('模拟') || token.length < 50) {
console.log('⚠️ 使用模拟Token,可能影响测试结果'.yellow);
} else {
console.log('✅ 获取到有效Token'.green);
}
// 2. 测试数据库连接和基础接口
const dbTest = await testDatabaseConnection(token);
// 3. 测试报修工单列表接口
const listTest = await testRepairOrderList(token);
// 4. 如果没有数据,尝试创建测试数据
if (listTest.success && listTest.data.data) {
let dataCount = 0;
if (listTest.data.data.rows) {
dataCount = listTest.data.data.total || 0;
} else if (Array.isArray(listTest.data.data)) {
dataCount = listTest.data.data.length;
}
if (dataCount === 0) {
console.log('\n📝 检测到数据库中没有报修工单数据,尝试创建测试数据...'.yellow.bold);
const created = await createTestData(token);
if (created) {
console.log('\n🔄 重新测试列表接口...'.cyan);
await testRepairOrderList(token);
}
}
}
// 5. 生成调试报告
const endTime = new Date();
const duration = endTime - startTime;
console.log('\n📊 调试结果汇总'.rainbow.bold);
console.log('='.repeat(80).rainbow);
const summary = {
认证状态: token.length > 50 ? '✅ 正常' : '⚠️ 模拟Token',
数据库连接: dbTest.categoryResult.success ? '✅ 正常' : '❌ 异常',
用户权限: dbTest.userResult.success ? '✅ 正常' : '❌ 异常',
列表接口: listTest.success ? '✅ 正常' : '❌ 异常',
调试耗时: `${duration}ms`,
};
for (const [key, value] of Object.entries(summary)) {
console.log(`${key}: ${value}`);
}
// 6. 问题诊断和建议
console.log('\n💡 问题诊断和建议'.yellow.bold);
console.log('='.repeat(60).yellow);
if (!listTest.success) {
console.log('🔧 接口调用失败,请检查:');
console.log(' - 后端服务是否正常启动');
console.log(' - 接口路径是否正确');
console.log(' - 权限配置是否正确');
} else if (listTest.data.data) {
let dataCount = 0;
if (listTest.data.data.rows) {
dataCount = listTest.data.data.total || 0;
} else if (Array.isArray(listTest.data.data)) {
dataCount = listTest.data.data.length;
}
if (dataCount === 0) {
console.log('🔧 数据库中没有报修工单数据,建议:');
console.log(' - 检查数据库表是否存在');
console.log(' - 手动添加一些测试数据');
console.log(' - 检查数据权限过滤是否过于严格');
} else {
console.log('✅ 接口和数据都正常,前端可能存在问题:');
console.log(' - 检查前端数据处理逻辑');
console.log(' - 检查浏览器控制台错误');
console.log(' - 验证前端API调用代码');
}
}
} catch (error) {
console.error('\n💥 调试过程出错:'.red.bold, error.message);
}
}
// 如果直接运行此脚本
if (require.main === module) {
debugRepairOrderList()
.then(() => {
console.log('\n👋 调试完成'.cyan);
})
.catch((error) => {
console.error('调试脚本执行失败:', error);
process.exit(1);
});
}
module.exports = {
debugRepairOrderList,
testRepairOrderList,
testDatabaseConnection,
createTestData,
};