i志愿小助手Izyz-Helper

帮助你更轻松地使用i志愿的历史活动补录功能

当前为 2024-12-30 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         i志愿小助手Izyz-Helper
// @version      0.0.2
// @description  帮助你更轻松地使用i志愿的历史活动补录功能
// @author       Weichenleeeee
// @match        https://www.gdzyz.cn/*
// @icon         https://www.gdzyz.cn/assets/weblogo.1b6eba63.svg
// @grant        GM_registerMenuCommand
// @grant        GM_addStyle
// @grant        GM_openInTab
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_xmlhttpRequest
// @namespace https://greasyfork.org/users/1417526
// ==/UserScript==

(function() {
    'use strict';

    // 假设这是从Excel表格中读取的名字数组
    var names = ["李伟宸","谢宇轩","雷军","秦海烨"]; // 用实际的名字替换
    var nextButtonEnabled = false; // 是否已点击“添加补录”

    // 定义一个函数来模拟点击按钮事件
    async function clickButton(selector, delay) {
        await new Promise(resolve => setTimeout(resolve, delay));
        var button = document.querySelector(selector);
        if (button) {
            button.click();
            console.log(`${selector} 按钮已点击`);
        } else {
            console.log(`${selector} 按钮未找到`);
        }
    }

    // 定义一个函数来输入姓名
    async function inputName(name, delay) { // 将 inputText 作为参数传递
        await new Promise(resolve => setTimeout(resolve, delay));
        let input = document.querySelectorAll('.el-input__inner')[0];
        if (input) {
            input.value = name; // 使用参数 name 而不是全局变量 inputText
            var event = document.createEvent('HTMLEvents');
            event.initEvent("input", true, true);
            event.eventType = 'message';
            input.dispatchEvent(event);
            console.log('姓名已输入');
        } else {
            console.log('文本框未找到');
        }
    }

    // 定义一个函数来勾选单选框并点击“添加补录”
    async function checkCheckbox(delay) {
        await new Promise(resolve => setTimeout(resolve, delay));
        var checkboxes = document.querySelectorAll('.el-checkbox__inner');
        if (checkboxes.length > 4) {
            // 重名的情况,需要手动勾选
            console.log('超过4个单选框被找到,等待“添加补录”按钮被点击');
            alert('出现重名,请手动勾选志愿者,并点击“添加补录”');
            // 事件代理:在父元素上监听点击事件
            document.body.addEventListener('click', function onClick(event) {
                if (event.target && event.target.matches('button.el-button.el-button--primary span') && event.target.textContent === '添加补录') {
                    console.log('用户点击了“添加补录”按钮,继续执行');
                    nextButtonEnabled = true; // 设置标志,允许继续执行后续操作
                    document.body.removeEventListener('click', onClick); // 移除事件监听器,避免重复监听
                }
            });
        }
        else if(checkboxes.length < 4){
            // 查无此人的情况,需要手动勾选
            console.log('查无此人,等待“添加补录”按钮被点击');
            alert('查无此人,请手动勾选志愿者,并点击“添加补录”');
            // 事件代理:在父元素上监听点击事件
            document.body.addEventListener('click', function onClick(event) {
                if (event.target && event.target.matches('button.el-button.el-button--primary span') && event.target.textContent === '添加补录') {
                    console.log('用户点击了“添加补录”按钮,继续执行');
                    nextButtonEnabled = true; // 设置标志,允许继续执行后续操作
                    document.body.removeEventListener('click', onClick); // 移除事件监听器,避免重复监听
                }
            });
        }else{
            // 正常情况
            checkboxes.forEach((checkbox) => checkbox.click());
            console.log('单选框已勾选');
            await clickButton('.el-button.el-button--primary[style*="margin-bottom: 20px;"]', 500); // 再次点击“添加补录”按钮
            console.log('“添加补录”按钮已被点击,等待“下一步”按钮');
            nextButtonEnabled = true;// “添加补录”按钮已被点击,允许点击“下一步”
        }
    }

    // 定义一个函数来进行录入志愿者
    async function processNames(names){
        for (const name of names) {
            await clickButton('.el-button.el-button--primary', 1000); // 点击“添加补录”按钮
            await inputName(name, 1000); // 输入姓名,传递当前名字
            await clickButton('.queryOrgBtn', 500); // 点击“仅在本组织内查询”按钮
            await checkCheckbox(500); // 勾选单选框
            // 等待“添加补录”按钮被点击后,再点击“下一步”按钮
            while (!nextButtonEnabled) {
                await new Promise(resolve => setTimeout(resolve, 500)); // 每0.5秒检查一次
            }
            await clickButton('.el-button.el-button--primary[style*="display: block; margin: 0px auto;"]', 500); // 点击“下一步”按钮
            console.log('"下一步"已被点击')
            nextButtonEnabled = false; // 重置标志
        };
    }

    // 定义菜单命令:开始
    let menu1 = GM_registerMenuCommand('开始', function () {
        processNames(names);
    }, 'o');

})();