Greasy Fork is available in English.
解放雙手神器~
// ==UserScript==
// @name 云班课作业助手
// @namespace http://tampermonkey.net/
// @version 0.3
// @description 解放雙手神器~
// @author 汐
// @match https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=*&clazz_course_id=*&id=*&order_item=*
// @icon https://www.google.com/s2/favicons?domain=mosoteach.cn
// @grant none
// ==/UserScript==
;(function(_this) {
function MyPage(menu){
this.axios = _this.axios;
this.Qs =_this.Qs;
this.$ = _this.$;
this.json = _this.JSON
this.namespace = menu.id;
this.menu = menu;
this.config = {};
this.initMenu();
return this;
}
MyPage.prototype.urlToObject = function(url){
let obj = {}
let arr1 = url.split("?")
let arr2 = arr1[1].split("&")
for(let i=0;i<arr2.length;i++){
let res = arr2[i].split("=")
obj[res[0]]=res[1]
}
return obj;
}
MyPage.prototype.resoluAnswers=function(data){
let newData = {};
newData.id = data.id;
newData.title = data.title;
newData.rows = [];
data.rows.forEach(row=>{
let _data = {};
_data.id = row.id;
_data.subject = row.subject;
_data.options = [];
row.answers.forEach(index =>{
row.options.forEach(option=>{
if(option.item_no == index){
_data.options.push(option.content);
}
});
});
newData.rows.push(_data);
});
return newData;
}
MyPage.prototype.getListMember = function(clazzcourseId){
return new Promise((resolve,rejcet)=>{
this.$.ajax({
type: 'post',
url:"https://www.mosoteach.cn/web/index.php?c=member&m=get_list_member",
dataType:"json",
data: {
clazz_course_id: clazzcourseId,
order_item: 'score'
},
success: function(res) {
resolve(res.data.member_data);
}
});
});
}
MyPage.prototype.personResult = function(ccId,userId){
return this.axios({
method: 'post',
data: this.Qs.stringify({
id: ccId,
user_id: userId,
}),
url: 'https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=person_result',
});
}
MyPage.prototype.initMenu = function(){
let $ = this.$,menu = this.menu;
let $menu = $(
`<div id='${menu.id}' style="text-align:center;width:${menu.width}px;height:${menu.height}px;position:absolute;left:${menu.pos.x}px;top:${menu.pos.y}px;background:${menu.background};opacity:${menu.opacity};">
<button id="x_init" style="width:100%;" onclick="my.initData()">初始化數據</button>
<button id="x_start" style="width:100%;" onclick="my.start()">開始腳本</button>
</div>`);
$('body').append($menu);
}
MyPage.prototype.initData = async function(){
this.config = this.urlToObject(window.location.href);
let {data:objectList} = await (this.getListMember(this.config.clazz_course_id));
if(objectList.length <= 0 ){
return alert("user_id獲取失敗");
}
this.config.user_id = objectList[0].user_id;
let {data:res} = await (this.personResult(this.config.id,this.config.user_id));
if(res.result_code != 0){
return alert(res.result_msg);
}
this.config.answers = this.resoluAnswers(res.data);
console.log(this.config);
alert('汐: 初始化完成');
_this.dumpData = this.config;
}
MyPage.prototype.toLog=function(explain){
alert('汐: '+explain);
this.initData();
return this;
}
MyPage.prototype.start = function(){
let config = this.config,$ = this.$;
if(this.json.stringify(config) == '{}' || config.answers.rows.length <= 0){
return alert('(#`O′)兄弟,數據都沒初始化怎麼能行?');
}
$('.topic-item').each(function(index,div){
let Id = $(div).find('a').attr('name');
let $options = $(div).find('label');
$options.each(function(i,label){
let content = $(label).find('.option-content.moso-text.moso-editor').text();
config.answers.rows.forEach(row=>{
if(row.id == Id){
row.options.forEach(answer =>{
if(content == answer){
$(label).css('color','red');
}
});
}
});
});
});
alert('汐: 操作完成');
}
_this.MyPage = MyPage;
})(window);
window.my = new window.MyPage({
id:"xidaren",
width:100,
background:'#fff',
opacity:1,
pos:{
x:50,
y:100
}
}).toLog('切記切記,使用此腳本存在限制.1.老師必須開放可以查看答案解析 2.至少有兩次做作業的機會!!!');