- // ==UserScript==
- // @name 云班课🆕答题小能手🥇【开源版】
- // @namespace http://tampermonkey.net/
- // @version 2.8
- // @description 【😎蓝墨云全自动答题,一键完成所有资源学习😎】、【🧡功能全部免费使用🧡】【🔥抵制网络答题考核制度⚡️,🌵学生的平时成绩不应由简单的题目判定🌵,更不是依靠搜索引擎🔥】,【欢迎加入qq群:😄947446522😄,共同交流进步】。【💚作者在此保证,脚本无任何诸如(手机号,学校信息,等隐私信息收集)💚】
- // @author 阿绿
- // @note 致谢表:@Pumpkin、@小陈陈陈陈啊、@Sli、@无心人、@29827*0049、@热心解答(以上均是对此脚本做出过有效BUG提交OR提供账户帮助修复OR提供好的idea,如有遗漏请告知)
- // @supportURL https://gf.qytechs.cn/scripts/462689-%E4%BA%91%E7%8F%AD%E8%AF%BE%E7%AD%94%E9%A2%98%E5%8A%A9%E6%89%8B/code/%E4%BA%91%E7%8F%AD%E8%AF%BE%E7%AD%94%E9%A2%98%E5%8A%A9%E6%89%8B.user.js
- // @homepageURL https://gf.qytechs.cn/scripts/462689-%E4%BA%91%E7%8F%AD%E8%AF%BE%E7%AD%94%E9%A2%98%E5%8A%A9%E6%89%8B/code/%E4%BA%91%E7%8F%AD%E8%AF%BE%E7%AD%94%E9%A2%98%E5%8A%A9%E6%89%8B.user.js
- // @match https://www.mosoteach.cn/web/index.php?*
- // @icon https://bkimg.cdn.bcebos.com/pic/4ec2d5628535e5dde7114110e88eb0efce1b9c16c4e1
- // @require https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js
- // @require https://gf.qytechs.cn/scripts/463249-%E4%BA%91%E7%8F%AD%E7%8F%AD%E4%BE%9D%E8%B5%96/code/%E4%BA%91%E7%8F%AD%E7%8F%AD%E4%BE%9D%E8%B5%96.js?version=1170857
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_addStyle
- // @grant GM_xmlhttpRequest
- // @connect 121.37.103.75
- // @connect gitee.com
- // @connect *
- // @license MIT
- // ==/UserScript==
-
- ;(function(_this) {
- function MyPage(menu){
- // time = Math.floor(Date.now()/10000);
- // time = time %16;
- // console.log(time)
- // // this.axios = _this.axios;
- // // this.Qs =Qs;
- this.$ = $;
- this.json = _this.JSON
- this.namespace = menu.id;
- this.menu = menu;
- this.config = {};
- this.config.tk_uid =null;
- this.initMenu();
- // this.initVue();
- 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.guid= function(data){
- // return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
- // var r =Math.random() * 16 | 0,
- // v = c == 'x' ? r : (r & 0x3 | 0x8);
- // console.log(v);
- // return v.toString(16);
- // });
- // }
- MyPage.prototype.upladApi = function(url,data){
- var obj={};
- obj.poolId = this.config.poolId;
- obj.token = "06e599f3-78db-4c71-b4fa-2b496beab1f6";
- for(var key in data){
- obj[key] = data[key];
- }
- return new Promise(function(resolve, reject){
- GM_xmlhttpRequest({
- timeout: 10000,
- method: "post",
- "url": url,
- headers:{
- "Content-Type":'application/json',
- accept: "application/json",
- },
- data: JSON.stringify(obj),
- onload: function(response) {
- var status = response.status;
- var playurl = "";
- var responseText = response.responseText;
- if(status==200||status=='200'||status==501||status=='501'||status==400||status=='400'){
- resolve({"result":"success", "json":responseText});
- }else{
- //resolve({"result":"success", "json":responseText});
- reject({"result":"error", "json":responseText});
- }
- },
- onerror : function(err){
- console.log('error')
- console.log(err)
- },
- ontimeout : function(inf){
- if(url != "http://121.37.103.75:10086/tiku/api/v1/problems"){
- console.log('请求超时')
- console.log(inf)
- let aner = $('body').find("#aner")
- aner.css("display","block")
- aner.text("服务器响应超时,请稍后重试,或者直接加群,来催更。");
- }
- }
- });
- });
- }
-
- MyPage.prototype.HtmlUtil = {
- /*1.用浏览器内部转换器实现html转码*/
- htmlEncode:function (html){
- //1.首先动态创建一个容器标签元素,如DIV
- var temp = document.createElement ("div");
- //2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
- (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html);
- //3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
- var output = temp.innerHTML;
- temp = null;
- return output;
- },
- /*2.用浏览器内部转换器实现html解码*/
- htmlDecode:function (text){
- //1.首先动态创建一个容器标签元素,如DIV
- var temp = document.createElement("div");
- //2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
- temp.innerHTML = text;
- //3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
- var output = temp.innerText || temp.textContent;
- temp = null;
- return output;
- }
- };
-
- MyPage.prototype.resoluAnswers=function(data){
- let newData = {};
- if(data ==null){
- return console.log("并未获取到题库数据");
- }
- if("activity" in data){
- console.log("蓝墨云题库重组中");
- newData.id = data.activity.id;
- newData.title = data.activity.title;
- newData.rows = [];
- data.activity.topics.forEach(row=>{
- let _data = {};
- _data.id = row.topic_id;
- row.subject=this.HtmlUtil.htmlDecode(row.subject);
- _data.subject = row.subject;
- _data.options = [];
- _data.answers = [];
- _data.type = row.type;
- if(row.type == "TF"){
- if(row.tf_answer!=null){
- _data.answers.push(row.tf_answer);
- }else{
- if(row.result == 1){
- _data.answers.push(row.user_tf_answer)
- }else{
- _data=null;
- }
- }
- }else if(row.type == "FILL"){
- row.fill.blank_alternatives.forEach(answer=>{
- if(answer.contents[0] !=null){
- _data.answers.push(answer.contents);
- }else{
- if(answer.result ==1){
- _data.answers.push(answer.user_content)
- }else{
- _data=null;
- }
- }
- });
- }else{
- if(row.answers.length != 0){
- row.answers.forEach(index =>{
- row.options.forEach(option=>{
- _data.options.push(this.HtmlUtil.htmlDecode(option.content));
- if(option.item_no == index){
- _data.answers.push(this.HtmlUtil.htmlDecode(option.content));
- }
- });
- });
- }else{
- if(row.result == 1){
- row.user_answers.forEach(index =>{
- row.options.forEach(option=>{
- _data.options.push(this.HtmlUtil.htmlDecode(option.content));
- if(option.item_no == index){
- _data.answers.push(this.HtmlUtil.htmlDecode(option.content));
- }
- });
- });
- }else{
- _data=null;
- }
- }
-
- }
- if(_data != null){
- newData.rows.push(_data);
- }
-
- });
- }else if("paperId" in data){
- console.log("meto题库重组中");
- newData.id = data.title;
- newData.rows = [];
- data.problems.forEach(row=>{
- let _data ={};
- _data.subject = row.text;
- _data.answers = JSON.parse(row.answer);
- newData.rows.push(_data);
- });
-
- }else if("rule" in data){
- console.log("助手题库重组中");
- newData.rows = [];
- if("get_answer" in data){ //修改未测试
- data.get_answer.forEach(row=>{
- let _data ={};
- _data.answers = [];
- let br = new RegExp("-and-","g");
- row.t = row.t.replace(br,"&");
- row.t=this.HtmlUtil.htmlDecode(row.t);
- _data.subject = row.t;
- row.a.forEach(an=>{
- _data.answers.push(this.HtmlUtil.htmlDecode(an.replace(br,"&")))
- })
- _data.type =row.y;
- _data.options = row.s;
- newData.rows.push(_data);
- });
- }
- }else if("flag" in data){
- if (data.flag == "metoproblems"){
- console.log("meto1题组重组中");
- newData.id = data.title;
- newData.rows = [];
- try{
- data.problems.forEach(row=>{
- let _data ={};
- _data.subject = row.text;
- _data.answers = JSON.parse(row.answer);
- newData.rows.push(_data);
- });
- }catch (e){
- // alert("服务器连接失败,请联系作者。")
- console.log("发生异常:" + e);
- }
-
- }
-
- }else{
- console.log("题库格式未识别");
- console.log(data);
- }
- console.log(newData)
- 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(id,userId,ccId){
- return new Promise((resolve,rejcet)=>{
- this.$.ajax({
- type: 'post',
- url:"https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=person_result",
- dataType:"json",
- data: {
- id: id,
- user_id: userId,
- cc_id: ccId,
- },
- success: function(res) {
- resolve(res);
- }
- });
- });
- }
-
- MyPage.prototype.join_class=function(){
- return new Promise((resolve,rejcet)=>{
- this.$.ajax({
- type: 'post',
- url:"https://www.mosoteach.cn/web/index.php?c=clazzcourse&m=my_joined",
- dataType:"json",
- success: function(res) {
- resolve(res.data);
- }
- });
- });
- }
-
- MyPage.prototype.get_page=function(class_id){
- return new Promise((resolve,rejcet)=>{
- this.$.ajax({
- type: 'post',
- url:"https://www.mosoteach.cn/web/index.php?c=interaction&m=index&clazz_course_id="+class_id,
- success: function(res) {
- resolve(res);
- }
- });
- });
- }
-
- MyPage.prototype.get_page_status=function(id,ccId){
- return new Promise((resolve,rejcet)=>{
- this.$.ajax({
- type: 'post',
- url:"https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=get_quiz_ranking",
- dataType:"json",
- data: {
- id: id,
- ccId: ccId,
- },
- success: function(res) {
- resolve(res);
- }
- });
- });
- }
-
- MyPage.prototype.x_res = function(reslist){
-
- var watch = reslist[0]
- var req = {}
- if (reslist.length != 0) {
- $("#x_res").text("剩下" + reslist.length + "个")
- } else {
- $("#x_res").text("全部完成")
- location.reload()
- return 0
- }
- var clazz_course_id = this.config.clazz_course_id
- $.ajax({
- type: "POST",
- url: "https://www.mosoteach.cn/web/index.php?c=res&m=request_url_for_json",
- data: {
- 'file_id': watch.id,
- 'type': 'VIEW',
- 'clazz_course_id': clazz_course_id,
- },
- dataType: "json",
- success: msg => {
- const src = msg.src
- if (src.indexOf("m3u8") > -1) {
- fetch(src)
- .then(data => data.text())
- .then(text => {
- let time = 0
- for (i of text.split("\n")) {
- if (i.indexOf("#EXTINF:") > -1) {
- i = parseFloat(i.replace("#EXTINF:", ""))
- time += i
- }
- }
- time = Math.ceil(time)
- $.ajax({
- type: 'post',
- dataType: 'json',
- url: 'https://www.mosoteach.cn/web/index.php?c=res&m=save_watch_to',
- data: {
- clazz_course_id: clazz_course_id,
- res_id: watch.id,
- watch_to: time,
- duration: time,
- current_watch_to: time
- },
- success: res => {
- reslist.splice(0, 1)
- this.x_res(reslist)
- }
- });
- })
- } else {
- reslist.splice(0, 1)
- this.x_res(reslist)
- }
- }
- })
- }
-
- MyPage.prototype.getAnswers = async function(id,deep){
- let answers = {};
- let obj={
- "poolId": this.config.poolId,
- "token": "06e599f3-78db-4c71-b4fa-2b496beab1f6",
- "userId": this.config.tk_uid,
- "querry": {
- "operator": "==",
- "argument1": "papertitle",
- "argument2": id,
- },
- "deep": deep,
- };
- await(this.upladApi("http://121.37.103.75:10086/tiku/api/v1/queryCollection",obj).then(async (resutData)=>{
- if(resutData.result==="success" && !!resutData.json){
- var data = JSON.parse(resutData.json).results;
- console.log("总共查询到数据库数量"+data.length+"个");
- data.forEach((item, index) =>{
- if(index == 0){
- answers =this.resoluAnswers(item);
- }else{
- this.resoluAnswers(item).rows.forEach(i =>{
- answers.rows.push(i);
- })
-
- }
- });
- // if(this.config.answers == null ||this.config.answers.rows == false){
- // console.log("尝试查询题库2");
- // let obj={
- // "action": "get_answer",
- // "url": "https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=reply&id="+this.config.id,
- // "question": [],
- // "userId": "rand",
- // "exam": {
- // "limit": false,
- // "see_answer": true
- // },
- // "LiuLiuDaShun1234": true
- // };
- // await(this.upladApi("https://eb28743a-0a36-4e14-a166-160855f57610.bspapp.com/http/search",obj).then((resutData)=>{
- // if(resutData.result==="success" && !!resutData.json){
- // var data = JSON.parse(resutData.json).result;
- // this.config.answers = this.resoluAnswers(data);
-
- // if( !("answers" in this.config)||this.config.answers.rows == false){
- // console.log("未查询到数据");
- // return null;
- // }
- // let obj={
- // "poolId": this.config.poolId,
- // "token": "06e599f3-78db-4c71-b4fa-2b496beab1f6",
- // "userId": this.config.tk_uid,
- // "tags":["网络"],
- // //"tags":[this.config.answers.title,"云班课"],
- // "title":this.config.id,
- // "problems":[],
- // };
- // data={};
- // this.config.answers.rows.forEach(row=>{
- // data={
- // "tags": ["网络"],
- // "text": row.subject,
- // "answer": JSON.stringify(row.answers),
- // };
- // data.tags.push(row.type);
- // let l = ["choice_A","choice_B","choice_C","choice_D","choice_E","choice_F","choice_G","choice_H","choice_I","choice_J","choice_K","choice_L","choice_M","choice_N","choice_O","choice_P","choice_Q","choice_R","choice_S","choice_T","choice_U","choice_V","choice_W","choice_X","choice_Y","choice_Z"];
- // let i=0;
- // row.options.forEach(option =>{
- // data[l[i]]=option;
- // i=i+1;
- // })
- // obj.problems.push(data);
- // });
- // this.upladApi("http://121.37.103.75:10086/tiku/api/v1/problems",obj).then((resutData)=>{
- // if(resutData.result==="success" && !!resutData.json){
- // var data = JSON.parse(resutData.json).data;
- // console.log(data);
- // }
- // });
- // }
- // }));
- // }
- }
- }));
-
- return answers;
- }
- MyPage.prototype.getCookie = function(objName) { //获取指定名称的cookie的值
- var arrStr = document.cookie.split("; ");
- for (var i = 0; i < arrStr.length; i++) {
- var temp = arrStr[i].split("=");
- if (temp[0] == objName) return temp[1]; //解码
- }
- return "";
- }
-
- MyPage.prototype.arrowMove = function(e){
- // 元素大小
- let elW = e.currentTarget.offsetWidth
- let elH = e.currentTarget.offsetHeight
- // 元素位置
- let elL = e.currentTarget.offsetLeft
- let elT = e.currentTarget.offsetTop
- // 鼠标位置
- let x = e.clientX
- let y = e.clientY
- // 窗口大小
- let w = window.innerWidth
- let h = window.innerHeight
- // 鼠标到元素左边距离
- let moveX = x - elL
- let moveY = y - elT
- let el = e.currentTarget
- document.onmousemove = function (e) {
- el.style.position = 'fixed';
- el.style.left = e.clientX -moveX + 'px'
- el.style.top =e.clientY - moveY + 'px'
- }
- document.onmouseup = function (e) {
- document.onmousemove = null
- document.onmouseup = null
- }
- };
-
- MyPage.prototype.initMenu = function(){
- let $ = this.$,menu = this.menu;
- $(document).on('mousedown','#aner', function (e) {
- window.my.arrowMove(e);
- });
- $(document).on('click', '#x_start', function () {
- window.my.start();
- });
- $(document).on('click', '#x_set', function () {
- $('body').find("#set").toggle('active');
- });
- $(document).on('click', '#x_find',async function () {
- let aner = $('body').find("#aner")
- let text = document.getElementById("find_input")
- aner.css("display","block")
- aner.text("");
-
- if(text.value.length <10){
- aner.append("搜索题目需要10个字符以上");
- return;
- }
- aner.append("若长时间未返回信息,请反馈<hr>");
- // problem = window.my.HtmlUtil.htmlDecode(text.value);
- // console.log(problem)
- await window.my.findproblem(text.value.replace(/ /g," "))
- aner.text("");
- aner.append("搜索到"+window.my.config.answer.rows.length+"条相关题目<hr>");
- window.my.config.answer.rows.forEach(row=>{
- aner.append("题目:"+row.subject+"<br>"+"答案:");
- row.answers.forEach(answer =>{
- aner.append(answer+" ");
- });
- aner.append("<hr>");
- });
- });
-
- $(document).on('click', '#x_yue', async function () {
- let aner = $('body').find("#aner")
- aner.css("display","block")
- $("#x_yue").attr("disabled", true)
- aner.text("正在搜索答案中");
- let answers = await(window.my.getAnswers(window.my.config.id,true));
- if(!answers||JSON.stringify(answers) == "{}"){
- aner.text("暂时未收录此题,若可直接查看答案,进入查看题目答案页面,将自动收录答案信息");
- return;
- }
- aner.text("");
- answers.rows.forEach(row=>{
- aner.append("题目:"+row.subject+"<br>"+"答案:");
- row.answers.forEach(answer =>{
- aner.append(answer+" ");
- });
- aner.append("<hr>");
- });
-
- });
- $(document).on('click', '#x_res', async function () {
- $("#x_res").attr("disabled", true)
- var reslist = []
- $(".res-row-open-enable").each(function() {
- if ($(this).find('span[data-is-drag]')[0].dataset.isDrag == "N") {
- reslist.push({
- id: $(this).attr('data-value'),
- state: $(this).find('span[data-is-drag]')[0].dataset.isDrag,
- type: $(this).attr('data-mime')
- })
- }
- });
- window.my.x_res(reslist)
- });
-
- /**
- * MosoteachHelper CSS
- */
- const styleTag = `
- <style>
- #${menu.id} #zhu button{
- width: 130px;
- height: 40px;
- background: linear-gradient(to bottom, #4eb5e5 0%,#389ed5 100%); /* W3C */
- border: none;
- border-radius: 5px;
- position: relative;
- border-bottom: 4px solid #2b8bc6;
- color: #fbfbfb;
- font-weight: 600;
- font-family: 'Open Sans', sans-serif;
- text-shadow: 1px 1px 1px rgba(0,0,0,.4);
- font-size: 15px;
- text-align: left;
- text-indent: 5px;
- box-shadow: 0px 3px 0px 0px rgba(0,0,0,.2);
- cursor: pointer;
-
- /* Just for presentation */
- display: block;
- //margin: 0 0 0 12px;
- }
- #${menu.id} #zhu button:active {
- box-shadow: 0px 2px 0px 0px rgba(0,0,0,.2);
- top: 1px;
- }
-
- #${menu.id} #zhu button:after {
- content: "";
- width: 0;
- height: 0;
- display: block;
- border-top: 20px solid #187dbc;
- border-bottom: 20px solid #187dbc;
- border-left: 16px solid transparent;
- border-right: 20px solid #187dbc;
- position: absolute;
- opacity: 0.6;
- right: 0;
- top: 0;
- border-radius: 0 5px 5px 0;
- }
- #${menu.id}{
- text-align:center;
- width:0;
- height:0;
- position:fixed;
- left:${menu.pos.x}px;
- top:${menu.pos.y}px;
- background:${menu.background};
- opacity:${menu.opacity};
- }
- #${menu.id} .drawer{
- max-height:200px;
- overflow:auto;
- text-align:left;
- display: none;
- background: #fff;
- border-radius: 10px;
- box-shadow: 0 5px 15px rgba(0,0,0,0.2);
- width: 240px; /* initially */
- opacity: 0.9;
- z-index: 199;
- padding:3px;
- margin:10px;
- }
- #${menu.id} .drawer p{
- text-align:left;
- padding-left:5px;
- }
- #${menu.id} .drawer p button{
-
- }
- </style>`;
- $(styleTag).appendTo('head');
- let $menu = $(
- `<div id='${menu.id}'>
- <div id="zhu">
- <button id="x_set">设置界面</button>
- </div>
- <div class= "drawer" id="set">
- <p>
- 用户<input id = "tiku_user" readonly="readonly" value="未获取到用户名,请刷新重试" />
- </p>
- <p>
- 题目<input id = "find_input" placeholder="搜索题目需要10个字符以上" /> <button id="x_find" >搜索</button>
- </p>
- <p>
- 如遇到答案未显示,未加载,未标红,等等问题,请加qq群:286997695反馈
- </p>
- </div>
- <div class= "drawer" id="aner">
- <p>
- 正在获取试卷中,请稍等
- </p>
-
- </div>
- </div>`);
- $('body').append($menu);
- }
-
-
- MyPage.prototype.initData = async function(){ //初始化
-
- this.config = this.urlToObject(window.location.href);
- this.config.tk_uid=GM_getValue("ti_uid");
- this.config.pp = GM_getValue("pp");
- this.config.poolId = GM_getValue("poolId");
- if(!this.config.tk_uid || !this.config.pp || !this.config.poolId){
- let classListData = await (this.join_class());
- if(classListData.length == 0){
- return console.log("未登录(不可用)账户");
- }
- GM_setValue("ccid",classListData[0].id);
- let {data:objectList} = await (this.getListMember(classListData[0].id));
- if(objectList.length <= 0 ){
- return alert("初始化脚本失败");
- }
- this.config.user_id = objectList[0].user_id;
- this.config.user_list = objectList;
- // console.log(this.config.user_list)
- this.config.full_name = objectList[0].full_name;
- this.config.clazz_course_id = classListData[0].id
- let obj={
- "unionid": objectList[0].user_id,
- "username": objectList[0].full_name,
- "grade": "云班课",
- };
- await(this.upladApi("http://121.37.103.75:10086/tiku/api/v1/userInfo",obj).then((resutData)=>{
- if(resutData.result==="success" && !!resutData.json){
- var data = JSON.parse(resutData.json).data;
- if(data != null){
- if("message" in data){
- data.message = data.message.slice(1,-1).split(", ");
- this.config.tk_uid = data.message[0]
- this.config.pp = data.message[1]
- //生成poolid
- this.config.poolId = CryptoJS.MD5(CryptoJS.MD5(this.config.user_id).toString() + this.config.pp).toString();
- this.config.poolId = this.config.poolId.slice(0,8)+"-"+this.config.poolId.slice(8,12)+"-"+this.config.poolId.slice(12,16)+"-"+this.config.poolId.slice(16,20)+"-"+this.config.poolId.slice(20,32)
- GM_setValue("poolId",this.config.poolId);
- //
- GM_setValue("ti_uid",this.config.tk_uid);
- GM_setValue("pp",this.config.pp);
- // document.cookie = "ti_uid="+this.config.tk_uid+";max-age="+60 * 60 * 3;
- }
- }
- }
- }));
-
-
- }
- document.getElementById("tiku_user").value=this.config.tk_uid;
-
-
- if(this.config.m === "reply"||this.config.m === "person_quiz_result"){
- $('#zhu').append("<button id='x_start' >开始搜题</button>");
- // document.getElementById("zhu")
- }
- if(this.config.c === "res"){
- $('#zhu').append("<button id='x_res' >一键完成资源</button>");
- }
- if(this.config.m === "quiz_ranking" || this.config.m === "start_quiz_confirm"){
- $('#zhu').append("<button id='x_yue' >提前阅卷</button>");
- }
- if(this.config.m === "person_quiz_result"){
- if(!GM_getValue(this.config.id)){
- this.get_quiz_result(this.config.id,this.config.user_id,this.config.clazz_course_id);
- }
- }
- }
-
- MyPage.prototype.get_quiz_result=async function(id,user_id,clazz_course_id){
- if(this.config.tk_uid == null);
- let res = await (this.personResult(id,user_id,clazz_course_id));
- // if(res.result_code != 0){
- // return alert(res.result_msg);
- // }
- answers = this.resoluAnswers(res);
- if(answers == null){
- _this.dumpData = this.config;
- return;
- }
- let obj={
- "poolId": this.config.poolId,
- "token": "06e599f3-78db-4c71-b4fa-2b496beab1f6",
- "userId": this.config.tk_uid,
- "tags":[answers.title,"云班课"],
- "title":answers.id,
- "problems":[],
- };
- let data={};
- answers.rows.forEach(row=>{
- data={
- "tags": ["云班课"],
- "text": row.subject,
- "answer": JSON.stringify(row.answers),
- };
- data.tags.push(row.type);
- let l = ["choice_A","choice_B","choice_C","choice_D","choice_E","choice_F","choice_G","choice_H","choice_I","choice_J","choice_K","choice_L","choice_M","choice_N","choice_O","choice_P","choice_Q","choice_R","choice_S","choice_T","choice_U","choice_V","choice_W","choice_X","choice_Y","choice_Z"];
- let i=0;
- row.options.forEach(option =>{
- data[l[i]]=option;
- i=i+1;
- })
- obj.problems.push(data);
- });
- this.upladApi("http://121.37.103.75:10086/tiku/api/v1/problems",obj).then((resutData)=>{
- if(resutData.result==="success" && !!resutData.json){
- var data = JSON.parse(resutData.json).data;
- console.log(data);
- GM_setValue(id,1);
- }else{
- console.log(resutData);
- }
- });
- }
-
-
- MyPage.prototype.toLog=function(explain){
- //alert('啊绿: '+explain);
- this.initData();
- return this;
- }
- MyPage.prototype.findproblem = async function(text){
- let obj={
- "poolId": this.config.poolId,
- "token": "06e599f3-78db-4c71-b4fa-2b496beab1f6",
- "userId": this.config.tk_uid,
- "querry": {
- "operator": "contains",
- "argument1":"problemText",
- "argument2":text,
- }
- }
- /////
- await(this.upladApi("http://121.37.103.75:10086/tiku/api/v1/queryProblems",obj).then(async (resutData)=>{
- if(resutData.result==="success" && !!resutData.json){
- var data = JSON.parse(resutData.json).results;
- //处理数据,添加标识头
- let obj = {
- flag: "metoproblems",
- problems : data,
- }
- this.config.answer =this.resoluAnswers(obj);
- }
- }))
- }
-
- MyPage.prototype.findproblems = async function(problems){
- let answer = []
- let obj={
- "poolId": this.config.poolId,
- "token": "06e599f3-78db-4c71-b4fa-2b496beab1f6",
- "userId": this.config.tk_uid,
- "querry": {
- "operator": "mulit",
- "argument1":"1",
- "argument2":"2",
- "problems":[]
- }
- }
- /////
- problems.forEach(problem =>{
-
- let problemobj = {
- "operator": "==",
- "argument1": "problemText",
- "argument2": problem,
- }
- obj.querry.problems.push(problemobj);
- })
- await(this.upladApi("http://121.37.103.75:10086/tiku/api/v1/queryProblems",obj).then(async (resutData)=>{
- if(resutData.result==="success" && !!resutData.json){
- var data = JSON.parse(resutData.json).results;
- //处理数据,添加标识头
- let obj = {
- flag: "metoproblems",
- problems : data,
- }
- answer = this.resoluAnswers(obj)
- // console.log(this.config.answers);
- }
- }))
- return answer
- }
-
- MyPage.prototype.start = async function(){ //搜题按钮实现
- const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
- function random(min, max) {
- return Math.floor(Math.random() * (max - min)) + min;
- }
-
- let config = this.config,$ = this.$;
- let HtmlUtil = this.HtmlUtil;
- let answers = await(this.getAnswers(config.id,true));
-
- if(this.config.tk_uid == null || (answers == null)||JSON.stringify(answers) == '{}' || answers.rows.length <= 0){
- let subjects = []
- $('.topic-item').each(function(index,div){
- let Id = $(div).find('a').attr('name');
- let subject = $(div).find('.t-subject.t-item.moso-text.moso-editor').text();
- subject = HtmlUtil.htmlDecode(subject),
- subjects.push(subject);
- })
- answers = await(this.findproblems(subjects));
- }
- let aner = $('body').find("#aner")
- aner.css("display","block")
- console.log(answers)
- if(JSON.stringify(answers) == '{}' || !(answers.rows)){
- aner.text("没有搜索到答案,若提前阅卷时有答案,但此时没有请反馈")
- }else{
- aner.text("总共搜索到"+answers.rows.length+"题")
- }
-
-
- $('.topic-item').each(function(index,div){
- let Id = $(div).find('a').attr('name');
- let flag_FT = false
- //console.log($(div).find('.t-subject.t-item.moso-text.moso-editor').html());
- let subject = $(div).find('.t-subject.t-item.moso-text.moso-editor').text();
- subject=HtmlUtil.htmlDecode(subject);
- // subject=escapeto(subject);
- //let space = new RegExp(`${String.fromCharCode(160)}`,"g"); /* no breaking space*/
- // console.log(subject);
- if( $(div).find('.show_answer').length == 0){
- $(div).find('.t-con').append("<div class='show_answer'></div>")
- }
- answers.rows.forEach(row=>{
- row.subject=HtmlUtil.htmlDecode(row.subject);
- if(row.subject == subject){
- $(div).find('.show_answer').text("答案:"+JSON.stringify(row.answers)).css('color','red'); // 添加答案在后方
- }
- });
- let $options = $(div).find('label');
- if($options.length == 0){
- $options = $(div).find('input');
- }
- $options.each(function(i,label){
- let content = $(label).find('.option-content.moso-text.moso-editor').text();//单多选题答案获取
- if(content == ""){
- content = $(label).find('.el-radio__label').text();//判断题答案获取
- flag_FT = true
- }
- answers.rows.forEach(row=>{
- if(row.subject == subject){
- if ($(label).find(".is-checked").length) {
- return;
- }
- if(content == ""){
- //填空题
- if(Array.isArray(row.answers[i])){
- $(label).val(row.answers[i][0]);
- }else{
- $(label).val(row.answers[i]);
- }
- ev = document.createEvent("HTMLEvents");
- ev.initEvent("input", true, true);
- $(label)[0].dispatchEvent(ev);
- }
- row.answers.forEach(async answer =>{
- if(flag_FT == true){
- if (answer == "T"){
- answer = "正确"
- }else if(answer == "F"){
- answer = "错误"
- }
- }
- try{
- if(content == answer){
- $(label).css('color','red');
- await sleep(random(500,1000))
- $(label).click()
-
- }
- }catch (e){
- console.log("发生异常:" + e);
- }
-
- });
- }
- });
-
- });
-
- });
- // alert('阿绿: 操作完成,微信关注宁财小助手');
- window.my.config.timenum = answers.rows.length * 4
- $(".my-sticky-bottom").children("button:first").attr('id', 'submit')
- window.my.config.timer = setInterval(function() {
- window.my.config.timenum--
- if (window.my.config.timenum < 0) {
- $("#submit").text("交卷")
- $("#submit").attr("style", "")
- $("#submit").attr('disabled', false)
- clearInterval(window.my.config.timer)
- } else {
- $("#submit").attr('disabled', true)
- $("#x_start").attr('disabled', true)
- $("#submit").attr("style", "width:250px")
- $("#submit").text("请在" +window.my.config.timenum +"秒后交卷")
- }
- }, 1000)
-
- let classListData = await (this.join_class());
- if(classListData.length > 0 ){
- classListData.forEach(cl =>{
- this.get_page(cl.id).then((result) =>{
- $(result).find(".interaction-row.interaction-row-open-enable").each(async function(index,div){
- let id = $(div).attr('data-id');
- let type = $(div).attr('data-type');
- let status = $(div).attr('data-row-status');
- if(type=="QUIZ"){
- if(!GM_getValue(id)){
- await(window.my.get_quiz_result(id,window.my.config.user_id,cl.id));
- }
- }
- })
- });
- })
- }
- //题库获取模块 end
- }
- _this.MyPage = MyPage;
- })(window);
-
-
- window.my = new window.MyPage({
- id:"wzq",
- width:80,
- background:'#fff',
- opacity:2,
- pos:{
- x:100,
- y:100
- }
- }).toLog('私人圈子传播,请勿外传');