Greasy Fork

Greasy Fork is available in English.

"哈工大本科教学服务与管理系统"自动评教

仅适用于"哈工大本科教学服务与管理平台(jwts.hit.edu.cn)"学生评教,仅供编程爱好者学习使用,不得用于不正当目的;若校外使用,优先使用ipvn,不保证vpn一定能用

当前为 2020-06-14 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         "哈工大本科教学服务与管理系统"自动评教
// @namespace    [email protected]
// @version      1.0.0
// @description  仅适用于"哈工大本科教学服务与管理平台(jwts.hit.edu.cn)"学生评教,仅供编程爱好者学习使用,不得用于不正当目的;若校外使用,优先使用ipvn,不保证vpn一定能用
// @author       风味咸牛奶
// @match        https://vpn.hit.edu.cn/,DanaInfo=jwts.hit.edu.cn+main
// @match        http://jwts-hit-edu-cn.ivpn.hit.edu.cn:1080/main
// @match        http://jwts-hit-edu-cn.ivpn.hit.edu.cn:1080/loginLdap
// @match        https://vpn.hit.edu.cn/,DanaInfo=jwts.hit.edu.cn+loginLdap
// @match        http://jwts-hit-edu-cn.ivpn.hit.edu.cn:1080/xspjgd/*
// @match        https://vpn.hit.edu.cn/xspjgd/*
// @run-at       document-body
// ==/UserScript==

const yxzc = ["挺好的", "很不错", "棒", "很好", "很认真", "收获很大", "挺用心的", "好", "教得好"];//优秀之处及你的收获
const bzzc = "无";

//生成指定范围内的随机整数
var randomRange = function (min, max)
{
    return Math.floor(Math.random() * (max - min)) + min;
};

var returnCase = function (href)
{
    if(href.search("toUpdatePkpx")>0) return 1;         //评课评教材
    else if(href.search("toUpdateXspjFx")>0||href.search("/Fxpj")>0) return 2;  //评价教与学状态
    else if(href.search("toUpdateFxpj_sy")>0) return 3; //评价实验课
    else if(href.search("toUpdateZhpj")>0) return 4;    //综合评价教师
    else return 0;
};

jwtsAutoComplete = function ()
{
    var body_html = document.body.innerHTML;

    switch(returnCase(window.location.href))
    {
        case 1: //评课评教材
        case 2: //评课评教材
        case 3: //评价教与学状态
        {
            //1. 自动给下拉菜单打分

            //获取特定id字符串
            var my_id_table = body_html.match(/(?!id=")selid_[a-zA-Z0-9-_]+?(?=")/g);
            if(my_id_table.length===0)
            {
                alert("出错,id表检测不出来,请反馈给up主");
                return;
            }
            var selectId;

            //改变id对应元素的选项内容:默认选择第3个选项,一般评价比较中性一些
            for(var i = 0; i < my_id_table.length; i++)
            {
                selectId = document.getElementById(my_id_table[i]);
                selectId.options.selectedIndex = 2;//取值为0到5
            }

            //为了防止被检测出来,随机打乱几个选项内容
            var rand_num;
            if(my_id_table.length<33)
            {
                rand_num = randomRange(1, Math.floor(my_id_table.length/2)+2);
            }
            else
            {
                rand_num = randomRange(11, my_id_table.length-10);
            }

            for(var j = 0; j < rand_num; j++)
            {
                selectId = document.getElementById(my_id_table[randomRange(0, my_id_table.length)]);
                selectId.options.selectedIndex = 1;
            }

            //2. 自动填写文本框:优秀之处与不足之处
            var rand_value = yxzc[randomRange(0, yxzc.length)];
            for(var k = 0; ; k++)
            {
                var yxzc_value = document.getElementsByName("listXspj[" + k + "].yxzc");
                var bzzc_value = document.getElementsByName("listXspj[" + k + "].bzzc");
                if(yxzc_value.length === 1)
                {
                    yxzc_value[0].value = rand_value;
                    bzzc_value[0].value = bzzc;
                }
                else
                {
                    break;
                }
            }
            break;
        }
        case 4: //综合评价教师
        {
            //3. 自动给单选框打分:最优个数默认0个,优个数默认1个,其余都是良
            var my_name_set = new Set(body_html.match(/tabmapzb\['\d+?'\]/g));  //选出所有name形如tabmapzb\['\d+?'\]的
            var my_name_array = Array.from(my_name_set)

            var best_num;   //随机生成最优个数
            var better_num; //随机生成优个数
            if(my_name_array.length<3)
            {
                best_num = 0;
                better_num = 1;
            }
            else if(my_name_array.length<5)
            {
                best_num = 1;
                better_num = 1;
            }
            else
            {
                best_num = randomRange(1, 3);   //随机生成最优个数,最优个数在1~2之间
                better_num = randomRange(1, 4); //随机生成优个数,优个数在1~3之间
            }

            for(var p = 0; p < my_name_array.length; p++)
            {
                var my_radio = document.getElementsByName(my_name_array[p])
                if(p < best_num)
                {
                    my_radio[0].checked = true;
                }
                else if (p < best_num + better_num)
                {
                    my_radio[1].checked = true;
                }
                else
                {
                    my_radio[2].checked = true;
                }
            }
            break;
        }
    }
};

var addBtnAutoComplete = function ()
{
    var auto_btn_html;
    var ul_tag;
    var width;

    switch(returnCase(window.location.href))
    {
        case 1: //评课评教材
        case 2: //评课评教材
        case 3: //评价教与学状态
        {
            if(returnCase(window.location.href)===1) width="380px";         //评课评教材
            else if(returnCase(window.location.href)===2) width = "460px";  //评课评教材
            else width = "380px";                                               //评价教与学状态

            $("#queryform > table > tbody > tr > td:nth-child(2)").css("width", width);//调整宽度,美观一些

            auto_btn_html = '<div class="addlist_button1 ml15">';
            auto_btn_html += '<a onclick="jwtsAutoComplete()">';
            auto_btn_html += '<span>自动填写</span></a></div>';

            ul_tag = $("#queryform > table > tbody > tr > td:nth-child(2) > div:nth-child(3)");
            if(ul_tag)
            {
                ul_tag.before(auto_btn_html);
            }
            break;
        }
        case 4: //综合评价教师
        {
            auto_btn_html = '<div class="ico_button">';
            auto_btn_html += '<a onclick="jwtsAutoComplete()">';
            auto_btn_html += '<b class="btn_ico4 btn_img">';
            auto_btn_html += '</b><span>自动填写</span></a></div>';

            ul_tag = $("body > div.Contentbox > div > div.butsea > div:nth-child(1)");
            if(ul_tag)
            {
                ul_tag.before(auto_btn_html);
            }
            break;
        }
        default:
        {
            break;
        }
    }
};

//添加按键,按键点击后指向评教系统页面
var addBtnTurnToPJXT = function ()
{
    var auto_btn_html;
    switch(window.location.host)
    {
        case "jwts-hit-edu-cn.ivpn.hit.edu.cn:1080":
        {
            auto_btn_html = '<a href="/xspjgd/toPjStart"><button style="position:fixed;right:450px;top:20px;z-index:10000">自动评教</button></a>'
            break;
        }
        case "vpn.hit.edu.cn":
        {
            auto_btn_html = '<a href="/,DanaInfo=jwts.hit.edu.cn+xspjgd/toPjStart"><button style="position:fixed;right:450px;top:20px;z-index:10000">自动评教</button></a>'
            break;
        }
    }

    var auto_btn = document.querySelector("#north");
    auto_btn.innerHTML = auto_btn.innerHTML + auto_btn_html;
};

// Run from this
(function()
{
    switch(window.location.href)
    {
        case 'https://vpn.hit.edu.cn/,DanaInfo=jwts.hit.edu.cn+main':
        case 'http://jwts-hit-edu-cn.ivpn.hit.edu.cn:1080/main':
        case 'http://jwts-hit-edu-cn.ivpn.hit.edu.cn:1080/loginLdap':
        case 'https://vpn.hit.edu.cn/,DanaInfo=jwts.hit.edu.cn+loginLdap':
        {
            addBtnTurnToPJXT();
            break;
        }
        default:
        {
            window.onload = addBtnAutoComplete;
            break;
        }
    }
})();