农职大评教自动填充(仅填充数据)
// ==UserScript==
// @name 农职大评教自动填充(仅填充数据)
// @namespace http://tampermonkey.net/
// @version 1.5.4
// @description 自动填充分数和主观评语
// @author Your Name
// @match https://vpn.gxnzd.com.cn/*
// @match http://172.16.4.9/jwglxt/xspjgl/xspj_cxXspjIndex.html?doType=details&gnmkdm=N401605&layout=default*
// @grant none
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
// 生成随机评语(第一人称,积极正面)
function getRandomComment() {
const comments = [
"我觉得教学内容非常丰富,讲解清晰明了。",
"课堂氛围很好,我很享受每一节课。",
"老师的教学方法多样,激发了我的学习兴趣。",
"老师与学生互动频繁,课堂效果非常好。",
"教学进度合理,知识点覆盖全面。",
"课堂管理得当,学习环境非常好。",
"老师态度认真,备课充分,让我受益匪浅。",
"案例分析非常实用,帮助我更好地理解课程内容。",
"课堂讨论环节让我有更多机会表达自己的观点。",
"教学内容贴近实际,易于理解和掌握。"
];
return comments[Math.floor(Math.random() * comments.length)];
}
// 创建悬浮窗
function createFloatingPanel() {
const panel = document.createElement('div');
panel.id = 'auto-fill-evaluate-panel';
panel.style.position = 'fixed';
panel.style.top = '20px';
panel.style.right = '20px';
panel.style.width = '250px';
panel.style.padding = '15px';
panel.style.backgroundColor = '#f9f9f9';
panel.style.border = '1px solid #ccc';
panel.style.borderRadius = '8px';
panel.style.boxShadow = '0 0 10px rgba(0,0,0,0.1)';
panel.style.zIndex = '10000';
panel.style.fontFamily = 'Arial, sans-serif';
panel.style.fontSize = '14px';
panel.innerHTML = `
<h3 style="margin-top:0;">自动填充工具</h3>
<label for="score-input">分数 (1-95):</label>
<input type="number" id="score-input" min="1" max="95" value="95" style="width: 100%; padding: 5px; margin-bottom: 10px;">
<button id="fill-data" style="width: 100%; padding: 10px; background-color: #2196F3; color: white; border: none; border-radius: 4px; cursor: pointer;">填充数据</button>
<button id="close-panel" style="width: 100%; padding: 5px; margin-top: 5px; background-color: #f44336; color: white; border: none; border-radius: 4px; cursor: pointer;">关闭</button>
<p id="status" style="margin-top:10px; font-size: 0.9em; color: #555;"></p>
`;
document.body.appendChild(panel);
// 关闭按钮功能
document.getElementById('close-panel').addEventListener('click', () => {
panel.style.display = 'none';
});
// 填充数据按钮功能
document.getElementById('fill-data').addEventListener('click', () => {
const scoreInput = document.getElementById('score-input');
const score = parseInt(scoreInput.value);
if (isNaN(score) || score < 1 || score > 95) {
alert("分数必须是1到95之间的数字。");
return;
}
fillData(score);
});
}
// 更新状态信息
function updateStatus(message) {
const status = document.getElementById('status');
status.textContent = message;
}
// 自动关闭警告弹窗
function handleWarningModal() {
const modalSelector = '.modal-dialog.modal-dialog-reset.ui-draggable';
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.addedNodes.length > 0) {
mutation.addedNodes.forEach((node) => {
if (node.matches && node.matches(modalSelector)) {
console.log("检测到警告弹窗,正在关闭...");
const confirmButton = node.querySelector('#btn_ok');
if (confirmButton) {
confirmButton.click();
console.log("已关闭警告弹窗。");
updateStatus("已自动关闭警告弹窗。");
}
}
});
}
});
});
observer.observe(document.body, { childList: true, subtree: true });
}
// 填充分数和评语
function fillData(score) {
updateStatus('开始填充数据...');
// 填充分数
const scoreInputs = document.querySelectorAll('.input-pjf');
if (scoreInputs.length === 0) {
console.warn("未找到分数输入框。");
updateStatus('警告: 未找到分数输入框。');
} else {
scoreInputs.forEach((input, index) => {
const min = parseInt(input.getAttribute('data-zxfz')) || 1;
const max = parseInt(input.getAttribute('data-zdfz')) || 95;
const finalScore = Math.min(Math.max(score, min), max);
input.value = finalScore;
input.dispatchEvent(new Event('input', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true })); // 触发change事件
console.log(`已填充分数 [${index + 1}]: ${finalScore}`);
});
}
// 填充“主要优缺点”和“教学建议”下的评语
const commentTextareas = document.querySelectorAll('.input-zgpj');
if (commentTextareas.length === 0) {
console.warn("未找到评语输入框。");
updateStatus('警告: 未找到评语输入框。');
} else {
commentTextareas.forEach((textarea, index) => {
const randomComment = getRandomComment();
textarea.value = randomComment;
textarea.dispatchEvent(new Event('input', { bubbles: true }));
textarea.dispatchEvent(new Event('change', { bubbles: true })); // 触发change事件
console.log(`已填充评语 [${index + 1}]: ${randomComment}`);
});
}
// 填充“评语”区域下的主观评语
const mainComment = document.querySelector('#pyDiv textarea[name="py"]');
if (mainComment) {
const randomMainComment = getRandomComment();
mainComment.value = randomMainComment;
mainComment.dispatchEvent(new Event('input', { bubbles: true }));
mainComment.dispatchEvent(new Event('change', { bubbles: true })); // 触发change事件
console.log(`已填充分数: ${randomMainComment}`);
} else {
console.warn("未找到主观评语输入框。");
updateStatus('警告: 未找到主观评语输入框。');
}
updateStatus('数据填充完成。');
}
// 初始化脚本
function init() {
createFloatingPanel();
handleWarningModal();
}
init()
})();