i志愿小助手Izyz-Helper

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

目前為 2024-12-30 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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');

})();