强制开启详细分数查询 V2.0

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

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         强制开启详细分数查询 V2.0
// @author       Drzad
// @match        https://jwxs.tiangong.edu.cn/student/integratedQuery/*
// @description  适用于天津工业大学URP高校教学管理与服务平台“本学期成绩查询列表”页面,能够自动显示详细分数和分数代码
// @grant        none
// @version      2.0
// @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": "实践成绩(期末)"
    };

    function checkAndModifyTable() {
        let table = $('#scoretbody tr');
        if (table.length) {
            // 表格存在,执行脚本
            modifyTableAndRunAjax();
        } else {
            // 如果表格不存在,等待一段时间后再次检查
            setTimeout(checkAndModifyTable, 500);
        }
    }

    // 启动检查
    checkAndModifyTable();

    // 修改表格并运行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();
            }
        });
    }

})();