计算总学分

此脚本用来计算江西科技师范大学教务管理系统“学生学业情况查询”页面已经获得的学分;

// ==UserScript==
// @name         计算总学分
// @namespace    http://tampermonkey.net/
// @version      0.10
// @description  此脚本用来计算江西科技师范大学教务管理系统“学生学业情况查询”页面已经获得的学分;
// @author       MoMingLog
// @include      *//jwglxt.jxstnu.edu.cn/jwglxt/xsxy/xsxyqk_cxXsxyqkIndex.html*
// @include      *//172-18-4-223.vpn.jxstnu.edu.cn:8118/jwglxt/xsxy/xsxyqk_cxXsxyqkIndex.html*
// @icon         https://s4.ax1x.com/2021/12/07/o6DNOH.png
// @grant        none
// @license      GNU GPLv3
// ==/UserScript==

(function () {
    'use strict';
    function expand() {
        /**
        * 一键展开
        */
        var expandList = document.querySelectorAll(".expandable-hitarea");
        for (var i = 0; i < expandList.length; i++) {
            var xf = expandList[i].click();
        }
    }
    function expandAll() {
        /**
        * 一键展开(全部)
        */
        expand();
        expandAndCollapMore();
    }
    function collap() {
        /**
        * 一键收拢
        */
        var collapList = document.querySelectorAll(".collapsable-hitarea");
        for (var i = 0; i < collapList.length; i++) {
            var xf = collapList[i].click();
        }

    }

    function expandAndCollapMore() {
        /**
        * 展开/收拢下拉列表
        */
        var moreList = document.querySelectorAll(".more");
        for (var i = 0; i < moreList.length; i++) {
            moreList[i].click();
        }
    }

    collap();
    function getRealScore() {
        /**
         * 获取实际学分
         */
        // 获取当前网页的域名
        var domain = window.location.host;
        var gnmkdm = $("#gnmkdmKey").attr("value");
        var su = $("#sessionUserKey").attr("value");
        var url = "http://" + domain + "/jwglxt/xsxy/xsxyqk_cxKczxAllIndex.html?doType=query&gnmkdm=" + gnmkdm + "&su=" + su + "&sf_request_type=ajax";
        var data = {
            "_search": false,
            "nd": new Date().getTime(),
            "queryModel.showCount": 15,
            "queryModel.currentPage": 1,
            "queryModel.sortName": "",
            "queryModel.sortOrder": "asc",
            "time": 0
        };
        var sum = 0;
        $.ajax({
            url: url,
            type: "POST",
            data: data,
            async: false,
            success: function (data) {
                var realScore = data.items;
                realScore.forEach(element => {
                    var hdxf = parseFloat(element.hdxf);
                    sum += hdxf;
                });
            },
            error: function (data) {
            }
        });
        return sum;

    }
    var majorCategories = document.querySelectorAll('ul.treeview>li>ul>li>div.title>p.title1');
    var reg = /\s获得学分:([\.\d+]*)/;

    var majorScoreSum = 0;

    for (var i = 0; i < majorCategories.length; i++) {
        var majorCategorieStr = majorCategories[i].innerText;
        var majorScore = majorCategorieStr.match(reg)[1];
        majorScoreSum += parseFloat(majorScore);
    }

    var otherScoreTrs = document.querySelectorAll('#tbodyqtkcxfyq tr td[name="xf"]');

    var otherScoreSum = 0;

    for (var i2 = 0; i2 < otherScoreTrs.length; i2++) {
        var otherScore = otherScoreTrs[i2].innerText;
        otherScoreSum += parseFloat(otherScore);
    }

    var sumScore = majorScoreSum + otherScoreSum;
    var realScore = getRealScore();
    var alertBox = document.querySelector("#alertBox");
    var innerHtmlStr = `
 <div style="position: fixed; top:200px; right: 200px; z-index:999;" id="change">
    <table  cellspacing="1" cellpadding="4" border="0" align="center" >
            <tr>
                <td align="center" colspan="2" height="30px" style="font-size:18px"><b>学分情况</b></td>
            </tr>
            <tr style="background:#288ace55; color:white;border-radius: 60px; " height="30px">
                <th align="center" style="padding:15px 10px 15px 50px">主修课程学分</th>
                <td align="center">` + majorScoreSum + `</td>
            </tr>
            <tr style="background:#5500ff55;color:white" >
                <th align="center" style="padding:15px 10px 15px 50px">其他课程学分</th>
                <td align="center">` + otherScoreSum + `</td>
            </tr>
            <tr style="background:#ffea0055;color: black">
                <th align="center" style="padding:15px 10px 15px 50px">综合学分总和</th>
                <td align="center" style="color:red"><b>` + sumScore + `</b></td>
            </tr>
             <tr style="background:#ff0000;color: white">
                <th class="cat" align="center" style="padding:15px 10px 15px 50px">实际学分</th>
                <td class="cat" align="center" style="color:white"><b>` + realScore + `</b></td>
            </tr>
            <tr>
                <td >
                    <a id="expand_" style="display:block;padding:15px 10px 15px 50px; cursor:pointer" >一键展开</a>
                </td>
                <td >
                    <a id="expandAll_" style="display:block;padding:15px 10px 15px 50px; cursor:pointer;">一键展开(全部)</a>
                </td>
            </tr>
            <tr>
                <td>
                    <a id="expandAndCollapMore_" style="display:block;padding:15px 10px 15px 50px; cursor:pointer">下拉/上收</a>
                </td>
                <td>
                    <a id="collap_" style="display:block;padding:15px 10px 15px 50px; cursor:pointer">一键收拢(全部)</a>
                </td>
            </tr>
        </table>
 </div>
`;
    alertBox.innerHTML += innerHtmlStr;

    var expand_ = document.querySelector("#expand_");
    if (expand_) {
        expand_.addEventListener("click", expand, false);
    }

    var expandAll_ = document.querySelector("#expandAll_");
    if (expandAll_) {
        expandAll_.addEventListener("click", expandAll, false);
    }

    var expandAndCollapMore_ = document.querySelector("#expandAndCollapMore_");
    if (expandAndCollapMore_) {
        expandAndCollapMore_.addEventListener("click", expandAndCollapMore, false);
    }

    var collap_ = document.querySelector("#collap_");
    if (collap_) {
        collap_.addEventListener("click", collap, false);
    }

    // 设置cat的监听事件
    var cat = $(".cat");
    // 设置鼠标样式
    cat.css("cursor", "pointer");
    //  设置title
    cat.attr("title", "点击查看实际学分");
    cat.click(function () {
        var clj = $(".clj");
        clj.click();
    });

})();