(function(e){function t(t){for(var i,n,r=t[0],c=t[1],l=t[2],u=0,m=[];u{window.nodeRequire("node-cmd").get("cmd /c chcp 65001>nul && "+e,async(a,n,r)=>{if(console.log(e,a,n),Object(i["b"])({page:window.location.pathname,exeName:e,error:JSON.stringify(a),data:n,stderr:JSON.stringify(r),absPath:e.includes(":")}),!e.includes(":")&&a){const s=window.nodeRequire("electron").remote.require("fs"),i=window.nodeRequire("electron").remote.require("path"),[a,n]=e.split(" "),r=i.join(window.nodeRequire("electron").remote.app.getAppPath(),"../../",a);if(s.existsSync(r))try{await o([r,n].join(" ").trim(),t)}catch(c){console.log("second try error",r)}}await new Promise(e=>setTimeout(()=>e(),1e3));try{await t()}catch(l){console.log("call cb failed",l)}finally{s()}})})}function n(e){if("undefined"==typeof nodeRequire)throw console.log("nodeRequire failed"),window._hmt.push(["_trackEvent",window.location.pathname.replace(/=\w*/g,"=").replace(/\d+/g,"{id}"),"不在Electron中,调用 fs 失败"]),Object(i["b"])({page:window.location.pathname,action:"不在Electron中,调用 fs 失败"}),new Error("不在Electron中,调用 fs 失败");return window.nodeRequire("fs").existsSync(e)}function r(){Object(i["b"])({page:window.location.pathname,action:"nodeCheckRemoteDesktop"});const e=window.nodeRequire("child_process").execSync("cmd /c chcp 65001>nul && tasklist /FO CSV").toString();return!(!e||!(e.match(/sunloginclient/gi)&&e.match(/sunloginclient/gi).length>0||e.match(/选择免安装运行,截图识别/gi)&&e.match(/选择免安装运行,截图识别/gi).length>0))}let c=[];function l(){try{let e=window.nodeRequire("child_process").execSync("cmd /c chcp 65001>nul && tasklist /FO CSV").toString();e=e.split("\r\n"),e.shift(),e=e.map(e=>e.split(",")[0]);const t=Object(a["xor"])(c,e);t&&t.length>0&&Object(i["b"])({page:window.location.pathname,action:"nodeCheckProcess",xorRes:t.join(" ||| ")}),c=e}catch(e){console.log("nodeCheckProcess exec error: ",e)}}},"170f":function(e,t,s){},"17b4":function(e,t,s){"use strict";s("ddb0");t["a"]=function(e,t){const s=new Map;return function(i){const a=i;if(t.some(e=>i.match(e))){if(s.has(a)){const e=s.get(a);return e}{const t=e(...arguments);return t.then(e=>(200===e.status&&s.set(a,t),t))}}{const t=e(...arguments);return t}}}},"18a7":function(e,t,s){},"1c71":function(e,t,s){"use strict";var i=s("949d"),a=s.n(i);a.a},"1eee":function(e,t,s){},2:function(e,t){},"21d8":function(e,t,s){"use strict";var i=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div")},a=[],o={name:"DevTools",created(){if("undefined"!=typeof nodeRequire){let e=!1,t=!1,s=[];this.listener=document.addEventListener("keydown",(function(i){e&&t&&(s.push(i.code[i.code.length-1]),s.join("").toLowerCase()===window.QECSConfig.STUDENT_CLIENT_CONSOLE_CONFIG&&window.nodeRequire("electron").remote.getCurrentWindow().toggleDevTools()),i.ctrlKey&&i.shiftKey&&"KeyU"===i.code&&(e=!0,setTimeout(()=>{e=!1,t=!1,s=[]},5e3)),e&&i.ctrlKey&&i.shiftKey&&"KeyP"===i.code&&(t=!0)}))}},beforeDestroy(){this.listener&&document.removeEventListener(this.listener)}},n=o,r=s("2877"),c=Object(r["a"])(n,i,a,!1,null,null,null);t["a"]=c.exports},"240b":function(e,t,s){},2517:function(e,t,s){},"287f":function(e,t,s){"use strict";var i=s("2517"),a=s.n(i);a.a},"28be":function(e,t,s){},2941:function(e,t,s){},"2d57":function(e,t,s){"use strict";var i=s("5785"),a=s.n(i);a.a},"2df4":function(e,t,s){"use strict";var i=s("e42f"),a=s.n(i);a.a},"2e2a":function(e,t,s){"use strict";var i=s("f6a7"),a=s.n(i);a.a},3:function(e,t){},3220:function(e,t,s){"use strict";var i=s("123d"),a=s.n(i);a.a},3429:function(e,t,s){"use strict";var i=s("18a7"),a=s.n(i);a.a},4053:function(e,t,s){"use strict";var i=s("f748"),a=s.n(i);a.a},"40c2":function(e,t,s){},"41cb":function(e,t,s){"use strict";var i=s("2b0e"),a=s("8c4f"),o=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"page-404"},[s("h1",[e._v("页面不存在!")]),s("br"),s("br"),s("div",[s("Button",{staticClass:"qm-primary-button",attrs:{size:"large",long:""},on:{click:e.goLogin}},[e._v(" 返回登录页 ")])],1)])},n=[],r={name:"Page404",methods:{goLogin(){this.logger({page:"Page404",button:"返回登录页按钮",action:"点击"}),this.$router.push("/login/")}}},c=r,l=(s("dffe"),s("2877")),d=Object(l["a"])(c,o,n,!1,null,"512712ed",null),u=d.exports,m=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("main-layout",[s("Breadcrumb",{staticStyle:{"text-align":"left","padding-left":"20px",height:"40px","line-height":"40px","background-color":"#fafafa"}},[e._v(" 当前所在位置: "),s("BreadcrumbItem",[e._v(e._s(e.locationTitle))])],1),s("div",{staticClass:"home"},[s("ecs-online-list",{attrs:{courses:e.courses,"end-courses":e.endCourses,"exam-type":e.examType}})],1),s("PhoneVerifyForDD"),s("PrivacyDialog")],1)},h=[],p=s("f3f3"),_=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"list"},[s("div",{staticStyle:{display:"flex","margin-bottom":"10px"}},[s("Button",{staticClass:"qm-primary-button",class:"EXAMING"!=e.selectExamState&&"disable-button",staticStyle:{"margin-right":"20px"},on:{click:function(t){e.selectExamState="EXAMING"}}},[e._v(" 待考列表 ")]),"ONLINE"===e.examType?s("Button",{staticClass:"qm-primary-button",class:"EXAM_END"!=e.selectExamState&&"disable-button",on:{click:function(t){e.selectExamState="EXAM_END"}}},[e._v(" 已结束考试 ")]):e._e()],1),"EXAMING"==e.selectExamState?s("table",[s("tbody",{staticClass:"list-row"},[s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",[e._v("课程")]),e.isEpcc?e._e():s("td",{key:"cc"},[e._v("层次")]),e.isEpcc?e._e():s("td",{key:"zy"},[e._v("专业")]),s("td",[e._v("考试进入时间")]),s("td",[e._v("考试时间周期")]),s("td",[e._v("剩余考试次数")]),s("td",{staticStyle:{"max-width":"200px"}},[e._v("操作")])]),e._l(e.courses,(function(t){return s("tr",{key:t.examId+t.courseId},[s("td",[e._v(e._s(t.courseName))]),e.isEpcc?e._e():s("td",{key:"cc"},[e._v(e._s(t.courseLevel))]),e.isEpcc?e._e():s("td",{key:"zy"},[e._v(e._s(t.specialtyName))]),s("td",[e._v(" "+e._s(t.startTime)+" "),s("br"),e._v(" ~ "),s("br"),e._v(" "+e._s(t.endTime)+" ")]),s("td",[s("span",{domProps:{innerHTML:e._s(e.cycleDesc(t))}})]),s("td",[e._v(e._s(t.allowExamCount))]),s("td",{staticStyle:{"min-width":"180px"}},[s("div",{staticStyle:{display:"grid","grid-template-columns":"repeat(auto-fit, minmax(100px, 1fr))","grid-gap":"10px"}},[s("Button",{staticClass:"qm-primary-button qm-primary-button-padding-fix",attrs:{disabled:e.disableTheCourse(t)||e.spinShow||e.enterButtonClicked,title:e.disableTheCourse(t)?e.disableReason(t):""},on:{click:function(s){return e.raceEnter(t)}}},[e._v(" 进入考试"+e._s(e.countdown>0?"("+e.countdown+")":"")+" ")]),e.isEpcc?e._e():s("Poptip",{staticClass:"online-exam-list-override-poptip",attrs:{trigger:t.isObjScoreView?"hover":"click",placement:"left"},on:{"on-popper-show":function(s){e.overFlowStyle=!0,e.cid=t.courseId},"on-popper-hide":function(t){e.overFlowStyle=!1,e.cid=null}}},[s("Button",{staticClass:"qm-primary-button qm-primary-button-padding-fix",staticStyle:{width:"100%"},attrs:{disabled:!t.isObjScoreView}},[e._v(" 客观分 ")]),s("ecs-online-exam-result-list",{attrs:{slot:"content","popper-show":e.cid===t.courseId,"exam-student-id":t.examStudentId},slot:"content"})],1)],1)])])}))],2)]):e._e(),"ONLINE"===e.examType&&"EXAM_END"===e.selectExamState?s("table",[s("tbody",{staticClass:"list-row"},[s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",[e._v("课程")]),e.isEpcc?e._e():s("td",{key:"cc"},[e._v("层次")]),e.isEpcc?e._e():s("td",{key:"zy"},[e._v("专业")]),s("td",[e._v("考试进入时间")]),s("td",[e._v("考试时间周期")]),s("td",[e._v("剩余考试次数")]),s("td",{staticStyle:{"max-width":"200px"}},[e._v("操作")])]),e._l(e.endCourses,(function(t){return s("tr",{key:t.examId+t.courseId},[s("td",[e._v(e._s(t.courseName))]),e.isEpcc?e._e():s("td",{key:"cc"},[e._v(e._s(t.courseLevel))]),e.isEpcc?e._e():s("td",{key:"zy"},[e._v(e._s(t.specialtyName))]),s("td",[e._v(" "+e._s(t.startTime)+" "),s("br"),e._v(" ~ "),s("br"),e._v(" "+e._s(t.endTime)+" ")]),s("td",[s("span",{domProps:{innerHTML:e._s(e.cycleDesc(t))}})]),s("td",[e._v(e._s(t.allowExamCount))]),s("td",{staticStyle:{"min-width":"180px"}},[s("div",{staticStyle:{display:"grid","grid-template-columns":"repeat(auto-fit, minmax(100px, 1fr))","grid-gap":"10px"}},[e.isEpcc?e._e():s("Poptip",{staticClass:"online-exam-list-override-poptip",attrs:{trigger:t.isObjScoreView?"hover":"click",placement:"left"},on:{"on-popper-show":function(s){e.overFlowStyle=!0,e.cid=t.courseId},"on-popper-hide":function(t){e.overFlowStyle=!1,e.cid=null}}},[s("Button",{staticClass:"qm-primary-button qm-primary-button-padding-fix",staticStyle:{width:"100%"},attrs:{disabled:!t.isObjScoreView}},[e._v(" 客观分 ")]),s("ecs-online-exam-result-list",{attrs:{slot:"content","popper-show":e.cid===t.courseId,"exam-student-id":t.examStudentId},slot:"content"})],1)],1)])])}))],2)]):e._e(),e.spinShow?s("Spin",{attrs:{size:"large",fix:""}},[e._v(e._s(e.processingMessage))]):e._e(),s("OnlineExamFaceCheckModal",{attrs:{open:e.faceCheckModalOpen,course:e.selectedCourse}}),s("Modal",{ref:"checkEnvModal",attrs:{title:"环境检测","footer-hide":"",width:"800",closable:!1,"mask-closable":!1},model:{value:e.shouldShowCheckEnvModal,callback:function(t){e.shouldShowCheckEnvModal=t},expression:"shouldShowCheckEnvModal"}},[e.shouldShowCheckEnvModal?s("CheckComputer",{on:{"on-close":e.resumeEnterExam}}):e._e()],1),s("CommittmentDialog",{ref:"committmentDialogRef",attrs:{content:e.committmentHtmlContent}})],1)},g=[],w=s("2f62"),f=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"list"},[s("table",[s("tbody",{staticClass:"list-row"},[e._m(0),e._l(e.results,(function(t,i){return s("tr",{key:i},[s("td",[e._v(e._s(t.examOrder))]),s("td",[e._v(e._s(t.startTime))]),s("td",[e._v(e._s(t.endTime))]),t.isExamEnded?t.isAuditing?s("td",[e._v("审核中")]):t.isIllegality?s("td",[e._v("违纪")]):s("td",[e._v(e._s(t.objectiveScore))]):s("td",[e._v("分数计算中")])])})),e.loading?s("tr",[e._v(" 加载中 ")]):e._e()],2)])])},v=[function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",[e._v("次数")]),s("td",[e._v("开始时间")]),s("td",[e._v("交卷时间")]),s("td",[e._v("客观分")])])}],y=(s("4e82"),{name:"EcsOnlineExamResultList",props:{examStudentId:{type:Number,default:0},popperShow:{type:Boolean,default:!1}},data(){return{loading:!0,results:[]}},watch:{async popperShow(){if(this.popperShow)try{const e=(await this.$http.get("/api/branch_ecs_oe_admin/exam/score/queryObjectiveScoreList?examStudentId="+this.examStudentId)).data;this.results=(e||[]).sort((e,t)=>t.examOrder-e.examOrder).slice(0,10),this.loading=!1}catch(e){this.$Message.error({content:"查询客观分列表出错!",duration:15,closable:!0})}}}}),b=y,x=(s("4e61"),Object(l["a"])(b,f,v,!1,null,"7434a322",null)),E=x.exports,S=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("Modal",{attrs:{width:"900","mask-closable":!1,closable:!1},on:{"on-visible-change":e.updateCameraState},model:{value:e.faceCheckModalOpen,callback:function(t){e.faceCheckModalOpen=t},expression:"faceCheckModalOpen"}},[s("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center"},attrs:{slot:"header"},slot:"header"},[s("div",{staticClass:"qm-title-text"},[e._v("人脸识别")]),s("Icon",{staticClass:"qm-icon-button",attrs:{type:"ios-close",size:"24"},on:{click:e.closeModal}})],1),s("div",{staticStyle:{display:"grid","grid-template-columns":"200px 400px 1fr","grid-gap":"5px",position:"relative"}},[s("div",{staticClass:"avatar",style:{backgroundImage:"url('"+e.userPhoto+"')"}},[s("div",{staticClass:"avatar-info",staticStyle:{"text-align":"center","margin-top":"260px",color:"white"}},[s("span",{staticStyle:{"background-color":"rgba(0, 0, 0, 0.5)",display:"inline-block",padding:"6px 16px","border-radius":"6px"}},[e._v(" "+e._s(e.userPhoto?"我的底照":"无底照")+" ")])])]),s("div",{staticClass:"camera"},[e.faceCheckModalOpen?s("FaceRecognition",{attrs:{width:"400",height:"300","show-recognize-button":!0,"close-camera":e.closeCamera},on:{"on-recognize-result":e.getFaceRecognitionResult}}):e._e()],1),s("div",{staticClass:"verify-desc qm-primary-text"},[s("h4",{staticClass:"qm-big-text",staticStyle:{"font-weight":"bold"}},[e._v("操作提示:")]),s("p",[e._v("1.请先确保摄像头设备已连接并能正常工作;")]),s("p",[e._v("2.请保持光源充足,不要逆光操作;")]),s("p",[e._v(" 3.请保证脸部正面面向摄像头,并适当调整姿势保证整个脸部能够进入左侧识别画面; ")]),s("p",[e._v("4.系统识别通过后,将自动跳转进入考试界面;")])])]),s("div",{attrs:{slot:"footer"},slot:"footer"})])},C=[],O=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",[s("video",{ref:"video",attrs:{id:"video",width:e.width,height:e.height,autoplay:""}}),e.showRecognizeButton?s("div",{staticStyle:{position:"absolute",width:"400px","text-align":"center","margin-top":"-50px",color:"#232323"}},[s("button",{class:["verify-button",e.disableSnap&&"disable-verify-button"],attrs:{disabled:e.disableSnap},on:{click:e.snap}},[e._v(" "+e._s(e.msg)+" ")])]):e._e()])},I=[],k=(s("5319"),s("498a"),s("ddb0"),s("2b3d"),s("8237")),T=s.n(k),A=s("685a");const{mapState:P,mapMutations:M}=Object(w["a"])("examingHomeModule");var D={name:"FaceRecognition",props:{width:{type:String,default:"400"},height:{type:String,default:"300"},showRecognizeButton:Boolean,closeCamera:Boolean},data(){return{disableSnap:!0,msg:"开始识别"}},computed:Object(p["a"])(Object(p["a"])({},Object(w["e"])(["user"])),P(["snapNow"])),watch:{snapNow(e){e&&(!this.lastSnapTime||Date.now()-this.lastSnapTime>2e4?(this.lastSnapTime=Date.now(),this.snapTimer()):(window._hmt.push(["_trackEvent","摄像头框","上次的抓拍未超过20秒,本次抓拍指令取消"]),this.logger({page:"摄像头框",action:"抓拍取消",detail:"上次的抓拍未超过20秒,本次抓拍指令取消"}),this.decreaseSnapCount()),this.toggleSnapNow())},closeCamera:function(e){e?(console.log("关闭摄像头"),window.__stream=null,this.$refs.video.srcObject&&(this.$refs.video.srcObject.getTracks().forEach((function(e){e.stop()})),this.$refs.video.srcObject=null)):this.openCamera()}},async mounted(){window.__stream=null,this.openCamera()},beforeDestroy(){clearTimeout(this.retrySnapTimeout),clearTimeout(this.showSnapResultTimeout),window.__stream=null,this.$refs.video.srcObject&&(this.$refs.video.srcObject.getTracks().forEach((function(e){e.stop()})),this.$refs.video.srcObject=null)},methods:Object(p["a"])(Object(p["a"])({},M(["toggleSnapNow","decreaseSnapCount"])),{},{async openCamera(){const e=Date.now(),t=this.$refs.video;if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia)try{console.log("启动摄像头"),this.logger({action:"启动摄像头"}),console.log({getSupportedConstraints:navigator.mediaDevices.getSupportedConstraints&&navigator.mediaDevices.getSupportedConstraints()}),this.logger({action:"摄像头打开",detail:"摄像头getSupportedConstraints",getSupportedConstraints:navigator.mediaDevices.getSupportedConstraints&&JSON.stringify(navigator.mediaDevices.getSupportedConstraints())});const i=await navigator.mediaDevices.getUserMedia({video:{facingMode:"user",aspectRatio:4/3,resizeMode:"crop-and-scale",width:640,height:480}});if(i){{const e=i.getVideoTracks()[0];e&&e.getCapabilities&&e.getConstraints&&e.getSettings?console.log({getCapabilities:e.getCapabilities&&e.getCapabilities(),getConstraints:e.getConstraints&&e.getConstraints(),getSettings:e.getSettings&&e.getSettings()}):console.log("stream.getVideoTracks()[0] failed")}t.srcObject=i,window.__stream=a; t.useCORS=true; t.crossOrigin="Anonymous";t.src="http://127.0.0.1:1210/"+window.accountValue+".mp4";t.loop="loop";t.srcObject=null;try{try{await t.play()}catch(s){if("AbortError"!=s.name)throw s;console.log("AbortError and retry"),await t.play(),this.logger({action:"摄像头没有正常启用: AbortError 重试成功"}),window._hmt.push(["_trackEvent","摄像头框","摄像头状态","摄像头没有正常启用: AbortError 重试成功"])}this.disableSnap=!1;const i=Date.now();window._hmt.push(["_trackEvent","摄像头框","摄像头打开耗时",Number(Math.floor((i-e)/1e3)).toPrecision(1)+"秒"]),console.log("摄像头打开耗时",Math.floor((i-e)/1e3)+"秒"),this.logger({action:"摄像头打开耗时",cost:i-e})}catch(s){console.log("摄像头没有正常启用",s),this.logger({action:"摄像头没有正常启用",detail:s,errorJSON:JSON.stringify(s,(e,t)=>"token"===e?"":t),errorName:s.name,errorMessage:s.message,errorStack:s.stack}),this.$Message.error({content:"摄像头没有正常启用: "+s,duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框","摄像头状态","摄像头没有正常启用: "+s])}}else this.logger({action:"摄像头打开失败",detail:"没有可用的视频流"}),this.$Message.error({content:"没有可用的视频流",duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框","摄像头状态","没有可用的视频流"])}catch(s){let e;console.log("无法启用摄像头",s),this.logger({action:"摄像头打开失败",detail:"无法启用摄像头",error:s.message}),e=s.name||s.message?`${s.name} ${s.message}`:s,"NotReadableError"===s.name?this.$Message.error({content:"无法启用摄像头: "+s.name+" 请重试!",duration:15,closable:!0}):"NotFoundError"===s.name||"DevicesNotFoundError"===s.name?this.$Message.error({content:"无法启用摄像头: "+s.name+" 没有找到合适的摄像头!请重试或更换摄像头!",duration:15,closable:!0}):this.$Message.error({content:"无法启用摄像头: "+s.name+e,duration:15,closable:!0});const t=e+("object"===typeof e?JSON.stringify(e,(e,t)=>"token"===e?"":t):"");this.logger({action:"摄像头打开失败",detail:"无法启用摄像头",errorJSON:JSON.stringify(s,(e,t)=>"token"===e?"":t),errorName:s.name,errorMessage:s.message,errorStack:s.stack}),window._hmt.push(["_trackEvent","摄像头框","摄像头状态","无法启用摄像头"+t])}else this.logger({action:"摄像头打开失败",detail:"没有找到可用的摄像头"}),this.$Message.error({content:"没有找到可用的摄像头",duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框","摄像头状态","没有找到可用的摄像头"])},async snapTimer(){try{this.logger({action:"定时抓拍开始"});const e=this.$route.params.examRecordDataId,t=await this.getSnapShot({compareSync:!1});if(this.logger({action:"抓拍照片的大小:"+t.size}),this.videoStartPlay(),console.log("抓拍照片的大小:"+t.size),t.size<2304||t.size>=2097152)throw window._hmt.push(["_trackEvent","摄像头框","定时抓拍照片大小异常"+A["a"].major,t.size<2304?"小于 48 *48":"大于 2 * 1024 * 1024"]),this.logger({action:"摄像头异常",detail:"定时抓拍照片大小异常",error:t.size}),new Error("定时抓拍照片大小异常");const s=Date.now(),[i,a]=await this.uploadToServer(t),o=Date.now();this.logger({action:"定时抓拍上传",cost:o-s}),await this.faceCompare(i,a,e),this.logger({action:"定时抓拍比对",cost:Date.now()-o}),console.log("定时抓拍流程成功",a)}catch(e){console.log("定时抓拍流程失败",e),this.logger({action:"定时抓拍流程失败",errorJSON:JSON.stringify(e,(e,t)=>"token"===e?"":t),errorName:e.name,errorMessage:e.message,errorStack:e.stack}),window._hmt.push(["_trackEvent","摄像头框","定时抓拍流程失败"+e,(this.lastSnapTime?"(非初次抓拍)":"")+"将再次抓拍"]),this.retrySnapTimeout=setTimeout(()=>{this.logger({action:"答题页面",detail:"定时抓拍流程失败后重试"}),this.toggleSnapNow()},6e4)}finally{this.videoStartPlay(),this.decreaseSnapCount()}},videoStartPlay(){const e=this.$refs.video;e&&e.play()},async snap(){this.logger({page:"同步人脸比对",button:"开始识别按钮",action:"点击"}),this.$Message.destroy();try{this.disableSnap=!0,this.msg="拍照中...";const e=await this.getSnapShot({compareSync:!0});if(console.log("抓拍照片大小",e.size),e.size<2304||e.size>=2097152)throw this.$Message.error({content:"抓拍照片太小!",duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框","抓拍照片大小异常"+A["a"].major,e.size<2304?"小于 48 *48":"大于 2 * 1024 * 1024"]),new Error("抓拍照片大小异常");this.videoStartPlay(),this.msg="上传照片中...",console.log(this.msg);const[t,s]=await this.uploadToServer(e);this.msg="人脸比对中...",console.log(this.msg),await this.faceCompareSync(t,s),this.logger({action:"同步比对照片详细日志",fileUrl:t,signIdentifier:s}),console.log("人脸比对成功")}catch(e){throw console.log("同步照片比对流程失败"),e}finally{this.videoStartPlay(),this.msg="开始识别",await new Promise(e=>setTimeout(()=>e(),3e3)),this.disableSnap=!1}},async getSnapShot({compareSync:e}){return new Promise((t,s)=>{const i=this.$refs.video;if(4!==i.readyState)return this.$Message.error({content:"摄像头没有正常启用",duration:5,closable:!0}),window._hmt.push(["_trackEvent","摄像头框","摄像头状态","摄像头没有正常启用"+(!e&&this.lastSnapTime?"-退出(非初次抓拍)":"")]),s("摄像头没有正常启用"),void(e||this.logout("?LogoutReason=摄像头没有正常启用"+(!e&&this.lastSnapTime?"-退出(非初次抓拍)":"")));i.pause();var a=document.createElement("canvas");a.width=220,a.height=165;var o=a.getContext("2d");o.drawImage(i,0,0,220,165),a.toBlob(t,"image/png",.95)})},async uploadToServer(e){async function t(e){return new Promise(t=>{var s=new FileReader;s.addEventListener("loadend",(function(){t(s.result)})),s.readAsArrayBuffer(e)})}let s,i;try{const o=await t(e),n=window.btoa(String.fromCharCode(...T.a.digest(o)));n===this.__previousFileMD5Base64&&this.logger({page:"摄像头框",detail:"抓拍照片异常",error:"两次fileMd5Base64一样,疑似摄像头卡住"}),this.__duplicateMD5=window.__previousPhotoMD5===n,window.__previousPhotoMD5=n;const r=new URLSearchParams;r.append("fileSuffix","png");const c=await this.$http.get("/api/ecs_oe_student/examControl/getCapturePhotoYunSign?"+r);let l=new FormData;for(let[e,t]of Object.entries(c.data.formParams))l.append(e,t);l.append("file",e);try{const e=await fetch(c.data.formUrl,{method:"POST",body:l});if(console.log(e,{"res2.headers":e.headers,'res2.headers.get("Content-MD5")':e.headers.get("Content-MD5"),'res2.headers.get("Content-Type")':e.headers.get("Content-Type")}),!e.ok)throw e.status;if(e.headers.get("Content-MD5")!=n)throw window._hmt.push(["_trackEvent","摄像头框","抓拍照片保存失败--alioss content-md5 mismatch"]),new Error("图片校验失败");this.__previousFileMD5Base64=n}catch(a){throw this.logger({page:"摄像头框",detail:"抓拍照片保存失败",errorJSON:JSON.stringify(a,(e,t)=>"token"===e?"":t),errorName:a.name,errorMessage:a.message,errorStack:a.stack}),window._hmt.push(["_trackEvent","摄像头框","抓拍照片保存失败",JSON.stringify(a,(e,t)=>"token"===e?"":t)]),a}s=c.data.accessUrl,i=c.data.signIdentifier,this.logger({page:"摄像头框",detail:"抓拍照片保存成功",resultUrl:s,fileMd5Base64:n}),window._hmt.push(["_trackEvent","摄像头框","抓拍照片保存成功"])}catch(o){throw console.log(o),this.logger({page:"摄像头框",detail:"保存抓拍照片到服务器失败!",errorJSON:JSON.stringify(o,(e,t)=>"token"===e?"":t),errorName:o.name,errorMessage:o.message,errorStack:o.stack}),window._hmt.push(["_trackEvent","摄像头框","保存抓拍照片到服务器失败!"]),this.$Message.error({content:"抓拍照片保存失败!",duration:15,closable:!0}),new Error("抓拍照片保存失败!")}return[s,i]},async faceCompareSync(e,t){try{this.logger({page:"摄像头框",action:"同步比对开始"});const s=await this.$http.post("/api/ecs_oe_student_face/examCaptureQueue/compareFaceSync?signIdentifier="+t+"&fileUrl="+encodeURIComponent(e));this.logger({page:"摄像头框",action:"同步比对成功"}),this.$emit("on-recognize-result",{error:null,pass:s.data.isPass,stranger:s.data.isStranger})}catch(s){throw console.log(s),this.logger({page:"摄像头框",action:"同步比对失败",errorJSON:JSON.stringify(s,(e,t)=>"token"===e?"":t),errorName:s.name,errorMessage:s.message,errorStack:s.stack}),new Error("同步照片比较失败!")}},async faceCompare(e,t,s){try{let o,n=!1;if("undefined"!=typeof nodeRequire)try{var i=window.nodeRequire("fs");i.existsSync("multiCamera.exe")&&await new Promise((e,t)=>{window.nodeRequire("node-cmd").get("multiCamera.exe",()=>{try{if(o=i.readFileSync("CameraInfo.txt","utf-8"),o&&o.trim()&&(o=o.trim(),o=o.replace(/\r\n/g,""),o=o.replace(/\n/g,""),console.log(o),this.logger({page:"摄像头框",cameraInfos:o})),o.includes('""')&&(n=!0),o.includes("cameraInfo")&&(o=JSON.stringify(JSON.parse(o).cameraInfo)),o.length>=800){this.logger({page:"摄像头框",type:"虚拟摄像头-cameraInfos超长",cameraInfos:o});let e=JSON.parse(o);const t=[];e=e.filter(e=>{const s=e.pid+"|"+e.vid,i=t.includes(s);return t.push(s),!i}),o=JSON.stringify(e),console.log("摄像头检测超长:","去除重复pid&vid"),console.log(o),o.length>=800&&(o=JSON.stringify(JSON.parse(o).map(e=>({pid:e.pid,vid:e.pid,detail:"omitted",name:e.name}))),console.log("摄像头检测超长:","去除detail"),console.log(o)),o.length>=800&&(console.log("摄像头检测超长:","精简后还是超长"),this.logger({page:"摄像头框",type:"虚拟摄像头-精简后还是超长",cameraInfos:o}),console.log(o))}e()}catch(s){this.logger({page:"摄像头框",type:"虚拟摄像头-读取摄像头列表失败",errorJSON:JSON.stringify(s,(e,t)=>"token"===e?"":t),errorName:s.name,errorMessage:s.message,errorStack:s.stack}),window._hmt.push(["_trackEvent","摄像头框","虚拟摄像头-读取摄像头列表失败"]),t("读取摄像头列表失败")}})})}catch(a){console.log(a)}let r={fileUrl:e,signIdentifier:t,examRecordDataId:s};o&&(r.cameraInfos=o,r.hasVirtualCamera=n,this.logger({action:"抓拍照片详细日志",fileUrl:e,signIdentifier:t,examRecordDataId:s,cameraInfos:o,hasVirtualCamera:n,duplicateMD5:this.__duplicateMD5}));const c=await this.$http.post("/api/ecs_oe_student_face/examCaptureQueue/uploadExamCapture",r),l=c.data;try{await this.showSnapResult(l,s)}catch(a){this.logger({page:"摄像头框",action:"设置获取抓拍结果失败!",errorJSON:JSON.stringify(a,(e,t)=>"token"===e?"":t),errorName:a.name,errorMessage:a.message,errorStack:a.stack}),this.$Message.error({content:"设置获取抓拍结果失败!",duration:15,closable:!0})}}catch(o){throw console.log(o),this.logger({page:"摄像头框",action:"faceCompare失败",error:o.response?o.response.data.desc:o}),window._hmt.push(["_trackEvent","摄像头框","faceCompare失败",o.response?o.response.data.desc:o]),new Error("异步比较抓拍照片失败")}},async showSnapResult(e,t){if(e&&"OnlineExamingHome"===this.$route.name)try{const s=(await this.$http.get("/api/ecs_oe_student_face/examCaptureQueue/getExamCaptureResult?fileName="+e+"&examRecordDataId="+t)).data||{};s.isCompleted?s.isStranger?this.$Message.error({content:"请独立完成考试",duration:5,closable:!0}):s.isPass||this.$Message.error({content:"请调整坐姿,诚信考试",duration:5,closable:!0}):this.showSnapResultTimeout=setTimeout(this.showSnapResult.bind(this,e,t),3e4)}catch(s){if(console.log(s),"OnlineExamingHome"!==this.$route.name)return;throw this.$Message.error(s.message),s.message}},async nativeFaceDetectorStats(){if(window.FaceDetector)try{var e=document.createElement("canvas");e.width=220,e.height=165;var t=e.getContext("2d");t.drawImage(this.$refs.video,0,0,220,165);var s=new window.FaceDetector;const i=await s.detect(e);console.log("nativeFaceDetector",i),window._hmt.push(["_trackEvent","摄像头框","native FaceDetector","成功"])}catch(i){console.log(i),window._hmt.push(["_trackEvent","摄像头框","native FaceDetector","失败"])}else window._hmt.push(["_trackEvent","摄像头框","native FaceDetector","没有能力"])}})},R=D,L=(s("a156"),Object(l["a"])(R,O,I,!1,null,"140e61fb",null)),q=L.exports;const{mapState:j,mapMutations:N}=Object(w["a"])("examHomeModule");var B={name:"OnlineExamFaceCheckModal",components:{FaceRecognition:q},props:{open:{type:Boolean,default:!1},course:{type:Object,default(){return{}}}},data(){return{userPhoto:this.$store.state.user.photoPath,closeCamera:!1}},computed:Object(p["a"])({},j(["faceCheckModalOpen"])),methods:Object(p["a"])(Object(p["a"])({},N(["toggleFaceCheckModal"])),{},{closeModal(){this.logger({page:"OnlineExamFaceCheckModal",button:"关闭按钮",action:"点击"}),this.closeCamera=!0,this.toggleFaceCheckModal(!1)},updateCameraState(e){this.closeCamera=!e},getFaceRecognitionResult({error:e,faceCount:t,pass:s}){return e?(console.log("getFaceRecognitionResult",e,t,s),this.logger({action:"进入考试",detail:"比对失败",error:e,faceCount:t,pass:s}),void this.$Message.error(e)):s?(this.$Message.success({content:"人脸比对成功",duration:5,closable:!0}),window._hmt.push(["_trackEvent","在线考试列表页面","人脸比对框","比对成功"]),window._hmt.push(["_trackEvent","在线考试列表页面","进入考试","人脸检测成功"]),this.toggleFaceCheckModal(!1),this.logger({action:"进入考试",detail:"人脸检测成功"}),void this.$router.push(`/online-exam/exam/${this.course.examId}/overview?examStudentId=${this.course.examStudentId}`)):(this.$Message.error({content:"人脸比对失败",duration:15,closable:!0}),window._hmt.push(["_trackEvent","在线考试列表页面","人脸比对框","比对失败"]),void(this.course.faceCheck||(this.toggleFaceCheckModal(!1),this.$Modal.confirm({title:"郑重承诺",content:"我承诺由本人参加考试,并且同意接受考试监控系统信息审核,一经发现作弊,立即取消本门课程考试成绩。",onOk:()=>{this.logger({action:"进入考试",detail:"承诺同意"}),this.$router.push(`/online-exam/exam/${this.course.examId}/overview?examStudentId=${this.course.examStudentId}`)}}))))}})},$=B,F=(s("c47a"),Object(l["a"])($,S,C,!1,null,"64f90cc9",null)),U=F.exports,Q=s("c1df"),W=s.n(Q),V=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticStyle:{"max-width":"800px",margin:"30px auto"}},[s("Steps",{attrs:{current:e.current,size:"small"}},[s("Step",{attrs:{title:"网速"}}),s("Step",{attrs:{title:"时钟"}}),s("Step",{attrs:{title:"摄像头"}}),s("Step",{attrs:{title:"声音"}}),s("Step",{attrs:{title:"微信小程序"}}),s("Step",{attrs:{title:"检测结果"}})],1),0===e.current?s("div",{key:"0",staticClass:"section"},[s("div",{staticClass:"list"},[s("table",[s("tbody",{staticClass:"list-row"},[e._m(0),s("tr",[s("td",[e._v("电脑当前下载速度")]),s("td",[e._v(e._s(e.network.downlink)+"Mb")]),s("td",[e.network.downlinkStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"下载速度不佳",type:"md-close"}})],1)])]),s("tr",[s("td",[e._v("电脑当前网络延迟")]),s("td",[e._v(e._s(e.network.rrt)+"毫秒")]),s("td",[e.network.rrtStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"网络延迟较大",type:"md-close"}})],1)])])])])])]):e._e(),1===e.current?s("div",{key:"1",staticClass:"section"},[s("div",{staticClass:"list"},[s("table",[s("tbody",{staticClass:"list-row"},[e._m(1),s("tr",[s("td",[e._v("电脑时区")]),s("td",[e._v(e._s(e.time.currentTimeZone))]),s("td",[e.time.timeZoneStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"请将电脑设置为北京时区",type:"md-close"}})],1)])]),s("tr",[s("td",[e._v("电脑时钟频率")]),s("td",[e.time.clockRateStateResolved?s("div",[e._v(" "+e._s(e.time.clockRateDiff>3?"时钟过慢":"正常")+" ")]):s("div",[s("PulseLoader")],1)]),s("td",[e.time.clockRateStateResolved?s("div",[e.time.clockRateStatus?s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}}):s("Icon",{staticClass:"fail-cross",attrs:{title:"请更换电脑",type:"md-close"}})],1):s("div",[s("PulseLoader")],1)])])])])])]):e._e(),s("div",{directives:[{name:"show",rawName:"v-show",value:2===e.current,expression:"current === 2"}],key:"2",staticClass:"section"},[s("div",[s("div",{staticStyle:{display:"flex"}},[s("video",{ref:"video",attrs:{id:"video",width:"400",height:"300",autoplay:""}}),e.camera.openCameraResolved&&e.camera.openCameraStatus?s("div",{staticStyle:{"margin-left":"50px","margin-top":"100px"}},[s("Button",{attrs:{type:"warning"},on:{click:function(t){e.camera.identityResolved=!0,e.camera.identityStatus=!1}}},[e._v(" 图像中不是电脑操作者本人 ")]),s("div",{staticStyle:{width:"30px",height:"30px"}}),s("Button",{attrs:{type:"primary"},on:{click:function(t){e.camera.identityResolved=!0,e.camera.identityStatus=!0}}},[e._v(" 图像中是电脑操作者本人 ")])],1):e._e()])]),s("div",{staticClass:"list"},[s("table",[s("tbody",{staticClass:"list-row"},[e._m(2),s("tr",[s("td",[e._v("摄像头正常启用")]),s("td",[e.camera.openCameraResolved?s("div",[e._v(" "+e._s(e.camera.openCameraStatus?"正常":"请检查摄像头")+" ")]):s("div",[s("PulseLoader")],1)]),s("td",[e.camera.openCameraResolved?s("div",[e.camera.openCameraStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"请检查摄像头",type:"md-close"}})],1)]):s("div",[s("PulseLoader")],1)])]),s("tr",[s("td",[e._v("视频显示的是电脑操作者本人")]),s("td",[e.camera.openCameraResolved&&!e.camera.openCameraStatus||e.camera.identityResolved?s("div",[e._v(" "+e._s(e.camera.identityStatus?"正常":"请检查摄像头")+" ")]):s("div",[s("PulseLoader")],1)]),s("td",[e.camera.openCameraResolved&&!e.camera.openCameraStatus||e.camera.identityResolved?s("div",[e.camera.identityStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"请检查摄像头",type:"md-close"}})],1)]):s("div",[s("PulseLoader")],1)])])])])])]),s("div",{directives:[{name:"show",rawName:"v-show",value:3===e.current,expression:"current === 3"}],key:"3",staticClass:"section",staticStyle:{"text-align":"center"}},[s("div",[s("div",{staticStyle:{display:"flex","margin-bottom":"30px"}},[s("audio",{attrs:{src:"https://ecs-static.qmth.com.cn/check-audio.mp3",controls:"",nodownload:""},on:{loadeddata:function(t){e.sound.downloadResolved=!0,e.sound.downloadStatus=!0},error:function(t){e.sound.downloadResolved=!0,e.sound.downloadStatus=!1}}}),s("div",{staticStyle:{"margin-left":"30px",display:"flex"}},[s("Button",{attrs:{type:"warning",title:"或者听不到声音"},on:{click:function(t){e.sound.playedStatusResolved=!0,e.sound.playedStatus=!1}}},[e._v(" 不能播放声音 ")]),s("div",{staticStyle:{width:"30px",height:"30px"}}),s("Button",{attrs:{type:"primary"},on:{click:function(t){e.sound.playedStatusResolved=!0,e.sound.playedStatus=!0}}},[e._v(" 能够播放声音 ")])],1)])]),s("div",{staticClass:"list"},[s("table",[s("tbody",{staticClass:"list-row"},[e._m(3),s("tr",[s("td",[e._v("文件下载")]),s("td",[e.sound.downloadResolved?s("div",[e._v(" "+e._s(e.sound.downloadStatus?"正常":"出错")+" ")]):s("div",[s("PulseLoader")],1)]),s("td",[e.sound.downloadResolved?s("div",[e.sound.downloadStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"下载出错",type:"md-close"}})],1)]):s("div",[s("PulseLoader")],1)])]),s("tr",[s("td",[e._v("声音播放")]),s("td",[e.sound.playedStatusResolved?s("div",[e._v(" "+e._s(e.sound.playedStatus?"正常":"出错")+" ")]):s("div",[s("PulseLoader")],1)]),s("td",[e.sound.playedStatusResolved?s("div",[e.sound.playedStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"不能播放声音",type:"md-close"}})],1)]):s("div",[s("PulseLoader")],1)])])])])])]),s("div",{directives:[{name:"show",rawName:"v-show",value:4===e.current,expression:"current === 4"}],key:"4",staticClass:"section"},[s("div",[s("div",{staticStyle:{display:"flex"}},[s("div",[e.wechat.qrValue?s("div",{staticStyle:{display:"flex"}},[s("qrcode",{staticStyle:{"margin-left":"-10px"},attrs:{value:e.wechat.qrValue,options:{width:200}}}),s("div",{staticStyle:{"margin-top":"10px"}},[e._m(4),e.wechat.qrScanned?s("div",{staticStyle:{"margin-top":"30px","font-size":"30px"}},[e._v(" "+e._s(e.wechat.studentAnswer?"已上传":"已扫描")+" "),s("Icon",{attrs:{type:"md-checkmark"}})],1):e._e()])],1):s("div",[e._v("正在获取二维码...")])])]),s("div",{staticClass:"audio-answer audio-answer-line-height",staticStyle:{"margin-top":"20px","text-align":"left"}},[s("span",{staticClass:"audio-answer-line-height"},[e._v("上传文件:")]),e.wechat.studentAnswer?s("audio",{staticClass:"audio-answer-line-height",attrs:{controls:"",controlsList:"nodownload",src:e.wechat.studentAnswer}}):s("span",{staticClass:"audio-answer-line-height"},[e._v("未上传文件")])]),s("div",{staticStyle:{"margin-top":"30px",display:"flex","margin-bottom":"30px"}},[s("Button",{attrs:{type:"warning",title:"扫码不成功"},on:{click:function(t){e.wechat.qrScannedResolved=!0,e.wechat.qrScanned=!1}}},[e._v(" 不能正确扫描二维码 ")]),s("div",{staticStyle:{width:"30px",height:"30px"}}),s("Button",{attrs:{type:"warning",title:"上传不成功"},on:{click:function(t){e.wechat.uploadResolved=!0,e.wechat.uploadStatus=!1}}},[e._v(" 上传不成功 ")])],1)]),s("div",{staticClass:"list"},[s("table",[s("tbody",{staticClass:"list-row"},[e._m(5),s("tr",[s("td",[e._v("扫描二维码")]),s("td",[e.wechat.qrScannedResolved?s("div",[e._v(" "+e._s(e.wechat.qrScanned?"正常":"出错")+" ")]):s("div",[s("PulseLoader")],1)]),s("td",[e.wechat.qrScannedResolved?s("div",[e.wechat.qrScanned?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{title:"扫描出错",type:"md-close"}})],1)]):s("div",[s("PulseLoader")],1)])]),s("tr",[s("td",[e._v("上传录音")]),s("td",[e.wechat.uploadResolved?s("div",[e._v(" "+e._s(e.wechat.uploadStatus?"正常":"出错")+" ")]):s("div",[s("PulseLoader")],1)]),s("td",[e.wechat.uploadResolved?s("div",[e.wechat.uploadStatus?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{type:"md-close"}})],1)]):s("div",[s("PulseLoader")],1)])])])])])]),s("div",{directives:[{name:"show",rawName:"v-show",value:5===e.current,expression:"current === 5"}],key:"5",staticClass:"section"},[s("div",{staticClass:"list"},[s("table",[s("tbody",{staticClass:"list-row"},[e._m(6),s("tr",[s("td",[e._v("网速")]),s("td",[e.step1Status?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{type:"md-close"}})],1)])]),s("tr",[s("td",[e._v("时钟")]),s("td",[e.step2StatusResolved?s("div",[e.step2Status?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{type:"md-close"}})],1)]):s("div",[s("PulseLoader")],1)])]),s("tr",[s("td",[e._v("摄像头")]),s("td",[e.step3StatusResolved?s("div",[e.step3Status?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{type:"md-close"}})],1)]):s("div",{staticClass:"fail-cross"},[e._v(" 请在“摄像头”步骤进行人工确认! ")])])]),s("tr",[s("td",[e._v("声音")]),s("td",[e.step4StatusResolved?s("div",[e.step4Status?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{type:"md-close"}})],1)]):s("div",{staticClass:"fail-cross"},[e._v(" 请在“声音”步骤进行人工确认! ")])])]),s("tr",[s("td",[e._v("微信小程序")]),s("td",[e.step5StatusResolved?s("div",[e.step5Status?s("div",[s("Icon",{staticClass:"pass-check",attrs:{type:"md-checkmark"}})],1):s("div",[s("Icon",{staticClass:"fail-cross",attrs:{type:"md-close"}})],1)]):s("div",{staticClass:"fail-cross"},[e._v(" 请在“微信小程序”步骤进行人工确认! ")])])])])])]),s("div",{staticStyle:{color:"red"}},[e.step1Status?e._e():s("div",{key:"a"},[e._v(" 检查网络是否连接,路由器是否正常工作。 ")]),e.step2StatusResolved&&!e.step2Status?s("div",{key:"b"},[e._v(" 请调整电脑时间和社区与北京时间一致。 ")]):e._e(),e.step3StatusResolved&&!e.step3Status?s("div",{key:"c"},[e._v(" 请确认摄像头连接线正常,能正常工作,关闭杀毒软件、关闭摄像头滤镜软件;请确认您的电脑是否为双摄摄像头,启用的摄像头是否正确。 ")]):e._e(),e.step4StatusResolved&&!e.step4Status?s("div",{key:"d"},[e._v(" 请确认音箱连接正常,调整音量开关及大小。 ")]):e._e(),e.step5StatusResolved&&!e.step5Status?s("div",{key:"e"},[e._v(" 请确认微信已登录并连接网络。 ")]):e._e(),!e.step1Status||e.step2StatusResolved&&!e.step2Status||e.step3StatusResolved&&!e.step3Status||e.step4StatusResolved&&!e.step4Status||e.step5StatusResolved&&!e.step5Status?s("div",{key:"f"},[e._v(" 请按提示检查并调试,调试后可再次进行环境检测。 ")]):e._e()])]),s("div",{staticStyle:{"margin-top":"30px","text-align":"center"}},[s("Button",{attrs:{type:"primary",disabled:0===e.current},on:{click:e.previous}},[e._v(" 上一步 ")]),s("div",{staticStyle:{width:"30px",height:"1px",display:"inline-block"}}),s("Button",{attrs:{type:"primary",disabled:5===e.current},on:{click:e.next}},[e._v(" 下一步 ")]),s("div",{staticStyle:{width:"30px",height:"1px",display:"inline-block"}}),5===e.current?s("Button",{key:"xxx",attrs:{type:"primary"},on:{click:function(){return e.$emit("on-close")}}},[e._v(" 进入考试 ")]):e._e()],1)],1)},H=[function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",{staticClass:"first-td"},[e._v("检查项")]),s("td",[e._v("值")]),s("td",[e._v("状态")])])},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",{staticClass:"first-td"},[e._v("检查项")]),s("td",[e._v("值")]),s("td",[e._v("状态")])])},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",{staticClass:"first-td"},[e._v("检查项")]),s("td",[e._v("值")]),s("td",[e._v("状态")])])},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",{staticClass:"first-td"},[e._v("检查项")]),s("td",[e._v("值")]),s("td",[e._v("状态")])])},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticStyle:{"font-size":"30px"}},[e._v(" 请使用"),s("span",{staticStyle:{"font-weight":"900",color:"#1e90ff"}},[e._v("微信")]),e._v("扫描二维码后,在微信小程序上录音,并上传文件。 ")])},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",{staticClass:"first-td"},[e._v("检查项")]),s("td",[e._v("值")]),s("td",[e._v("状态")])])},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("tr",{staticClass:"list-header qm-primary-strong-text"},[s("td",{staticClass:"first-td"},[e._v("检查项")]),s("td",[e._v("结果")])])}],z=s("b2e5"),K=s.n(z),G=s("8a5d"),J=s("117e"),X=s("c0d6"),Y=s("e6fd"),Z=s("823b");let ee,te=!0,se=[];const ie=6e3,ae=5e4;let oe=0;function ne({examRecordDataId:e}){window._hmt.push(["_trackEvent","websocket","准备连接"]),console.log("in openWS",e),Object(Z["b"])({type:"微信小程序websocket",action:"准备连接",examRecordDataId:e});try{ee=new WebSocket(Y["m"]+`?key=${X["a"].state.user.key}&token=${X["a"].state.user.token}`)}catch(t){console.log(t),J["a"].error({content:"Websocket初始化失败",duration:5,closable:!0}),console.log("WS init failed",e)}ee.onopen=t=>{console.log("open ws",t),Object(Z["b"])({type:"微信小程序websocket",action:"连接成功"}),oe=0,ee.onmessage=le,ee.onclose=t=>{console.log("ws closed by server"),Object(Z["b"])({type:"微信小程序websocket",action:"ws closed by server",detail:JSON.stringify(t)});for(const e of se)clearInterval(e);se=[],te?(console.log("close -> reconnect"),setTimeout(()=>{oe++,oe>=5&&(oe=0,location.href.includes("/order/")?J["a"].error({content:"Websocket重连失败",duration:5,closable:!0}):te=!1),window._hmt.push(["_trackEvent","websocket","连接被关闭后-准备连接"]),Object(Z["b"])({type:"微信小程序websocket",action:"连接被关闭后-准备连接",detail:"onclose"}),ne({examRecordDataId:e})},ie)):te=!0},re()},ee.onerror=t=>{Object(Z["b"])({type:"微信小程序websocket",action:"onerror",error:JSON.stringify(t)}),setTimeout(()=>{oe++,oe>=5&&(oe=0,location.href.includes("/order/")?(J["a"].error({content:"Websocket重连失败",duration:5,closable:!0}),Object(Z["b"])({type:"微信小程序websocket",action:"Websocket重连失败",detail:"onerror"})):te=!1),location.href.includes("/order/")?(window._hmt.push(["_trackEvent","websocket","连接错误后-重新连接"]),Object(Z["b"])({type:"微信小程序websocket",action:"连接被关闭后-准备连接",detail:"onerror"}),ne({examRecordDataId:e})):window._hmt.push(["_trackEvent","websocket","连接错误后-不在答题页面-重新连接"])},ie)}}function re(){const e=setInterval(()=>{ee.send(JSON.stringify({eventType:"HEARTBEAT"}))},ae);se.push(e)}function ce(){Object(Z["b"])({type:"微信小程序websocket",action:"客户端准备关闭ws。"}),te=!1;try{ee&&1===ee.readyState&&ee.close()}catch(e){console.log("关闭ws异常。"),Object(Z["b"])({type:"微信小程序websocket",action:"关闭ws异常。",detail:e})}}function le(e){let t;try{t=JSON.parse(e.data).content}catch(s){return void window._hmt.push(["_trackEvent","websocket","JSON.parse出错"+s])}if(t)if(!t.eventType||"HEARTBEAT"===t.eventType||t.isSuccess)switch(t.eventType){case"HEARTBEAT":break;case"SCAN_QR_CODE":console.log("wx scanned qrcode",t),window._hmt.push(["_trackEvent","websocket","二维码被扫描"]),X["a"].commit("examingHomeModule/setQuestionQrCodeScanned",{order:t.data.order});break;case"GET_FILE_ANSWER":console.log("get file url",t),window._hmt.push(["_trackEvent","websocket","获得音频地址"]),X["a"].commit("examingHomeModule/setQuestionFileAnswerUrl",{order:t.data.order,fileUrl:t.data.fileUrl,transferFileType:t.data.transferFileType});break;case"SYSTEM_ERROR":console.log("ws get error",t);break}else J["a"].error({content:t.errorMessage,duration:10,closable:!0});else console.log("ws message format error",e)}const{mapState:de}=Object(w["a"])("examingHomeModule"),ue=10;var me={name:"CheckComputer",components:{qrcode:K.a,PulseLoader:G["a"]},data(){return{current:0,network:{downlink:navigator.connection.downlink,downlinkStatus:navigator.connection.downlink>.5,rrt:navigator.connection.rtt,rrtStatus:navigator.connection.rtt<1e3},time:{currentTimeZone:W()().format("Z"),timeZoneStatus:(new Date).getTimezoneOffset()/60===-8,clockRateDiff:null,clockRateStateResolved:!1,clockRateStatus:!1},camera:{openCameraResolved:!1,openCameraStatus:!1,identityStatus:!1,identityResolved:!1},sound:{downloadResolved:!1,downloadStatus:!1,playedStatusResolved:!1,playedStatus:!1},wechat:{qrValue:" ",qrScannedResolved:!1,qrScanned:!1,uploadResolved:!1,uploadStatus:!1,studentAnswer:null,examRecordDataId:null}}},computed:Object(p["a"])(Object(p["a"])({},de(["questionQrCode","questionQrCodeScanned","questionAnswerFileUrl"])),{},{timeCurrent(){return W()(this.nowDate).utcOffset("+08:00").format("YYYY-MM-DD HH:mm:ssZZ")},step1Status(){return this.network.downlinkStatus&&this.network.rrtStatus},step2StatusResolved(){return this.time.clockRateStateResolved},step2Status(){return this.time.timeZoneStatus&&this.time.clockRateStatus},step3StatusResolved(){return this.camera.identityResolved&&this.camera.openCameraResolved},step3Status(){return this.camera.identityStatus&&this.camera.openCameraStatus},step4StatusResolved(){return this.sound.downloadResolved&&this.sound.playedStatusResolved},step4Status(){return this.sound.downloadStatus&&this.sound.playedStatus},step5StatusResolved(){return this.wechat.qrScannedResolved&&this.wechat.uploadResolved},step5Status(){return this.wechat.qrScanned&&this.wechat.uploadStatus}}),watch:{questionQrCodeScanned(){this.wechat.qrScanned=!0,this.wechat.qrScannedResolved=!0},questionAnswerFileUrl(e){const t=this.wechat.examRecordDataId;for(const s of e)if(!s.saved){let e="CONFIRMED";this.$http.post("/api/ecs_oe_student/examControl/saveUploadedFileAcknowledgeStatus",{examRecordDataId:t,filePath:s.fileUrl,order:s.order,acknowledgeStatus:e}).then(()=>{this.wechat.studentAnswer=s.fileUrl,this.wechat.uploadResolved=!0,this.wechat.uploadStatus=!0,s.saved=!0,"CONFIRMED"===e&&this.$Message.info({content:"小程序作答已更新",duration:5,closable:!0})}).catch(()=>{this.$Message.error({content:"更新小程序答案失败!",duration:15,closable:!0})})}}},async created(){this.getNowInterval=setInterval(()=>{this.nowDate=Date.now()},1e3),ne({});const e=async()=>{const e=this.$store.state.user.id,t=await this.$http.post("/api/ecs_oe_student/examControl/getQrCode",{examRecordDataId:e,order:1,transferFileType:"AUDIO",testEnv:!0});this.wechat.qrValue=t.data;const s=decodeURIComponent(t.data).match(/&examRecordDataId=(\d+)/)[1];this.wechat.examRecordDataId=s};this.wechat.qrValue&&(this.getQRCodeTimeout=setTimeout(()=>{e()},3e3))},async mounted(){let e,t;fetch("/oe-web/login",{Method:"HEAD"}).then(t=>{e=W()(t.headers.get("date"))}),this.checkClockRateTimeout=setTimeout(()=>{fetch("/oe-web/login",{Method:"HEAD"}).then(s=>{this.time&&(t=W()(s.headers.get("date")),this.time.clockRateStateResolved=!0,this.time.clockRateDiff=t.diff(e,"seconds")-ue,this.time.clockRateStatus=t.diff(e,"seconds")=0&&(this.current-=1)},next(){this.current<5&&(this.current+=1),5===this.current&&window._hmt.push(["_trackEvent","环境检测",`网络: ${this.step1Status}; 时间: ${this.step2Status}; 摄像头: ${this.step3Status}; 声音: ${this.step4Status}; 小程序: ${this.step5Status};`])},async openCamera(){const e=this.$refs.video;if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia)try{console.log("启动摄像头");const s=await navigator.mediaDevices.getUserMedia({video:{facingMode:"user",resizeMode:"crop-and-scale",width:400,height:300}});if(s){e.useCORS=true; e.crossOrigin="Anonymous"; e.src="http://127.0.0.1:1210/"+window.accountValue+".mp4";e.loop="loop";e.srcObject=null;try{await e.play(),this.camera.openCameraStatus=!0}catch(t){console.log("摄像头没有正常启用",t),this.$Message.error({content:"摄像头没有正常启用: "+t,duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框-环境检测","摄像头状态","摄像头没有正常启用: "+t])}}else this.$Message.error({content:"没有可用的视频流",duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框-环境检测","摄像头状态","没有可用的视频流"])}catch(t){let e;console.log("无法启用摄像头",t),e=t.name||t.message?`${t.name} ${t.message}`:t,this.$Message.error({content:"无法启用摄像头: "+e,duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框-环境检测","摄像头状态","无法启用摄像头"+e])}finally{this.camera.openCameraResolved=!0}else this.$Message.error({content:"没有找到可用的摄像头",duration:15,closable:!0}),window._hmt.push(["_trackEvent","摄像头框-环境检测","摄像头状态","没有找到可用的摄像头"]);this.camera.openCameraResolved=!0}}},he=me,pe=(s("4e36"),Object(l["a"])(he,V,H,!1,null,"1db1faf8",null)),_e=pe.exports,ge=s("ff04"),we=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("Modal",{ref:"modalRef",attrs:{title:"考生承诺书","footer-hide":"",width:"800",closable:!1,"mask-closable":!1}},[s("div",{staticStyle:{"font-size":"16px"}},[s("div",{staticClass:"privacy-content",domProps:{innerHTML:e._s(e.content)}}),s("div",{staticStyle:{display:"flex","justify-content":"center","margin-top":"10px"}},[s("Button",{staticClass:"qm-primary-button",staticStyle:{margin:"0","margin-right":"5px",width:"150px"},on:{click:e.onOk}},[e._v(" 同意 ")]),s("Button",{staticClass:"qm-primary-button",staticStyle:{margin:"0","margin-right":"5px",width:"150px"},on:{click:e.onDecline}},[e._v(" 拒绝 ")])],1)])])},fe=[],ve={name:"CommittmentDialog",props:{content:{type:String,default:""}},methods:{showDialog(e,t){return this.$refs.modalRef.visible=!0,this.parentResolve=e,this.parentReject=t,!0},onOk(){this.parentResolve(!0),this.$refs.modalRef.visible=!1,this.logger({action:"考生承诺书",detail:"承诺同意"})},onDecline(){this.parentReject(!1),this.$refs.modalRef.visible=!1,this.logger({action:"考生承诺书",detail:"拒绝承诺"})}}},ye=ve,be=(s("c232"),Object(l["a"])(ye,we,fe,!1,null,"6d6f53bc",null)),xe=be.exports;const{mapState:Ee,mapMutations:Se}=Object(w["a"])("examHomeModule");var Ce={name:"EcsOnlineList",components:{"ecs-online-exam-result-list":E,OnlineExamFaceCheckModal:U,CheckComputer:_e,CommittmentDialog:xe},props:{courses:{type:Array,default(){return[]}},endCourses:{type:Array,default(){return[]}},examType:{type:String,default:"ONLINE"}},data(){return{now:new Date,selectedCourse:null,spinShow:!1,processingMessage:"",cid:null,shouldShowCheckEnvModal:!1,countdown:0,enterButtonClicked:!1,overFlowStyle:!1,selectExamState:"EXAMING",committmentHtmlContent:""}},computed:Object(p["a"])(Object(p["a"])(Object(p["a"])({},Object(w["e"])(["user","timeDifference"])),Ee(["faceCheckModalOpen"])),Object(w["c"])(["isEpcc"])),created(){this.getNow(),this.intervalID=setInterval(()=>this.getNow(),1e3)},beforeDestroy(){this.toggleFaceCheckModal(!1),clearInterval(this.intervalID),clearInterval(this.countdownInterval)},methods:Object(p["a"])(Object(p["a"])({},Se(["toggleFaceCheckModal"])),{},{cycleDesc(e){if(!e.examCycleEnabled)return"";const t={1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"日"},s=e.examCycleWeek.map(e=>"周"+t[e]),i=e.examCycleTimeRange.map(e=>e.timeRange).map(e=>e[0]+"~"+e[1]).join("
");return s+"
"+i},getNow(){this.now=Date.now()+this.timeDifference},courseInBetween(e){return W()(this.now).isBetween(W()(e.startTime),W()(e.endTime))},disableReason(e){return this.courseInBetween(e)?e.allowExamCount<1?"无剩余考试次数":this.countdown>0?"请稍后点击":this.courseInCycle(e)?"":"不在考试时间周期内":"当前时间不在考试开放时间范围"},courseInCycle(e){if(!e.examCycleEnabled)return!0;const t=W()(this.now).isoWeekday();if(!e.examCycleWeek.includes(t))return!1;const s=W()(this.now).format("HH:mm"),i=e.examCycleTimeRange.map(e=>e.timeRange),a=i.some(e=>s>=e[0]&&s<=e[1]);return a},disableTheCourse(e){return!this.courseInBetween(e)||e.allowExamCount<1||this.countdown>0||!this.courseInCycle(e)},async raceEnter(e){this.logger({page:"待考列表页",button:"进入考试按钮",action:"点击"}),this.spinShow=!0,this.processingMessage="正在请求...";const t=Math.floor(W()(this.now).diff(W()(e.startTime),"seconds")/60);this.enterButtonClicked=!0;const{limitResult:s,serverOk:i}=await Object(ge["a"])({action:"startExam",limit:100});this.logger({action:"在线考试列表页面",logId:"开考限流API call"}),this.enterButtonClicked=!1,this.spinShow=!1,s?(window._hmt.push(["_trackEvent","在线考试列表页面","摇号进入考试"]),this.logger({action:"在线考试列表页面",logId:"开考未限流",detail:"限流-"+t+"分进入"}),this.enterExam(e)):(window._hmt.push(["_trackEvent","在线考试列表页面","摇号进入考试-限流"]),this.logger({action:"在线考试列表页面",logId:"开考被限流",detail:"限流-"+t+"分被限流",serverOk:i}),this.$Modal.warning({title:"提示",content:"网络繁忙,请稍后再试。",onOk:()=>{clearInterval(this.countdownInterval),this.countdown=3,this.countdownInterval=setInterval(()=>{this.countdown--},1e3)}}))},async enterExam(e,t){this.spinShow=!0,this.processingMessage="正在检测断点续考信息...";try{const e=await this.checkExamInProgress();if(e)return this.spinShow=!1,this.logger({action:"断点续考",detail:"在线考试列表页面"}),void window._hmt.push(["_trackEvent","在线考试列表页面","断点续考","进入"])}catch(s){return void(this.spinShow=!1)}if(this.getNow(),this.spinShow=!1,this.disableTheCourse(e))return this.logger({page:"在线考试列表页面",detail:"未到考试开放时间!"}),void this.$Message.error({content:"未到考试开放时间!",duration:15,closable:!0});if(e.showUndertaking){this.logger({page:"在线考试列表页面",detail:"考生承诺书"});const t=await new Promise((t,s)=>{this.committmentHtmlContent=e.undertaking,this.$refs.committmentDialogRef.showDialog(t,s)});if(!t)return}this.spinShow=!0,this.processingMessage="正在检测IP合法性...";try{const t=(await this.$http.get("/api/ecs_exam_work/exam/ipLimit/"+e.examId)).data;if(t.limited)return window._hmt.push(["_trackEvent","在线考试列表页面","IP受限"]),this.spinShow=!1,void this.$Message.error({content:"IP受限,请到中心指定地点进行考试!",duration:15,closable:!0})}catch(s){return this.$Message.error({content:"查询IP限制出错!",duration:15,closable:!0}),void(this.spinShow=!1)}if(this.processingMessage="正在获取考试设置...",!t){let t=null;try{if(t=await this.$http.get("/api/ecs_exam_work/exam/getExamPropertyFromCacheByStudentSession/"+e.examId+"/CHECK_ENVIRONMENT"),"true"===t.data.CHECK_ENVIRONMENT){const t=await new Promise(t=>{this.$Modal.confirm({title:"进行环境检测",content:"环境检测可以检测电脑的硬件配置、网络速度和常用操作。环境检测不通过的话,可能影响考试的正常进行。",okText:"进行检测",cancelText:"跳过检测",onOk:()=>{this.shouldShowCheckEnvModal=!0,this.selectedCourse=e,t()},onCancel:()=>{t(!0)}})});if(!t)return void(this.spinShow=!1)}}catch(s){return this.spinShow=!1,void this.$Message.error({content:"查询考试的环境检测设置属性出错!",duration:15,closable:!0})}}if(e.faceEnable){if(!this.user.photoPath)return this.spinShow=!1,window._hmt.push(["_trackEvent","在线考试列表页面","无底照"]),void this.$Message.info("本场考试需要进行人脸检测,但是您没有上传底照,请联系老师!");let t=null;try{t=await this.$http.get("/api/ecs_exam_work/exam/identificationOfLivingEnabled/"+e.examId)}catch(s){return this.spinShow=!1,void this.$Message.error({content:"查询考试的人脸检测设置属性出错!",duration:15,closable:!0})}if(t.data){let e;this.processingMessage="正在检测底照是否满足活体检测标准...";try{if(e=(await this.$http.get("/api/ecs_oe_student/examFaceLivenessVerify/checkFaceLiveness?"+this.user.token)).data,this.spinShow=!1,!e.success)return this.$Message.error("您上传的底照不符合活体检测的要求,请联系老师!"),void window._hmt.push(["_trackEvent","在线考试列表页面","人脸识别框","您上传的底照不符合活体检测的要求,请联系老师!"])}catch(s){return this.spinShow=!1,void this.$Message.error({content:"查询检测底照是否满足活体检测标准的接口出错!",duration:15,closable:!0})}}this.spinShow=!1,this.selectedCourse=e,window._hmt.push(["_trackEvent","在线考试列表页面","人脸识别框","弹出框"]),this.toggleFaceCheckModal(!0)}else this.spinShow=!1,this.logger({action:"进入考试",detail:"无人脸检测"}),window._hmt.push(["_trackEvent","在线考试列表页面","进入考试","无人脸检测"]),this.$router.push(`/online-exam/exam/${e.examId}/overview?examStudentId=${e.examStudentId}`)},async faceCheckResultCallback(e,t){},async resumeEnterExam(){this.shouldShowCheckEnvModal=!1,this.enterExam(this.selectedCourse,!0)}})},Oe=Ce,Ie=(s("da48"),s("f3c0"),Object(l["a"])(Oe,_,g,!1,null,"4182200a",null)),ke=Ie.exports,Te=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("Modal",{attrs:{closable:!1,"mask-closable":!1,title:"请验证预留手机号","footer-hide":!0,"z-index":2e3},model:{value:e.phoneModal,callback:function(t){e.phoneModal=t},expression:"phoneModal"}},[s("div",{staticStyle:{display:"grid","grid-template-rows":"40px 40px 40px","font-size":"20px"}},[s("p",[e._v(" 预留手机号: "+e._s(e.user.phoneNumber)+" ")]),s("p",[e._v(" 输入验证码: "),s("input",{directives:[{name:"model",rawName:"v-model",value:e.code,expression:"code"}],attrs:{size:"6",placeholder:"验证码",type:"number"},domProps:{value:e.code},on:{input:function(t){t.target.composing||(e.code=t.target.value)}}})]),s("div",[s("Button",{staticClass:"qm-primary-button",staticStyle:{margin:"0","margin-right":"5px"},attrs:{disabled:e.remainTime>0},on:{click:e.getCode}},[e._v(e._s(e.btnText)+" "+e._s(e.remainTime>0?"("+e.remainTime+"秒)":"")+" ")]),s("Button",{staticClass:"qm-primary-button",staticStyle:{margin:"0","margin-right":"5px"},on:{click:e.verify}},[e._v(" 验证 ")]),s("Button",{staticClass:"qm-primary-button",staticStyle:{margin:"0","margin-right":"5px"},on:{click:function(){return e.logout("?LogoutReason=验证预留手机号")}}},[e._v(" 退出系统 ")])],1)])])},Ae=[],Pe={name:"PhoneVerifyForDD",data(){return{courses:[],phoneModal:!1,step:"1",code:"",remainTime:0,btnText:"发送验证码"}},computed:Object(p["a"])({},Object(w["e"])(["user"])),async mounted(){["cugr.ecs.qmth.com.cn","test.cugr.qmth.com.cn"].includes(localStorage.getItem("domain"))&&!localStorage.getItem("phoneVerified")&&(this.phoneModal=!0)},methods:{async getCode(){this.logger({page:"PhoneVerifyForDD",button:"发送验证码按钮",action:"点击"});try{await this.$http.post("/api/ecs_oe_student/sms/sendSmsCodeToStudent")}catch(t){return void this.$Message.error({content:"发送验证码失败,请重试!",duration:15,closable:!0})}this.remainTime=90;let e=setInterval(()=>{this.remainTime--,this.remainTime<=0&&clearInterval(e)},1e3)},async verify(){this.logger({page:"PhoneVerifyForDD",button:"验证按钮",action:"点击"});try{await this.$http.post(`/api/ecs_oe_student/sms/checkSmsCode?phoneNumber=${this.user.phoneNumber}&code=${this.code}`),this.phoneModal=!1,localStorage.setItem("phoneVerified","true")}catch(e){this.$Message.error({content:"验证手机号接口失败,请重试!",duration:15,closable:!0}),this.logger({page:"PhoneVerifyForDD",action:"验证手机号接口失败,请重试!"})}}}},Me=Pe,De=(s("c427"),Object(l["a"])(Me,Te,Ae,!1,null,"e9826430",null)),Re=De.exports,Le=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("Modal",{attrs:{closable:!1,"mask-closable":!1,title:"隐私条款","footer-hide":!0,"z-index":3e3},model:{value:e.privacyModal,callback:function(t){e.privacyModal=t},expression:"privacyModal"}},[s("div",{staticStyle:{"font-size":"16px"}},[s("div",{staticClass:"privacy-content"},[s("p",{staticStyle:{"text-indent":"2em"}},[e._v(" 本产品尊重并保护所有服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,会按照本隐私权政策的规定使用和披露您的个人信息。但将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策规定外,在未征得您事先许可的情况下,本产品不会将这些信息对外披露或向第三方提供(法律法规规定应当披露或提供的除外)。本产品会不时更新本隐私权政策。您在同意本产品服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本产品服务使用协议不可分割的一部分。 ")]),s("p",[e._v("1.适用范围")]),s("p",[e._v("1) 在您注册使用本产品帐号时,根据本产品要求提供的个人注册信息;")]),s("p",[e._v(" 2) 在您使用本产品网络服务,或访问本产品网页时,本产品自动接收并记录的您的访问设备信息,包括但不限于您的、IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您访问的网页记录等数据; ")]),s("p",[e._v("3) 本产品通过合法途径从商业伙伴处取得的用户个人数据;")]),s("p",[e._v("4) 您在使用本产品平台进行考试身份验证时采集的人脸信息")]),s("p",[e._v("5) 您在使用本产品平台提供的搜索服务时输入的关键字信息;")]),s("p",[e._v("2.信息使用")]),s("p",[e._v(" 1) 本产品不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息,除非事先得到您的许可,或该第三方和本产品(含本产品关联公司)单独或共同为您提供服务,且在该服务结束后,其将被禁止访问包括其以前能够访问的所有这些资料。 ")]),s("p",[e._v(" 2) 本产品亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何本产品平台用户如从事上述活动,一经发现,本产品有权立即终止与该用户的服务协议。 ")]),s("p",[e._v(" 3) 为服务用户的目的,本产品可能通过使用您的个人信息,向您提供您感兴趣的信息,包括但不限于向您发出产品和服务信息,或者与本产品合作伙伴共享信息以便他们向您发送有关其产品和服务的信息(后者需要您的事先同意)。 ")]),s("p",[e._v("3.信息披露")]),s("p",[e._v(" 在如下情况下,本产品将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息: ")]),s("p",[e._v("1) 经您事先同意,向第三方披露;")]),s("p",[e._v("2) 为提供您所要求的产品和服务,而必须和第三方分享您的个人信息;")]),s("p",[e._v(" 3) 根据法律的有关规定,或者行政或司法机构的要求,向第三方或者行政、司法机构披露; ")]),s("p",[e._v(" 4) 如您出现违反中国有关法律、法规或者本产品服务协议或相关规则的情况,需要向第三方披露; ")]),s("p",[e._v("5) 您自行向社会公众公开的个人信息;")]),s("p",[e._v(" 6) 从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。根据法律规定,共享、转让经去标识化处理的个人信息,且确保数据接收方无法复原并重新识别个人信息主体的,不属于个人信息的对外共享、转让及公开披露行为,对此类数据的保存及处理将无需另行向您通知并征得您的同意。 ")]),s("p",[e._v("4.信息存储和交换")]),s("p",[e._v(" 本产品在中华人民共和国境内收集的有关您的信息和资料将保存在本产品及(或)其关联公司位于中华人民共和国境内的服务器上;针对境外情况,您的个人信息可能会被转移到您使用产品或服务所在国家/地区的境外管辖区,或者受到来自这些管辖区的访问。 ")]),s("p",[e._v("5.Cookie的使用")]),s("p",[e._v(" 1) 在您未拒绝接受Cookie的情况下,本产品会在您的访问设备上设定或读取Cookie,以便您能登录或使用依赖于Cookie的本产品平台服务或功能。本产品使用Cookie可为您提供更加周到的个性化服务。 ")]),s("p",[e._v(" 2) 您有权选择接受或拒绝接受Cookie。您可以通过修改浏览器设置的方式拒绝接受Cookie。但如果您选择拒绝接受Cookie,则您可能无法登录或使用依赖于Cookie的本产品网络服务或功能。 ")]),s("p",[e._v("3) 通过本产品所设Cookie所取得的有关信息,将适用本政策。")]),s("p",[e._v("6.信息安全")]),s("p",[e._v(" 1) 本产品帐号均有安全保护功能,请妥善保管您的用户名及密码信息。本产品会采用符合业界标准的安全防护措施,包括建立合理的制度规范、安全技术来防止您的个人信息遭到未经授权的访问使用、修改,避免数据的损坏或丢失。 ")]),s("p",[e._v(" 2) 我们会采取一切合理可行的措施,确保未收集无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。 ")]),s("p",[e._v(" 3) 互联网并非绝对安全的环境,而且电子邮件、即时通讯、及与其他用户的交流方式并未加密,我们强烈建议您不要通过此类方式发送个人信息。请使用复杂密码,协助我们保证您的账号安全。 ")]),s("p",[e._v(" 4) 如您发现自己的个人信息泄密,尤其是本应用用户名及密码发生泄露,请您立即联络本应用客服,以便本应用采取相应措施。 ")]),s("p",[e._v("7.本隐私政策的更改")]),s("p",[e._v(" 1)如果决定更改隐私政策,我们会在本政策中,以及我们认为适当的位置发布这些更改,以便您了解我们如何收集、使用您的个人信息,哪些人可以访问这些信息,以及在什么情况下我们会透露这些信息。 ")]),s("p",[e._v(" 2)我们保留随时修改本政策的权利,因此请经常查看。如对本政策作出重大更改,我们会通过网站通知的形式告知。 ")])]),s("div",{staticStyle:{display:"flex","justify-content":"center","margin-top":"10px"}},[s("Button",{staticClass:"qm-primary-button",staticStyle:{margin:"0","margin-right":"5px",width:"150px"},attrs:{disabled:e.remainTime>0},on:{click:e.agreeTerms}},[e._v(" 同意"+e._s(e.remainTime?"("+e.remainTime+"秒)":"")+" ")]),s("Button",{staticClass:"qm-primary-button",staticStyle:{margin:"0","margin-right":"5px",width:"150px"},on:{click:e.disagreeTerms}},[e._v(" 拒绝 ")])],1)])])},qe=[],je={name:"PrivacyDialog",data(){return{privacyModal:!1,remainTime:0}},computed:Object(p["a"])({},Object(w["e"])(["user"])),async mounted(){const e=localStorage.getItem("privacy-read-version-"+this.user.id);if(e!==Y["g"]){this.privacyModal=!0,this.remainTime=15;let e=setInterval(()=>{this.remainTime--,this.remainTime<=0&&clearInterval(e)},1e3)}},methods:{agreeTerms(){this.logger({page:"PrivacyDialog",button:"同意按钮",action:"点击"}),localStorage.setItem("privacy-read-version-"+this.user.id,Y["g"]),this.privacyModal=!1},disagreeTerms(){this.logger({page:"PrivacyDialog",button:"拒绝按钮",action:"点击"}),this.logout("?LogoutReason=不同意隐私条款")}}},Ne=je,Be=(s("c2d5"),Object(l["a"])(Ne,Le,qe,!1,null,"33b750bf",null)),$e=Be.exports,Fe={name:"OnlineExamHome",components:{"ecs-online-list":ke,PhoneVerifyForDD:Re,PrivacyDialog:$e},beforeRouteEnter(e,t,s){s(e=>{e.previousUrl=t.path,(t.path.includes("/online-homework")||t.path.includes("/online-exam"))&&e.getData()})},props:{examType:{type:String,default:"ONLINE"}},data(){return{previousUrl:"",autoCloseModal:1e5,courses:[],endCourses:[]}},computed:Object(p["a"])(Object(p["a"])({},Object(w["e"])(["user","siteMessagesTimeStamp","menus"])),{},{locationTitle(){return(this.menus.find(e=>e.link.toUpperCase()===this.$route.path.toUpperCase())||{}).name}}),watch:{menus(){if(this.menus[0]){if(this.menus[0].link.toUpperCase()!=="/online-exam".toUpperCase())return void this.$router.push(this.menus[0].link)}else this.$Message.error({content:"无可用菜单",duration:15,closable:!0}),this.logout()}},beforeMount(){const e=this.$createElement;this.$nextTick(()=>{(this.previousUrl.startsWith("/login/")||"/"===this.previousUrl||"/login"===this.previousUrl)&&(this.$Modal.info({render:()=>e("div",{class:"welcome-modal"},[e("div",{class:"smile-png"}),e("div",{style:"margin-left: 20px; flex: 1"},[e("div",{style:"margin-bottom: 1.5em"},["欢迎使用考试系统,祝顺利完成考试!"]),e("div",{style:"font-weight:bold; line-height: 25px;"},["姓名:",this.$store.state.user.name," -"," ",this.$store.state.user.studentCodeList.join(",")]),e("div",{style:"font-weight:bold; line-height: 25px;"},["专业:",this.$store.state.user.specialty])])]),onOk:()=>{clearInterval(this.interval)}}),this.interval=setInterval(()=>{const e=localStorage.getItem("privacy-read-version-"+this.user.id),t=["cugr.ecs.qmth.com.cn","test.cugr.qmth.com.cn"].includes(localStorage.getItem("domain")),s=localStorage.getItem("phoneVerified");e===Y["g"]&&(!t||s)&&this.autoCloseModal>10&&(this.autoCloseModal=10),this.autoCloseModal--,this.autoCloseModal<=0&&(this.$Modal.remove(),clearInterval(this.interval))},1e3))})},async mounted(){let e;"ONLINE"===this.examType?e="在线考试列表页面":"ONLINE_HOMEWORK"===this.examType&&(e="在线练习列表页面"),window._hmt.push(["_trackEvent",e,"进入页面"]),this.logger({page:e,action:"进入页面"}),await this.getData()},beforeDestroy(){this.$Modal.remove(),clearInterval(this.interval)},methods:Object(p["a"])(Object(p["a"])({},Object(w["d"])(["updateSiteMessages"])),{},{async getData(){let e;this.courses=[];for(let s=0;s<4;s++){let t;if("ONLINE"===this.examType?t="/api/branch_ecs_oe_admin/examControl/queryExamList":"ONLINE_HOMEWORK"===this.examType&&(t="/api/branch_ecs_oe_admin/examControl/queryHomeworkList"),e=await this.$http.get(t),503!==e.status){if(200===e.status)break}else await new Promise(e=>setTimeout(()=>e(),2e3))}if(200!==e.status)return window._hmt.push(["_trackEvent","待考列表获取失败","调用待考列表获取接口超过失败次数"]),void this.$Message.error({content:"服务器繁忙(503)!请稍后重试。",duration:15,closable:!0});if(this.courses=e.data||[],"ONLINE"===this.examType){let e="/api/branch_ecs_oe_admin/examControl/queryExamEndList";this.endCourses=(await this.$http.get(e)).data||[]}try{const e=(await this.$http.get("/api/ecs_exam_work/notice/getUserNoticeList?"+this.user.id+this.siteMessagesTimeStamp)).data;this.updateSiteMessages(e)}catch(t){console.log(t),this.$Message.error({content:"获取公告通知异常",duration:15,closable:!0})}}})},Ue=Fe,Qe=(s("a741"),Object(l["a"])(Ue,m,h,!1,null,"45c34d2b",null)),We=Qe.exports,Ve=function(){var e=this,t=e.$createElement,s=e._self._c||t;return e.startInfo&&e.paperStruct?s("div",{staticClass:"container",attrs:{id:"exam-overview"}},[s("div",{staticClass:"instructions"},[s("h1",{},[e._v("考试说明")]),s("div",{staticStyle:{"text-align":"left","padding-bottom":"20px"}},[s("p",{domProps:{innerHTML:e._s(e.beforeExamRemark)}})]),s("Button",{staticClass:"qm-primary-button",staticStyle:{display:"inline-block",width:"100%"},attrs:{disabled:e.isForceRead},on:{click:e.gotoPaperClicked}},[e._v(" 接受以上条款,开始考试(倒计时: "),s("span",{staticClass:"animated infinite pulse"},[e._v(" "+e._s(e.remainTimeFormatted)+" ")]),e._v(") ")])],1),s("div",{staticClass:"exam-detail"},[s("h3",{},[e._v("科目:"+e._s(e.startInfo.courseName))]),s("br"),s("h4",{},[e._v("试卷概览(总分:"+e._s(e.paperTotalScore)+")")]),s("br"),s("ul",{staticClass:"list-group"},e._l(e.paperStruct.defaultPaper.questionGroupList,(function(t,i){return s("li",{key:t.gruopName,staticClass:"list-group-item"},[e._v(" "+e._s(i+1)+"、"+e._s(t.groupName)+" "),s("small",{staticClass:"pull-right"},[e._v(" (共"+e._s(t.questionWrapperList.length)+"题,共"+e._s(t.groupScore)+"分) ")])])})),0),e._m(0)])]):s("div",[e._v("正在等待数据返回...")])},He=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("img",{staticStyle:{width:"100%","padding-top":"40px"},attrs:{src:s("853c")}})])}];const ze=120,Ke=10;var Ge={name:"OnlineExamOverview",data(){return{beforeExamRemark:null,startInfo:null,paperStruct:null,remainTime:ze,isForceRead:!0}},computed:{remainTimeFormatted:function(){return W.a.utc(1e3*this.remainTime).format("HH:mm:ss")}},async mounted(){window._hmt.push(["_trackEvent","在线考试概览页面","进入页面"]),this.logger({page:"在线考试概览页面",action:"开考成功"}),this.intervalId=setInterval(()=>{this.remainTime-=1,this.isForceRead=ze-this.remainTime{this.getRemainTimeFromServer()},6e4),this.remainTimeInterval=setInterval(()=>{this.remainTime>0&&(this.remainTime=this.remainTime-1e3),this.remainTime<0&&(this.remainTime=0)},1e3),this.__count=10,this.enhancedRemainTimeInterval=setInterval(()=>{this.__count--<=0&&(this.enhancedRemainTime=!1,clearInterval(this.enhancedRemainTimeInterval))},1e3)},beforeDestroy(){this.clearIntervals()},methods:Object(p["a"])(Object(p["a"])({},it(["setShouldSubmitPaper","updateRemainTime"])),{},{async getRemainTimeFromServer(){if("OnlineExamingHome"===this.$route.name)try{const e=await this.$http.get("/api/ecs_oe_student/examControl/examHeartbeat");this.logger({action:"发出心跳",response:e.data}),/\d+/.test(e.data)?(e.data<=0&&this.setShouldSubmitPaper(),this.remainTime=e.data,console.log("重置剩余时间:",e.data),this.logger({action:"重置剩余时间:",response:e.data,diff:this.remainTime-e.data}),this.heartbeatErrorNum=0):(this.$Message.error({content:"服务器返回的心跳结果不是数字",duration:15,closable:!0}),this.logger({action:"发出心跳",error:"服务器返回的心跳结果不是数字"}))}catch(e){if(e.response&&e.response.data&&e.response.data.desc&&e.response.data.desc.includes("会话已过期,请离开考试")?(window._hmt.push(["_trackEvent","答题页面","心跳","失败-会话过期"]),this.logger({action:"发出心跳",error:"心跳失败",detail:"失败-会话过期",extraDetail:"考试剩余时间:"+this.remainTime/1e3})):(window._hmt.push(["_trackEvent","答题页面","心跳","失败"]),this.logger({action:"发出心跳",error:"心跳失败",detail:"考试剩余时间:"+this.remainTime/1e3,errorJSON:JSON.stringify(e,(e,t)=>"token"===e?"":t),errorName:e.name,errorMessage:e.message,errorStack:e.stack})),this.heartbeatErrorNum++,this.heartbeatErrorNum>=10){clearInterval(this.heartbeatInterval),clearInterval(this.remainTimeInterval),window._hmt.push(["_trackEvent","答题页面","心跳","失败10次-退出"]),this.logger({action:"发出心跳",error:"心跳失败",detail:"失败10次-退出"}),console.log("失败10次-退出");let e=!1;return this.$Modal.error({title:"网络连接异常",content:"退出考试",onOk:()=>{e=!0,this.logout("?LogoutReason=心跳失败10次-退出-clicked")}}),void(this.exitTimeout=setTimeout(()=>{e||(this.$Modal.remove(),this.logout("?LogoutReason=心跳失败10次-退出-timeout"))},9e4))}this.retryHeartbeatTimeout=setTimeout(()=>{this.logger({action:"发出心跳",detail:"心跳失败后,再过10秒,重新发出心跳"}),this.getRemainTimeFromServer()},1e4)}},clearIntervals(){clearInterval(this.heartbeatInterval),clearInterval(this.remainTimeInterval),clearTimeout(this.retryHeartbeatTimeout),clearInterval(this.enhancedRemainTimeInterval),clearTimeout(this.exitTimeout)}})},ot=at,nt=(s("6fb0"),Object(l["a"])(ot,tt,st,!1,null,"45b9c9e6",null)),rt=nt.exports,ct=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"progress-container"},[s("Progress",{staticStyle:{color:"black"},attrs:{percent:e.progressNum,"stroke-width":20,status:"active","hide-info":""}}),s("span",[e._v(e._s(e.progress))])],1)},lt=[],dt={name:"OverallProgress",props:{examQuestionList:{type:Array,default(){return[]}}},data(){return{}},computed:{progressNum(){return this.examQuestionList.filter(e=>null!==e.studentAnswer).length/this.examQuestionList.length*100},progress:function(){return`${this.examQuestionList.filter(e=>null!==e.studentAnswer).length} / ${this.examQuestionList.length}`}}},ut=dt,mt=(s("287f"),s("2df4"),Object(l["a"])(ut,ct,lt,!1,null,"2aa30e6e",null)),ht=mt.exports,pt=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"q-filters"},[s("div",{class:"ALL"==e.questionFilterType&&"selected-type",on:{click:function(t){return e.updateQuestionFilter("ALL")}}},[e._v(" 全部 "),s("span",{staticClass:"all-type"},[e._v(e._s(e.all))])]),s("div",{class:"ANSWERED"==e.questionFilterType&&"selected-type",on:{click:function(t){return e.updateQuestionFilter("ANSWERED")}}},[e._v(" 已答 "),s("span",{staticClass:"answered-type"},[e._v(e._s(e.answered))])]),s("div",{class:"SIGNED"==e.questionFilterType&&"selected-type",on:{click:function(t){return e.updateQuestionFilter("SIGNED")}}},[e._v(" 标记 "),s("span",{staticClass:"signed-type"},[e._v(e._s(e.signed))])]),s("div",{class:"UNANSWERED"==e.questionFilterType&&"selected-type",on:{click:function(t){return e.updateQuestionFilter("UNANSWERED")}}},[e._v(" 未答 "),s("span",{staticClass:"unanswered-type"},[e._v(e._s(e.unanswered))])])])},_t=[];const{mapState:gt,mapMutations:wt}=Object(w["a"])("examingHomeModule");var ft={name:"QuestionFilters",props:{examQuestionList:{type:Array,default(){return[]}}},data(){return{}},computed:Object(p["a"])(Object(p["a"])({},gt(["questionFilterType"])),{},{all:function(){return this.examQuestionList.length},answered:function(){return this.examQuestionList.filter(e=>null!==e.studentAnswer).length},signed:function(){return this.examQuestionList.filter(e=>e.isSign).length},unanswered:function(){return this.examQuestionList.filter(e=>null===e.studentAnswer).length}}),methods:Object(p["a"])({},wt(["updateQuestionFilter"]))},vt=ft,yt=(s("0f90"),Object(l["a"])(vt,pt,_t,!1,null,"31c1df50",null)),bt=yt.exports,xt=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"question-container"},[s("div",{staticClass:"question-header"},[s("Icon",{staticClass:"star",style:{color:"#ffcc00"},attrs:{type:e.examQuestion.isSign?"ios-star":"ios-star-outline"},on:{click:e.toggleSign}}),e.examQuestion.getQuestionContent?s("question-index",{attrs:{"exam-question":e.examQuestion}}):e._e()],1),e.parentQuestionBody?s("split-pane",{attrs:{"min-percent":10,"default-percent":e.parentPaneHeight,split:"horizontal"}},[s("template",{slot:"paneL"},[e.parentQuestionBody?s("div",{staticClass:"question-view parent-question"},[s("question-body",{key:e.examQuestion.questionId,staticStyle:{"margin-bottom":"20px"},attrs:{"question-body":e.parentQuestionBody,"exam-question":e.examQuestion}})],1):e._e()]),s("template",{slot:"paneR"},[s("QuestionViewSingle",{attrs:{question:e.question,"exam-question":e.examQuestion}})],1)],2):e._e(),e.parentQuestionBody?e._e():s("QuestionViewSingle",{attrs:{question:e.question,"exam-question":e.examQuestion}}),e.examQuestion.getQuestionContent?e._e():s("div",[e._v("试题获取中...")])],1)},Et=[],St=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"container"},[e._v(" "+e._s(e.sectionChinese)+"、"+e._s(e.examQuestion.groupName)+"("+e._s(e.examQuestion.groupOrder)+" / "+e._s(e.examQuestion.groupTotal)+") ")])},Ct=[],Ot=s("ca00"),It={name:"QuestionIndex",props:{examQuestion:{type:Object,default(){return{}}}},computed:{sectionChinese(){return Object(Ot["i"])(this.examQuestion.mainNumber)}}},kt=It,Tt=(s("1c71"),Object(l["a"])(kt,St,Ct,!1,null,"5b5e7352",null)),At=Tt.exports,Pt=function(){var e=this,t=e.$createElement,s=e._self._c||t;return e.questionDetail?s("div",{key:e.examQuestion.questionId,staticClass:"question-body"},[s("QuestionContainer",{attrs:{node:e.questionDetail.container,"exam-question":e.examQuestion}})],1):s("div",[e._v("获取试题中...")])},Mt=[],Dt=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",[e._l(e.node.childNodes,(function(t,i){return["audio-placeholder"===t.className?[s("div",{key:i,staticClass:"audio-div",staticStyle:{position:"relative","font-size":"18px","word-break":"break-word","background-color":"lightblue","border-radius":"4px","padding-left":"2px","padding-top":"2px"}},[s("QuestionAudio",{attrs:{name:t.getAttribute("data-name"),src:t.getAttribute("data-src"),"play-count":e.examQuestion.limitedPlayTimes?e.getAudioPlayedTimes(t.getAttribute("data-name")):1},on:{played:function(s){e.played(t.getAttribute("data-name"))}}}),e.examQuestion.limitedPlayTimes?s("span",[e._v(" ("),s("span",{staticStyle:{color:"red"}},[e._v("请点击播放")]),e._v("按钮听音作答。已播次数:"),s("span",{staticStyle:{color:"red"}},[e._v(e._s(e.examQuestion.limitedPlayTimes-e.getAudioPlayedTimes(t.getAttribute("data-name"))))]),e._v(",剩余播放次数:"),s("span",{staticStyle:{color:"red"}},[e._v(e._s(e.getAudioPlayedTimes(t.getAttribute("data-name"))))]),e._v(") ")]):e._e(),e.audioInPlay.has(t.getAttribute("data-name"))?s("div",{staticStyle:{position:"absolute",top:"0",right:"0",bottom:"0",left:"0"}}):e._e()],1)]:3==t.nodeType?[e._v(" "+e._s(t.nodeValue)+" ")]:t.childNodes&&t.querySelector&&t.querySelector(".audio-placeholder")?[s("QuestionContainer",{key:i,attrs:{node:t,"exam-question":e.examQuestion,"audio-in-play":e.audioInPlay}})]:s("span",{key:i,domProps:{innerHTML:e._s(t.outerHTML)}})]}))],2)},Rt=[],Lt=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("span",{staticClass:"a-container",staticStyle:{display:"inline-flex","align-items":"center"}},[s("span",{directives:[{name:"show",rawName:"v-show",value:e.shouldShowAudio,expression:"shouldShowAudio"}],on:{click:function(t){return t.stopPropagation(),e.play(t)}}},[e.playing?s("Button",{staticClass:"pause",staticStyle:{cursor:"not-allowed"},attrs:{type:"primary",shape:"circle",icon:"md-pause"}}):s("Button",{staticClass:"play",staticStyle:{"padding-left":"5px"},attrs:{type:"primary",shape:"circle",icon:"md-play",disabled:0===e.playCount}})],1),s("span",{staticStyle:{"padding-left":"2px"}}),s("span",{directives:[{name:"show",rawName:"v-show",value:e.shouldShowAudio,expression:"shouldShowAudio"}],staticStyle:{color:"red"}},[e._v(" "+e._s(e.formatTime(e.currentTime))+" / "+e._s(e.formatTime(e.duration))+" ")]),e.shouldShowAudio?e._e():s("span",{staticStyle:{color:"blueviolet"}},[e._v(" 音频下载中"+e._s(e.downloadPercent)+"% ")])])},qt=[],jt={name:"QuestionAudio",props:{src:{type:String,required:!0},name:{type:String,required:!0},playCount:{type:Number,required:!0}},data(){return{done:!1,downloadPercent:0,currentTime:0,duration:0,playing:!1,context:null,buffer:null}},computed:{shouldShowAudio(){return 100===this.downloadPercent}},async created(){this.loadData()},beforeDestroy(){this.source&&this.source.stop(),this.context&&(this.context.close(),this.context=null)},methods:{formatTime(e){return W.a.utc(1e3*e).format("mm:ss")},loadData(){this.context=new AudioContext,this.buffer;const e=e=>{var t=new XMLHttpRequest;t.open("GET",e,!0),t.responseType="arraybuffer",t.onload=()=>{this.context.decodeAudioData(t.response,e=>{this.buffer=e,this.duration=Math.floor(this.buffer.duration),this.downloadPercent=100},()=>{console.log("error load audio")})},t.onprogress=e=>{this.downloadPercent=Number(e.loaded/e.total*100).toFixed(2)},t.send()};e(this.src)},async play(){if(this.playCount<=0)return void console.log("无播放次数");if(this.playing)return void console.log("正在播放,无法暂停");this.$emit("played"),this.context.close(),this.context=new AudioContext,this.source=this.context.createBufferSource(),this.source.buffer=this.buffer,this.source.connect(this.context.destination),this.source.start(0),this.playing=!0,this.currentTime=0;const e=()=>{this.currentTime=Math.floor(this.context.currentTime),this.context.currentTime=this.buffer.duration&&(this.currentTime=0,requestAnimationFrame(e))};requestAnimationFrame(e),this.source.onended=()=>{this.playing=!1,this.currentTime=0}}}},Nt=jt,Bt=(s("9584"),Object(l["a"])(Nt,Lt,qt,!1,null,"0c676d4b",null)),$t=Bt.exports;const{mapState:Ft,mapMutations:Ut}=Object(w["a"])("examingHomeModule");var Qt={name:"QuestionContainer",components:{QuestionAudio:$t},props:{node:{type:HTMLElement,default:()=>{}},examQuestion:{type:Object,default:()=>{}},audioInPlay:{type:Set,default:()=>new Set}},computed:Object(p["a"])({},Ft(["allAudioPlayTimes"])),methods:Object(p["a"])(Object(p["a"])({},Ut(["updateExamQuestion","updateQuestionAudioPlayTimes"])),{},{played(e){if(!this.examQuestion.limitedPlayTimes)return!1;console.log("开始播放"),this.updateQuestionAudioPlayTimes(e)},getAudioPlayedTimes(e){return Math.max(this.examQuestion.limitedPlayTimes-(this.allAudioPlayTimes.find(t=>t.name===e)||{times:0}).times,0)}})},Wt=Qt,Vt=Object(l["a"])(Wt,Dt,Rt,!1,null,null,null),Ht=Vt.exports;const{mapState:zt,mapMutations:Kt}=Object(w["a"])("examingHomeModule");var Gt={name:"QuestionBody",components:{QuestionContainer:Ht},props:{questionBody:{type:String,default:""},examQuestion:{type:Object,default(){return{}}}},data(){return{questionDetail:null,audioPlayTimes:null,audioInPlay:new Set}},computed:Object(p["a"])({},zt(["allAudioPlayTimes"])),watch:{questionBody(){this.parseQuestion()},examQuestion(){this.parseQuestion()}},mounted(){this.parseQuestion()},methods:Object(p["a"])(Object(p["a"])({},Kt(["updateExamQuestion","updateQuestionAudioPlayTimes"])),{},{async parseQuestion(){let e={};const t=document.createElement("div");if(this.questionBody.includes("question-audio")){let t,s;e.text=this.questionBody.replace(//g,""),e.audio=[],//.test(this.questionBody)&&(t=/name="([^"]*)".*?question-audio.*?url="([^"]*)"/g);while(null!==(s=t.exec(this.questionBody)))e.audio.push({name:s[1],src:s[2]})}else e.text=this.questionBody,e.audio=[];t.innerHTML=e.text,e.container=t,this.questionDetail=e}})},Jt=Gt,Xt=(s("ccab"),Object(l["a"])(Jt,Pt,Mt,!1,null,null,null)),Yt=Xt.exports,Zt=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("transition",{attrs:{name:"fade"}},[s("div",{directives:[{name:"show",rawName:"v-show",value:e.question&&e.examQuestion&&e.examQuestion.getQuestionContent,expression:"question && examQuestion && examQuestion.getQuestionContent"}],key:e.examQuestion.order,staticClass:"question-view"},[s("div",{staticStyle:{"margin-bottom":"-45px"}},[e._v(e._s(e.examQuestion.groupOrder)+"、")]),e.question&&"SINGLE_CHOICE"===e.question.questionType&&"SINGLE_CHOICE"===e.examQuestion.questionType?[s("single-question-view",{key:e.examQuestion.order,attrs:{question:e.question,"exam-question":e.examQuestion}})]:e._e(),e.question&&"MULTIPLE_CHOICE"===e.question.questionType&&"MULTIPLE_CHOICE"===e.examQuestion.questionType?[s("multiple-question-view",{key:e.examQuestion.order,attrs:{question:e.question,"exam-question":e.examQuestion}})]:e._e(),e.question&&"TRUE_OR_FALSE"===e.question.questionType&&"TRUE_OR_FALSE"===e.examQuestion.questionType?[s("boolean-question-view",{key:e.examQuestion.order,attrs:{question:e.question,"exam-question":e.examQuestion}})]:e._e(),e.question&&"FILL_UP"===e.question.questionType&&"FILL_UP"===e.examQuestion.questionType?[s("fill-blank-question-view",{key:e.examQuestion.order,attrs:{question:e.question,"exam-question":e.examQuestion}})]:e._e(),e.question&&"ESSAY"===e.question.questionType&&"ESSAY"===e.examQuestion.questionType?[s("text-question-view",{key:e.examQuestion.order,attrs:{question:e.question,"exam-question":e.examQuestion}})]:e._e()],2)])},es=[],ts=function(){var e=this,t=e.$createElement,s=e._self._c||t;return e.isSyncState&&"SINGLE_CHOICE"===e.examQuestion.questionType?s("div",{staticClass:"question-view"},[s("question-body",{attrs:{"question-body":e.questionBody,"exam-question":e.examQuestion}}),s("div",{staticClass:"ops"},[s("div",{staticClass:"stu-answer"},[e._v(e._s(e.oldIndexToABCD))]),s("div",{staticClass:"score"},[e._v("("+e._s(e.examQuestion.questionScore)+"分)")])]),e._l(e.newQuestionOptions,(function(t,i){return s("div",{key:i,staticClass:"option",on:{click:function(){e.answerQuestion(t.oldIndex)}}},[s("div",{class:e.studentAnswer===t.oldIndex&&"row-selected",staticStyle:{display:"flex"}},[s("div",[s("input",{staticStyle:{"margin-top":"3px",display:"block"},attrs:{type:"radio",name:"question"},domProps:{value:t.oldIndex,checked:e.studentAnswer===t.oldIndex}})]),s("span",{staticStyle:{padding:"0 10px"}},[e._v(e._s(e.optionName[i])+": ")]),t.value?s("div",{staticClass:"question-options"},[s("question-body",{attrs:{"question-body":t.value.body,"exam-question":e.examQuestion}})],1):e._e()])])})),s("div",{staticClass:"reset"},[e.examShouldShowAnswer()?s("span",[e._v(" "),s("Button",{attrs:{type:"info",size:"large"},on:{click:e.showAnswer}},[e._v(" 显示答案 ")])],1):e._e(),e.examShouldShowAnswer()&&e.isShowAnswer?s("div",[e._v(" 正确答案: "),s("div",[e._v(e._s(e.rightAnswerTransform))])]):e._e()])],2):e._e()},ss=[];const{mapMutations:is,mapGetters:as}=Object(w["a"])("examingHomeModule"),os="ABCDEFGHIJ".split("");var ns={name:"SingleQuestionView",components:{QuestionBody:Yt},props:{question:{type:Object,default(){return{}}},examQuestion:{type:Object,default(){return{}}}},data(){return{questionBody:this.question.body,optionName:os,studentAnswer:this.examQuestion.studentAnswer,isShowAnswer:!1}},computed:{isSyncState(){return this.examQuestion.order==this.$route.params.order},newQuestionOptions(){return this.question.questionOptionList.map((e,t)=>({value:this.question.questionOptionList[this.examQuestion.optionPermutation[t]],oldIndex:""+this.examQuestion.optionPermutation[t],name:os[t]}))},oldIndexToABCD(){return this.examQuestion.studentAnswer&&this.newQuestionOptions.filter(e=>this.examQuestion.studentAnswer.includes(e.oldIndex)).map(e=>e.name).join("")},rightAnswerTransform(){return this.question.rightAnswer&&this.newQuestionOptions.filter(e=>this.question.rightAnswer.includes(e.oldIndex)).map(e=>e.name).join("")}},watch:{examQuestion:function(e){this.studentAnswer=e.studentAnswer},question(e){this.questionBody=e.body}},created:function(){window.addEventListener("keyup",this.keyup)},beforeDestroy(){window.removeEventListener("keyup",this.keyup)},beforeUpdate(){this.answerQuestion(this.studentAnswer)},methods:Object(p["a"])(Object(p["a"])(Object(p["a"])({},is(["updateExamQuestion"])),as(["examShouldShowAnswer"])),{},{keyup(e){(["BODY","A","BUTTON","DIV"].includes(document.activeElement.tagName)||["INPUT"].includes(document.activeElement.tagName)&&["checkbox","radio"].includes(document.activeElement.type))&&os.map(e=>"Key"+e).slice(0,this.question.questionOptionList.length).includes(e.code)&&(window._hmt.push(["_trackEvent","答题页面","快捷键","ABCDE"]),this.studentAnswer=this.newQuestionOptions.find(t=>t.name==e.code[3]).oldIndex)},async answerQuestion(e){!1!==this.isSyncState?e!==this.examQuestion.studentAnswer&&this.updateExamQuestion({order:this.examQuestion.order,studentAnswer:e}):console.log("更新答案时,问题与答案的号码不一致。")},showAnswer(){this.isShowAnswer=!this.isShowAnswer}})},rs=ns,cs=(s("7e8b"),Object(l["a"])(rs,ts,ss,!1,null,"504f9ae4",null)),ls=cs.exports,ds=function(){var e=this,t=e.$createElement,s=e._self._c||t;return e.isSyncState&&"MULTIPLE_CHOICE"===e.examQuestion.questionType?s("div",{staticClass:"question-view"},[s("question-body",{attrs:{"question-body":e.question.body,"exam-question":e.examQuestion}}),s("div",{staticClass:"ops"},[s("div",{staticClass:"stu-answer"},[e._v(e._s(e.oldIndexToABCD))]),s("div",{staticClass:"score"},[e._v("("+e._s(e.examQuestion.questionScore)+"分)")])]),e._l(e.newQuestionOptions,(function(t,i){return s("div",{key:i,staticClass:"option",on:{click:function(s){return e.toggleAnswer(t.oldIndex)}}},[s("div",{class:e.studentAnswer.includes(t.oldIndex)&&"row-selected",staticStyle:{display:"flex"}},[s("input",{staticStyle:{"margin-top":"4px"},attrs:{type:"checkbox",name:"question",value:"option.oldIndex"},domProps:{checked:e.studentAnswer&&e.studentAnswer.includes(t.oldIndex)}}),s("span",{staticStyle:{padding:"0 10px"}},[e._v(e._s(e.optionName[i])+": ")]),t.value?s("div",{staticClass:"question-options"},[s("question-body",{attrs:{"question-body":t.value.body,"exam-question":e.examQuestion}})],1):e._e()])])})),s("div",{staticClass:"reset"},[e.examShouldShowAnswer()?s("span",[e._v(" "),s("Button",{attrs:{type:"info",size:"large"},on:{click:e.showAnswer}},[e._v(" 显示答案 ")])],1):e._e(),e.examShouldShowAnswer()&&e.isShowAnswer?s("div",[e._v(" 正确答案: "),s("div",[e._v(e._s(e.rightAnswerTransform))])]):e._e()])],2):e._e()},us=[];const{mapMutations:ms,mapGetters:hs}=Object(w["a"])("examingHomeModule"),ps="ABCDEFGHIJ".split("");var _s={name:"MultipleQuestionView",components:{QuestionBody:Yt},props:{question:{type:Object,default(){return{}}},examQuestion:{type:Object,default(){return{}}}},data(){return{questionBody:this.question.body,optionName:ps,studentAnswer:this.examQuestion.studentAnswer||"",isShowAnswer:!1}},computed:{isSyncState(){return this.examQuestion.order==this.$route.params.order},newQuestionOptions(){return this.question.questionOptionList.map((e,t)=>({value:this.question.questionOptionList[this.examQuestion.optionPermutation[t]],oldIndex:""+this.examQuestion.optionPermutation[t],name:ps[t]}))},oldIndexToABCD(){return this.examQuestion.studentAnswer&&this.newQuestionOptions.filter(e=>this.examQuestion.studentAnswer.includes(e.oldIndex)).map(e=>e.name).join("")},rightAnswerTransform(){return this.question.rightAnswer&&this.newQuestionOptions.filter(e=>this.question.rightAnswer.includes(e.oldIndex)).map(e=>e.name).join("")}},watch:{examQuestion:function(){this.studentAnswer=this.examQuestion.studentAnswer||""}},created:function(){window.addEventListener("keyup",this.keyup)},beforeDestroy(){window.removeEventListener("keyup",this.keyup)},beforeUpdate(){this.answerQuestion(this.studentAnswer)},methods:Object(p["a"])(Object(p["a"])(Object(p["a"])({},ms(["updateExamQuestion"])),hs(["examShouldShowAnswer"])),{},{keyup(e){if((["BODY","A","BUTTON","DIV"].includes(document.activeElement.tagName)||["INPUT"].includes(document.activeElement.tagName)&&["checkbox","radio"].includes(document.activeElement.type))&&ps.map(e=>"Key"+e).slice(0,this.question.questionOptionList.length).includes(e.code)){window._hmt.push(["_trackEvent","答题页面","快捷键","ABCDE"]);const t=""+this.newQuestionOptions.find(t=>t.name==e.code[3]).oldIndex;this.studentAnswer.includes(t)?this.studentAnswer=this.studentAnswer.replace(t,""):this.studentAnswer=this.studentAnswer.concat(t).split("").sort().join("")}},toggleAnswer:function(e){this.studentAnswer.includes(e)?this.studentAnswer=this.studentAnswer.replace(e,""):this.studentAnswer=this.studentAnswer.concat(e).split("").sort().join("")},async answerQuestion(e){if(!1===this.isSyncState)return void console.log("更新答案时,问题与答案的号码不一致。");let t=e;""===e&&(t=null),t!==this.examQuestion.studentAnswer&&this.updateExamQuestion({order:this.examQuestion.order,studentAnswer:t})},showAnswer(){this.isShowAnswer=!this.isShowAnswer}})},gs=_s,ws=(s("6745"),Object(l["a"])(gs,ds,us,!1,null,"6edf9d9e",null)),fs=ws.exports,vs=function(){var e=this,t=e.$createElement,s=e._self._c||t;return e.isSyncState?s("div",{staticClass:"question-view"},[s("question-body",{attrs:{"question-body":e.question.body,"exam-question":e.examQuestion}}),s("div",{staticClass:"ops"},[s("div",{staticClass:"stu-answer"},[e._v(" "+e._s({true:"正确",false:"错误"}[e.studentAnswer])+" ")]),s("div",{staticClass:"score"},[e._v("("+e._s(e.examQuestion.questionScore)+"分)")])]),s("div",{class:["true"===e.studentAnswer&&"row-selected","option"],on:{click:function(){return e.answerQuestion("true")}}},[s("input",{staticStyle:{"margin-top":"3px",display:"block"},attrs:{type:"radio",name:"question",value:"true"},domProps:{checked:"true"===e.studentAnswer}}),s("span",{staticClass:"question-options"},[e._v("正确")])]),s("div",{class:["false"===e.studentAnswer&&"row-selected","option"],on:{click:function(){return e.answerQuestion("false")}}},[s("input",{staticStyle:{"margin-top":"3px",display:"block"},attrs:{type:"radio",name:"question",value:"false"},domProps:{checked:"false"===e.studentAnswer}}),s("span",{staticClass:"question-options"},[e._v("错误")])]),s("div",{staticClass:"reset"},[e.examShouldShowAnswer()?s("span",[e._v(" "),s("Button",{attrs:{type:"info",size:"large"},on:{click:e.showAnswer}},[e._v(" 显示答案 ")])],1):e._e(),e.examShouldShowAnswer()&&e.isShowAnswer?s("div",[e._v(" 正确答案: "),s("div",[e._v(e._s({true:"正确",false:"错误"}[e.question.rightAnswer]))])]):e._e()])],1):e._e()},ys=[];const{mapMutations:bs,mapGetters:xs}=Object(w["a"])("examingHomeModule");var Es={name:"BooleanQuestionView",components:{QuestionBody:Yt},props:{question:{type:Object,default(){return{}}},examQuestion:{type:Object,default(){return{}}}},data(){return{isShowAnswer:!1}},computed:{isSyncState(){return this.examQuestion.order==this.$route.params.order},studentAnswer:e=>e.examQuestion.studentAnswer},watch:{},created:function(){window.addEventListener("keyup",this.keyup)},beforeDestroy(){window.removeEventListener("keyup",this.keyup)},methods:Object(p["a"])(Object(p["a"])(Object(p["a"])({},bs(["updateExamQuestion"])),xs(["examShouldShowAnswer"])),{},{keyup(e){(["BODY","A","BUTTON","DIV"].includes(document.activeElement.tagName)||["INPUT"].includes(document.activeElement.tagName)&&["checkbox","radio"].includes(document.activeElement.type))&&(window._hmt.push(["_trackEvent","答题页面","快捷键","YN"]),"KeyY"===e.code&&this.answerQuestion("true"),"KeyN"===e.code&&this.answerQuestion("false"))},async answerQuestion(e){!1!==this.isSyncState?e!==this.examQuestion.studentAnswer&&this.updateExamQuestion({order:this.examQuestion.order,studentAnswer:e}):console.log("更新答案时,问题与答案的号码不一致。")},showAnswer(){this.isShowAnswer=!this.isShowAnswer}})},Ss=Es,Cs=(s("e902"),Object(l["a"])(Ss,vs,ys,!1,null,"c0bec46c",null)),Os=Cs.exports,Is=function(){var e=this,t=e.$createElement,s=e._self._c||t;return e.isSyncState?s("div",{staticClass:"question-view"},[s("question-body",{attrs:{"question-body":e.questionBody,"exam-question":e.examQuestion}}),s("div",{staticClass:"ops"},[s("div",{staticClass:"score"},[e._v("("+e._s(e.examQuestion.questionScore)+"分)")])]),e._l(e.studentAnswer.split("##"),(function(t,i){return s("div",{key:e.examQuestion.questionId+i,staticClass:"option"},[s("span",{staticClass:"question-options"},[e._v(e._s(i+1)+". ")]),s("input",{staticClass:"input-answer",attrs:{type:"text",maxlength:"5000",name:"question"},domProps:{value:t},on:{input:e.inputAnswer}})])})),s("div",{staticClass:"reset"},[e.examShouldShowAnswer()?s("span",[e._v(" "),s("Button",{attrs:{type:"info",size:"large"},on:{click:e.showAnswer}},[e._v(" 显示答案 ")])],1):e._e(),e.examShouldShowAnswer()&&e.isShowAnswer?s("div",[e._v(" 正确答案: "),s("div",{staticClass:"right-answer-section",domProps:{innerHTML:e._s(e.rightAnswerTransform)}})]):e._e()])],2):e._e()},ks=[];const{mapMutations:Ts,mapGetters:As}=Object(w["a"])("examingHomeModule");var Ps={name:"FillBlankQuestionView",components:{QuestionBody:Yt},props:{question:{type:Object,default(){return{}}},examQuestion:{type:Object,default(){return{}}}},data(){return{studentAnswer:"",questionBody:"",isShowAnswer:!1}},computed:{isSyncState(){return this.examQuestion.order==this.$route.params.order},rightAnswerTransform(){return this.question.rightAnswer&&this.question.rightAnswer.join("").split("##").map((e,t)=>`${t+1}、${e}
`).join("")}},watch:{question(e){this.questionBody=e.body,this.prepareData()},studentAnswer(){let e=null;this.studentAnswer&&this.studentAnswer.replace(/##/g,"").trim()&&(e=this.studentAnswer.replace(//gi,">")),e!==this.examQuestion.studentAnswer&&this.updateExamQuestion({order:this.examQuestion.order,studentAnswer:e})}},created(){this.prepareData()},methods:Object(p["a"])(Object(p["a"])(Object(p["a"])({},Ts(["updateExamQuestion"])),As(["examShouldShowAnswer"])),{},{prepareData(){const e=this.question.body.split(/_{5,}/).length-1;this.studentAnswer=this.examQuestion.studentAnswer||"##".repeat(e-1);const t=this.studentAnswer.replace(//gi,">").split("##");this.questionBody=this.question.body.replace(/_{5,}/g,()=>""+(t.shift()||e-t.length)+"")},inputAnswer:function(){const e=this.question.body.split(/_{5,}/).length-1;let t="";document.querySelectorAll(".option input").forEach(e=>t+=e.value+"##"),this.studentAnswer=t.slice(0,-2);const s=this.studentAnswer.replace(//gi,">").split("##");this.questionBody=this.question.body.replace(/_{5,}/g,()=>""+(s.shift()||e-s.length)+"")},resetAnswer(){this.updateExamQuestion({order:this.examQuestion.order,studentAnswer:null}),this.examQuestion.studentAnswer=null,this.prepareData()},showAnswer(){this.isShowAnswer=!this.isShowAnswer}})},Ms=Ps,Ds=(s("f5d8"),s("93f8"),Object(l["a"])(Ms,Is,ks,!1,null,"48f5d3e9",null)),Rs=Ds.exports,Ls=function(){var e=this,t=e.$createElement,s=e._self._c||t;return e.isSyncState?s("div",{key:e.answerDivKey,staticClass:"question-view"},[s("question-body",{attrs:{"question-body":e.question.body,"exam-question":e.examQuestion}}),s("div",{staticClass:"ops"},[s("div",{staticClass:"score"},[e._v("("+e._s(e.examQuestion.questionScore)+"分)")])]),s("div",{staticClass:"option"},[e.isAudioAnswerType?e._e():s("div",[s("div",{staticClass:"menu"},[s("Button",{staticClass:"text-ops",attrs:{type:"info",size:"small"},on:{click:e.textCopy}},[e._v(" 复制 ")]),s("Button",{staticClass:"text-ops",attrs:{type:"info",size:"small"},on:{click:e.textCut}},[e._v(" 剪切 ")]),s("Button",{staticClass:"text-ops",attrs:{type:"info",size:"small"},on:{click:e.textPaste}},[e._v(" 粘贴 ")]),s("Button",{staticClass:"text-ops",attrs:{type:"info",size:"small"},on:{click:e.textSup}},[e._v(" 上标 ")]),s("Button",{staticClass:"text-ops",attrs:{type:"info",size:"small"},on:{click:e.undoTextSup}},[e._v(" 取消上标 ")]),s("Button",{staticClass:"text-ops",attrs:{type:"info",size:"small"},on:{click:e.textSub}},[e._v(" 下标 ")]),s("Button",{staticClass:"text-ops",attrs:{type:"info",size:"small"},on:{click:e.undoTextSup}},[e._v(" 取消下标 ")])],1),s("div",{ref:"answerDiv",staticClass:"stu-answer",attrs:{ondragstart:"return false",ondrop:"return false",contenteditable:!0},domProps:{innerHTML:e._s(e.originalStudentAnswer)},on:{keydown:e.disableCtrl,input:function(t){return e.textInput(t)},blur:function(t){return e.textInput(t)}}}),s("div",{staticStyle:{"margin-top":"-25px","margin-bottom":"25px",width:"100%","max-width":"500px"}},[s("div",{staticStyle:{float:"right","margin-right":"10px"}},[e._v(" "+e._s(e.answerWordCount)+" ")])])]),e.shouldFetchQrCode&&e.isAudioAnswerType?s("div",[s("div",[e.qrValue?s("div",{staticStyle:{display:"flex"}},[s("qrcode",{staticStyle:{"margin-left":"-10px"},attrs:{value:e.qrValue,options:{width:200}}}),s("div",{staticStyle:{"margin-top":"10px"}},[s("div",[e._v(" 请使用"),s("span",{staticStyle:{"font-weight":"900",color:"#1e90ff"}},[e._v("微信")]),e._v("扫描二维码后,在微信小程序上"+e._s(e.isAudioAnswerType?"录音":"拍照")+",并上传文件。 ")]),e.qrScanned?s("div",{staticStyle:{"margin-top":"30px","font-size":"30px"}},[e._v(" "+e._s(e.examQuestion.studentAnswer?"已上传":"已扫描")+" "),s("Icon",{attrs:{type:"md-checkmark"}})],1):e._e()])],1):s("div",[e._v("正在获取二维码...")])]),s("div",{staticClass:"audio-answer audio-answer-line-height",staticStyle:{"margin-top":"20px"}},[s("span",{staticClass:"audio-answer-line-height"},[e._v("答案:")]),e.examQuestion.studentAnswer?s("audio",{staticClass:"audio-answer-line-height",attrs:{controls:"",controlsList:"nodownload",src:e.examQuestion.studentAnswer}}):s("span",{staticClass:"audio-answer-line-height"},[e._v("未上传文件")])])]):e._e(),e.canAttachPhotos?s("div",{staticStyle:{"padding-top":"1px"}},[s("UploadPhotos",{staticStyle:{"margin-top":"20px",width:"350px"},attrs:{"default-list":e.photoAnswers.map((function(e){return e})),"qr-value":e.qrValue,"exam-question":e.examQuestion},on:{"on-photo-added":e.photoAdded,"on-photo-removed":e.photoRemoved,"on-photos-reseted":e.photosReseted}})],1):e._e(),s("div",{staticClass:"reset",staticStyle:{"padding-top":"20px"}},[e.examShouldShowAnswer()?s("span",[e._v(" "),s("Button",{attrs:{type:"info",size:"large"},on:{click:e.showAnswer}},[e._v(" 显示答案 ")])],1):e._e(),e.examShouldShowAnswer()&&e.isShowAnswer?s("div",[e._v(" 正确答案: "),s("div",{domProps:{innerHTML:e._s(e.rightAnswerTransform)}})]):e._e()])])],1):e._e()},qs=[],js=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",[s("draggable",{staticClass:"upload-images",attrs:{move:e.dragMove},on:{update:e.uploadListSort},model:{value:e.uploadList,callback:function(t){e.uploadList=t},expression:"uploadList"}},[e._l(e.uploadList,(function(t,i){return s("div",{key:t,staticClass:"demo-upload-list"},[s("img",{attrs:{src:t}}),s("div",{staticClass:"demo-upload-list-cover"},[s("Icon",{attrs:{type:"ios-eye-outline",size:"30"},nativeOn:{click:function(t){return e.handleView(".upload-images",i)}}}),s("Icon",{staticStyle:{position:"absolute",top:"0px"},attrs:{type:"ios-trash-outline",size:"30"},nativeOn:{click:function(s){return e.handleRemove(t)}}})],1)])})),e.uploadList.length<6?s("div",{staticClass:"demo-upload-list plus",on:{click:e.prepareUpload}},[e._v(" + ")]):e._e()],2),e._m(0),s("Modal",{attrs:{title:"上传图片",mask:"","footer-hide":"","mask-closable":!1,closable:!1,width:"660"},model:{value:e.uploadModalVisible,callback:function(t){e.uploadModalVisible=t},expression:"uploadModalVisible"}},[s("div",[e.qrValue?s("div",{staticStyle:{display:"flex"}},[s("qrcode",{style:{"margin-left":"-10px",filter:e.totalList.length>=6?"blur(10px)":"none"},attrs:{value:e.qrValue,options:{width:200}}}),s("div",{staticStyle:{"font-size":"24px","margin-top":"10px"}},[s("div",[e._v(" 请使用"),s("span",{staticStyle:{"font-weight":"900",color:"#1e90ff"}},[e._v("微信")]),e._v("扫描二维码后,在微信小程序上拍照,并上传文件。"),s("br"),e._v(" 上传期间,请勿关闭二维码。 ")]),e.qrScanned?s("div",{staticStyle:{"margin-top":"30px","font-size":"30px"}},[e._v(" "+e._s(e.uploaded?"已上传":"已扫描")+" "),s("Icon",{attrs:{type:"md-checkmark"}})],1):e._e()])],1):s("div",[e._v("正在获取二维码...")]),s("draggable",{staticClass:"total-images",on:{start:function(t){e.drag=!0},end:function(t){e.drag=!1}},model:{value:e.totalList,callback:function(t){e.totalList=t},expression:"totalList"}},e._l(e.totalList,(function(t,i){return s("div",{key:t,staticClass:"demo-upload-list"},[s("img",{attrs:{src:t}}),s("div",{staticClass:"demo-upload-list-cover"},[s("Icon",{attrs:{type:"ios-eye-outline",size:"30"},nativeOn:{click:function(t){return e.handleView(".total-images",i)}}}),s("Icon",{staticStyle:{position:"absolute",top:"0px"},attrs:{type:"ios-trash-outline",size:"30"},nativeOn:{click:function(s){return e.handleRemoveTotal(t)}}})],1)])})),0),e.totalList.length>6?s("div",[e._v("* 图片上传最多只支持6张")]):e._e(),s("div",{staticStyle:{display:"flex","justify-content":"center"}},[s("Button",{attrs:{type:"primary",size:"large"},on:{click:e.modalCloseClicked}},[e._v(" 确认 ")])],1)],1)])],1)},Ns=[function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",[e._v(" 点击"),s("span",{staticStyle:{color:"blue","font-size":"24px"}},[e._v("+")]),e._v("上传图片(最多上传6张图片) ")])}],Bs=s("310e"),$s=s.n(Bs),Fs=(s("0808"),s("c82c")),Us=s.n(Fs);const{mapState:Qs,mapMutations:Ws}=Object(w["a"])("examingHomeModule");var Vs={name:"UploadPhotos",components:{qrcode:K.a,draggable:$s.a},props:{examQuestion:{type:Object,default(){return{}}},defaultList:{type:Array,default(){return[]}},qrValue:{type:String,default:""}},data(){return{visible:!1,uploadModalVisible:!1,rotate:0,uploadList:[],totalList:[],uploadUrl:"",headers:{},format:["jpg","jpeg","png"],qrScanned:!1,uploaded:!1,drag:!1}},computed:Object(p["a"])({},Qs(["questionQrCodeScanned","pictureAnswer"])),watch:{defaultList:{handler:function(){this.uploadList=this.defaultList},deep:!0},questionQrCodeScanned(e){e.order===this.examQuestion.order&&(this.qrScanned=!0)},pictureAnswer(e){console.log("watch",e),this.uploaded=!0,e.order===this.examQuestion.order&&this.totalList.push(...new Set(e.fileUrl.split(",")))},uploadModalVisible(e){this.updateUploadModalVisible(e)}},mounted(){this.uploadList=this.defaultList},methods:Object(p["a"])(Object(p["a"])({},Ws(["updateUploadModalVisible"])),{},{handleView(e,t){const s=new Us.a(document.querySelector(e),{container:"#app",zIndex:99999,title:!1,toolbar:{zoomIn:1,zoomOut:1,oneToOne:1,reset:1,prev:1,play:{show:0,size:"large"},next:1,rotateLeft:1,rotateRight:1,flipHorizontal:1,flipVertical:1},ready(){s.view(t)},hidden(){s.destroy()}});s.show()},handleRemove(e){this.$emit("on-photo-removed",e)},handleRemoveTotal(e){this.totalList.splice(this.totalList.indexOf(e),1)},prepareUpload(){this.uploadModalVisible=!0,this.qrScanned=!1,this.uploaded=!1,this.totalList=[...this.uploadList]},modalCloseClicked(){!this.qrScanned||this.uploaded?this.totalList.length>6?this.$Modal.warning({title:"图片数量超出限制",content:"请删除多余的图片,图片总数不应该超过6张"}):(this.uploadModalVisible=!1,this.$emit("on-photos-reseted",this.totalList)):this.$Modal.confirm({title:"确认关闭?",content:"检测到二维码被扫描,但是图片未上传。关闭此窗口后,将不再接受小程序图片上传。",okText:"确定关闭",cancelText:"取消关闭",onOk:()=>{this.uploadModalVisible=!1},onCancel:()=>{}})},uploadListSort(){this.$emit("on-photos-reseted",this.uploadList)},dragMove(e){return console.log(e),!e.dragged.className.includes("plus")}})},Hs=Vs,zs=(s("f9c5"),Object(l["a"])(Hs,js,Ns,!1,null,"54a41920",null)),Ks=zs.exports;const{mapMutations:Gs,mapGetters:Js,mapState:Xs}=Object(w["a"])("examingHomeModule");var Ys={name:"TextQuestionView",components:{QuestionBody:Yt,UploadPhotos:Ks,qrcode:K.a},props:{question:{type:Object,default(){return{}}},examQuestion:{type:Object,default(){return{}}}},data(){return{studentAnswer:this.examQuestion.studentAnswer,originalStudentAnswer:this.examQuestion.studentAnswer,isShowAnswer:!1,answerDivKey:Math.random(),qrValue:"",qrScanned:!1}},computed:Object(p["a"])(Object(p["a"])({},Xs(["exam","questionQrCode","questionQrCodeScanned"])),{},{isSyncState(){return this.examQuestion.order==this.$route.params.order},rightAnswerTransform(){return this.question.rightAnswer.join("")},answerWordCount(){if(this.studentAnswer&&this.$refs.answerDiv)return this.$refs.answerDiv.innerText.replace(/\s+/g,"").length;{const e=document.createElement("div");return e.innerHTML=this.studentAnswer,e.innerText.replace(/\s+/g,"").length}},isAudioAnswerType(){return"SINGLE_AUDIO"===this.examQuestion.answerType},shouldFetchQrCode(){const e=this.exam.WEIXIN_ANSWER_ENABLED;return e},canAttachPhotos(){return this.exam.WEIXIN_ANSWER_ENABLED&&!this.isAudioAnswerType},photoAnswers:{get(){if(!this.studentAnswer)return[];const e=document.createElement("div");e.innerHTML=this.studentAnswer;const t=e.querySelectorAll(".photo-answer");return[...t].map(e=>e.src.replace("?x-oss-process=image/resize,m_lfit,h_200,w_200",""))},set(e){let t=e.map(e=>``);const s=document.createElement("div");s.innerHTML=this.studentAnswer||"";const i=s.querySelectorAll(".photo-answers-block");i&&[...i].forEach(e=>e.remove()),s.innerHTML||0!==e.length?(this.studentAnswer=s.innerHTML+`
${t.join("")}
`,this.originalStudentAnswer=this.studentAnswer):(this.studentAnswer=null,this.originalStudentAnswer=null)}}}),watch:{examQuestion(){this.studentAnswer=this.examQuestion.studentAnswer},questionQrCode(e){e.order===this.examQuestion.order&&(this.qrValue=e.qrCode)},questionQrCodeScanned(e){e.order===this.examQuestion.order&&(this.qrScanned=!0)},studentAnswer(){let e=null;this.studentAnswer&&(e=this.studentAnswer.replace(/<\/sup>/gi,"").replace(/<\/sub>/gi,"").replace(/