Greasy Fork

Greasy Fork is available in English.

教务系统-正方教务系统自动评价

进入正方教务系统评价页面自动加载

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         教务系统-正方教务系统自动评价
// @namespace    https://www.goldlog.net/
// @version      1.1
// @description  进入正方教务系统评价页面自动加载
// @author       热心网友
// @match        https://*.edu.cn/xspjgl/xspj_cxXspjIndex.html*
// @license MIT
// ==/UserScript==

(function() {
    // 给老师评分的分数 1就是5分
    var pf = "1"
    // 教师评语
    var py = ''

    
    // 评价功能选单注入
    var pj_head = document.querySelector('#kc-head')
    var newCode = '<h3 class="panel-title"><div style="width: 100%;  border: 1px #ccc solid; border-radius: 5px;padding: 10px;margin-top: 10px;"><h4 style="text-align: center;">自动评价功能</h4><br/><label style="width: 50%;" for="auto-pf">评价分数: </label>&nbsp;&nbsp;&nbsp;<select id="auto-sele" style="width: 30%;" name="auto-pf"><option value="1">5</option><option value="2">4</option><option value="3">3</option><option value="4">2</option><option value="5">1</option></select><br><textarea placeholder="输入评语,允许留空" id="auto-py" class="form-control"></textarea><button style="width: 100%;" class="btn btn-default btn-default" id="auto-pj-btn">开始评价</button><br/><p style="color: red;text-align: left;font-size: 12px;">注意: 提交操作需要手动完成</p></div></h3>'; 
    pj_head.insertAdjacentHTML('beforeend', newCode);

    // 选单按钮
    var auto_btn = document.querySelector("#auto-pj-btn"); 
    // 选择分数
    var auto_select = document.querySelector("#auto-sele"); 
    // 评语
    var auto_py = document.querySelector("#auto-py"); 

    
    function check_pf(){
        // 未评分科目
        var wp = document.querySelector('#wp').children[0].innerText
        if(wp == '0'){
            auto_btn.innerText = '已完成评分'
            auto_btn.disabled = true;
            auto_select.disabled = true;
            auto_py.disabled = true;
        }
    }
    
    auto_btn.addEventListener('click', function() {  
        // 没选就默认5分
        if(auto_select.value == '') auto_select.value = '1';
        // 赋值已选分数
        pf = auto_select.value;
        if(auto_py.value != ''){
            py = auto_py.value;
        }
        auto_btn.innerText = '正在评价'
        auto_btn.disabled = true;
        
        mainLoop(pf,py); // 启动主循环
    });

    // 等待300ms让教师列表加载
    setTimeout(()=>{
        // 教师列表改为100每页
        var selbox = document.querySelector(".ui-pg-selbox")
        selbox[0].selected = false
        selbox[6].selected = true
        selbox.dispatchEvent(new Event('change', { bubbles: true }));

        check_pf()
    },300)

    // 创建一个返回 Promise 的延迟函数  
    function delay(ms) {  
        return new Promise(resolve => setTimeout(resolve, ms));  
    }
    
    async function mainLoop(pf,py) {  
        var teac_list = document.querySelectorAll('.jqgrow');  
        for (let i = 0; i < teac_list.length; i++) { 
            
            console.log("当前评价第: " + (i - 0 + 1) + " 个老师"); 
            
            if(teac_list[i].innerHTML.includes('提交')){
                console.log("该教师评价已经提交,跳过")
            }
            await pf_fun(i,pf,py);
            
        }  
        check_pf()
    }  
    

    async function pf_fun(te,pf, py) {  
        console.log("进入评分阶段");
        await delay(1000);  
        var bc_btn = document.querySelector('#btn_xspj_bc');  
        if(bc_btn != null){
            bc_btn.style = 'position: fixed;top: 0;left: 0;width: 100%;height: 100%; background-color: rgba(0, 0, 0, 0.5);color: #fff;display: flex;justify-content: center;align-items: center;font-size: 36px;color: black;';  
            bc_btn.innerText = '正在评价,请勿操作';  
            bc_btn.disabled = true;  
            
            console.log("选中评分");
            var xf = document.querySelectorAll(`.input-xspj-${pf}`);  
            for (let i = 0; i < xf.length; i++) {  
                xf[i].querySelector("input").click();  
            }  
            if (py != '') document.querySelectorAll('.form-control')[1].value = py;
        
            // 使用 await 等待每个 setTimeout 完成  
            await delay(1000);  
            console.log("开启保存按钮");  
            bc_btn.disabled = false;  
          
            await delay(1000);
            console.log("点击保存按钮");  
            bc_btn.click(); 
            bc_btn.disabled = true;  
          
            await delay(1000); // 同上
            document.querySelector('.close').remove();
            console.log("点击确定按钮");  
            document.querySelector('#btn_ok').click();
        }
        
        await delay(1000); // 同上  
        var teac_list = document.querySelectorAll('.jqgrow');  
        if(te == teac_list.length - 1){
            teac_list[0].click()
        }else{
            teac_list[te + 1].click()
        }

        
    }  
})();