├── Tjxk.js
├── images
├── common.png
├── console.png
├── gl1.png
├── gl2.png
├── myc.png
├── result.png
├── url1.png
├── xuanke.png
├── xuanke1.png
├── xuanke10.png
├── xuanke11.png
├── xuanke2.png
├── xuanke3.png
├── xuanke4.png
├── xuanke5.png
├── xuanke6.png
├── xuanke7.png
├── xuanke8.png
└── xuanke9.png
├── main.js
├── readme.md
└── rober.js
/Tjxk.js:
--------------------------------------------------------------------------------
1 | function xkViewLoad_exe() {
2 | var arr = new Array();
3 | xkrsMap = top.getJxbXkrs();
4 | var xklcObj = top.xklcObjMap[top.xkLcbh],
5 | sfzyxk = top.xkszObjMap["XKSZ_SFQYZYXK"];
6 | for (jxbid in xkJxbList) {
7 | var jxbObj = xkJxbList[jxbid],
8 | jgObj = top.xkJxbFilter(jxbObj),
9 | xkView = "
",
10 | vXkzy = " ";
11 |
12 | //TODO:
13 | if (jxbObj.gljxbList.length == 0) {
14 | xkView = "
添加抢课事件
"
15 | } else {
16 | xkView = "显示关联课表
"
17 | }
18 | // var xkView = "
",
19 | //TODO:
20 |
21 | if (sfzyxk == "1") vXkzy = top.getXkzyView(jxbObj.jxbid, jxbObj.kcxzdm);
22 | if (eval(jgObj.isYx)) continue;
23 | var tYxkrs = (xkrsMap[jxbid] != null && xkrsMap[jxbid] != "") ? xkrsMap[jxbid] : 0,
24 | vXkrs = jxbObj.krl + "/" + tYxkrs;
25 | if (xklcObj.xkmsdm != "01" && parseInt(tYxkrs) >= parseInt(jxbObj.krl)) vXkrs = "\u5df2\u6ee1";
26 | var vCtxx = "";
27 | if (jgObj.ctMsg != null && jgObj.ctMsg != "") {
28 | jxbXkctList[jxbid] = jgObj.ctMsg;
29 | vCtxx = "\u51b2\u7a81"
30 | }
31 | var vSksj = "",
32 | vSkdd = "";
33 | for (idx in jxbObj.pkxxList) {
34 | var pkxxObj = jxbObj.pkxxList[idx];
35 | if (vSksj != "") vSksj += "
";
36 | var jcxx = "";
37 | if (pkxxObj.ksjcmc != null && pkxxObj.ksjcmc != "" && pkxxObj.jsjcmc != null && pkxxObj.jsjcmc != "") jcxx = pkxxObj.ksjcmc + "-" + pkxxObj.jsjcmc;
38 | var skxq = "";
39 | if (pkxxObj.skxq != null && pkxxObj.skxq != "") skxq = top.xqObjMap[pkxxObj.skxq];
40 | vSksj += skxq + " " + jcxx + " " + pkxxObj.zcmc;
41 | if (vSkdd != "") vSkdd += "
";
42 | vSkdd += pkxxObj.jsmc
43 | }
44 | var data = new Array();
45 | data[0] = jxbObj.jxbid;
46 | data[1] = jxbObj.kch;
47 | data[2] = jxbObj.kcm;
48 | data[3] = "" + jxbObj.kxh + "";
49 | data[4] = (jxbObj.jxbmc == null || jxbObj.jxbmc == "") ? " " : jxbObj.jxbmc;
50 | data[5] = jxbObj.xs;
51 | data[6] = jxbObj.xf;
52 | data[7] = (jxbObj.jhxndm == null || jxbObj.jhxndm == "") ? " " : jxbObj.jhxndm;
53 | var jhxnmc = top.jhxnObjMap[jxbObj.jhxndm];
54 | data[8] = (jhxnmc == null || jhxnmc == "") ? " " : jhxnmc;
55 | data[9] = (jxbObj.jhxqdm == null || jxbObj.jhxqdm == "") ? " " : jxbObj.jhxqdm;
56 | var jhxqmc = top.jhxqObjMap[jxbObj.jhxqdm];
57 | data[10] = (jhxqmc == null || jhxqmc == "") ? " " : jhxqmc;
58 | data[11] = jxbObj.kclbdm;
59 | var kclbmc = top.kclbObjMap[jxbObj.kclbdm];
60 | data[12] = (kclbmc == null || kclbmc == "") ? " " : kclbmc;
61 | data[13] = jxbObj.kcxzdm;
62 | var kcxzmc = top.kcxzObjMap[jxbObj.kcxzdm];
63 | data[14] = (kcxzmc == null || kcxzmc == "") ? " " : kcxzmc;
64 | data[15] = jxbObj.kkdwdm;
65 | var kkdwmc = top.yxObjMap[jxbObj.kkdwdm];
66 | data[16] = (kkdwmc == null || kkdwmc == "") ? " " : kkdwmc;
67 | data[17] = jxbObj.xaqh;
68 | var xaqhmc = top.xaqObjMap[jxbObj.xaqh];
69 | data[18] = (xaqhmc == null || xaqhmc == "") ? " " : xaqhmc;
70 | data[19] = (top.strTrim(vSksj) == "") ? " " : vSksj;
71 | data[20] = (top.strTrim(vSkdd) == "") ? " " : vSkdd;
72 | var skjs = jxbObj.skjs;
73 | if (skjs != undefined) data[21] = skjs.length > 6 ? skjs.substring(0, 6) + " ...." : (skjs + " ");
74 | else data[21] = " ";
75 | data[22] = " ";
76 | data[23] = vXkrs;
77 | data[24] = vXkzy;
78 | var vXksm = vCtxx;
79 | if (jxbObj.gljxbList != null && jxbObj.gljxbList != "" && (jxbObj.gljxbList).length > 0) {
80 | if (vXksm != "") vXksm += "
";
81 | vXksm += "\u542b\u5173\u8054\u73ed"
82 | }
83 | if (jxbObj.xkwzsm != null && jxbObj.xkwzsm != "") {
84 | if (vXksm != "") vXksm += "
";
85 | vXksm += "\u9009\u8bfe\u8bf4\u660e"
86 | }
87 | if (jxbObj.xxkc != null && jxbObj.xxkc != "") {
88 | if (vXksm != "") vXksm += "
";
89 | vXksm += "\u5148\u4fee\u8bf4\u660e"
90 | }
91 | data[25] = (vXksm == "") ? " " : vXksm;
92 | data[26] = xkView;
93 | arr[arr.length] = data
94 | }
95 | createXkView("mainBody", arr, false)
96 | }
97 | xkViewLoad_exe()
98 |
--------------------------------------------------------------------------------
/images/common.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/common.png
--------------------------------------------------------------------------------
/images/console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/console.png
--------------------------------------------------------------------------------
/images/gl1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/gl1.png
--------------------------------------------------------------------------------
/images/gl2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/gl2.png
--------------------------------------------------------------------------------
/images/myc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/myc.png
--------------------------------------------------------------------------------
/images/result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/result.png
--------------------------------------------------------------------------------
/images/url1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/url1.png
--------------------------------------------------------------------------------
/images/xuanke.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke.png
--------------------------------------------------------------------------------
/images/xuanke1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke1.png
--------------------------------------------------------------------------------
/images/xuanke10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke10.png
--------------------------------------------------------------------------------
/images/xuanke11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke11.png
--------------------------------------------------------------------------------
/images/xuanke2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke2.png
--------------------------------------------------------------------------------
/images/xuanke3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke3.png
--------------------------------------------------------------------------------
/images/xuanke4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke4.png
--------------------------------------------------------------------------------
/images/xuanke5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke5.png
--------------------------------------------------------------------------------
/images/xuanke6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke6.png
--------------------------------------------------------------------------------
/images/xuanke7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke7.png
--------------------------------------------------------------------------------
/images/xuanke8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke8.png
--------------------------------------------------------------------------------
/images/xuanke9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xql799/SCUEC_AutoRobClass/04496f7198f81a4444303ce2d4236130d6e1d1c7/images/xuanke9.png
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | function getGljxbData(zJxbid) {
2 | var datas = eval("(" + $.ajax({
3 | url: "loadData.xk?method=getGljxb",
4 | data: {
5 | jxbid: zJxbid
6 | },
7 | async: false
8 | }).responseText + ")");
9 | if (datas == null || datas == "") return "";
10 | var xklcObj = top.xklcObjMap[top.xkLcbh],
11 | arr = new Array();
12 | for (var seq = 0; seq < datas.length; seq++) {
13 | var ysbObj = datas[seq];
14 | createGljxbList(ysbObj);
15 | var pkxxList = $.parseJSON(ysbObj.pkxx),
16 | sksjTxt = "",
17 | skddTxt = "";
18 | for (var yxIndex in pkxxList) {
19 | var pkxxObj = pkxxList[yxIndex];
20 | if (sksjTxt != "") sksjTxt += "
";
21 | if (pkxxObj.skxq != null && pkxxObj.skxq != "" && pkxxObj.ksjc != null && pkxxObj.ksjc != "" && pkxxObj.jsjc != null && pkxxObj.jsjc != "") sksjTxt += top.xqObjMap[pkxxObj.skxq] + " " + top.jcObjMap[pkxxObj.ksjc].jcmc + "-" + top.jcObjMap[pkxxObj.jsjc].jcmc + " " + " " + pkxxObj.zcmc + " ";
22 | if (skddTxt != "") skddTxt += "
";
23 | skddTxt += pkxxObj.jsmc
24 | }
25 | if (sksjTxt == "") sksjTxt = " ";
26 | if (skddTxt == "") skddTxt = " ";
27 | var vXkrs = ysbObj.krl + "/" + ysbObj.xkrs;
28 | if (xklcObj.xkmsdm != "01" && parseInt(ysbObj.xkrs) >= parseInt(ysbObj.krl)) vXkrs = "\u5df2\u6ee1";
29 | var vCtxx = "",
30 | ctMsg = getConflictMsg(ysbObj);
31 | if (ctMsg != null && ctMsg != "") {
32 | glJxbXkctList[ysbObj.jxbid] = ctMsg;
33 | vCtxx = "\u51b2\u7a81\uff1a" + "\u67e5\u770b"
34 | }
35 | var vXksm = vCtxx;
36 | if (ysbObj.sfxzxb == "1") {
37 | if (vXksm != "") vXksm += "
";
38 | vXksm += "\u9650\u5236\u9009\u8bfe\uff1a\u7537" + ysbObj.nsrs + "\u4eba\uff0c\u5973" + ysbObj.nvsrs + "\u4eba"
39 | }
40 | if (ysbObj.xxkc != null && ysbObj.xxkc != "") {
41 | if (vXksm != "") vXksm += "
";
42 | vXksm += "\u8981\u6c42\uff1a\u9700\u5148\u4fee\u8bfb[" + ysbObj.xxkc + "]\u8bfe\u7a0b"
43 | }
44 | if (ysbObj.xkwzsm != null && ysbObj.xkwzsm != "") {
45 | if (vXksm != "") vXksm += "
";
46 | vXksm += "\u8bf4\u660e\uff1a" + ysbObj.xkwzsm
47 | }
48 | var data = new Array();
49 | data[0] = ysbObj.jxbid;
50 | data[1] = ysbObj.kch;
51 | data[2] = ysbObj.kcm;
52 | data[3] = ysbObj.kxh;
53 | data[4] = ysbObj.xs;
54 | data[5] = ysbObj.xf;
55 | data[6] = ysbObj.xaqh;
56 | data[7] = ysbObj.kkdwdm;
57 | var kkdwmc = top.yxObjMap[ysbObj.kkdwdm];
58 | data[8] = (kkdwmc == null || kkdwmc == "") ? " " : kkdwmc;
59 | data[9] = (top.strTrim(sksjTxt) == "") ? " " : sksjTxt;
60 | data[10] = (top.strTrim(skddTxt) == "") ? " " : skddTxt;
61 | data[11] = ysbObj.skjs == null ? " " : ysbObj.skjs;
62 | data[12] = vXkrs;
63 | data[13] = (vXksm == "") ? " " : vXksm;
64 | //data[14] = "
";
65 | data[14] = xkView = "添加抢课事件
"
66 | arr[arr.length] = data
67 | }
68 | return arr
69 | }
70 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # 游览器控制台实现自动抢课
2 | 通过Chrome,Microsoft Edge游览器的DevTools实现SCUEC选课系统的自动抢课
3 |
4 | 为了减少错误,建议大家看看选课的大概原理
5 | ## 选课原理大概
6 | 
7 |
8 | ## 自动抢课的实现原理
9 | 选课的最重要的一步是**向选课系统发送特定的请求**
10 | 每次点击"选课"按钮并确定后便会发送一次选课请求
11 |
12 | 发送特定的请求可以理解为访问**特定的地址**,如下图:
13 | 
14 | 
15 | 因此可通过下段JS代码实现自动抢课(courseList按照格式里更改为自己的课程)
16 |
17 | ```
18 | //以下按照格式补充自己的课程
19 | coursesList = [
20 | {
21 | "name": "英语国家社会与文化", //自行填写课程
22 | "url": "http://xk.scuec.edu.cn/xsxk/xkOper.xk?method=handleTjxk&jxbid=2020-2021-220W10000151805&glJxbid=" //下文有介绍地址如何获取
23 | },
24 | {
25 | "name": "学术英语阅读与写作",
26 | "url": "http://xk.scuec.edu.cn/xsxk/xkOper.xk?method=handleTjxk&jxbid=2020-2021-220W10000101803&glJxbid="
27 | }
28 | ]
29 |
30 | //定义抢课函数
31 | function rob() {
32 | //解析课程
33 | courses = new Array(coursesList.length)
34 | for (let index in coursesList) {
35 | courses[index] = {
36 | 'name' : coursesList[index].name,
37 | 'url' : coursesList[index].url,
38 | 'request' : new XMLHttpRequest(),
39 | 'robEvent': null
40 | }
41 | }
42 |
43 | //注册抢课事件
44 | for (let index in courses) {
45 | courses.robEvent = setInterval(
46 | function () {
47 | courses
48 | courses[index].request.open("GET", courses[index].url, true)
49 | courses[index].request.send()
50 | courses[index].request.onreadystatechange = function() {
51 | if (courses[index].request.readyState == 4 && courses[index].request.status == 200) {
52 | console.log(courses[index].name + courses[index].request.responseText)
53 | if(courses[index].request.responseText.success = 'True') {
54 | clearInterval(courses[index].robEvent); //取消抢课事件
55 | }
56 | }
57 | }
58 | },
59 | 1000 //此处为每一门选课的选课周期 4000为4s
60 | )
61 | }
62 | return '开始执行抢课'
63 | }
64 | ```
65 |
66 | ### 脚本的执行
67 | **登陆选课之后**在任意的页面按下F12打开DevTools **(注意游览器关闭后需要重新登陆选课系统)**
68 | 
69 |
70 | 下图为效果图:
71 |
72 | 
73 |
74 | ## 请求地址的获取
75 |
76 | 先分析一下**推荐选课**的请求地址,例如
77 |
78 | > http://xk.scuec.edu.cn/xsxk/xkOper.xk?method=handleTjxk&jxbid=20202021221110001461804&glJxbid=
79 |
80 | 可拆解为以下几个部分
81 |
82 | - *http:///xk.scuec.edu.cn/xsxk/xkOper.xk*
83 | - *method=**handleTjxk***
84 | - *jxbid=**20202021221110001461804***
85 | - *glJxbid=*
86 |
87 | 改为自己需要的 **method** 和 **jxbid** 便可拼接出需要的请求地址
88 |
89 | 下图为可能出现的 **method(方法)** 和 **jxbid之类的参数**
90 | |method|对应选课|所需参数|
91 | |---|----|----|
92 | |handleTjxk|推荐选课|jxbid glJxbid|
93 | |handleBfakc|方案内选课|jxbid glJxbid|
94 | |handleKzyxk|方案外选课|jxbid glJxbid|
95 | |handleCxxk|重修选课|jxbid glJxbid|
96 | |handleTykxk(暂未测试)|体育选择选课|jxbid(暂未测试)|
97 | |handleQxgxk|通识课程选修|jxbid glJxbid xkzy (**注意:补选时不需要xkzy**)|
98 | |handleCxcy|创新创业类选课|jxbid|
99 |
100 | 下图为出现的参数代表的意义
101 | |参数名|意义|备注|
102 | |---|----|----|
103 | |jxbid|教学班ID|每个课程都有一个ID|
104 | |glJxbid|关联教学班ID|若非关联班则值为'空'|
105 | |xkzy|志愿等级|*这个应该用不上*|
106 |
107 | ### jxbid 的获取
108 | 
109 | 
110 |
111 | ### glJxbid 的获取
112 |
113 | #### 方法①
114 |
115 | **适用于在选课未开始时,提前查看关联课信息**
116 |
117 | 分析一下 **获取关联课表格** 时的请求
118 | > http://xk.scuec.edu.cn/xsxk/loadData.xk?method=getGljxb&jxbid=20202021220610003861801
119 |
120 | - *http:///xk.scuec.edu.cn/xsxk/loadData.xk*
121 | - *method=**getGljxb***
122 | - *jxbid=**20202021220610003861801***
123 |
124 | 将jxbid改换后,访问地址可以获取关联班信息,如图:
125 |
126 | 
127 |
128 | **重要的数据:**
129 |
130 | 
131 |
132 | **实际图关联课表对比**
133 |
134 | 
135 |
136 | #### 方法②
137 |
138 | **类似jxbid的获取,但一般用不上**
139 |
140 | 
141 |
142 |
143 |
144 | ### 检验自己写的请求地址是否正确的方法
145 | 
146 |
147 | **PS:选课开始之前可以通过这个方法检验URL是否正确**
148 |
149 |
150 | ### 最后
151 |
152 | 希望大家能选上最想要的课
153 |
154 | 有问题欢迎来联系我
155 |
156 |
157 |
--------------------------------------------------------------------------------
/rober.js:
--------------------------------------------------------------------------------
1 | var timer = 200;
2 | box = window.frames[0];
3 | Tjxk = window.frames[0][0];
4 | xkJxbList = Tjxk.xkJxbList;
5 | var robConsole = $(``);
6 | $("body").append(robConsole);
7 | $("#robConsole").css({
8 | "margin-top": "10px",
9 | "display": "flex",
10 | "flex-direction": "column",
11 | "font-size": "8px",
12 | "position": "fixed",
13 | "top": "0",
14 | "left": "0",
15 | "width": "560px"
16 | });
17 |
18 | function addRob(jxbid, glJxbid) {
19 | var JxbObj = top.xkJxbList[jxbid];
20 | //判断是否有关联班
21 | if ("undefined" == typeof glJxbid) {
22 | //判断是否注册抢课事件
23 | if ("undefined" == typeof JxbObj.robEvent) {
24 |
25 | //robInfo——显示的信息
26 | JxbObj.robInfo = $("");
27 | JxbObj.robInfo.css({
28 | "margin": "10px",
29 | "color": "red",
30 | "border": "1px solid",
31 | "width": "560px",
32 | "background-color": "black"
33 | });
34 | JxbObj.robInfo.click(function () {
35 | clearInterval(JxbObj.robEvent);
36 | JxbObj.robEvent = undefined;
37 | JxbObj.robInfo.remove();
38 | })
39 | robConsole.append(JxbObj.robInfo);
40 |
41 | //robEvent——抢课事件
42 | JxbObj.robEvent = setInterval(() => {
43 | $.ajax({
44 | type: "POST",
45 | url: "http://xk.scuec.edu.cn/xsxk/xkOper.xk",
46 | async: true, // 异步请求
47 | data: {
48 | method: 'handleTjxk',
49 | jxbid: jxbid,
50 | glJxbid: glJxbid
51 | },
52 | datatype: "json",
53 | success: function (data) {
54 | //TODO:更多信息
55 | JxbObj.robInfo[0].innerText = "课程号:" + JxbObj.jxbid + "课程名:" + JxbObj.kcm + "抢课结果:" + data;
56 | }
57 | })
58 | }, timer)
59 | }
60 | //没有关联班的情况
61 | } else {
62 | if ("undefined" == typeof JxbObj.robEvents) {
63 | JxbObj.robEvents = [];
64 | JxbObj.robInfos = [];
65 | }
66 |
67 | //未注册抢课则开始注册
68 | if ("undefined" == typeof JxbObj.robEvents[glJxbid]) {
69 |
70 | //robInfo——显示的信息
71 | JxbObj.robInfos[glJxbid] = $("");
72 | JxbObj.robInfos[glJxbid].css({
73 | "margin": "10px",
74 | "color": "red",
75 | "border": "1px solid",
76 | "width": "560px",
77 | "background-color": "black"
78 | });
79 | JxbObj.robInfos[glJxbid].click(function () {
80 | clearInterval(JxbObj.robEvent);
81 | JxbObj.robEvent = undefined;
82 | JxbObj.robInfo.remove();
83 | })
84 | robConsole.append(JxbObj.robInfos[glJxbid]);
85 |
86 | //robEvent——抢课事件
87 | JxbObj.robEvents[glJxbid] = setInterval(() => {
88 | $.ajax({
89 | type: "POST",
90 | url: "http://xk.scuec.edu.cn/xsxk/xkOper.xk",
91 | async: true, // 异步请求
92 | data: {
93 | method: 'handleTjxk',
94 | jxbid: jxbid,
95 | glJxbid: glJxbid
96 | },
97 | datatype: "json",
98 | success: function (data) {
99 | //TODO:更多信息
100 | JxbObj.robInfos[glJxbid][0].innerText = "课程号:" + JxbObj.jxbid + "课程名:" + JxbObj.kcm + "抢课结果:" + data;
101 | }
102 | })
103 | }, timer)
104 | }
105 | }
106 | }
107 |
108 | box.getGljxbData = function (zJxbid) {
109 | var datas = eval("(" + $.ajax({
110 | url: "loadData.xk?method=getGljxb",
111 | data: {
112 | jxbid: zJxbid
113 | },
114 | async: false
115 | }).responseText + ")");
116 | if (datas == null || datas == "") return "";
117 | var xklcObj = top.xklcObjMap[top.xkLcbh],
118 | arr = new Array();
119 | for (var seq = 0; seq < datas.length; seq++) {
120 | var ysbObj = datas[seq];
121 | box.createGljxbList(ysbObj);
122 | var pkxxList = $.parseJSON(ysbObj.pkxx),
123 | sksjTxt = "",
124 | skddTxt = "";
125 | for (var yxIndex in pkxxList) {
126 | var pkxxObj = pkxxList[yxIndex];
127 | if (sksjTxt != "") sksjTxt += "
";
128 | if (pkxxObj.skxq != null && pkxxObj.skxq != "" && pkxxObj.ksjc != null && pkxxObj.ksjc != "" && pkxxObj.jsjc != null && pkxxObj.jsjc != "") sksjTxt += top.xqObjMap[pkxxObj.skxq] + " " + top.jcObjMap[pkxxObj.ksjc].jcmc + "-" + top.jcObjMap[pkxxObj.jsjc].jcmc + " " + " " + pkxxObj.zcmc + " ";
129 | if (skddTxt != "") skddTxt += "
";
130 | skddTxt += pkxxObj.jsmc
131 | }
132 | if (sksjTxt == "") sksjTxt = " ";
133 | if (skddTxt == "") skddTxt = " ";
134 | var vXkrs = ysbObj.krl + "/" + ysbObj.xkrs;
135 | if (xklcObj.xkmsdm != "01" && parseInt(ysbObj.xkrs) >= parseInt(ysbObj.krl)) vXkrs = "\u5df2\u6ee1";
136 | var vCtxx = "",
137 | ctMsg = box.getConflictMsg(ysbObj);
138 | if (ctMsg != null && ctMsg != "") {
139 | box.glJxbXkctList[ysbObj.jxbid] = ctMsg;
140 | vCtxx = "\u51b2\u7a81\uff1a" + "\u67e5\u770b"
141 | }
142 | var vXksm = vCtxx;
143 | if (ysbObj.sfxzxb == "1") {
144 | if (vXksm != "") vXksm += "
";
145 | vXksm += "\u9650\u5236\u9009\u8bfe\uff1a\u7537" + ysbObj.nsrs + "\u4eba\uff0c\u5973" + ysbObj.nvsrs + "\u4eba"
146 | }
147 | if (ysbObj.xxkc != null && ysbObj.xxkc != "") {
148 | if (vXksm != "") vXksm += "
";
149 | vXksm += "\u8981\u6c42\uff1a\u9700\u5148\u4fee\u8bfb[" + ysbObj.xxkc + "]\u8bfe\u7a0b"
150 | }
151 | if (ysbObj.xkwzsm != null && ysbObj.xkwzsm != "") {
152 | if (vXksm != "") vXksm += "
";
153 | vXksm += "\u8bf4\u660e\uff1a" + ysbObj.xkwzsm
154 | }
155 | var data = new Array();
156 | data[0] = ysbObj.jxbid;
157 | data[1] = ysbObj.kch;
158 | data[2] = ysbObj.kcm;
159 | data[3] = ysbObj.kxh;
160 | data[4] = ysbObj.xs;
161 | data[5] = ysbObj.xf;
162 | data[6] = ysbObj.xaqh;
163 | data[7] = ysbObj.kkdwdm;
164 | var kkdwmc = top.yxObjMap[ysbObj.kkdwdm];
165 | data[8] = (kkdwmc == null || kkdwmc == "") ? " " : kkdwmc;
166 | data[9] = (top.strTrim(sksjTxt) == "") ? " " : sksjTxt;
167 | data[10] = (top.strTrim(skddTxt) == "") ? " " : skddTxt;
168 | data[11] = ysbObj.skjs == null ? " " : ysbObj.skjs;
169 | data[12] = vXkrs;
170 | data[13] = (vXksm == "") ? " " : vXksm;
171 | //data[14] = "
";
172 | data[14] = xkView = "添加抢课事件
"
173 | arr[arr.length] = data
174 | }
175 | return arr
176 | }
177 |
178 | Tjxk.xkViewLoad_exe = function () {
179 | var arr = new Array();
180 | xkrsMap = top.getJxbXkrs();
181 | var xklcObj = top.xklcObjMap[top.xkLcbh],
182 | sfzyxk = top.xkszObjMap["XKSZ_SFQYZYXK"];
183 | for (jxbid in xkJxbList) {
184 | var jxbObj = xkJxbList[jxbid],
185 | jgObj = top.xkJxbFilter(jxbObj),
186 | xkView = "
",
187 | vXkzy = " ";
188 |
189 | //TODO:
190 | if (jxbObj.gljxbList.length == 0) {
191 | xkView = "添加抢课事件
"
192 | } else {
193 | xkView = "显示关联课表
"
194 | }
195 | // var xkView = "
",
196 | //TODO:
197 |
198 | if (sfzyxk == "1") vXkzy = top.getXkzyView(jxbObj.jxbid, jxbObj.kcxzdm);
199 | if (eval(jgObj.isYx)) continue;
200 | var tYxkrs = (xkrsMap[jxbid] != null && xkrsMap[jxbid] != "") ? xkrsMap[jxbid] : 0,
201 | vXkrs = jxbObj.krl + "/" + tYxkrs;
202 | if (xklcObj.xkmsdm != "01" && parseInt(tYxkrs) >= parseInt(jxbObj.krl)) vXkrs = "\u5df2\u6ee1";
203 | var vCtxx = "";
204 | if (jgObj.ctMsg != null && jgObj.ctMsg != "") {
205 | this.jxbXkctList[jxbid] = jgObj.ctMsg;
206 | vCtxx = "\u51b2\u7a81"
207 | }
208 | var vSksj = "",
209 | vSkdd = "";
210 | for (idx in jxbObj.pkxxList) {
211 | var pkxxObj = jxbObj.pkxxList[idx];
212 | if (vSksj != "") vSksj += "
";
213 | var jcxx = "";
214 | if (pkxxObj.ksjcmc != null && pkxxObj.ksjcmc != "" && pkxxObj.jsjcmc != null && pkxxObj.jsjcmc != "") jcxx = pkxxObj.ksjcmc + "-" + pkxxObj.jsjcmc;
215 | var skxq = "";
216 | if (pkxxObj.skxq != null && pkxxObj.skxq != "") skxq = top.xqObjMap[pkxxObj.skxq];
217 | vSksj += skxq + " " + jcxx + " " + pkxxObj.zcmc;
218 | if (vSkdd != "") vSkdd += "
";
219 | vSkdd += pkxxObj.jsmc
220 | }
221 | var data = new Array();
222 | data[0] = jxbObj.jxbid;
223 | data[1] = jxbObj.kch;
224 | data[2] = jxbObj.kcm;
225 | data[3] = "" + jxbObj.kxh + "";
226 | data[4] = (jxbObj.jxbmc == null || jxbObj.jxbmc == "") ? " " : jxbObj.jxbmc;
227 | data[5] = jxbObj.xs;
228 | data[6] = jxbObj.xf;
229 | data[7] = (jxbObj.jhxndm == null || jxbObj.jhxndm == "") ? " " : jxbObj.jhxndm;
230 | var jhxnmc = top.jhxnObjMap[jxbObj.jhxndm];
231 | data[8] = (jhxnmc == null || jhxnmc == "") ? " " : jhxnmc;
232 | data[9] = (jxbObj.jhxqdm == null || jxbObj.jhxqdm == "") ? " " : jxbObj.jhxqdm;
233 | var jhxqmc = top.jhxqObjMap[jxbObj.jhxqdm];
234 | data[10] = (jhxqmc == null || jhxqmc == "") ? " " : jhxqmc;
235 | data[11] = jxbObj.kclbdm;
236 | var kclbmc = top.kclbObjMap[jxbObj.kclbdm];
237 | data[12] = (kclbmc == null || kclbmc == "") ? " " : kclbmc;
238 | data[13] = jxbObj.kcxzdm;
239 | var kcxzmc = top.kcxzObjMap[jxbObj.kcxzdm];
240 | data[14] = (kcxzmc == null || kcxzmc == "") ? " " : kcxzmc;
241 | data[15] = jxbObj.kkdwdm;
242 | var kkdwmc = top.yxObjMap[jxbObj.kkdwdm];
243 | data[16] = (kkdwmc == null || kkdwmc == "") ? " " : kkdwmc;
244 | data[17] = jxbObj.xaqh;
245 | var xaqhmc = top.xaqObjMap[jxbObj.xaqh];
246 | data[18] = (xaqhmc == null || xaqhmc == "") ? " " : xaqhmc;
247 | data[19] = (top.strTrim(vSksj) == "") ? " " : vSksj;
248 | data[20] = (top.strTrim(vSkdd) == "") ? " " : vSkdd;
249 | var skjs = jxbObj.skjs;
250 | if (skjs != undefined) data[21] = skjs.length > 6 ? skjs.substring(0, 6) + " ...." : (skjs + " ");
251 | else data[21] = " ";
252 | data[22] = " ";
253 | data[23] = vXkrs;
254 | data[24] = vXkzy;
255 | var vXksm = vCtxx;
256 | if (jxbObj.gljxbList != null && jxbObj.gljxbList != "" && (jxbObj.gljxbList).length > 0) {
257 | if (vXksm != "") vXksm += "
";
258 | vXksm += "\u542b\u5173\u8054\u73ed"
259 | }
260 | if (jxbObj.xkwzsm != null && jxbObj.xkwzsm != "") {
261 | if (vXksm != "") vXksm += "
";
262 | vXksm += "\u9009\u8bfe\u8bf4\u660e"
263 | }
264 | if (jxbObj.xxkc != null && jxbObj.xxkc != "") {
265 | if (vXksm != "") vXksm += "
";
266 | vXksm += "\u5148\u4fee\u8bf4\u660e"
267 | }
268 | data[25] = (vXksm == "") ? " " : vXksm;
269 | data[26] = xkView;
270 | arr[arr.length] = data
271 | }
272 | this.createXkView("mainBody", arr, false)
273 | }
274 |
275 | Tjxk.xkViewLoad_exe()
276 |
--------------------------------------------------------------------------------