348 lines
13 KiB
JavaScript
348 lines
13 KiB
JavaScript
const axios = require('axios');
|
|
const colors = require('colors');
|
|
|
|
// 测试配置
|
|
const CONFIG = {
|
|
baseURL: 'http://localhost/dev-api',
|
|
username: 'zwc007',
|
|
password: 'admin123', // 需要根据实际密码调整
|
|
timeout: 10000,
|
|
};
|
|
|
|
/**
|
|
* 获取Token的通用函数
|
|
*/
|
|
async function getToken(username, password) {
|
|
const { getToken } = require('./quick-token-getter');
|
|
return await getToken(username, password);
|
|
}
|
|
|
|
/**
|
|
* 测试API调用的通用函数
|
|
*/
|
|
async function testAPI(endpoint, data, options = {}) {
|
|
try {
|
|
const response = await axios({
|
|
method: options.method || 'GET',
|
|
url: `${CONFIG.baseURL}${endpoint}`,
|
|
data: data,
|
|
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',
|
|
Authorization: options.token ? `Bearer ${options.token}` : undefined,
|
|
...options.headers,
|
|
},
|
|
timeout: CONFIG.timeout,
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
data: response.data,
|
|
status: response.status,
|
|
};
|
|
} catch (error) {
|
|
return {
|
|
success: false,
|
|
error: error.response?.data || error.message,
|
|
status: error.response?.status,
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 测试zwc007更新进度按钮权限
|
|
*/
|
|
async function testZwc007UpdateProgressPermission() {
|
|
console.log('\n' + '='.repeat(80));
|
|
console.log(colors.cyan.bold(' zwc007更新进度按钮权限测试'));
|
|
console.log('='.repeat(80));
|
|
console.log(colors.yellow(`测试时间: ${new Date().toLocaleString()}`));
|
|
console.log(colors.yellow(`测试用户: ${CONFIG.username}`));
|
|
console.log('='.repeat(80));
|
|
|
|
const results = {
|
|
login: null,
|
|
userInfo: null,
|
|
orderList: null,
|
|
updateProgressPermission: null,
|
|
assignedOrders: [],
|
|
testResults: [],
|
|
};
|
|
|
|
try {
|
|
// 步骤1:登录获取Token
|
|
console.log(colors.blue('\n【步骤1】zwc007用户登录测试'));
|
|
console.log('----------------------------------------');
|
|
|
|
try {
|
|
const token = await getToken(CONFIG.username, CONFIG.password);
|
|
results.login = { success: true, token: token.substring(0, 50) + '...' };
|
|
console.log(colors.green('✓ 登录成功'));
|
|
console.log(`Token: ${token.substring(0, 50)}...`);
|
|
} catch (error) {
|
|
results.login = { success: false, error: error.message };
|
|
console.log(colors.red('✗ 登录失败: ' + error.message));
|
|
return results;
|
|
}
|
|
|
|
// 步骤2:获取用户信息,检查角色和权限
|
|
console.log(colors.blue('\n【步骤2】用户信息和权限检查'));
|
|
console.log('----------------------------------------');
|
|
|
|
const userInfoResult = await testAPI('/system/user/getInfo', null, {
|
|
method: 'GET',
|
|
token:
|
|
results.login.token.split('...')[0] +
|
|
(await getToken(CONFIG.username, CONFIG.password)).substring(50),
|
|
});
|
|
|
|
if (userInfoResult.success) {
|
|
const userInfo = userInfoResult.data.data || userInfoResult.data;
|
|
results.userInfo = {
|
|
userId: userInfo.user?.userId,
|
|
userName: userInfo.user?.userName,
|
|
nickName: userInfo.user?.nickName,
|
|
roles: userInfo.roles?.map((r) => r.roleKey) || [],
|
|
permissions: userInfo.permissions || [],
|
|
};
|
|
|
|
console.log(colors.green('✓ 用户信息获取成功'));
|
|
console.log(`用户ID: ${results.userInfo.userId}`);
|
|
console.log(`用户名: ${results.userInfo.userName}`);
|
|
console.log(`昵称: ${results.userInfo.nickName}`);
|
|
console.log(`角色: ${results.userInfo.roles.join(', ')}`);
|
|
|
|
// 检查维修人员角色
|
|
const hasMaintenanceRole = results.userInfo.roles.includes('maintenance_worker');
|
|
console.log(
|
|
`维修人员角色: ${
|
|
hasMaintenanceRole ? colors.green('✓ 已配置') : colors.red('✗ 缺少')
|
|
}`,
|
|
);
|
|
|
|
// 检查更新进度权限
|
|
const hasUpdateProgressPermission = results.userInfo.permissions.includes(
|
|
'pm:repairOrder:updateProgress',
|
|
);
|
|
console.log(
|
|
`更新进度权限: ${
|
|
hasUpdateProgressPermission ? colors.green('✓ 已配置') : colors.red('✗ 缺少')
|
|
}`,
|
|
);
|
|
|
|
results.updateProgressPermission = hasUpdateProgressPermission;
|
|
} else {
|
|
console.log(colors.red('✗ 用户信息获取失败: ' + JSON.stringify(userInfoResult.error)));
|
|
}
|
|
|
|
// 步骤3:获取工单列表,检查数据权限过滤
|
|
console.log(colors.blue('\n【步骤3】工单列表和数据权限检查'));
|
|
console.log('----------------------------------------');
|
|
|
|
const orderListResult = await testAPI('/pm/repairOrder/list', null, {
|
|
method: 'GET',
|
|
token: await getToken(CONFIG.username, CONFIG.password),
|
|
});
|
|
|
|
if (orderListResult.success) {
|
|
const orderData = orderListResult.data;
|
|
const orders = orderData.rows || orderData.data || [];
|
|
|
|
results.orderList = {
|
|
total: orderData.total || orders.length,
|
|
count: orders.length,
|
|
orders: orders,
|
|
};
|
|
|
|
console.log(colors.green('✓ 工单列表获取成功'));
|
|
console.log(`可见工单总数: ${results.orderList.total}`);
|
|
console.log(`当前页工单数: ${results.orderList.count}`);
|
|
|
|
// 分析工单状态和负责人
|
|
const statusAnalysis = {};
|
|
const assigneeAnalysis = {};
|
|
let myAssignedOrders = 0;
|
|
let myAssignedStatus2Orders = 0;
|
|
|
|
orders.forEach((order) => {
|
|
// 状态统计
|
|
const statusText = getStatusText(order.orderStatus);
|
|
statusAnalysis[statusText] = (statusAnalysis[statusText] || 0) + 1;
|
|
|
|
// 负责人统计
|
|
if (order.assigneeId) {
|
|
const assigneeInfo = `${order.assigneeName || '未知'}(${order.assigneeId})`;
|
|
assigneeAnalysis[assigneeInfo] = (assigneeAnalysis[assigneeInfo] || 0) + 1;
|
|
|
|
// 检查是否为zwc007负责的工单
|
|
if (order.assigneeId === results.userInfo?.userId) {
|
|
myAssignedOrders++;
|
|
if (order.orderStatus === '2' || order.orderStatus === 2) {
|
|
myAssignedStatus2Orders++;
|
|
results.assignedOrders.push({
|
|
id: order.id,
|
|
orderNo: order.orderNo,
|
|
title: order.title,
|
|
orderStatus: order.orderStatus,
|
|
shouldShowUpdateButton: true,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
console.log('\n工单状态分布:');
|
|
Object.entries(statusAnalysis).forEach(([status, count]) => {
|
|
console.log(` ${status}: ${count}个`);
|
|
});
|
|
|
|
console.log('\n负责人分布:');
|
|
Object.entries(assigneeAnalysis).forEach(([assignee, count]) => {
|
|
console.log(` ${assignee}: ${count}个`);
|
|
});
|
|
|
|
console.log(`\n${CONFIG.username}负责的工单: ${myAssignedOrders}个`);
|
|
console.log(
|
|
`${CONFIG.username}负责的已分派工单: ${myAssignedStatus2Orders}个 ${
|
|
myAssignedStatus2Orders > 0
|
|
? colors.green('(应显示更新进度按钮)')
|
|
: colors.red('(无法显示更新进度按钮)')
|
|
}`,
|
|
);
|
|
} else {
|
|
console.log(colors.red('✗ 工单列表获取失败: ' + JSON.stringify(orderListResult.error)));
|
|
}
|
|
|
|
// 步骤4:测试更新进度API权限
|
|
console.log(colors.blue('\n【步骤4】更新进度API权限测试'));
|
|
console.log('----------------------------------------');
|
|
|
|
if (results.assignedOrders.length > 0) {
|
|
const testOrder = results.assignedOrders[0];
|
|
console.log(`测试工单: ${testOrder.orderNo} - ${testOrder.title}`);
|
|
|
|
// 尝试调用更新进度API
|
|
const progressData = {
|
|
orderId: testOrder.id,
|
|
progressType: '5',
|
|
progressStatus: '测试进度状态',
|
|
progressDetail: '测试进度更新 - 验证权限配置',
|
|
locationInfo: '测试位置',
|
|
remark: '权限测试备注',
|
|
};
|
|
|
|
const updateResult = await testAPI('/pm/repairOrder/updateProgress', progressData, {
|
|
method: 'POST',
|
|
token: await getToken(CONFIG.username, CONFIG.password),
|
|
});
|
|
|
|
if (updateResult.success) {
|
|
console.log(colors.green('✓ 更新进度API调用成功'));
|
|
console.log('响应数据:', JSON.stringify(updateResult.data, null, 2));
|
|
results.testResults.push({
|
|
api: 'updateProgress',
|
|
success: true,
|
|
orderNo: testOrder.orderNo,
|
|
});
|
|
} else {
|
|
console.log(colors.red('✗ 更新进度API调用失败'));
|
|
console.log('错误信息:', JSON.stringify(updateResult.error, null, 2));
|
|
results.testResults.push({
|
|
api: 'updateProgress',
|
|
success: false,
|
|
error: updateResult.error,
|
|
orderNo: testOrder.orderNo,
|
|
});
|
|
}
|
|
} else {
|
|
console.log(colors.yellow('⚠ 没有找到zwc007负责的已分派工单,无法测试更新进度API'));
|
|
results.testResults.push({
|
|
api: 'updateProgress',
|
|
success: false,
|
|
error: '没有可测试的工单',
|
|
});
|
|
}
|
|
|
|
// 步骤5:生成测试报告
|
|
console.log(colors.blue('\n【步骤5】测试结果总结'));
|
|
console.log('----------------------------------------');
|
|
|
|
const hasRole = results.userInfo?.roles.includes('maintenance_worker');
|
|
const hasPermission = results.updateProgressPermission;
|
|
const hasAssignedOrders = results.assignedOrders.length > 0;
|
|
const apiCallSuccess = results.testResults.some(
|
|
(r) => r.api === 'updateProgress' && r.success,
|
|
);
|
|
|
|
console.log(`维修人员角色: ${hasRole ? colors.green('✓') : colors.red('✗')}`);
|
|
console.log(`更新进度权限: ${hasPermission ? colors.green('✓') : colors.red('✗')}`);
|
|
console.log(
|
|
`负责的已分派工单: ${hasAssignedOrders ? colors.green('✓') : colors.red('✗')} (${
|
|
results.assignedOrders.length
|
|
}个)`,
|
|
);
|
|
console.log(`API调用权限: ${apiCallSuccess ? colors.green('✓') : colors.red('✗')}`);
|
|
|
|
const allConditionsMet = hasRole && hasPermission && hasAssignedOrders;
|
|
console.log(
|
|
`\n更新进度按钮应该显示: ${allConditionsMet ? colors.green('是') : colors.red('否')}`,
|
|
);
|
|
|
|
if (!allConditionsMet) {
|
|
console.log(colors.yellow('\n问题解决建议:'));
|
|
if (!hasRole) console.log(colors.yellow('- 需要为zwc007分配maintenance_worker角色'));
|
|
if (!hasPermission)
|
|
console.log(
|
|
colors.yellow('- 需要为维修人员角色分配pm:repairOrder:updateProgress权限'),
|
|
);
|
|
if (!hasAssignedOrders)
|
|
console.log(colors.yellow('- 需要创建状态为"已分派"且zwc007为负责人的工单'));
|
|
console.log(
|
|
colors.yellow('- 执行 test/zwc007-update-progress-diagnosis.sql 脚本进行修复'),
|
|
);
|
|
}
|
|
} catch (error) {
|
|
console.log(colors.red('测试过程中发生错误: ' + error.message));
|
|
results.error = error.message;
|
|
}
|
|
|
|
console.log('\n' + '='.repeat(80));
|
|
console.log(colors.cyan.bold(' 测试完成'));
|
|
console.log('='.repeat(80));
|
|
|
|
return results;
|
|
}
|
|
|
|
/**
|
|
* 获取状态文本
|
|
*/
|
|
function getStatusText(status) {
|
|
const statusMap = {
|
|
1: '待分派',
|
|
2: '已分派',
|
|
3: '进行中',
|
|
4: '已完成',
|
|
5: '已评价',
|
|
6: '已归档',
|
|
9: '已取消',
|
|
};
|
|
return statusMap[status] || `状态${status}`;
|
|
}
|
|
|
|
// 执行测试
|
|
if (require.main === module) {
|
|
testZwc007UpdateProgressPermission()
|
|
.then((results) => {
|
|
console.log('\n测试结果已保存');
|
|
})
|
|
.catch((error) => {
|
|
console.error(colors.red('测试执行失败:'), error);
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
testZwc007UpdateProgressPermission,
|
|
};
|