评教脚本(内蒙古工业大学)

自动填写评教内容(内蒙古工业大学专用)

// ==UserScript==
// @name         评教脚本(内蒙古工业大学)
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  自动填写评教内容(内蒙古工业大学专用)
// @author       YanShijie
// @match        https://imut.mycospxk.com/index.html*
// @grant        none
// @license      MIT
// ==/UserScript==


(function () {
    'use strict';

    // 延时函数
    const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

    // 填写输入框并同步 React 的 `state`
    function fillTextareaWithReactSync(textarea, value) {
        try {
            // 设置值
            Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value').set.call(textarea, value);

            // 创建并触发 React 的 `onChange` 事件
            const changeEvent = new Event('input', { bubbles: true });
            textarea.dispatchEvent(changeEvent);

            console.log(`已填写内容并同步到 React:${value}`);
        } catch (error) {
            console.error(`填充文本框时出错: ${error}`);
        }
    }

    // 自动评教逻辑
    async function autoEvaluate() {
        console.log("开始自动评教...");

        // 等待页面加载完成
        await sleep(2000);

        // 获取所有评教题目
        const questions = document.querySelectorAll(".index__subjectItem--XWS1b");
        if (questions.length === 0) {
            console.log("未找到评教题目,请检查页面结构!");
            return;
        }

        // 遍历题目
        questions.forEach((question, index) => {
            console.log(`正在处理第 ${index + 1} 题...`);

            // 单选题:选择 value=1 的选项
            const radioGroup = question.querySelector(".ant-radio-group");
            if (radioGroup) {
                const firstOption = radioGroup.querySelector('input[value="1"]');
                if (firstOption) {
                    firstOption.click();
                    console.log(`第 ${index + 1} 题已选择 "完全符合"`);
                } else {
                    console.log(`第 ${index + 1} 题未找到 "完全符合" 选项`);
                }
            }

            // 文本框题目:填写内容
            const textarea = question.querySelector("textarea.ant-input");
            if (textarea) {
                const textContent = index === questions.length - 2
                    ? "课程内容丰富,教师授课认真负责,非常满意!"
                    : index === questions.length - 1
                    ? "暂无改进建议,课程内容和教学方法非常满意!"
                    : "";
                fillTextareaWithReactSync(textarea, textContent);
            }
        });

        console.log("评教内容填写完成,请手动检查并提交!");
        alert("评教内容已自动填写,请检查后手动提交!");
    }

    // 动态加载支持
    function waitForElement(selector, callback, interval = 300, timeout = 10000) {
        const startTime = Date.now();
        const checkInterval = setInterval(() => {
            const element = document.querySelector(selector);
            if (element) {
                clearInterval(checkInterval);
                callback(element);
            }
            if (Date.now() - startTime > timeout) {
                clearInterval(checkInterval);
                console.error(`等待元素超时:${selector}`);
            }
        }, interval);
    }

    // 等待页面加载完成后运行脚本
    waitForElement(".index__subjectItem--XWS1b", () => {
        autoEvaluate();
    });
})();