Files
his/scripts/test-device-api.js

103 lines
4.2 KiB
JavaScript

const { chromium } = require('playwright');
const fs = require('fs');
async function testDeviceApi() {
const browser = await chromium.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const context = await browser.newContext({
viewport: { width: 1920, height: 2000 }
});
const page = await context.newPage();
try {
const baseUrl = 'http://localhost:18080';
// Step 1: 登录获取token
console.log('[Step 1] 登录获取token...');
const loginRes = await page.evaluate(async (baseUrl) => {
const res = await fetch(`${baseUrl}/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'admin', password: 'admin123' })
});
return res.json();
}, baseUrl);
console.log('[Step 1] 登录结果:', loginRes.code === 200 ? '成功' : '失败');
if (loginRes.code !== 200) {
console.error('[Error] 登录失败:', loginRes.msg);
return;
}
// Step 2: 调用getDeviceList API
console.log('[Step 2] 调用耗材列表API...');
const apiRes = await page.evaluate(async (baseUrl) => {
const res = await fetch(`${baseUrl}/data-dictionary/device/information-page?pageNo=1&pageSize=100&searchKey=&statusEnum=2`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + localStorage.getItem('token')
}
});
return res.json();
}, baseUrl);
console.log('[Step 2] API响应状态:', apiRes.code);
if (apiRes.code === 200 && apiRes.data && apiRes.data.records) {
console.log(`\n[Step 3] 获取到 ${apiRes.data.records.length} 条耗材记录`);
// 保存完整数据到文件
fs.writeFileSync('device_api_response.json', JSON.stringify(apiRes.data, null, 2));
console.log('[Step 3] 完整数据已保存到 device_api_response.json');
// 分析前5条记录
console.log('\n[Step 4] 分析前5条记录的价格字段:');
apiRes.data.records.slice(0, 5).forEach((item, index) => {
console.log(`\n记录 ${index + 1}:`);
console.log(' - name:', item.name);
console.log(' - busNo:', item.busNo);
console.log(' - price:', item.price);
console.log(' - retailPrice:', item.retailPrice);
console.log(' - purchasePrice:', item.purchasePrice);
console.log(' - maximumRetailPrice:', item.maximumRetailPrice);
// 检查所有包含price的字段
const priceFields = Object.keys(item).filter(k =>
k.toLowerCase().includes('price') || k.toLowerCase().includes('amount')
);
console.log(' - 所有价格相关字段:', priceFields);
});
// 统计有多少条记录有价格
const withRetailPrice = apiRes.data.records.filter(item =>
item.retailPrice !== undefined && item.retailPrice !== null && item.retailPrice !== ''
).length;
const withPrice = apiRes.data.records.filter(item =>
item.price !== undefined && item.price !== null && item.price !== ''
).length;
console.log(`\n[Step 5] 数据统计:`);
console.log(` - 总记录数: ${apiRes.data.records.length}`);
console.log(` - 有retailPrice的记录: ${withRetailPrice}`);
console.log(` - 有price的记录: ${withPrice}`);
console.log(` - 无任何价格的记录: ${apiRes.data.records.length - Math.max(withRetailPrice, withPrice)}`);
} else {
console.error('[Error] API调用失败:', apiRes.msg || '未知错误');
}
} catch (error) {
console.error('[Error]', error.message);
} finally {
await browser.close();
}
}
testDeviceApi();