// ==UserScript==
// @name 武大综测F2年度计算小工具
// @namespace whu
// @version 1.0
// @author game-loader
// @description 计算武大综测F2部分
// @homepage https://github.com/game-loader
// @match https://jwgl.whu.edu.cn/cjcx/cjcx_cxDgXscj.html*
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
'use strict';
// 创建小窗口
var container = document.createElement('div');
container.style.position = 'fixed';
container.style.top = '50%';
container.style.right = '20%';
container.style.transform = 'translate(50%, -50%)';
container.style.backgroundColor = '#ffffff';
container.style.padding = '20px';
container.style.border = '1px solid #000000';
container.style.zIndex = '1000';
// 创建年份下拉框
var yearSelect = document.createElement('select');
yearSelect.innerHTML = `
`;
container.appendChild(yearSelect);
// 添加距离
var spacer = document.createElement('div');
spacer.style.height = '10px';
container.appendChild(spacer);
// 创建计算按钮
var calculateButton = document.createElement('button');
calculateButton.textContent = '计算综测F2';
calculateButton.style.backgroundColor = '#8ae68a';
calculateButton.style.color = '#ffffff';
calculateButton.style.border = 'none';
calculateButton.style.borderRadius = '5px';
calculateButton.style.padding = '8px 16px';
calculateButton.style.boxShadow = '0px 2px 4px rgba(0, 0, 0, 0.4)';
container.appendChild(calculateButton);
// 将小窗口添加到页面中
document.body.appendChild(container);
// 设置小窗口样式
container.style.width = '300px';
container.style.height = '200px';
container.style.overflow = 'auto';
// 绑定按钮点击事件
calculateButton.addEventListener('click', function() {
// 获取gnmkdmKey的值
var gnmkdmKey = document.getElementById('gnmkdmKey').value;
// 构造请求URL和postData
var url = 'https://jwgl.whu.edu.cn/cjcx/cjcx_cxXsgrcj.html';
var params = 'doType=query&gnmkdm=' + encodeURIComponent(gnmkdmKey);
var postData = 'xnm=' + yearSelect.value + '&xqm=&kcbj=&_search=false&nd=' + Date.now() + '&queryModel.showCount=15&queryModel.currentPage=1&queryModel.sortName=&queryModel.sortOrder=asc&time=0';
// 最终请求URL
var finalUrl = url + '?' + params;
// 发送POST请求
GM_xmlhttpRequest({
method: 'POST',
url: finalUrl,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: postData,
onload: function(response) {
var responseData = JSON.parse(response.responseText);
var items = responseData.items;
// 创建变量用于存储必修成绩、选修成绩和必修学分
var requiredScore = 0;
var electiveScore = 0;
var requiredCredits = 0;
// 遍历数组中的各项
for (var i = 0; i < items.length; i++) {
var item = items[i];
var kcxzmc = item.kcxzmc;
var bfzcj = parseFloat(item.bfzcj);
var xf = parseFloat(item.xf);
if (kcxzmc.includes("必修")) {
requiredScore += bfzcj * xf;
requiredCredits += xf;
} else if (kcxzmc.includes("选修")) {
electiveScore += bfzcj * xf;
}
}
// 在窗口中显示成绩
var requiredGrade = requiredScore / requiredCredits;
var electiveGrade = electiveScore * 0.002;
var totalGrade = requiredGrade + electiveGrade;
// 创建显示结果的元素
var resultElement = document.createElement('div');
resultElement.style.marginTop = '10px';
// 创建必修课成绩显示行
var requiredGradeElement = document.createElement('div');
requiredGradeElement.textContent = "必修课:" + requiredGrade.toFixed(2);
resultElement.appendChild(requiredGradeElement);
// 创建选修课成绩显示行
var electiveGradeElement = document.createElement('div');
electiveGradeElement.textContent = "选修课:" + electiveGrade.toFixed(2);
resultElement.appendChild(electiveGradeElement);
// 创建F2成绩显示行
var totalGradeElement = document.createElement('div');
totalGradeElement.textContent = "F2:" + totalGrade.toFixed(2);
resultElement.appendChild(totalGradeElement);
// 在按钮下方显示结果
container.appendChild(resultElement);
}
});
});
})();