// ==UserScript== // @name 东南大学抢课助手 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 听说你抢不到课 // @author realhuhu // @match http://newxk.urp.seu.edu.cn/xsxkapp/sys/xsxkapp/* // @icon https://huhu-1304907527.cos.ap-nanjing.myqcloud.com/share/qkzs // @grant none // @downloadURL none // ==/UserScript== (function () { 'use strict'; (_ => { _.init = () => { window.raw = {} window.result = [] getAllCourses() } let getAllCourses = () => { $.ajax({ type: "POST", url: "http://newxk.urp.seu.edu.cn/xsxkapp/sys/xsxkapp/elective/recommendedCourse.do", data: buildQueryTCParam(""), dataType: "json", ContentType: "application/json", beforeSend: XMLHttpRequest => { XMLHttpRequest.setRequestHeader("token", sessionStorage["token"]) }, success: data => { window.allCourses = data.dataList window.allCoursesId = getAllCoursesId(data.dataList) } }) } let getAllCoursesId = allCourses => { let allCoursesId = [] allCourses.forEach(value => { value.tcList.forEach(value => { allCoursesId.push(value.teachingClassID) }) }) return allCoursesId } let getSingleCourse = id => { let courseName = "" let teacherName = "" let info = {} allCourses.forEach(value => { courseName = value.courseName value.tcList.forEach(value => { if (value.teachingClassID === id) { teacherName = value.teacherName info = {course: courseName, teacher: teacherName} } }) }) return info } _.updateRaw = id => { if (window.raw[id] === undefined) { let index = Object.keys(window.raw).map(s => s.substr(0, s.length - 2)).indexOf(id.substr(0, id.length - 2)) if (index === -1) { window.raw[id] = getSingleCourse(id) $.bhTip({ content: "已添加", state: "success", hideWaitTime: 1000 }) } else { window.raw.length = 0 Object.keys(window.raw).splice(index, 1, id).forEach(key => { raw[key] = getSingleCourse(key) }) $.bhTip({ content: "已替换", state: "success", hideWaitTime: 1000 }) } } else { $.bhTip({ content: "你已经添加过这门课了", state: "danger", hideWaitTime: 2000 }) } Components.reloadList() } })(window.Courses = window.Courses || {}); (_ => { _.mount = () => { createTag() createPanel() createModal() createAddButton() } let createTag = () => { let target = $(".cv-icons")[0] let wrap = document.createElement("div") wrap.setAttribute("class", "cv-user-icon cvMiniIconFlag") wrap.setAttribute("title", "抢课列表") wrap.setAttribute("onclick", "toggle()") wrap.innerHTML = tagTemplate() target.appendChild(wrap) } let createPanel = () => { let target = $("body")[0] let wrap = document.createElement("div") wrap.setAttribute("class", "panel hide") wrap.setAttribute("style", "display:none") wrap.innerHTML = panelTemplate() target.appendChild(wrap) } let createModal = () => { let target = $("body")[0] let wrap = document.createElement("div") wrap.setAttribute("class", "musk cover") wrap.setAttribute("style", "display:none; z-index:10000000;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.8)") wrap.innerHTML = _.modalTemplate(result) target.appendChild(wrap) } let createAddButton = () => { let row = [] let cards = [] new Promise((resolve, reject) => { let timer = setInterval(() => { row = $("article .cv-row") if (row.length !== 0) { clearInterval(timer) resolve() } }, 10) }).then(successMessage => { for (let i = 0; i < row.length; i++) { row[i].addEventListener("click", () => { new Promise((resolve, reject) => { let timer = setInterval(() => { let target = row[i] cards = target.getElementsByClassName("cv-info") if (cards.length !== 0) { clearInterval(timer) resolve() } }, 10) }).then(successMessage => { for (let j = 0; j < cards.length; j++) { let target = cards[j] let id = target.querySelectorAll("button[tcid]")[0].getAttribute("tcid") if (target.getElementsByClassName("add").length === 0) { let wrap = document.createElement("div") wrap.setAttribute("class", "cv-caption-text cv-operation add") wrap.innerHTML = '' target.appendChild(wrap) } } }) }) } }) } let tagTemplate = () => '' let panelTemplate = () => { let content = '' content += '