SJTU场馆后台管理核销自动刷新

场馆预约核销自动刷新并自动打开个人订单,然后在iframe中点击场地核销

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         SJTU场馆后台管理核销自动刷新
// @namespace    http://tampermonkey.net/
// @version      v2.1
// @description  场馆预约核销自动刷新并自动打开个人订单,然后在iframe中点击场地核销
// @author       eternal-echo
// @match        https://sports.sjtu.edu.cn/index
// @icon         https://www.google.com/s2/favicons?sz=64&domain=sjtu.edu.cn
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    console.log('核销自动刷新脚本已加载');

    // 尝试点击“个人订单”链接
    const tryClickPersonalOrder = () => {
        const personalOrderLink = document.querySelector('a.menuItem[href="/venue/personal"]');
        if (personalOrderLink && personalOrderLink.offsetParent !== null) {
            console.log('“个人订单”链接可见,正在尝试点击');
            personalOrderLink.click();
            // 延迟监控iframe加载,确保页面及JavaScript逻辑加载完成
            setTimeout(monitorIframeForVerificationButton, 1000); // 增加延迟,等待iframe加载
            return true;
        } else {
            console.log('未找到“个人订单”链接或链接不可见');
            return false;
        }
    };

    // 监控iframe加载,等待“场地核销”按钮加载完成后点击
    const monitorIframeForVerificationButton = () => {
        const iframe = document.querySelector('.RuoYi_iframe[name="iframe2"]');
        if (!iframe) {
            console.log('未找到指定的iframe,无法设置监控。');
            return;
        }
        console.log('找到指定的iframe');

        // 延时1s后尝试点击“场地核销”按钮
        setTimeout(() => {
            try {
                iframe.contentDocument.querySelector('#toolbar > a.btn.btn-info.btn-xs').click()
            } catch (e) {
                console.error('访问iframe内容失败:', e);
            }
        }, 1000);
    };

    // 页面完全加载后执行操作
    window.addEventListener('load', function() {
        console.log('页面已完全加载');
        if (!tryClickPersonalOrder()) {
            // 如果“个人订单”链接不可见,尝试展开父级菜单
            const parentMenus = document.querySelectorAll('.fa.arrow');
            parentMenus.forEach(menu => menu.click());
            setTimeout(tryClickPersonalOrder, 500); // 延迟尝试点击“个人订单”链接
        }
    });

    // 设置定时器,29分钟刷新页面
    setInterval(function() {
        console.log('正在刷新页面...');
        window.location.reload();
    }, 29 * 60 * 1000);
})();