浙江中医药大学学评教

针对浙江中医药大学学教一体华的学评教的插件,可以省去重复的操作。本插件主要是简化评价操作,对于特殊的评价仍然需要手动评价,也不麻烦。

// ==UserScript==
// @name         浙江中医药大学学评教
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  针对浙江中医药大学学教一体华的学评教的插件,可以省去重复的操作。本插件主要是简化评价操作,对于特殊的评价仍然需要手动评价,也不麻烦。
// @author       Lock
// @match        http://jwmk.zcmu.edu.cn/jwglxt/xspjgl/kcgcpj_cxKcgcpjxxIndex.html*
// @grant        none
// @require      https://cdn.staticfile.org/layui/2.9.0/layui.js
// @resource css https://cdn.staticfile.org/layui/2.9.0/css/layui.min.css
// ==/UserScript==
// 是否发送过请求
var isSended = false;
// 发送的数据
var sendData = {};
// 现在发送的请求
var nowRequest = {};
// 评价是否完成
var isFinished = false;
var urlParams = '';

(function () {
    includeUI();
    // 获取Url参数,参数名为gnmkdm
    var url = window.location.href;
    urlParams = url.split('?')[1].split('&')[0].split('=')[1];
    console.log(urlParams);
    // 获取评价列表
    var commentList = getCommentList();
    console.log(commentList);
    createUI(commentList);
})();

// 引用UI
function includeUI() {

    var link = document.createElement('link');
    link.href = 'https://cdn.staticfile.org/layui/2.9.0/css/layui.min.css';
    link.type = 'text/css';
    link.rel = 'stylesheet';
    document.head.appendChild(link);
}
// 在页面底部创建一个UI
function createUI(lis) {
    layui.use(function () {
        var util = layui.util;
        var layer = layui.layer;

        // 自定义固定条
        util.fixbar({
            bars: [{
                type: 'manu',
                content: '自动',
                style: 'font-size: 21px;'
            }],
            // bar1: true,
            // bar2: true,
            // default: false, // 是否显示默认的 bar 列表 --  v2.8.0 新增
            // bgcolor: '#393D52', // bar 的默认背景色
            // css: {right: 100, bottom: 100},
            // target: '#target-test', // 插入 fixbar 节点的目标元素选择器
            // duration: 300, // top bar 等动画时长(毫秒)
            on: { // 任意事件 --  v2.8.0 新增
                mouseenter: function (type) {
                    layer.tips(type, this, {
                        tips: 4,
                        fixed: true
                    });
                },
                mouseleave: function (type) {
                    layer.closeAll('tips');
                }
            },
            // 点击事件
            click: function (type) {
                if (type == "manu") {
                    if (lis.length == 0) {
                        layer.msg("没有需要评价的课程!", { time: 2000, btn: ["知道了"] });
                        return;
                    }
                    if (!isSended) {
                        layer.msg("请先自行评价一个", { time: 2000, btn: ["知道了"] });
                        return;
                    }
                    // 好评判断
                    function confirmNext(index) {
                        if (index < lis.length) {
                            var kcmc = lis[index].kcmc; // 注意这里 lis 应该是一个数组,所以应该使用 lis[index] 来访问元素

                            layer.confirm("点击确定提交课程为:" + kcmc + ",点击取消跳过", { btn: ["确定", "取消"] }, function () {
                                sendSingleData(lis[index]);
                                console.log("提交完成");
                                confirmNext(index + 1); // 递归调用,处理下一个项目
                            }, function () {
                                console.log("取消");
                                confirmNext(index + 1); // 即使取消也要处理下一个项目
                            });
                        } else {
                            layer.msg("已完成所有评价", { time: 2000, btn: ["知道了"] });
                        }
                    }

                    layer.confirm("你确定要进行自动好评吗?将会提交对每一个老师的评价,如有特殊操作请自行评价。", {
                        btn: ["确定", "取消"]
                    }, function () {
                        confirmNext(0); // 从第一个项目开始
                    });
                };



            }
        });


    });
}

// 获取当前页面的待评价的列表
function getCommentList() {
    var list = [];
    var item = document.getElementById("item1mobile");
    // 得到item 下面所有类名为mui-table-view-cell的li
    var listDom = item.getElementsByClassName("mui-table-view");
    // 得到所有的li
    var liDom = listDom[0].getElementsByTagName("li");
    // 循环li
    for (var i = 0; i < liDom.length; i++) {
        var jgh_id = liDom[i].getElementsByClassName("hidden_jgh_id")[0].value;
        var jxb_id = liDom[i].getElementsByClassName("hidden_jxb_id")[0].value;
        var pjmbmcb_id = liDom[i].getElementsByClassName("hidden_pjmbmcb_id")[0].value;
        var gcpjszlcb_id = liDom[i].getElementsByClassName("hidden_gcpjszlcb_id")[0].value;
        var kch_id = liDom[i].getElementsByClassName("hidden_kch_id")[0].value;
        // 课程名
        var kcmc = liDom[i].getElementsByClassName("subject")[0].innerText + liDom[i].getElementsByClassName("teacher")[0].innerText;
        var py = ""
        var res = {
            "kcmc": kcmc,
            "jgh_id": jgh_id,
            "jxb_id": jxb_id,
            "pjmbmcb_id": pjmbmcb_id,
            "gcpjszlcb_id": gcpjszlcb_id,
            "kch_id": kch_id,
            "py": py,
            "isFinished": false,

        }

        list.push(res)
    }

    return list;
}


//监听ajax请求
(function () {
    if (typeof window.CustomEvent === "function") return false;

    function CustomEvent(event, params) {
        params = params || { bubbles: false, cancelable: false, detail: undefined };
        var evt = document.createEvent('CustomEvent');
        evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
        return evt;
    }

    CustomEvent.prototype = window.Event.prototype;

    window.CustomEvent = CustomEvent;
})();

(function () {
    function ajaxEventTrigger(event) {
        var ajaxEvent = new CustomEvent(event, { detail: this });
        window.dispatchEvent(ajaxEvent);
    }

    var oldXHR = window.XMLHttpRequest;

    function newXHR() {
        var realXHR = new oldXHR();
        var oldSend = realXHR.send;
        // ... (其他事件监听器)
        realXHR.send = function () {
            if (arguments[0]) {
                // 查看发送的链接

                sendData = arguments[0];
                // 转换成Dict
                var dict = {};
                var list = decodeURIComponent(sendData).split('&');
                for (var i = 0; i < list.length; i++) {
                    var kv = list[i].split('=');
                    dict[kv[0]] = kv[1];
                }
                nowRequest = dict;
            }
            return oldSend.apply(this, arguments);
        }
        realXHR.addEventListener('readystatechange', function () {
            if(isSended) return;
            ajaxEventTrigger.call(this, 'ajaxReadyStateChange');
            if (this.readyState === 4 && this.status === 200) {
                // 检查URL是否包含特定的字符串
                var url = this.responseURL;
                if (url.includes('http://jwmk.zcmu.edu.cn/jwglxt/xspjgl/kcgcpj_tjKcgcpjxx.html?')) {
                    // 获取URL参数
                    isSended = true;
                    sendData = nowRequest;
                    // 保存sendData数据和isSended状态保存数据到LocalStorage
                    localStorage.setItem('sendData', JSON.stringify(sendData));
                    console.log(sendData);
                }
            }
        }, false);

        return realXHR;
    }

    window.XMLHttpRequest = newXHR;
})();

function getLocalStorageData() {

    // 获取LocalStorage中的数据

    var data = localStorage.getItem('sendData');


    if (data) {
        sendData = JSON.parse(decodeURIComponent(data));
        // jgh_id=2017A526&jxb_id=FD59EF796BDCAC9FE0539C63A8C0F3A4&pjmbmcb_id=075598BFB60E9845E0639C63A8C0530F&gcpjszlcb_id=0757B0E465EA1FB6E0639C63A8C09BDB&lx=0&py=&gcpjxspfmxList[0].pjzbxm_id=075598BFB6119845E0639C63A8C0530F&gcpjxspfmxList[0].pfdjdmb_id=E9C720E1846E1EFCE0539C63A8C0A134&gcpjxspfmxList[0].zgpj=~zgbj~&gcpjxspfmxList[0].pjf=85&gcpjxspfmxList[0].bfzpf=85&gcpjxspfmxList[0].qzbfzpf=85&gcpjxspfmxList[0].zbbc=~zbbc~&gcpjxspfmxList[1].pjzbxm_id=075598BFB6129845E0639C63A8C0530F&gcpjxspfmxList[1].pfdjdmb_id=E9C8201C2497E741E0539C63A8C0CA96&gcpjxspfmxList[1].zgpj=~zgbj~&gcpjxspfmxList[1].pjf=5&gcpjxspfmxList[1].bfzpf=5&gcpjxspfmxList[1].qzbfzpf=5&gcpjxspfmxList[1].zbbc=~zbbc~&gcpjxspfmxList[2].pjzbxm_id=075598BFB6139845E0639C63A8C0530F&gcpjxspfmxList[2].pfdjdmb_id=E9C8201C2497E741E0539C63A8C0CA96&gcpjxspfmxList[2].zgpj=~zgbj~&gcpjxspfmxList[2].pjf=5&gcpjxspfmxList[2].bfzpf=5&gcpjxspfmxList[2].qzbfzpf=5&gcpjxspfmxList[2].zbbc=~zbbc~&gcpjxspfmxList[3].pjzbxm_id=075598BFB6149845E0639C63A8C0530F&gcpjxspfmxList[3].pfdjdmb_id=E9C8201C2497E741E0539C63A8C0CA96&gcpjxspfmxList[3].zgpj=~zgbj~&gcpjxspfmxList[3].pjf=5&gcpjxspfmxList[3].bfzpf=5&gcpjxspfmxList[3].qzbfzpf=5&gcpjxspfmxList[3].zbbc=~zbbc~&gcpjxspfmxList[4].pjzbxm_id=075598BFB6159845E0639C63A8C0530F&gcpjxspfmxList[4].pfdjdmb_id=E9C8201C2497E741E0539C63A8C0CA96&gcpjxspfmxList[4].zgpj=~zgbj~&gcpjxspfmxList[4].pjf=5&gcpjxspfmxList[4].bfzpf=5&gcpjxspfmxList[4].qzbfzpf=5&gcpjxspfmxList[4].zbbc=~zbbc~&gcpjxspfmxList[5].pjzbxm_id=075598BFB6169845E0639C63A8C0530F&gcpjxspfmxList[5].pfdjdmb_id=E9C8201C2497E741E0539C63A8C0CA96&gcpjxspfmxList[5].zgpj=~zgbj~&gcpjxspfmxList[5].pjf=5&gcpjxspfmxList[5].bfzpf=5&gcpjxspfmxList[5].qzbfzpf=5&gcpjxspfmxList[5].zbbc=~zbbc~&gcpjxspfmxList[6].pjzbxm_id=075598BFB6179845E0639C63A8C0530F&gcpjxspfmxList[6].pfdjdmb_id=E9C823F48C84F4BEE0539C63A8C00E60&gcpjxspfmxList[6].zgpj=~zgbj~&gcpjxspfmxList[6].pjf=10&gcpjxspfmxList[6].bfzpf=10&gcpjxspfmxList[6].qzbfzpf=10&gcpjxspfmxList[6].zbbc=~zbbc~&bfzpf=100&kch_id=FBW01069
        // 将其转换成dict
        // var dict = {};
        // var list = decodeURIComponent(sendData).split('&');

        // for (var i = 0; i < list.length; i++) {
        //     var kv = list[i].split('=');
        //     dict[kv[0]] = kv[1];
        // }
        // sendData = dict;
        console.log(sendData);
        isSended = true;


    }
}
// 页面刷新或者加载时加载数据
window.onload = getLocalStorageData;
// 发送数据
function sendPostData(lis, functionName) {
    getLocalStorageData();
    if (!isSended) {
        return;
    }
    var layer = layui.layer;
    // 每隔1秒发送一个请求
    var i = 0;
    var timer = setInterval(function () {
        if (i >= lis.length) {
            clearInterval(timer);
            return;
        }
        var s = lis[i];
        sendData["jgh_id"] = s["jgh_id"];
        sendData["jxb_id"] = s["jxb_id"];
        sendData["pjmbmcb_id"] = s["pjmbmcb_id"];
        sendData["gcpjszlcb_id"] = s["gcpjszlcb_id"];
        sendData["kch_id"] = s["kch_id"];
        sendData["py"] = s["py"];
        console.log();
        $.ajax({
            url: 'http://jwmk.zcmu.edu.cn/jwglxt/xspjgl/kcgcpj_tjKcgcpjxx.html?gnmkdm='+urlParams,
            type: 'POST',
            data: sendData,
            success: function (data) {
                // 每次完成一个在右下角提示
                layer.msg("已提交"+(i+1)+"/"+lis.length,{time:2000,btn:["知道了"]});
            },});
        //测试时直接提示

        i++;
        functionName(s["kcmc"]);

    }, 1000);

    var isFinite = true;




}

// 提交单条数据的函数
function sendSingleData(s) {
    getLocalStorageData();
    if (!isSended) {
        return;
    }
    var isok = true;
    console.log(s);
    sendData["jgh_id"] = s["jgh_id"];
    sendData["jxb_id"] = s["jxb_id"];
    sendData["pjmbmcb_id"] = s["pjmbmcb_id"];
    sendData["gcpjszlcb_id"] = s["gcpjszlcb_id"];
    sendData["kch_id"] = s["kch_id"];
    sendData["py"] = s["py"];
    console.log(sendData);
    $.ajax({
        url: 'http://jwmk.zcmu.edu.cn/jwglxt/xspjgl/kcgcpj_tjKcgcpjxx.html?gnmkdm='+urlParams,
        type: 'POST',
        data: sendData,
        success: function (data) {
            // 每次完成一个在右下角提示
            isok = true;

        },});
    s.isFinished = true;
    return isok;
    
}