Greasy Fork

Greasy Fork is available in English.

东南大学抢课助手new

听说你抢不到课

当前为 2021-07-29 提交的版本,查看 最新版本

// ==UserScript==
// @name         东南大学抢课助手new
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  听说你抢不到课
// @author       realhuhu
// @match        http://newxk.urp.seu.edu.cn/xsxk/elective/grablessons?*
// @icon         https://huhu-1304907527.cos.ap-nanjing.myqcloud.com/share/qkzs
// ==/UserScript==

(function () {
  'use strict';
  onload;

  // let jwt = sessionStorage.token;
  let ajax = axios.create();

  grablessonsVue.grabList = {
    "TJKC": [],
    "FANKC": [],
    "FAWKC": [],
    "TYKC": [],
    "XGKC": [],
  };


  grablessonsVue.grabRes = [];

  (self => {
    let app = document.getElementById("xsxkapp")

    self.mount = () => {
      self.createTag()
      self.createPanel()
    }

    self._createWrap = id => {
      let wrap = document.createElement("div")
      wrap.setAttribute("id", id)
      return wrap
    }

    self.createTag = () => {
      let wrap = self._createWrap("tag")
      wrap.innerHTML = `
      <div class="slideMenu" style="top: 250px;left:30px;width: 40px;" onclick="grablessonsVue.patch.toggle()">
        <div class="centre-btn item el-icon-date">
        </div>
      </div>
      `
      app.appendChild(wrap)
    }

    self.createPanel = () => {
      let wrap = self._createWrap("panel")
      wrap.style.display = "none"
      wrap.innerHTML = `
      <div style="position: fixed;right: 0;top:0 ;z-index: 114514;width: 350px; height: 100%;background-color: rgba(61,72,105,0.8)">
        <hr>
        <h1 style="color: #c7e6e6; text-align: center">东大抢课脚本</h1>
        <hr>
        <div>
          <input id="enter" type="text" class="el-input__inner" style="width: 96%;margin-left: 2%;height: 30px" placeholder="输入课程代码(不区分大小写),按回车确定" onkeydown="grablessonsVue.patch.enterCourse(\'' + event + '\')">
        </div>
        <div id="list-wrap" style="overflow: auto;margin: 10px;border:1px solid white;height: 50%">
          <h3 style='text-align: center;color:lightblue;margin-top: 50%'>还未选择课程</h3>
        </div>
        <button id="grab" type="button" style="display: flex;float: right;" class="el-button el-button--default el-button--large is-round" onclick="grablessonsVue.patch.grab()">一键抢课</button>
        <div style="position: fixed;bottom: 20%;right: 2%">
          <h5 style="color: white" onclick="grablessonsVue.patch.show()">显示结果</h5>
        </div>
        <div style="position: fixed;bottom: 10%;right: 2%">
          <h5 style="color: white">课程代码:课程号+教师号</h5>
        </div>
      </div>
      `
      app.appendChild(wrap)
    }
  })(grablessonsVue.Components = grablessonsVue.Components || {});

  grablessonsVue.patch = {
    toggle() {
      let node = document.getElementById("panel")
      node.style.display === "block" ? node.style.display = "none" : node.style.display = "block"
    },
    enterCourse(e) {
      let evt = window.event || e;
      if (evt.keyCode === 13) {
        let target = document.getElementById("enter")
        let id = "202120221" + target.value.toUpperCase()
        let type = grablessonsVue.teachingClassType
        let course = {}
        if (type === "TJKC") {

        } else if (type === "FANKC") {

        } else if (type === "FAWKC") {

        } else if (type === "TYKC") {
          for (let i of grablessonsVue.courseList[0].tcList) {
            if (i.JXBID === id) {
              course["id"] = id
              course["name"] = i.KCM
              course["teacher"] = i.SKJS
              course["key"] = i.secretVal
            }
          }
        } else if (type === "XGKC") {
          for (let i of grablessonsVue.courseList) {
            if (i.JXBID === id) {
              course["id"] = id
              course["name"] = i.KCM
              course["teacher"] = i.SKJS
              course["key"] = i.secretVal
            }
          }

        }
        if (JSON.stringify(course) !== '{}') {
          grablessonsVue.grabList[type].push(course)
          grablessonsVue.$message({
            type: "success",
            message: "添加成功"
          })
        } else {
          grablessonsVue.$message({
            type: "warning",
            message: "课程代码错误,请检查后重新输入"
          })
        }
        target.value = ""
        document.getElementById("list-wrap").innerHTML = grablessonsVue.patch.createList()
      }
    },
    grab() {
      grablessonsVue.grabRes = []
      let data = []
      for (let type of Object.keys(grablessonsVue.grabList)) {
        for (let raw of grablessonsVue.grabList[type]) {
          data.push({
            clazz: raw.name,
            dic: {
              clazz: raw.name,
              clazzType: type,
              clazzId: raw.id,
              secretVal: raw.key
            }
          })
        }
      }
      document.getElementById("grab").innerText = "请耐心等待"
      axios.all(data.map(raw => {
        return ajax({
          url: "/elective/clazz/add",
          method: "POST",
          headers: {
            'content-type': 'application/x-www-form-urlencoded'
          },
          data: Qs.stringify(raw.dic)
        }).then(function (response) {
          let type = response.data.code === 100 ? "success" : "warning"
          grablessonsVue.grabRes.push({
            clazz: raw.clazz,
            msg: response.data.msg
          })
          grablessonsVue.$message({
            type,
            message: raw.clazz + ":" + response.data.msg
          })
        }).catch(function (error) {
          grablessonsVue.$message({
            type: "error",
            message: "未知错误:" + error
          });
        })
      })).then(function () {
          if (Object.keys(grablessonsVue.grabList).map(type => grablessonsVue.grabList[type].length).reduce((x, y) => x + y)) {
            grablessonsVue.$message({
              type: "success",
              message: "抢课结束"
            })
            document.getElementById("grab").innerText = "再次抢课"
          } else {
            grablessonsVue.$message({
              type: "warning",
              message: "请选择课程"
            })
            document.getElementById("grab").innerText = "一键抢课"
          }

        }
      )

    },
    createList() {
      let courses = []
      for (let type of Object.keys(grablessonsVue.grabList)) {
        for (let course of grablessonsVue.grabList[type]) {
          courses.push({
            id: course.id,
            name: course.name,
            teacher: course.teacher
          })
        }
      }
      if (courses.length === 0) {
        return `<h3 style='text-align: center;color:lightblue;margin-top: 50%'>还未选择课程</h3>`
      } else {
        let html = `
        <table width="100%" border="1" style="background-color: rgba(0,0,0,0);color: lightblue">
          <tr style="height: 30px;background-color: #255e95">
            <th style="text-align:center;width: 60%">课程</th>
            <th style="text-align:center;width: 20%">教师</th>
            <th style="text-align:center;width: 20%">操作</th>
          </tr>
        `
        for (let course of courses) {
          html += '<tr style="height: 30px"><td style="text-align: center">' + course.name + '</td><td style="text-align: center">' + course.teacher + '</td><td style="text-align: center"><button onclick="grablessonsVue.patch.removeCourse(\'' + course.id + '\')">删除</button></td></tr>'
        }
        html += "</table>"
        return html
      }
    },
    removeCourse(id) {
      console.log(id);
      let n = 0
      for (let type of Object.keys(grablessonsVue.grabList)) {
        for (let course of grablessonsVue.grabList[type]) {
          if (course.id === id) {
            n = grablessonsVue.grabList[type].indexOf(course)
            grablessonsVue.grabList[type].splice(n, 1);
          }
        }
      }
      document.getElementById("list-wrap").innerHTML = grablessonsVue.patch.createList()
    },
    show(){
      alert(grablessonsVue.grabRes.map(res => res.clazz+":"+res.msg).join("\n"))
    }
  };

  grablessonsVue.Components.mount();
})();