懒人福音,一个脚本支持多个平台。【智慧职教】、【学习通】、【陕西省专业人员继续教育】

支持【智慧职教】、【学习通】、【陕西省专业人员继续教育】挂机使用。脚本使用问题/其他平台开发需求,欢迎添加作者反馈。

// ==UserScript==
// @name         懒人福音,一个脚本支持多个平台。【智慧职教】、【学习通】、【陕西省专业人员继续教育】
// @namespace    yike
// @version      0.0.2
// @license      MIT
// @author       小了白了兔
// @description  支持【智慧职教】、【学习通】、【陕西省专业人员继续教育】挂机使用。脚本使用问题/其他平台开发需求,欢迎添加作者反馈。
// @icon         https://mp-85530a3e-fc46-4ea4-a542-160dad54a088.cdn.bspapp.com/cloudstorage/df6b1336-a2d7-4e64-8fc5-325ee9cc5266.png
// @match        *://*/*
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js
// @connect      *
// @grant        GM_deleteValue
// @grant        GM_getValue
// @grant        GM_openInTab
// @grant        GM_setValue
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// ==/UserScript==

(i=>{const e=document.createElement("style");e.dataset.source="vite-plugin-monkey",e.innerText=i,document.head.appendChild(e)})(".yike[data-v-8e71a76d]{position:absolute;left:20px;bottom:20px;z-index:999999;background:#fff;border:1px solid #d3d3d3;font-size:13px;width:360px;height:240px}.yike .yike_tab_menu[data-v-8e71a76d]{display:flex;justify-content:center;align-items:center;height:30px}.yike .yike_tab_menu .menu_item[data-v-8e71a76d]{width:50%;height:30px;text-align:center;color:#333;background-color:#eee;line-height:30px}.yike .yike_tab_menu .yike_current_menu[data-v-8e71a76d]{color:#fff;background:#093}.yike .yike_tab_box[data-v-8e71a76d]{width:100%;height:210px;background:#fff;border:1px solid #d3d3d3}.yike .yike_tab_status[data-v-8e71a76d]{width:100%;height:100%}.yike .yike_not_login[data-v-8e71a76d]{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:column}.yike .yike_not_login .yike_btn[data-v-8e71a76d]{align-self:flex-end;margin-top:6px;margin-right:35px;width:25%;height:40px;background-color:#093;color:#fff;border:none;border-radius:5px}.yike .yike_not_login .yike_btn[data-v-8e71a76d]:active{border:1px solid #ddd}.yike .yike_op[data-v-8e71a76d]{display:flex;justify-content:space-between;align-items:center;width:100%}.yike .yike_op .yike_login_info[data-v-8e71a76d]{color:#093;margin-left:20px}.yike .yike_not_login .yike_text[data-v-8e71a76d]{text-align:right;position:absolute;bottom:10px;right:10px}.yike .yike_not_login .yike_input[data-v-8e71a76d]{border:1px solid #333;background-color:#f9f9f9;border-radius:5px;padding:13px;outline:0;width:80%}.yike .yike_intro[data-v-8e71a76d]{width:100%;height:100%;padding:15px;text-align:left}.yike .yike_log[data-v-8e71a76d]{display:flex;align-items:flex-start;flex-direction:column;padding:5px;overflow:auto}.yike .yike_log .yike_item[data-v-8e71a76d]{margin:3px 0}.yike .yike_log .yike_item .yike_time[data-v-8e71a76d]{margin-right:5px}.yike .yike_log .yike_error[data-v-8e71a76d]{color:brown}.yike .yike_has_login[data-v-8e71a76d]{display:flex;justify-content:center;align-items:center;flex-direction:column;width:100%;height:100%}.yike .yike_has_login .yike_left_time[data-v-8e71a76d],.yike .yike_has_login .yike_client[data-v-8e71a76d]{margin:5px}.yike .yike_has_login .yike_vali_code[data-v-8e71a76d]{width:100%;position:absolute;left:8px;bottom:5px;display:flex;justify-content:flex-start;align-items:center}.yike .yike_has_login .yike_vali_code .yike_copy[data-v-8e71a76d]{line-height:12px;margin-left:5px;background-color:#093;color:#fff;border-radius:3px;border:2px solid #095}");

(function(vue) {
  "use strict";
  var monkeyWindow = window;
  var GM_setValue = /* @__PURE__ */ (() => monkeyWindow.GM_setValue)();
  var GM_xmlhttpRequest = /* @__PURE__ */ (() => monkeyWindow.GM_xmlhttpRequest)();
  var GM_getValue = /* @__PURE__ */ (() => monkeyWindow.GM_getValue)();
  const get_tag = function(para) {
    const str = para.str;
    let elements = [].concat(para.element || document);
    const in_curent_frame = para.in_curent_frame == void 0 ? true : false;
    const back_style = para.back_style || "boolean";
    let res = [];
    for (let i = 0; i < elements.length; i++) {
      let match_ele = Array.from(elements[i].querySelectorAll(str));
      res = res.concat(match_ele);
      if (in_curent_frame) {
        break;
      }
      let match_iframe = Array.from(elements[i].querySelectorAll("iframe")).map(function(item) {
        return item.contentWindow.document;
      });
      elements = elements.concat(match_iframe);
    }
    if (back_style == "boolean") {
      return res.length != 0;
    }
    if (back_style == "array") {
      return res;
    }
    if (back_style == "object") {
      return res[0];
    }
    return res;
  };
  function get_format_date$1(time) {
    const date = time || new Date();
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? "0" + m : m;
    var d = date.getDate();
    d = d < 10 ? "0" + d : d;
    var h = date.getHours();
    h = h < 10 ? "0" + h : h;
    var minute = date.getMinutes();
    minute = minute < 10 ? "0" + minute : minute;
    var second = date.getSeconds();
    second = second < 10 ? "0" + second : second;
    return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + second;
  }
  const get_script = function(jiaoben2) {
    const script = jiaoben2.filter(function(val, index) {
      const type = typeof val.element;
      if (type == "object") {
        for (let i = 0; i < val.element.length; i++) {
          if (get_tag({ str: val.element[i] })) {
            return true;
          }
        }
        return false;
      } else {
        return get_tag({ str: val.element });
      }
    })[0];
    return script || {};
  };
  const tools = { get_tag, get_script, get_format_date: get_format_date$1 };
  const shanxijixujiaoyu = [
    {
      script_name: "陕西继续教育",
      script_id: "10000",
      element: ".main .mainIn .main_right .rightWidth .shadow .mod_tit_bar .mod_tit",
      load_option: true,
      run: function(yike_log2, fee2) {
        const class_ready = new Event("class_ready", { "bubbles": true, "cancelable": false });
        const class_complete = new Event("class_complete", { "bubbles": true, "cancelable": false });
        window.addEventListener("message", function(e) {
          console.log(e);
          const data = e.data;
          const source = data.source;
          if (source != "10000_study") {
            return;
          }
          const event = data.event;
          if (event == "class_start") {
            page_b = e.source;
          }
          if (event == "class_complete") {
            document.dispatchEvent(class_complete);
          }
          if (event == "add_log") {
            yike_log2(data.type, data.content);
          }
        }, false);
        document.addEventListener("class_ready", function(e) {
          if (all_class.length == 0) {
            yike_log2("normal", "您已完成所有课程学习");
            stop();
            return;
          }
          all_class[0].click();
          console.log(all_class[0]);
          const class_name = all_class[0].parentNode.nextElementSibling.querySelector("h5").title;
          yike_log2("normal", "开始学习---《" + class_name + "》");
        });
        document.addEventListener("class_complete", function(e) {
          all_class.shift();
          if (all_class.length == 0) {
            page_b.close();
            yike_log2("normal", "您已完成所有课程学习");
            stop();
            return;
          }
          document.dispatchEvent(class_ready);
        });
        window.setInterval(function() {
          page_b.postMessage({
            event: "keep_active",
            source: "10000_main"
          }, "*");
        }, 1e4);
        let page_b;
        const all_class = tools.get_tag({ str: "#recCourses li a", back_style: "array" });
        document.dispatchEvent(class_ready);
        fee2.start_fee();
      },
      stop: function() {
        yike_log("error", "挂机结束,脚本停止运行");
        document.removeEventListener();
      }
    },
    {
      script_name: "陕西继续教育",
      script_id: "10000",
      element: ".s_topbg .s_top .s_coursetit",
      run: function(yike_log2, fee2) {
        const mission_ready = new Event("mission_ready", { "bubbles": true, "cancelable": false });
        const mission_complete = new Event("mission_complete", { "bubbles": true, "cancelable": false });
        const course_ready = new Event("course_ready", { "bubbles": true, "cancelable": false });
        const course_complete = new Event("course_complete", { "bubbles": true, "cancelable": false });
        const page_name = "10000_study";
        let lost_time2 = 0;
        window.opener.postMessage({
          event: "class_start",
          source: page_name
        }, "*");
        window.setInterval(function() {
          if (lost_time2 >= 5) {
            stop();
            alert("挂机过程中,不要关闭主页面。脚本运行停止");
          } else {
            console.log("失去连接第 " + lost_time2 + "次");
            lost_time2 = lost_time2 + 1;
          }
        }, 15e3);
        window.addEventListener("message", function(e) {
          const data = e.data;
          const source = data.source;
          if (source != "10000_main") {
            return;
          }
          const event = data.event;
          if (event == "keep_active") {
            lost_time2 = 0;
          }
        }, false);
        tools.get_tag({ str: "#courseware_main_menu div", in_curent_frame: false, back_style: "object" }).click();
        window.setTimeout(function() {
          document.addEventListener("mission_ready", function(e) {
            if (mission2[0].type == "video") {
              mission2[0].ele.muted = "muted";
              mission2[0].ele.play();
              mission2[0].ele.addEventListener("ended", function() {
                console.log("播放结束");
                document.dispatchEvent(mission_complete);
              });
              mission2[0].ele.addEventListener("paused", function() {
                mission2[0].ele.get(0).muted = "muted";
                mission2[0].ele.get(0).play();
              });
              mission2[0].ele.addEventListener("canplay", function() {
                console.log("开始播放");
                mission2[0].ele.muted = "muted";
                mission2[0].ele.play();
              });
              return;
            }
            if (mission2[0].type == "exam") {
              window.setTimeout(function() {
                document.dispatchEvent(mission_complete);
              }, 3e3);
              return;
            }
          });
          document.addEventListener("mission_complete", function(e) {
            mission2.shift();
            if (mission2.length == 0) {
              document.dispatchEvent(course_complete);
              return;
            }
            document.dispatchEvent(mission_ready);
          });
          document.addEventListener("course_ready", function(e) {
            const video = tools.get_tag({ str: "video", in_curent_frame: false, back_style: "array" });
            if (video) {
              mission2.push({
                type: "video",
                ele: video
              });
            }
            const question = tools.get_tag({ str: ".record_submit_redo", in_curent_frame: false, back_style: "array" });
            if (question) {
              mission2.push({
                type: "exam",
                ele: question
              });
            }
            document.dispatchEvent(mission_ready);
          });
          document.addEventListener("course_complete", function(e) {
            window.opener.postMessage({
              event: "add_log",
              type: "normal",
              content: "完成学习----《第" + all_course[0].parentNode.previousElementSibling.querySelector(".sectionNum").innerHTML + "节》",
              source: page_name
            }, "*");
            all_course.shift();
            if (all_course.length == 0) {
              window.opener.postMessage({
                event: "class_complete",
                source: "10000_study"
              }, "*");
              return;
            }
            all_course[0].click();
            window.setTimeout(function() {
              document.dispatchEvent(course_ready);
            }, 3e3);
          });
          const all_course = tools.get_tag({ str: "#learnMenu [itemtype='video'][completestate=0],[itemtype='test'][completestate=1]", in_curent_frame: false, back_style: "array" });
          const mission2 = [];
          document.dispatchEvent(course_ready);
          window.opener.postMessage({
            event: "add_log",
            type: "normal",
            content: "开始学习----《第" + all_course[0].parentNode.previousElementSibling.querySelector(".sectionNum").innerHTML + "节》",
            source: page_name
          }, "*");
        }, 2e3);
      },
      stop: function() {
        document.removeEventListener();
      }
    }
  ];
  const xuexitong = [
    {
      script_name: "学习通",
      script_id: "10001",
      element: ".box .content .main .course-tab .tab-item",
      load_option: true,
      run: function(yike_log2, fee2) {
        alert("请开启浏览器弹窗权限,否则脚本无法运行。若已开启请忽略");
        const new_version_ready = new Event("new_version_ready", { "bubbles": true, "cancelable": false });
        const class_ready = new Event("class_ready", { "bubbles": true, "cancelable": false });
        const class_complete = new Event("class_complete", { "bubbles": true, "cancelable": false });
        window.addEventListener("message", function(e) {
          console.log(e);
          const data = e.data;
          const source = data.source;
          if (source != "10001_study") {
            return;
          }
          const event = data.event;
          if (event == "class_start") {
            page_b = e.source;
          }
          if (event == "class_complete") {
            document.dispatchEvent(class_complete);
          }
          if (event == "add_log") {
            yike_log2(data.type, data.content);
          }
        }, false);
        document.addEventListener("new_version_ready", function() {
          all_class = tools.get_tag({ str: ".course-list .course", back_style: "array" }).filter(function(val, index) {
            return val.querySelector(".not-open-tip") == void 0;
          });
          document.dispatchEvent(class_ready);
        });
        document.addEventListener("class_ready", function(e) {
          if (all_class.length == 0) {
            yike_log2("normal", "您已完成所有课程学习");
            stop();
            return;
          }
          window.top.open(all_class[0].querySelector("a").href);
          yike_log2("normal", "开始学习---《" + all_class[0].querySelector(".course-name").title + "》");
        });
        document.addEventListener("class_complete", function(e) {
          yike_log2("normal", "完成学习---《" + all_class[0].querySelector(".course-name").title + "》");
          all_class.shift();
          page_b.top.close();
          if (all_class.length == 0) {
            yike_log2("normal", "您已完成所有课程学习");
            stop();
            return;
          }
          document.dispatchEvent(class_ready);
        });
        window.setInterval(function() {
          page_b.postMessage({
            event: "keep_active",
            source: page_name
          }, "*");
        }, 11e4);
        let page_b;
        let all_class;
        let page_name = "10001_main";
        let version = tools.get_tag({ str: ".box .content .main .course-tab a[onclick*='New']", in_curent_frame: false, back_style: "boolean" });
        if (version) {
          yike_log2("normal", "自动切换到新版");
          version.click();
          window.setTimeout(function() {
            document.dispatchEvent(new_version_ready);
          }, 3e3);
        } else {
          document.dispatchEvent(new_version_ready);
        }
        fee2.start_fee();
      },
      stop: function() {
        document.removeEventListener();
        fee.stop_fee();
      }
    },
    {
      script_name: "学习通",
      script_id: "10001",
      element: ".box .nav_side .sideCon .nav-content ul li a[title='任务']",
      intro: "课程下面的章节页面",
      run: function() {
        const a = tools.get_tag({ str: ".stuNavigationList li a[title='章节']", in_curent_frame: false, back_style: "object" });
        if (!a.parentNode.classList.contains("curNav")) {
          a.click();
        }
      },
      stop: function() {
      }
    },
    {
      script_name: "学习通",
      script_id: "10001",
      element: ".fanyaChapter .fanyaChapterWhite .chapter_head .xs_head_name .catalog_points_yi",
      intro: "章节页面下的框架",
      run: function() {
        const page_name = "10001_study";
        const main_window = window.top.opener.frames[0];
        main_window.postMessage({
          event: "class_start",
          source: page_name
        }, "*");
        const cource_not_finish = tools.get_tag({ str: ".chapter_unit li .chapter_item", in_curent_frame: false, back_style: "array" }).filter(function(val, index) {
          return val.querySelector(".icon_yiwanc") == void 0 && val.querySelector(".icon-bukaifang") == void 0;
        });
        if (cource_not_finish.length != 0) {
          cource_not_finish[0].click();
        } else {
          main_window.postMessage({
            event: "class_complete",
            source: page_name
          }, "*");
        }
      },
      stop: function() {
      }
    },
    {
      script_name: "学习通",
      script_id: "10001",
      element: ".left .content .z-index99 h2",
      intro: "看视频页面",
      run: function() {
        const mission_ready = new Event("mission_ready", { "bubbles": true, "cancelable": false });
        const mission_complete = new Event("mission_complete", { "bubbles": true, "cancelable": false });
        const course_ready = new Event("course_ready", { "bubbles": true, "cancelable": false });
        const course_complete = new Event("course_complete", { "bubbles": true, "cancelable": false });
        const page_name = "10001_study";
        const main_window = window.top.opener.frames[0];
        let lost_time2 = 0;
        main_window.postMessage({
          event: "class_start",
          source: page_name
        }, "*");
        window.setInterval(function() {
          if (lost_time2 >= 5) {
            stop();
            alert("挂机过程中,不要关闭主页面或者最小化浏览器窗口。脚本运行停止");
          } else {
            console.log("失去连接第 " + lost_time2 + "次");
            lost_time2 = lost_time2 + 1;
          }
        }, 15e3);
        window.addEventListener("message", function(e) {
          const data = e.data;
          const source = data.source;
          if (source != "10001_main") {
            return;
          }
          const event = data.event;
          if (event == "keep_active") {
            lost_time2 = 0;
          }
        }, false);
        document.addEventListener("mission_ready", function(e) {
          console.log(mission2);
          if (mission2[0].type == "video") {
            mission2[0].ele.muted = "muted";
            mission2[0].ele.play();
            mission2[0].ele.addEventListener("ended", function() {
              console.log("播放结束");
              document.dispatchEvent(mission_complete);
            });
            mission2[0].ele.addEventListener("canplay", function() {
              console.log("开始播放");
              mission2[0].ele.muted = "muted";
              mission2[0].ele.play();
            });
            mission2[0].ele.addEventListener("paused", function() {
              mission2[0].ele.muted = "muted";
              mission2[0].ele.play();
            });
            return;
          }
          if (mission2[0].type == "read") {
            console.log("跳过阅读任务");
            window.setTimeout(function() {
              document.dispatchEvent(mission_complete);
            }, 3e3);
            return;
          }
          if (mission2[0].type == "question") {
            console.log("跳过答题任务");
            window.setTimeout(function() {
              document.dispatchEvent(mission_complete);
            }, 3e3);
            return;
          }
          if (mission2[0].type == "download") {
            console.log("跳过下载任务");
            window.setTimeout(function() {
              document.dispatchEvent(mission_complete);
            }, 3e3);
            return;
          }
        });
        document.addEventListener("mission_complete", function(e) {
          mission2.shift();
          if (mission2.length == 0) {
            document.dispatchEvent(course_complete);
            return;
          }
          document.dispatchEvent(mission_ready);
        });
        document.addEventListener("course_ready", function(e) {
          main_window.postMessage({
            event: "add_log",
            type: "normal",
            content: "开始学习----《" + all_course[0].querySelector(".posCatalog_name").title + "》",
            source: page_name
          }, "*");
          console.log(tools.get_tag({ str: "video", in_curent_frame: false, back_style: "array" }));
          const video = tools.get_tag({ str: "video", in_curent_frame: false, back_style: "array" }).map(function(val, index) {
            return {
              type: "video",
              ele: val
            };
          });
          console.log(video);
          const read = tools.get_tag({ str: ".wrap .ans-cc .insertdoc-online-ppt", in_curent_frame: false, back_style: "array" }).map(function(val, index) {
            return {
              type: "read",
              ele: val
            };
          });
          const question = tools.get_tag({ str: "#formId #questionpart", in_curent_frame: false, back_style: "array" }).map(function(val, index) {
            return {
              type: "question",
              ele: val
            };
          });
          const download = tools.get_tag({ str: ".wrap .ans-cc .underline", in_curent_frame: false, back_style: "array" }).map(function(val, index) {
            return {
              type: "download",
              ele: val
            };
          });
          mission2 = mission2.concat(video, read, question, download);
          document.dispatchEvent(mission_ready);
        });
        document.addEventListener("course_complete", function(e) {
          main_window.postMessage({
            event: "add_log",
            type: "normal",
            content: "完成学习----《" + all_course[0].querySelector(".posCatalog_name").title + "》",
            source: page_name
          }, "*");
          all_course.shift();
          if (all_course.length == 0) {
            main_window.postMessage({
              event: "class_complete",
              source: "10001_study"
            }, "*");
            return;
          }
          all_course[0].querySelector(".posCatalog_name").click();
          window.setTimeout(function() {
            document.dispatchEvent(course_ready);
          }, 3e3);
        });
        const all_course = tools.get_tag({ str: "#coursetree .posCatalog_level .posCatalog_select", in_curent_frame: false, back_style: "array" }).filter(function(val, index) {
          return val.querySelector(".icon_Completed") == void 0;
        });
        let mission2 = [];
        document.dispatchEvent(course_ready);
      },
      stop: function() {
        document.removeEventListener();
      }
    }
  ];
  const zhihuizhijiao = [
    {
      script_name: "智慧职教-我的中心",
      script_id: "10005",
      element: ".main .main-wrapper .mode-wrapper .mode-body .tabs-body #openingData",
      load_option: true,
      run: function(yike_log2, fee2) {
        alert("1.请开启弹窗权限,否则脚本无法运行。若已开启请忽略;\n2.挂机过程中,请保持此页面始终在前台工作;\n3.手动点击一门课程后,脚本即可自动运行");
        const class_ready = new Event("class_ready", { "bubbles": true, "cancelable": false });
        const class_complete = new Event("class_complete", { "bubbles": true, "cancelable": false });
        fee2.start_fee();
        window.setInterval(function() {
          console.log(get_format_date() + " 向study页发送active消息");
          page_b.postMessage({
            event: "keep_active",
            source: page_name
          }, "*");
        }, 1e5);
        let page_b;
        const page_name = "main";
        const all_class = tools.get_tag({ str: "#openingData a", in_curent_frame: false, back_style: "array" });
        window.addEventListener("message", function(e) {
          const data = e.data;
          const source = data.source;
          const event = data.event;
          if (source != "study") {
            return;
          }
          if (event == "class_start") {
            page_b = e.source;
          }
          if (event == "class_complete") {
            document.dispatchEvent(class_complete);
          }
          if (event == "add_log") {
            yike_log2(data.type, data.content);
          }
        }, false);
        document.addEventListener("class_ready", function(e) {
          if (all_class.length == 0) {
            yike_log2("normal", "您已完成所有课程学习");
            stop();
            return;
          }
          all_class[0].click();
          const class_name = all_class[0].parentNode.parentNode.parentNode.querySelector(".course-name").text;
          yike_log2("normal", "开始学习---《" + class_name + "》");
        });
        document.addEventListener("class_complete", function(e) {
          all_class.shift();
          page_b.close();
          if (all_class.length == 0) {
            yike_log2("normal", "您已完成所有课程学习");
            stop();
            return;
          }
          document.dispatchEvent(class_ready);
        });
        document.dispatchEvent(class_ready);
      },
      stop: function() {
        yike_log("error", "挂机结束,脚本停止运行");
        document.removeEventListener();
      }
    },
    {
      script_name: "智慧职教-学习页面",
      script_id: "10005",
      element: ".body-withmenu .learn-header .header-wrap .pull-right .info #learnTimer",
      run: function() {
        const mission_ready = new Event("mission_ready", { "bubbles": true, "cancelable": false });
        const mission_complete = new Event("mission_complete", { "bubbles": true, "cancelable": false });
        const course_complete = new Event("course_complete", { "bubbles": true, "cancelable": false });
        const course_ready = new Event("course_ready", { "bubbles": true, "cancelable": false });
        const page_name = "study";
        unsafeWindow.confirm = function() {
          console.log(get_format_date() + "我被HOOK了");
          return true;
        };
        unsafeWindow.alert = function() {
          return true;
        };
        window.confirm = function() {
          console.log(get_format_date() + "我被HOOK了");
          return true;
        };
        window.alert = function() {
          return true;
        };
        window.top.opener.postMessage({
          event: "class_start",
          source: page_name
        }, "*");
        const timer_active = window.setInterval(function() {
          if (lost_time >= 5) {
            stop();
            window.clearInterval(timer_active);
            alert("挂机过程中,不要关闭主页面。脚本运行停止");
          } else {
            console.log("失去连接第 " + lost_time + "次");
            lost_time = lost_time + 1;
          }
        }, 11e4);
        window.addEventListener("message", function(e) {
          const data = e.data;
          const source = data.source;
          if (source != "main") {
            return;
          }
          const event = data.event;
          if (event == "keep_active") {
            console.log(get_format_date() + "----学习页收到通知");
            lost_time = 0;
          }
        }, false);
        window.setTimeout(function() {
          const all_course = tools.get_tag("#learnMenu .s_sectionlist .s_point[completestate=0]").toArray();
          document.addEventListener("mission_ready", function(e) {
            if (mission[0].type == "video") {
              mission[0].ele.addEventListener("ended", function() {
                console.log("播放结束");
                document.dispatchEvent(mission_complete);
              });
              return;
            }
          });
          document.addEventListener("mission_complete", function(e) {
            mission.shift();
            if (mission.length == 0) {
              document.dispatchEvent(course_complete);
              return;
            }
            document.dispatchEvent(mission_ready);
          });
          document.addEventListener("course_complete", function(e) {
            window.opener.postMessage({
              event: "add_log",
              type: "normal",
              content: "完成学习----《" + tools.get_tag({ str: ".s_pointti", element: all_course[0], back_style: "object" }).text + "》",
              source: page_name
            }, "*");
            all_course.shift();
            if (all_course.length == 0) {
              window.top.opener.postMessage({
                event: "class_complete",
                source: page_name
              }, "*");
              return;
            }
            document.dispatchEvent(course_ready);
          });
          document.addEventListener("course_ready", function(e) {
            window.opener.postMessage({
              event: "add_log",
              type: "normal",
              content: "开始学习----《" + tools.get_tag({ str: ".s_pointti", element: all_course[0], back_style: "object" }).text + "》",
              source: page_name
            }, "*");
            all_course[0].click();
            window.setTimeout(function() {
              const course_type = all_course[0].itemtype;
              if (course_type == "video") {
                const video = tools.get_tag({ str: "video", in_curent_frame: false, back_style: "object" });
                video.muted = "muted";
                video.play();
                const video_timer = window.setInterval(function() {
                  if (video.ended) {
                    console.log("视频播放结束");
                    document.dispatchEvent(course_complete);
                    window.clearInterval(video_timer);
                  }
                }, 1e4);
              } else if (course_type == "doc") {
                window.setTimeout(function() {
                  console.log("完成看文档");
                  document.dispatchEvent(course_complete);
                }, 1e4);
              } else if (course_type == "topic") {
                const topic_content = "感谢老师分享";
                const editor = tools.get_tag({ str: "#myEditor", in_curent_frame: false, back_style: "object" }).ownerDocument.defaultView.myEditor;
                const submit_btn = tools.get_tag({ str: "#commentDiv .submit a", in_curent_frame: false, back_style: "object" });
                editor.setContent(topic_content);
                window.setTimeout(function() {
                  submit_btn.get(0).click();
                }, 5e3);
                window.setTimeout(function() {
                  document.dispatchEvent(course_complete);
                }, 1e4);
              } else if (course_type == "text") {
                window.setTimeout(function() {
                  console.log("完成看图文");
                  document.dispatchEvent(course_complete);
                }, 1e4);
              } else if (course_type == "exam") {
                window.setTimeout(function() {
                  window.top.opener.postMessage({
                    event: "add_log",
                    type: "error",
                    content: "考试任务,功能暂不支持,跳过该任务",
                    source: page_name
                  }, "*");
                  document.dispatchEvent(course_complete);
                }, 5e3);
              } else {
                window.top.opener.postMessage({
                  event: "add_log",
                  type: "error",
                  content: "未知任务,跳过。。。",
                  source: page_name
                }, "*");
                document.dispatchEvent(course_complete);
              }
            }, 5e3);
          });
          document.dispatchEvent(course_ready);
        }, 4e3);
      },
      stop: function() {
        document.removeEventListener();
      }
    }
  ];
  const jiaoben = [].concat(shanxijixujiaoyu, xuexitong, zhihuizhijiao);
  const App_vue_vue_type_style_index_0_scoped_8e71a76d_lang = "";
  const _export_sfc = (sfc, props) => {
    const target = sfc.__vccOpts || sfc;
    for (const [key, val] of props) {
      target[key] = val;
    }
    return target;
  };
  const _withScopeId = (n) => (vue.pushScopeId("data-v-8e71a76d"), n = n(), vue.popScopeId(), n);
  const _hoisted_1 = {
    key: 0,
    class: "yike"
  };
  const _hoisted_2 = { class: "yike_tab_menu" };
  const _hoisted_3 = { class: "yike_tab_box" };
  const _hoisted_4 = {
    key: 0,
    class: "yike_tab_status"
  };
  const _hoisted_5 = {
    key: 0,
    class: "yike_not_login"
  };
  const _hoisted_6 = {
    key: 1,
    class: "yike_has_login"
  };
  const _hoisted_7 = { class: "yike_vali_code" };
  const _hoisted_8 = { class: "yike_text" };
  const _hoisted_9 = { class: "yike_left_time" };
  const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("a", {
    class: "yike_link",
    href: "https://www.yuque.com/g/qingjiaowodashen-wfovj/ysytwa/collaborator/join?token=F8MMg7LtrrvbcBgd# 《脚本使用说明》"
  }, "脚本无法使用?|充值", -1));
  const _sfc_main = {
    __name: "App",
    setup(__props) {
      const curent_menu_index = vue.ref(0);
      const vali_code = vue.ref("04ANIF1DH8I4VL4P121CWIND8MG5Y5UN");
      const back_url = "https://85530a3e-fc46-4ea4-a542-160dad54a088.bspapp.com/user";
      const log_content = vue.ref([]);
      const log = vue.ref(null);
      const vali_code_info = vue.ref({});
      var _script = vue.ref({});
      vue.computed(() => {
        return _script.run;
      });
      vue.computed(() => {
        return _script.stop;
      });
      const login_flag = vue.computed(() => {
        return vali_code_info.value.vali_code != void 0;
      });
      const yike_log2 = function(type, text) {
        const time = tools.get_format_date();
        log_content.value.push({
          time,
          type,
          text
        });
        log.scrollTop = log.scrollHeight;
      };
      const login = function() {
        if (vali_code.value.length != 32) {
          alert("验证码格式错误,请重新输入");
          return;
        }
        GM_xmlhttpRequest({
          method: "POST",
          url: back_url,
          data: JSON.stringify({
            action: "get_vali_code_info",
            data: {
              vali_code: vali_code.value
            }
          }),
          headers: {
            "Content-Type": "application/json;charset=utf-8"
          },
          onload: function(response) {
            const res = JSON.parse(response.responseText);
            console.log(res);
            if (res.code !== 0) {
              yike_log2("error", res.message);
              return;
            }
            GM_setValue("vali_code_info", res.vali_code_info);
            vali_code_info.value = res.vali_code_info;
            _script.value.run(yike_log2, fee2);
          }
        });
      };
      const copy_vali_code = function() {
        window.navigator.clipboard.writeText(vali_code_info.value.vali_code);
        alert("注册码复制成功");
      };
      const fee2 = {
        fee_timer: void 0,
        start_fee: function() {
          window.setInterval(function() {
            console.log("开始计费");
            GM_xmlhttpRequest({
              method: "POST",
              url: back_url,
              headers: {
                "Content-Type": "application/json;charset=utf-8"
              },
              data: JSON.stringify({
                action: "fee",
                data: {
                  vali_code: vali_code_info.value.vali_code
                }
              }),
              onload: function(response) {
                console.log("完成计费");
                const res = JSON.parse(response.responseText);
                if (res.code !== 0) {
                  yike_log2("error", res.message);
                  return;
                }
                console.log(res.vali_code_info);
                GM_setValue("vali_code_info", res.vali_code_info);
                vali_code_info.value = res.vali_code_info;
              }
            });
          }, 3e5);
        },
        stop_fee: function() {
          console.log("停止计费");
          window.clearInterval(fee2.timer);
        }
      };
      vue.onMounted(() => {
        vali_code_info.value = GM_getValue("vali_code_info", {});
        window.setTimeout(function() {
          _script.value = tools.get_script(jiaoben);
          console.log(_script.value);
          if (_script.value.run == void 0) {
            console.log("对不起,未找到对应脚本\n 1.本提示由第三方脚本产生,如非本意,请在脚本控制台关闭脚本。 \n 2.如果您打开的页面为相应网课平台,说明脚本匹配失败,请联系作者。");
            return;
          }
          if (login_flag.value) {
            _script.value.run(yike_log2, fee2);
          }
        }, 4e3);
      });
      return (_ctx, _cache) => {
        return vue.unref(_script).load_option ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
          vue.createElementVNode("div", _hoisted_2, [
            vue.createElementVNode("div", {
              class: vue.normalizeClass({ yike_current_menu: curent_menu_index.value == 0, menu_item: true }),
              onClick: _cache[0] || (_cache[0] = ($event) => curent_menu_index.value = 0)
            }, "启动脚本 ", 2),
            vue.createElementVNode("div", {
              class: vue.normalizeClass({ yike_current_menu: curent_menu_index.value == 1, menu_item: true }),
              onClick: _cache[1] || (_cache[1] = ($event) => curent_menu_index.value = 1)
            }, "运行日志 ", 2)
          ]),
          vue.createElementVNode("div", _hoisted_3, [
            curent_menu_index.value == 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
              !vue.unref(login_flag) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [
                vue.withDirectives(vue.createElementVNode("input", {
                  class: "yike_input",
                  placeholder: "请输入32位注册码",
                  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vali_code.value = $event)
                }, null, 512), [
                  [vue.vModelText, vali_code.value]
                ]),
                vue.createElementVNode("button", {
                  class: "yike_btn",
                  onClick: login
                }, "启动脚本")
              ])) : vue.createCommentVNode("", true),
              vue.unref(login_flag) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
                vue.createElementVNode("div", _hoisted_7, [
                  vue.createElementVNode("span", _hoisted_8, vue.toDisplayString(vali_code_info.value.vali_code), 1),
                  vue.createTextVNode(),
                  vue.createElementVNode("button", {
                    class: "yike_copy",
                    onClick: copy_vali_code
                  }, "复制")
                ]),
                vue.createElementVNode("div", _hoisted_9, "剩余时间: " + vue.toDisplayString(vali_code_info.value.left_time) + " 分钟", 1),
                _hoisted_10
              ])) : vue.createCommentVNode("", true)
            ])) : vue.createCommentVNode("", true),
            curent_menu_index.value == 1 ? (vue.openBlock(), vue.createElementBlock("div", {
              key: 1,
              class: "yike_log",
              ref_key: "log",
              ref: log
            }, [
              (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(log_content.value, (item) => {
                return vue.openBlock(), vue.createElementBlock("div", null, [
                  vue.createElementVNode("div", {
                    class: vue.normalizeClass({ yike_error: item.type == "error" })
                  }, [
                    vue.createElementVNode("span", null, vue.toDisplayString(item.time), 1),
                    vue.createElementVNode("span", null, vue.toDisplayString(item.text), 1)
                  ], 2)
                ]);
              }), 256))
            ], 512)) : vue.createCommentVNode("", true)
          ])
        ])) : vue.createCommentVNode("", true);
      };
    }
  };
  const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8e71a76d"]]);
  vue.createApp(App).mount(
    (() => {
      const app = document.createElement("div");
      document.body.append(app);
      return app;
    })()
  );
})(Vue);