强制开启详细分数查询

适用于天津工业大学URP高校教学管理与服务平台“本学期成绩查询列表”页面,能够自动显示详细分数和分数代码

当前为 2024-01-10 提交的版本,查看 最新版本

// ==UserScript==
// @name         强制开启详细分数查询
// @author       Drzad
// @match        https://jwxs.tiangong.edu.cn/student/integratedQuery/*
// @description  适用于天津工业大学URP高校教学管理与服务平台“本学期成绩查询列表”页面,能够自动显示详细分数和分数代码
// @grant        none
// @version      2.1
// @namespace https://greasyfork.org/users/820213
// ==/UserScript==

(function() {
    'use strict';
    $("#showScoreDetail").val("1");

    // 成绩类别映射
    const scoreCategoryMapping = {
        "001-1": "课堂成绩(平时)",
        "001-2": "课堂成绩(期中)",
        "001-3": "课堂成绩(期末)",
        "002-1": "实验成绩(平时)",
        "002-2": "实验成绩(期中)",
        "002-3": "实验成绩(期末)",
        "003-1": "实践成绩(平时)",
        "003-2": "实践成绩(期中)",
        "003-3": "实践成绩(期末)"
    };

    // 创建一个观察者对象
	let observer = new MutationObserver((mutations, obs) => {
		let table = $('#scoretbody tr');
		if (table.length) {
			// 表格存在,执行脚本
			modifyTableAndRunAjax();
			// 停止观察
			obs.disconnect();
		}
	});

	// 配置观察者选项:仅监视子元素的变动
	let config = { childList: true, subtree: true };

	// 选择需要观察变动的节点
	let targetNode = document.body;

	// 启动观察者
	observer.observe(targetNode, config);

    // 修改表格并运行AJAX的函数
    function modifyTableAndRunAjax() {
        // 向表头添加新列
        $('table.table thead tr').append('<th>成绩明细</th>');

        // 向每个表格行添加新数据列
        $('table.table tbody tr').append('<td class="score-details"></td>');

        // 对<tbody>内的每个<tr>元素进行遍历
        let rows = $('table.table tbody tr');
        rows.each(function() {
            let row = $(this);
            let onclickElement = row.find('[onclick]');
            if (onclickElement.length) {
                let onclickArgs = onclickElement.attr('onclick');
                let argsMatch = onclickArgs.match(/\((.*?)\)/);

                if (argsMatch && argsMatch[1]) {
                    let args = argsMatch[1].split(',').map(arg => arg.trim().replace(/"/g, ''));
                    if (args.length >= 4) {
                        let zxjxjhh = args[0];
                        let kch = args[1];
                        let kxh = args[2];
                        let kssj = args[3];

                        // 发送Ajax请求
                        $.ajax({
                            url: "/student/integratedQuery/scoreQuery/subitemScore/look",
                            type: "post",
                            data: `zxjxjhh=${zxjxjhh}&kch=${kch}&kxh=${kxh}&kssj=${kssj}&param=1`,
                            dataType: "json",
                            success: function (response) {
                                if (response.scoreDetailList && response.scoreDetailList.length > 0) {
                                    let scoreDetails = response.scoreDetailList.map(detail => {
                                        let scoreCategory = scoreCategoryMapping[detail.id.scoreSubItemCode] || detail.id.scoreSubItemCode;
                                        return `${scoreCategory}: ${detail.subItemScore}`;
                                    }).join('<br>');

                                    // 在新添加的单元格中显示成绩明细
                                    row.find('.score-details').html(scoreDetails);
                                }
                            },
                            error: function (error) {
                                console.log('请求失败: ', error);
                            }
                        });
                    }
                }
            } else {
                // 修复未定成绩时候的多余格
                row.find('td:empty:first').remove();
            }
        });
    }

})();