@palerock/exam-qa 1.0.0 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,2 +0,0 @@
1
- webpackJsonp([1],{"+c27":function(t,e){},"/E+L":function(t,e){},"4rJS":function(t,e){},"85rt":function(t,e){},"97dx":function(t,e){},JKiR:function(t,e){},NAlg:function(t,e){},NHnr:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("7+uW"),i={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("transition",{attrs:{name:this.direction}},[e("router-view",{staticClass:"appView"})],1)],1)},staticRenderFns:[]};var o=n("VU/8")({name:"App",data:function(){return{direction:"slide-right"}},watch:{$route:function(t,e){var n=t.path.split("/").length,r=e.path.split("/").length;"/"===t.path?this.direction="slide-right":"/"===e.path?this.direction="slide-left":this.direction=n<r?"slide-right":"slide-left"}}},i,!1,function(t){n("u1TY")},null,null).exports,s=n("/ocq"),a=(n("FO5P"),n("woHG")),u=(n("RgoE"),n("0KWt")),c=(n("1E9F"),n("2Ux5")),l=n("L8Ge"),h=n.n(l),f=n("pDAi"),p=n.n(f),m=n("rXUV"),d=n.n(m),v=n("0VsM"),g=n.n(v),y=n("4vMe"),b=n.n(y),w=n("6Cj1"),x=n.n(w),k=n("49HJ"),C=n.n(k),_=n("Yo5Z"),q=n.n(_),E=n("7U2N"),S=n.n(E),A=n("Tg6C"),I=n.n(A),R=n("GiJQ"),D=n.n(R),O=n("/xtf"),N=n.n(O),T=n("crjn"),H=n.n(T),L=n("s1qc"),P=n.n(L),M=n("6qwz"),B=n.n(M),j=n("0VlM"),Q=n.n(j),F=(n("cZ0s"),n("fIxc")),W=(n("RIEG"),n("zjGD")),$=(n("YP+l"),n("EA31")),z=(n("sgvh"),n("zc1Q")),U=(n("mMXg"),n("qYlo")),V=(n("3Lne"),n("SSsa")),J=(n("MY4N"),n("0zAV")),Z=(n("OWWB"),n("1fWZ")),G=(n("i0mo"),n("Hkar")),Y=(n("XmAh"),n("il3B")),K=n("IG2y"),X=n.n(K),tt=n("ckt0"),et=n.n(tt);function nt(t,e){var n=x()(t);if(b.a){var r=b()(t);e&&(r=r.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,r)}return n}var rt={getHashCode:function(t){return this.getStrHashCode(this.getMessage(t).concat(this.getPropertyNames(t)).join(""))},getPropertyNames:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;return n<=0?"":!t||["string","number","boolean","function"].includes(et()(t))||t instanceof Date?"":this.flat(q()(t).map(function(t){var r=C()(t,2),i=r[0],o=r[1];return[i,e.getPropertyNames(o,n--)]})).filter(function(t){return null!=t&&""!==t})},getMessage:function(t,e){var n=this;return null==e&&(e=10),e<=0?"":!t||["string","number","boolean","function"].includes(et()(t))||t instanceof Date?[null!=t?t.toString():""]:this.flat(x()(t).map(function(r){return n.getMessage(t[r],e--)})).filter(function(t){return null!=t&&""!==t})},getStrHashCode:function(t){var e,n,r=0;if(0===t.length)return r;for(e=0,n=t.length;e<n;e++)r=(r<<5)-r+t.charCodeAt(e),r|=0;return r+""},flat:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/0,n=[],r=!1;return t.forEach(function(t){X()(t)?(r=!0,n.push.apply(n,P()(t))):n.push(t)}),r&&e>0?this.flat(n,e--):n},fromEntries:function(t){var e={};return t.forEach(function(t){t instanceof Array&&(e[t[0]]=t[1])}),e},storage:{getItem:function(t){var e=localStorage.getItem("__exam_s0_"+t),n=null;try{n=JSON.parse(e)}catch(e){console.log("No valid item for key [".concat(t,"] to get in storage."))}return n},setItem:function(t,e){var n=null;try{n=N()(e),localStorage.setItem("__exam_s0_"+t,n)}catch(e){console.log("Not valid item for key [".concat(t,"] to set."))}},removeItem:function(t){localStorage.removeItem("__exam_s0_"+t)}},groupArray:function(t,e){var n=this,r=t.map(function(t){return{hashCode:n.getHashCode(t),item:t}});e instanceof Array||(e=[e]);var i={};return r.map(function(t){return{hashCode:t.hashCode,checkItem:Object.fromEntries(e.map(function(e){return[e,(t.item||{})[e]]}))}}).map(function(t){return function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?nt(n,!0).forEach(function(e){Q()(t,e,n[e])}):d.a?p()(t,d()(n)):nt(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}({},t,{checkedHashCode:n.getHashCode(t.checkItem)})}).forEach(function(t){var e=i[t.checkedHashCode];e||(e=[]),e.push(r.find(function(e){return e.hashCode===t.hashCode}).item),i[t.checkedHashCode]=e}),S()(i)},duplicateRemoval:function(t){var e=t.map(function(t){return{item:t}});return this.groupArray(e,"item").map(function(t){return t[0].item})},randomSort:function(t){return t.sort(function(){return Math.random()-.5})}},it=n("Kr0U"),ot=n.n(it),st=n("EEoX"),at=n.n(st),ut=n("5WHX"),ct=n.n(ut),lt=n("mnGM"),ht=n.n(lt),ft=n("6DPD"),pt=n.n(ft),mt=n("OdJd"),dt=n.n(mt),vt=new(n("YwQ6").a)("_qa_db");vt.version(1).stores({config:"key, value, createDate, modifyDate",question:"hashCode, describe, type, createDate, modifyDate",bank:"hashCode, title, *questions, createDate, modifyDate",historyRecord:"relatedQuestion, rightTimes, errorTimes, maxTime, minTime, totalTime, createDate, modifyDate"}),vt.version(2).stores({bank:"hashCode, title, *questions, category, createDate, modifyDate"});var gt=vt.config,yt=vt.question,bt=vt.bank,wt=vt.historyRecord;function xt(t,e){var n=x()(t);if(b.a){var r=b()(t);e&&(r=r.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,r)}return n}function kt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?xt(n,!0).forEach(function(e){Q()(t,e,n[e])}):d.a?p()(t,d()(n)):xt(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}var Ct=function(){function t(e,n){pt()(this,t),this.db=e,this.defaultEntry=n||{},this.db.hook("creating",function(t,e){e.createDate=ht()(),e.modifyDate=ht()()}),this.db.hook("updating",function(t,e,n){return t.modifiedDate=ht()(),n.createdDate||(t.createdDate=ht()()),console.log(kt({},t)),t})}return dt()(t,[{key:"upsert",value:function(){var t=D()(I.a.mark(function t(e){var n=this;return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!(e instanceof Array)){t.next=2;break}return t.abrupt("return",this.db.bulkPut(e.map(function(t){return kt({},n.defaultEntry,{},t)})));case 2:return t.abrupt("return",this.db.put(kt({},this.defaultEntry,{},e)));case 3:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}()},{key:"query",value:function(t){return this.db.where(t)}},{key:"queryByHashCode",value:function(t){return this.query("hashCode").equals(t).first()}},{key:"delete",value:function(){var t=D()(I.a.mark(function t(e){return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!(e instanceof Array)){t.next=2;break}return t.abrupt("return",this.db.bulkDelete(e));case 2:return t.abrupt("return",this.db.delete(e));case 3:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}()}]),t}(),_t=function(t){function e(){return pt()(this,e),ot()(this,at()(e).call(this,gt,{value:null}))}return ct()(e,t),e}(Ct),qt=function(t){function e(){return pt()(this,e),ot()(this,at()(e).call(this,yt,{describe:"",type:"picklist"}))}return ct()(e,t),e}(Ct),Et=function(t){function e(){return pt()(this,e),ot()(this,at()(e).call(this,bt,{title:"",questions:[]}))}return ct()(e,t),e}(Ct),St=function(t){function e(){return pt()(this,e),ot()(this,at()(e).call(this,wt,{rightTimes:0,errorTimes:0,maxTime:0,minTime:0,totalTime:0}))}return ct()(e,t),dt()(e,[{key:"queryByHashCode",value:function(t){return this.query("relatedQuestion").equals(t).first()}},{key:"queryMany",value:function(t){return this.query("relatedQuestion").anyOf(t).toArray()}}]),e}(Ct),At=new _t,It=new qt,Rt=new Et,Dt=new St,Ot="1.0.3";function Nt(t,e){var n=x()(t);if(b.a){var r=b()(t);e&&(r=r.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,r)}return n}function Tt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Nt(n,!0).forEach(function(e){Q()(t,e,n[e])}):d.a?p()(t,d()(n)):Nt(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}r.a.use(Y.a),r.a.use(J.a).use(Z.a).use(G.a),r.a.use(V.a),r.a.use(U.a),r.a.use($.a).use(z.a),r.a.use(F.a).use(W.a);var Ht={name:"HomeIndex",data:function(){return{isShowImporter:!1,isShowOption:!1,isFromOnline:!1,onlineLibs:[],onlineSelects:[],questionLib:"",examList:[],currentCategory:"",categories:[],optionInfo:{canReviewError:!0,canDoExam:!0,canClear:!0,hashCode:""}}},computed:{selectedLibs:function(){var t=this,e=this.onlineLibs.filter(function(e){return t.onlineSelects.includes(e.hashCode)}).map(function(t){return Tt({},t)});return e.forEach(function(t){delete t.hashCode}),e},inCategory:function(){return!!this.currentCategory}},methods:{doExam:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Rt.query("hashCode").equals(t).first().then(function(t){return B.a.all([t].concat(P()(t.questions.map(function(t){return It.query("hashCode").equals(t).first()}))))}).then(function(t){var r=H()(t),i=r[0],o=r.slice(1);i.questions=o,i?e.$router.push({name:"DoExamPage",params:{examConfig:i,isReviewError:n}}):Y.a.alert({message:"该题库已失效!"})})},clearHistory:function(t){var e=this;Rt.queryByHashCode(t).then(function(t){return t=t||{},Dt.delete(t.questions||[])}).then(function(){console.log("remove the history."),e.isShowOption=!1,e.initExamList()})},showOption:function(t){t.hasHistoryError?(this.optionInfo.hashCode=t.hashCode,this.isShowOption=!0):this.doExam(t.hashCode)},selectLib:function(t){this.onlineSelects.includes(t.hashCode)?this.onlineSelects=this.onlineSelects.filter(function(e){return e!==t.hashCode}):this.onlineSelects=[].concat(P()(this.onlineSelects),[t.hashCode]),this.questionLib=N()(this.selectedLibs)},showImporter:function(){this.isShowImporter=!0,this.isFromOnline=!1},importFromExist:function(){var t=this;this.isFromOnline=!0,this.fetchOnlineLib().then(function(e){t.onlineLibs=e.filter(function(t){return t.data}).map(function(t){return Tt({},t.data,{hashCode:rt.getHashCode(t.data)})})}).catch(function(e){console.log(e),alert("获取失败,请尝试自行录入"),t.isShowImporter=!1})},fetchOnlineLib:function(){var t=D()(I.a.mark(function t(){var e,n,r=this;return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.$http.get("../lib-json/map.json");case 2:if(t.t0=t.sent.data,t.t0){t.next=5;break}t.t0=[];case 5:return e=t.t0,n=e.map(function(t){return r.$http.get("../lib-json/"+t)}),t.abrupt("return",B.a.all(n));case 8:case"end":return t.stop()}},t,this)}));return function(){return t.apply(this,arguments)}}(),importLib:function(){var t=D()(I.a.mark(function t(){var e,n=this;return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(t.prev=0,!((e=JSON.parse(this.questionLib))instanceof Array)){t.next=7;break}return t.next=5,B.a.all(e.map(function(){var t=D()(I.a.mark(function t(e){return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n.importSingleLib(e);case 2:case"end":return t.stop()}},t)}));return function(e){return t.apply(this,arguments)}}()));case 5:t.next=9;break;case 7:return t.next=9,this.importSingleLib(e);case 9:t.next=14;break;case 11:t.prev=11,t.t0=t.catch(0),alert("题库格式错误:".concat(t.t0.getMessage()));case 14:return t.next=16,this.initExamList();case 16:this.isShowImporter=!1,this.questionLib="";case 18:case"end":return t.stop()}},t,this,[[0,11]])}));return function(){return t.apply(this,arguments)}}(),importSingleLib:function(){var t=D()(I.a.mark(function t(e){var n;return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e.questions&&0!==e.questions.length){t.next=2;break}return t.abrupt("return",!1);case 2:return e.questions.forEach(function(t){t.hashCode=rt.getHashCode(t)}),(n=Tt({},e,{questions:e.questions.map(function(t){return t.hashCode})})).hashCode=rt.getHashCode(n),t.next=7,It.upsert(e.questions).then(function(){return Rt.upsert([n])});case 7:return t.abrupt("return",!0);case 8:case"end":return t.stop()}},t)}));return function(e){return t.apply(this,arguments)}}(),intoCategory:function(){var t=D()(I.a.mark(function t(){var e,n=this,r=arguments;return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=r.length>0&&void 0!==r[0]?r[0]:"default",this.currentCategory=e,t.next=4,Rt.query("hashCode").notEqual("").toArray().then(function(t){var e=t.map(function(t){return Dt.query("relatedQuestion").anyOf(t.questions).sortBy("createDate").then(function(e){var n=Object.fromEntries(e.map(function(t){return[t.relatedQuestion,Tt({},t,{times:t.errorTimes})]})),r=!!S()(n).find(function(t){return t.times>0});return Tt({},t,{errorMap:n,hasHistoryError:r})})});return B.a.all(e)}).then(function(t){t=t.map(function(t){return t.category=t.category||"default",t}),n.examList=t.filter(function(t){return t.category===e})});case 4:case"end":return t.stop()}},t,this)}));return function(){return t.apply(this,arguments)}}(),initExamList:function(){var t=D()(I.a.mark(function t(){var e=this;return I.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Rt.query("hashCode").notEqual("").toArray().then(function(t){t=t.map(function(t){return t.category=t.category||"default",t}),e.categories=t.reduce(function(t,e){return t.includes(e.category)||t.push(e.category),t},[])});case 2:this.currentCategory&&this.intoCategory(this.currentCategory);case 3:case"end":return t.stop()}},t,this)}));return function(){return t.apply(this,arguments)}}(),syncDataToIndexDB:function(){var t=JSON.parse(N()(this.examList)).map(function(t){return Tt({},t,{bank:rt.storage.getItem(t.hashCode)})}).map(function(t){return Tt({},t,{questionSet:t.bank.questions,bank:Tt({},t.bank,{hashCode:rt.getHashCode(t.bank),questions:t.bank.questions.map(function(t){return rt.getHashCode(t)})}),historyRecords:q()(t.errorMap).map(function(t){var e=C()(t,2),n=e[0],r=e[1],i=r.times;return{relatedQuestion:n,rightTimes:r.rightTimes,errorTimes:i}})})});It.upsert(rt.flat(t.map(function(t){return t.questionSet.map(function(t){return Tt({},t,{hashCode:rt.getHashCode(t)})})}),2)).then(function(){return Rt.upsert(t.map(function(t){return t.bank}))}).then(function(){return Dt.upsert(rt.flat(t.map(function(t){return t.historyRecords}),2))}).then(function(){return At.upsert({key:"hasSync",value:!0})}).then(function(){console.log("sync success.")}).catch(function(t){console.log(t)})}},mounted:function(){this.initExamList()}},Lt={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t.inCategory?n("van-grid",[n("van-grid-item",{attrs:{icon:"notes-o",clickable:""},on:{click:function(e){t.currentCategory=null}}},[n("div",{staticClass:"van-grid-item__text text-align-center",attrs:{slot:"text"},slot:"text"},[t._v("返回")])]),t._v(" "),t._l(t.examList,function(e){return n("van-grid-item",{key:e.hashCode,attrs:{icon:"notes-o",clickable:""},on:{click:function(n){return t.showOption(e)}}},[n("div",{staticClass:"van-grid-item__text text-align-center",attrs:{slot:"text"},slot:"text"},[t._v(t._s(e.title))])])})],2):n("van-grid",[n("van-grid-item",{attrs:{icon:"notes-o",clickable:""},on:{click:t.showImporter}},[n("div",{staticClass:"van-grid-item__text text-align-center",attrs:{slot:"text"},slot:"text"},[t._v("开始答题(导入)")])]),t._v(" "),t._l(t.categories,function(e){return n("van-grid-item",{key:e,attrs:{icon:"notes-o",clickable:""},on:{click:function(n){return t.intoCategory(e)}}},[n("div",{staticClass:"van-grid-item__text text-align-center",attrs:{slot:"text"},slot:"text"},[t._v(t._s(e))])])})],2),t._v(" "),n("van-popup",{model:{value:t.isShowImporter,callback:function(e){t.isShowImporter=e},expression:"isShowImporter"}},[n("div",{staticClass:"exam-import-box"},[t.isFromOnline?n("div",{staticStyle:{"max-height":"300px","overflow-y":"auto"}},[n("van-checkbox-group",{model:{value:t.onlineSelects,callback:function(e){t.onlineSelects=e},expression:"onlineSelects"}},[n("van-cell-group",t._l(t.onlineLibs,function(e,r){return n("van-cell",{key:r,attrs:{clickable:""},on:{click:function(n){return t.selectLib(e)}}},[n("template",{slot:"title"},[n("span",[t._v(t._s(e.title))])]),t._v(" "),n("van-checkbox",{attrs:{slot:"right-icon",name:e.hashCode},slot:"right-icon"})],2)}),1)],1)],1):t._e(),t._v(" "),t.isFromOnline?t._e():n("div",[n("van-cell-group",[n("van-field",{attrs:{label:"题库",type:"textarea",placeholder:"请输入题库",rows:"10"},model:{value:t.questionLib,callback:function(e){t.questionLib=e},expression:"questionLib"}})],1)],1),t._v(" "),n("div",[n("van-button",{attrs:{type:"info",size:"small",block:""},on:{click:t.importLib}},[t._v("导入题库")])],1),t._v(" "),n("div",{staticClass:"exam-m-top-small"},[n("van-button",{attrs:{type:"primary",size:"small",block:""},on:{click:t.importFromExist}},[t._v("获取在线题库")])],1)])]),t._v(" "),n("van-popup",{attrs:{position:"bottom"},model:{value:t.isShowOption,callback:function(e){t.isShowOption=e},expression:"isShowOption"}},[n("div",{},[n("van-button",{attrs:{type:"primary",block:""},on:{click:function(e){return t.doExam(t.optionInfo.hashCode)}}},[t._v("重新测试\n ")]),t._v(" "),n("van-button",{attrs:{type:"info",block:""},on:{click:function(e){return t.doExam(t.optionInfo.hashCode,!0)}}},[t._v("复习错题\n ")]),t._v(" "),n("van-button",{attrs:{type:"danger",block:""},on:{click:function(e){return t.clearHistory(t.optionInfo.hashCode)}}},[t._v("清空错题\n ")])],1)])],1)},staticRenderFns:[]};var Pt=n("VU/8")(Ht,Lt,!1,function(t){n("85rt")},"data-v-1808ddae",null).exports;r.a.use(V.a);var Mt={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("van-button",{attrs:{type:"default"}},[t._v("默认按钮")]),t._v(" "),n("van-button",{attrs:{type:"primary"}},[t._v("主要按钮")]),t._v(" "),n("van-button",{attrs:{type:"info"}},[t._v("信息按钮")]),t._v(" "),n("van-button",{attrs:{type:"warning"}},[t._v("警告按钮")]),t._v(" "),n("van-button",{attrs:{type:"danger"}},[t._v("危险按钮")])],1)},staticRenderFns:[]};n("VU/8")({name:"HelloWorld",data:function(){return{msg:"Welcome to Your Vue.js App"}}},Mt,!1,null,null,null).exports;r.a.use(a.a).use(u.a).use(c.a);var Bt={name:"HomePage",data:function(){return{activeTabIndex:0,pages:[{title:"主页",label:"Home",api:Pt,icon:"home-o"}]}},computed:{activePage:function(){return this.pages[this.activeTabIndex]||{}},version:function(){return Ot}}},jt={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("van-nav-bar",{attrs:{title:t.activePage.label,fixed:""}}),t._v(" "),n("div",{staticClass:"is-relation"},[n(t.activePage.api,{tag:"component"}),t._v(" "),n("p",{staticClass:"text-align-center is-absolute",staticStyle:{color:"#efefef",width:"100%"}},[t._v(t._s(t.version))])],1),t._v(" "),n("van-tabbar",{model:{value:t.activeTabIndex,callback:function(e){t.activeTabIndex=e},expression:"activeTabIndex"}},t._l(t.pages,function(e,r){return n("van-tabbar-item",{key:r,attrs:{icon:e.icon}},[t._v(t._s(e.label))])}),1)],1)},staticRenderFns:[]};var Qt=n("VU/8")(Bt,jt,!1,function(t){n("zW/T")},"data-v-5c9e76e7",null).exports,Ft=(n("I4j4"),n("7fQT")),Wt=(n("le1z"),n("hZxG")),$t=(n("HZGa"),n("pykS")),zt=(n("ZuV/"),n("37Xn")),Ut=(n("JRZP"),n("LK01"));function Vt(t,e){var n=x()(t);if(b.a){var r=b()(t);e&&(r=r.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,r)}return n}function Jt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Vt(n,!0).forEach(function(e){Q()(t,e,n[e])}):d.a?p()(t,d()(n)):Vt(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}r.a.use(zt.a).use(Ut.a),r.a.use(Y.a),r.a.use(F.a).use(W.a),r.a.use($t.a),r.a.use(Wt.a),r.a.use(Z.a).use(G.a);var Zt={required:!0,score:1,usingScore:!1,type:"option",describe:"Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?",answerOptions:[{api:"A",describe:"Yes",isRight:!0},{api:"B",describe:"No"}]},Gt={title:"试题测试",questions:[Zt]};r.a.use(a.a).use(Ft.a).use(V.a);var Yt={name:"DoExamPage",data:function(){return{answers:[],questionNum:0,isShowResult:!1,letterIndex:P()("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),examInfo:{},hasSubmit:!1,examHashCode:0,historyExams:[],showAcButtons:!1}},computed:{totalNum:function(){return this.questions.length},questions:function(){var t=this;return(this.examInfo.questions||[]).filter(function(e){return!t.isReviewError||t.historyErrorHashCodes.includes(e.hashCode)}).map(function(e,n){return Jt({},e,{active:n===t.questionNum})})},questionsInfo:function(){var t=this;return this.questions.map(function(e,n){return t.answers[n]||(t.answers[n]={results:[{}],single:{},multi:{apis:[]}}),Jt({},e,{answer:t.answers[n],orderNum:n+1,isMulti:e.answerOptions.filter(function(t){return t.isRight}).length>1})})},historyErrorHashCodes:function(){return this.historyExams.filter(function(t){return t.errorTimes>0}).map(function(t){return t.hashCode})}},methods:{getQuestionTitle:function(t){return["(".concat(this.questionNum+1,"/").concat(this.totalNum,")"),t.describe].join(" ")},getQuestionDesc:function(t){var e="";t.required||(e+="(可选)"),"option"===t.type&&(t.isMulti?e+="多选题":e+="单选题");var n=this.historyExams.find(function(e){return e.hashCode===t.hashCode});if(n){this.isReviewError&&n.errorTimes&&(e+=" (做错次数: ".concat(n.errorTimes,")"));var r=n.errorTimes+n.rightTimes;r>0&&(e+="(历史正确率:".concat((n.rightTimes/r*100).toFixed(0),"%)"))}return e},setAnswer:function(t,e){this.answers=P()(this.answers).map(function(n,r){return r===t&&(n.results=e.map(function(t){return{api:t}}),n.single.api=e[0],n.multi.apis=e),n})},toggleAnswer:function(t,e){var n=this.answers[t].multi.apis;n.includes(e)?n=n.filter(function(t){return t!==e}):(n.push(e),n=P()(n)),this.setAnswer(t,n)},checkResult:function(t){var e=this;this.answers=P()(this.answers).map(function(n,r){if(t!==r&&null!=t)return n;var i=e.questions[r].answerOptions.filter(function(t){return t.isRight}).map(function(t){return t.api});return n.results.forEach(function(t){t.isMistake=!i.includes(t.api)}),n.isAnswered=n.results.filter(function(t){return t.api}).length>0,!n.isChecked&&n.isAnswered&&(n.isMistake=n.results.length!==i.length||!!n.results.find(function(t){return t.isMistake}),n.isPass=n.isAnswered&&!n.isMistake,n.isChecked=!0),n})},turnTo:function(t){this.questionNum=t},confirmSubmit:function(){var t=this;Y.a.confirm({title:"提交答案",message:"确认提交?"}).then(function(){t.submit()}).catch(function(t){console.log(t)})},submit:function(){this.checkResult();var t=this.questionsInfo.filter(function(t){return t.answer.isAnswered}).length;if(t<this.totalNum&&this.requireAllDone)Y.a.alert({message:"题目还没有答完:"+"".concat(t,"/").concat(this.totalNum)});else{var e=this.questionsInfo.filter(function(t){return t.answer.isPass}).length,n=e/this.totalNum*100+"%";this.questionsInfo.filter(function(t){return t.answer.isChecked}).forEach(function(t){Dt.queryByHashCode(t.hashCode).then(function(e){e||(e={relatedQuestion:t.hashCode,errorTimes:0}),t.answer.isPass?e.rightTimes++:e.errorTimes++,Dt.upsert(e).then(function(){console.log("做题信息已保存")})})}),this.isShowResult=!0,Y.a.alert({message:"答题结束,成绩如下:"+"正确:".concat(e,"(总共:").concat(this.totalNum,")(正确率:").concat(n,")")}),this.hasSubmit=!0}},adaptExamConfig:function(){var t=Jt({},Gt,{},this.examConfig);t.questions=t.questions.map(function(t){return Jt({},Zt,{},t,{hashCode:t.hashCode,answerOptions:t.answerOptions?t.answerOptions.map(function(t){return Jt({},t,{api:rt.getHashCode(t)+""})}):[]})}).filter(function(t){if(!t.describe||0===t.answerOptions.length)return console.log("错误的题目(无描述或无答案).",t),!1;var e=rt.groupArray(t.answerOptions,"isRight");if(1===e.length&&!e[0][0].isRight)return console.log("错误的题目(无正确答案).",t),!1;var n=rt.groupArray(t.answerOptions,"describe").map(function(t){if(t.length>1){var e=Jt({},t[0]);return rt.groupArray(t,"isRight").length!==t.length&&(e.invalid=!0),e}return t[0]});return n.find(function(t){return t.invalid})?(console.log("错误的题目(答案中有重复描述且对错不一).",t),!1):(t.answerOptions=rt.randomSort(n),!0)}),t.questions=rt.randomSort(t.questions),this.examInfo=t,this.examHashCode=this.examConfig.hashCode,this.loadHistoryExamInfo()},getOptionColor:function(t,e){return this.isShowResult||this.isPractice&&t.answer.isChecked?t.answer.results.map(function(t){return t.api}).includes(e.api)&&e.isRight?"#44af11":"#cd0000":"#1989fa"},loadHistoryExamInfo:function(){var t=this;Dt.queryMany(this.examConfig.questions.map(function(t){return t.hashCode})).then(function(e){t.historyExams=e.map(function(t){return Jt({},t,{hashCode:t.relatedQuestion})})})},swipe:function(t){switch(t.direction){case"Left":this.questionNum<this.totalNum-1&&this.turnTo(this.questionNum+1);break;case"Right":this.questionNum>0&&this.turnTo(this.questionNum-1);break;case"Up":this.showAcButtons=!1;break;case"Down":this.showAcButtons=!0}}},props:{examConfig:{type:Object,default:function(){return Gt}},isReviewError:{type:Boolean,default:!1},isNew:{type:Boolean,default:!1},requireAllDone:{type:Boolean,default:!1},isPractice:{type:Boolean,default:!0}},watch:{examConfig:function(){this.adaptExamConfig()}},mounted:function(){this.adaptExamConfig(),console.log("开始答题");try{plus.device.setWakelock(!0),console.log("打开屏幕常亮")}catch(t){}},destroyed:function(){console.log("结束答题");try{plus.device.setWakelock(!1),console.log("关闭屏幕常亮")}catch(t){}}},Kt={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{directives:[{name:"finger",rawName:"v-finger:swipe",value:t.swipe,expression:"swipe",arg:"swipe"}],staticClass:"exam-root"},[n("van-nav-bar",{attrs:{title:t.examInfo.title,fixed:"","left-arrow":""},on:{"click-left":function(e){return t.$router.back()}}}),t._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:t.showAcButtons,expression:"showAcButtons"}],staticClass:"ac-qn-backdrop",on:{click:function(e){e.stopPropagation(),t.showAcButtons=!1}}},[n("div",{staticClass:"exam-p-around-small ac-qn",on:{click:function(t){t.stopPropagation()}}},[n("van-row",t._l(t.questionsInfo,function(e,r){return n("van-col",{key:r,attrs:{span:"4"}},[n("div",{staticClass:"exam-circle exam-done",class:{"exam-right":e.answer.isPass&&(t.isShowResult||e.answer.isChecked&&t.isPractice),"exam-error":e.answer.isMistake&&(t.isShowResult||e.answer.isChecked&&t.isPractice),"exam-current":t.questionNum===r},on:{click:function(e){return t.turnTo(r)}}},[t._v("\n "+t._s(r+1)+"\n ")])])}),1)],1)]),t._v(" "),n("div",{staticClass:"question-box",style:"width: "+100*t.totalNum+"%;transform:translate("+100*-t.questionNum/t.totalNum+"%,0)",on:{click:function(e){e.stopPropagation(),t.showAcButtons=!1}}},t._l(t.questionsInfo,function(e,r){return n("div",{key:e.hashCode,staticClass:"question-item"},[n("van-panel",{attrs:{title:t.getQuestionTitle(e),desc:t.getQuestionDesc(e)}},[e.isMulti?n("div",[n("van-checkbox-group",{model:{value:e.answer.multi.apis,callback:function(n){t.$set(e.answer.multi,"apis",n)},expression:"question.answer.multi.apis"}},[n("van-cell-group",t._l(e.answerOptions,function(i,o){return n("van-cell",{key:o,attrs:{clickable:""},on:{click:function(e){return t.toggleAnswer(r,i.api)}}},[n("template",{slot:"title"},[n("span",{class:{"right-answer":i.isRight&&t.isShowResult||i.isRight&&e.answer.isChecked&&t.isPractice,"error-answer":!i.isRight&&t.isShowResult||!i.isRight&&e.answer.isAnswered&&t.isPractice,"custom-title":!0}},[t._v(t._s(t.letterIndex[o]+". "+i.describe))])]),t._v(" "),n("van-checkbox",{attrs:{slot:"right-icon",name:i.api,"checked-color":t.getOptionColor(e,i)},slot:"right-icon"})],2)}),1)],1)],1):t._e(),t._v(" "),e.isMulti?t._e():n("div",[n("van-radio-group",{model:{value:e.answer.single.api,callback:function(n){t.$set(e.answer.single,"api",n)},expression:"question.answer.single.api"}},[n("van-cell-group",t._l(e.answerOptions,function(i,o){return n("van-cell",{key:o,attrs:{clickable:""},on:{click:function(e){return t.setAnswer(r,[i.api])}}},[n("template",{slot:"title"},[n("span",{class:{"right-answer":i.isRight&&t.isShowResult||i.isRight&&e.answer.isChecked&&t.isPractice,"error-answer":!i.isRight&&t.isShowResult||!i.isRight&&e.answer.isAnswered&&t.isPractice,"custom-title":!0}},[t._v(t._s(t.letterIndex[o]+". "+i.describe))])]),t._v(" "),n("van-radio",{attrs:{slot:"right-icon",name:i.api,"checked-color":t.getOptionColor(e,i)},slot:"right-icon"})],2)}),1)],1)],1)])],1)}),0),t._v(" "),n("div",{staticClass:"text-align-center ac-buttons"},[t.questionNum>0?n("van-button",{attrs:{size:"small"},on:{click:function(e){return t.turnTo(t.questionNum-1)}}},[t._v("上一题")]):t._e(),t._v(" "),t.questionNum<t.totalNum-1?n("van-button",{attrs:{size:"small",type:"info"},on:{click:function(e){return t.turnTo(t.questionNum+1)}}},[t._v("下一题\n ")]):t._e(),t._v(" "),t.isPractice&&!t.questionsInfo[t.questionNum].answer.isChecked?n("van-button",{attrs:{size:"small",type:"warning"},on:{click:function(e){return t.checkResult(t.questionNum)}}},[t._v("检查该题答案\n ")]):t._e(),t._v(" "),t.hasSubmit?t._e():n("van-button",{attrs:{size:"small",type:"primary"},on:{click:t.confirmSubmit}},[t._v("提交\n ")])],1)],1)},staticRenderFns:[]};var Xt=n("VU/8")(Yt,Kt,!1,function(t){n("SmAy")},"data-v-38568fde",null).exports;r.a.use(s.a);var te=new s.a({routes:[{path:"/",name:"HomePage",component:Qt},{path:"/exam",name:"DoExamPage",component:Xt,props:!0}]}),ee=(n("ZsCP"),n("mtWM")),ne=n.n(ee),re=n("hU7x"),ie=n.n(re),oe=n("7oBh"),se=n.n(oe),ae=n("vhKK"),ue=n.n(ae);if(r.a.use(ue.a,{AlloyFinger:se.a}),r.a.prototype.$http=ne.a,r.a.prototype.$http.jsonp=ie.a,Object.fromEntries||(Object.fromEntries=rt.fromEntries),!Array.prototype.flat)try{h()(Array.prototype,"flat",{value:function(t){return rt.flat(this,t)},enumerable:!1})}catch(t){Array.prototype.flat=function(t){return rt.flat(this,t)}}r.a.config.productionTip=!1,new r.a({el:"#app",router:te,components:{App:o},template:"<App/>"})},RUOb:function(t,e){},SmAy:function(t,e){},ZsCP:function(t,e){},hW8u:function(t,e){},"hy4/":function(t,e){},juSK:function(t,e){},nLpc:function(t,e){},nOtf:function(t,e){},nsZj:function(t,e){},px3J:function(t,e){},sKgQ:function(t,e){},u1TY:function(t,e){},"zW/T":function(t,e){}},["NHnr"]);
2
- //# sourceMappingURL=app.0f467150148488a0bec0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///./src/App.vue?2b06","webpack:///./src/App.vue","webpack:///src/App.vue","webpack:///./src/utils/index.js","webpack:///./src/db/index.js","webpack:///./src/dao/index.js","webpack:///./src/config/index.js","webpack:///src/components/home-pages/HomeIndex.vue","webpack:///./src/components/home-pages/HomeIndex.vue?87ca","webpack:///./src/components/home-pages/HomeIndex.vue","webpack:///src/components/HelloWorld.vue","webpack:///./src/components/HelloWorld.vue?3534","webpack:///./src/components/HelloWorld.vue","webpack:///src/components/HomePage.vue","webpack:///./src/components/HomePage.vue?7fc5","webpack:///./src/components/HomePage.vue","webpack:///src/components/exam/DoExamPage.vue","webpack:///./src/components/exam/DoExamPage.vue?b5bc","webpack:///./src/components/exam/DoExamPage.vue","webpack:///./src/router/index.js","webpack:///./src/plugins/index.js","webpack:///./src/main.js"],"names":["selectortype_template_index_0_src_App","render","_h","this","$createElement","_c","_self","attrs","id","name","direction","staticClass","staticRenderFns","src_App","__webpack_require__","normalizeComponent","data","watch","$route","to","from","toDepth","path","split","length","fromDepth","ssrContext","utils","getHashCode","obj","getStrHashCode","getMessage","concat","getPropertyNames","join","_this","deep","arguments","undefined","includes","typeof_default","Date","flat","entries_default","map","_ref","_ref2","slicedToArray_default","key","value","filter","r","_this2","toString","keys_default","str","i","len","hash","charCodeAt","arr","Infinity","ret","dirty","forEach","item","is_array_default","push","apply","toConsumableArray_default","fromEntries","result","a","Array","storage","getItem","itemStr","localStorage","JSON","parse","e","console","log","setItem","stringify_default","removeItem","groupArray","groupedBy","_this3","array","hashCode","checkedMap","checkItem","Object","groupBy","_objectSpread","checkedHashCode","hashArr","find","values_default","duplicateRemoval","g","randomSort","sort","Math","random","dexieDB","Dexie","version","stores","config","question","bank","historyRecord","configDB","questionDB","bankDB","historyRecordDB","BaseDao","db","defaultEntry","classCallCheck_default","hook","primKey","createDate","now_default","modifyDate","changed","origin","dao__objectSpread","records","bulkPut","put","field","where","query","equals","first","keys","bulkDelete","delete","ConfigDao","possibleConstructorReturn_default","getPrototypeOf_default","call","QuestionDao","describe","type","BankDao","title","questions","HistoryRecordDao","rightTimes","errorTimes","maxTime","minTime","totalTime","hashCodeList","anyOf","toArray","configDao","questionDao","bankDao","historyRecordDao","vue_esm","use","dialog","cell","cell_group","es_button","popup","grid","grid_item","es_checkbox","checkbox_group","HomeIndex","isShowImporter","isShowOption","isFromOnline","onlineLibs","onlineSelects","questionLib","examList","currentCategory","categories","optionInfo","canReviewError","canDoExam","canClear","computed","selectedLibs","res","lib","HomeIndex__objectSpread","inCategory","methods","doExam","isReviewError","dao_bankDao","then","exam","promise_default","all","q","toArray_default","slice","$router","params","examConfig","alert","message","clearHistory","queryByHashCode","initExamList","showOption","hasHistoryError","selectLib","s","showImporter","importFromExist","_this4","fetchOnlineLib","catch","_fetchOnlineLib","asyncToGenerator_default","regenerator_default","mark","_callee","maps","promises","_this5","wrap","_context","prev","next","$http","get","existsMap","t0","sent","exist","abrupt","stop","importLib","_importLib","_callee3","_this6","_context3","_ref3","_callee2","l","_context2","importSingleLib","_x","_importSingleLib","_callee4","_context4","upsert","_x2","intoCategory","_intoCategory","_callee5","category","_this7","_args5","_context5","notEqual","banks","sortBy","errorMap","record","relatedQuestion","times","b","_initExamList","_callee6","_this8","_context6","reduce","ac","syncDataToIndexDB","exams","questionSet","historyRecords","_ref4","_ref5","_ref5$","mounted","home_pages_HomeIndex","_vm","icon","clickable","on","click","$event","slot","_v","_l","_s","model","callback","$$v","expression","staticStyle","max-height","overflow-y","oi","_e","label","placeholder","rows","size","block","position","components_home_pages_HomeIndex","HomeIndex_normalizeComponent","components_HelloWorld","HelloWorld_normalizeComponent","msg","nav_bar","tabbar","tabbar_item","HomePage","activeTabIndex","pages","api","activePage","components_HomePage","fixed","tag","color","width","page","src_components_HomePage","HomePage_normalizeComponent","row","col","radio_group","es_radio","defaultQuestionInfo","required","score","usingScore","answerOptions","isRight","defaultExamInfo","panel","DoExamPage","answers","questionNum","isShowResult","letterIndex","examInfo","hasSubmit","examHashCode","historyExams","showAcButtons","totalNum","historyErrorHashCodes","DoExamPage__objectSpread","active","questionsInfo","results","single","multi","apis","answer","orderNum","isMulti","opt","getQuestionTitle","getQuestionDesc","errorExam","totalTimes","toFixed","setAnswer","ai","toggleAnswer","checkResult","rightAnswers","option","isMistake","isAnswered","isChecked","isPass","turnTo","confirmSubmit","confirm","submit","answeredNum","requireAllDone","rightNum","rightRate","codeInfo","adaptExamConfig","checkNoAnswer","resultAnswers","checks","invalid","loadHistoryExamInfo","getOptionColor","isPractice","queryMany","swipe","evt","props","default","Boolean","isNew","plus","device","setWakelock","destroyed","exam_DoExamPage","directives","rawName","arg","left-arrow","click-left","back","stopPropagation","span","class","exam-right","exam-error","exam-current","style","desc","$set","right-answer","error-answer","custom-title","checked-color","components_exam_DoExamPage","DoExamPage_normalizeComponent","Vue","Router","router","routes","component","AlloyFingerPlugin","AlloyFinger","prototype","axios","jsonp","Utils","define_property_default","enumerable","productionTip","el","components","App","template"],"mappings":"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","file":"static/js/app.0f467150148488a0bec0.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('transition',{attrs:{\"name\":_vm.direction}},[_c('router-view',{staticClass:\"appView\"})],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-70ce3a13\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-70ce3a13\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-70ce3a13\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","<template>\n <div id=\"app\">\n <transition :name=\"direction\">\n <router-view class=\"appView\"/>\n </transition>\n </div>\n</template>\n\n<script>\n export default {\n name: 'App',\n data: () => ({\n direction: \"slide-right\"\n }),\n watch: {\n $route(to, from) {\n const toDepth = to.path.split(\"/\").length;\n const fromDepth = from.path.split(\"/\").length;\n if (to.path === \"/\") {\n this.direction = \"slide-right\";\n } else if (from.path === \"/\") {\n this.direction = \"slide-left\";\n } else {\n this.direction = toDepth < fromDepth ? \"slide-right\" : \"slide-left\";\n }\n }\n }\n }\n</script>\n\n<style>\n #app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: #2c3e50;\n margin-top: 60px;\n }\n\n .appView {\n position: absolute;\n width: 100%;\n transition: left .3s ease-out;\n left: 0;\n }\n\n .slide-left-enter {\n /*transform: translate(100%, 0);*/\n left: 100%;\n }\n\n .slide-left-leave-active {\n /*transform: translate(-50%, 0);*/\n left: -50%;\n }\n\n .slide-right-enter {\n /*transform: translate(-50%, 0);*/\n left: -50%;\n z-index: 20;\n }\n\n .slide-right-leave-active {\n /*transform: translate(100%, 0);*/\n left: 100%;\n z-index: 20;\n }\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","export default {\n getHashCode(obj) {\n return this.getStrHashCode(this.getMessage(obj).concat(this.getPropertyNames(obj)).join(''));\n },\n getPropertyNames(_self, deep = 10) {\n if (deep <= 0) {\n return '';\n }\n if (!_self || ['string', 'number', 'boolean', 'function'].includes(typeof _self) || _self instanceof Date) {\n return '';\n }\n return this.flat(\n Object.entries(_self).map(([key, value]) => [key, this.getPropertyNames(value, deep--)])\n ).filter(r => r != null && r !== '')\n },\n getMessage(_self, deep) {\n deep == null && (deep = 10);\n if (deep <= 0) {\n return '';\n }\n if (!_self || ['string', 'number', 'boolean', 'function'].includes(typeof _self) || _self instanceof Date) {\n return [_self != null ? _self.toString() : ''];\n }\n return this.flat(\n Object.keys(_self).map(key => {\n return this.getMessage(_self[key], deep--);\n })\n ).filter(r => r != null && r !== '');\n },\n getStrHashCode(str) {\n let hash = 0, i, chr, len;\n if (str.length === 0) return hash;\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash + '';\n },\n flat(arr, deep = Infinity) {\n let ret = [];\n let dirty = false;\n arr.forEach(item => {\n if (Array.isArray(item)) {\n dirty = true;\n ret.push(...item)\n } else {\n ret.push(item)\n }\n });\n return dirty && deep > 0 ? this.flat(ret, deep--) : ret\n },\n fromEntries(arr) {\n let result = {};\n arr.forEach(a => {\n if (a instanceof Array) {\n result[a[0]] = a[1];\n }\n });\n return result;\n },\n storage: {\n getItem(key) {\n let itemStr = localStorage.getItem('__exam_s0_' + key);\n let result = null;\n try {\n result = JSON.parse(itemStr);\n } catch (e) {\n console.log(`No valid item for key [${key}] to get in storage.`);\n }\n return result;\n },\n setItem(key, value) {\n let result = null;\n try {\n result = JSON.stringify(value);\n localStorage.setItem('__exam_s0_' + key, result);\n } catch (e) {\n console.log(`Not valid item for key [${key}] to set.`);\n }\n },\n removeItem(key) {\n localStorage.removeItem('__exam_s0_' + key);\n },\n },\n groupArray(arr, groupedBy) {\n let array = arr.map(a => ({hashCode: this.getHashCode(a), item: a}));\n if (!(groupedBy instanceof Array)) {\n groupedBy = [groupedBy];\n }\n let checkedArr = array.map(a => ({\n hashCode: a.hashCode,\n checkItem: Object.fromEntries(\n groupedBy.map(groupBy => [groupBy, (a.item || {})[groupBy]])\n )\n })).map(a => ({...a, checkedHashCode: this.getHashCode(a.checkItem)}));\n let checkedMap = {};\n checkedArr.forEach(a => {\n let hashArr = checkedMap[a.checkedHashCode];\n if (!hashArr) {\n hashArr = [];\n }\n hashArr.push(array.find(arr => arr.hashCode === a.hashCode).item);\n checkedMap[a.checkedHashCode] = hashArr;\n });\n return Object.values(checkedMap);\n },\n duplicateRemoval(arr) {\n let array = arr.map(a => ({item: a}));\n let grouped = this.groupArray(array, 'item');\n return grouped.map(g => g[0].item);\n },\n randomSort(arr) {\n return arr.sort(() => {\n return Math.random() - 0.5;\n })\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/utils/index.js","import Dexie from \"dexie\";\n\nconst dexieDB = new Dexie('_qa_db');\ndexieDB.version(1).stores({\n config: 'key, value, createDate, modifyDate',\n question: 'hashCode, describe, type, createDate, modifyDate',\n bank: 'hashCode, title, *questions, createDate, modifyDate',\n historyRecord: 'relatedQuestion, rightTimes, errorTimes, maxTime, minTime, totalTime, createDate, modifyDate'\n});\ndexieDB.version(2).stores({\n bank: 'hashCode, title, *questions, category, createDate, modifyDate',\n});\nconst configDB = dexieDB['config'];\nconst questionDB = dexieDB['question'];\nconst bankDB = dexieDB['bank'];\nconst historyRecordDB = dexieDB['historyRecord'];\n\nexport {dexieDB, configDB, questionDB, bankDB, historyRecordDB};\n\n\n// WEBPACK FOOTER //\n// ./src/db/index.js","import {dexieDB, configDB, questionDB, bankDB, historyRecordDB} from '../db';\n\nclass BaseDao {\n constructor(db, defaultEntry) {\n this.db = db;\n this.defaultEntry = defaultEntry || {};\n this.db.hook('creating', (primKey, obj) => {\n obj.createDate = Date.now();\n obj.modifyDate = Date.now();\n });\n this.db.hook('updating', (changed, key, origin) => {\n changed['modifiedDate'] = Date.now();\n if (!origin['createdDate']) {\n changed['createdDate'] = Date.now();\n }\n console.log({...changed});\n return changed;\n })\n }\n\n async upsert(records) {\n if (records instanceof Array) {\n return this.db.bulkPut(records.map(r => ({...this.defaultEntry, ...r})));\n }\n return this.db.put({...this.defaultEntry, ...records});\n }\n\n query(field) {\n return this.db.where(field);\n }\n\n queryByHashCode(hashCode) {\n return this.query('hashCode').equals(hashCode).first();\n }\n\n async delete(keys) {\n if (keys instanceof Array) {\n return this.db.bulkDelete(keys);\n }\n return this.db.delete(keys);\n }\n}\n\n\nclass ConfigDao extends BaseDao {\n constructor() {\n super(configDB, {value: null});\n }\n}\n\nclass QuestionDao extends BaseDao {\n constructor() {\n super(questionDB, {\n describe: '',\n type: 'picklist'\n });\n }\n}\n\nclass BankDao extends BaseDao {\n constructor() {\n super(bankDB, {\n title: '',\n questions: []\n });\n }\n}\n\nclass HistoryRecordDao extends BaseDao {\n constructor() {\n super(historyRecordDB, {\n rightTimes: 0, errorTimes: 0, maxTime: 0, minTime: 0, totalTime: 0\n });\n }\n\n queryByHashCode(hashCode) {\n return this.query('relatedQuestion').equals(hashCode).first();\n }\n\n queryMany(hashCodeList) {\n return this.query('relatedQuestion').anyOf(hashCodeList).toArray();\n }\n}\n\nconst configDao = new ConfigDao();\nconst questionDao = new QuestionDao();\nconst bankDao = new BankDao();\nconst historyRecordDao = new HistoryRecordDao();\n\nexport {configDao, questionDao, bankDao, historyRecordDao}\n\n\n// WEBPACK FOOTER //\n// ./src/dao/index.js","export default {\n version: '1.0.3',\n domain:'//palerock.cn',\n // domain:'//localhost'\n}\n\n\n// WEBPACK FOOTER //\n// ./src/config/index.js","<template>\n <div>\n <van-grid v-if=\"!inCategory\">\n <van-grid-item\n icon=\"notes-o\"\n clickable\n @click=\"showImporter\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">开始答题(导入)</div>\n </van-grid-item>\n <van-grid-item\n v-for=\"category in categories\"\n :key=\"category\"\n icon=\"notes-o\"\n clickable\n @click=\"intoCategory(category)\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">{{ category }}</div>\n </van-grid-item>\n </van-grid>\n <van-grid v-else>\n <van-grid-item\n icon=\"notes-o\"\n clickable\n @click=\"currentCategory = null\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">返回</div>\n </van-grid-item>\n <van-grid-item\n v-for=\"exam in examList\"\n :key=\"exam.hashCode\"\n icon=\"notes-o\"\n clickable\n @click=\"showOption(exam)\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">{{ exam.title }}</div>\n </van-grid-item>\n </van-grid>\n <van-popup v-model=\"isShowImporter\">\n <div class=\"exam-import-box\">\n <div v-if=\"isFromOnline\" style=\"max-height: 300px;overflow-y: auto;\">\n <van-checkbox-group v-model=\"onlineSelects\">\n <van-cell-group>\n <van-cell v-for=\"(lib, oi) in onlineLibs\"\n clickable\n @click=\"selectLib(lib)\"\n :key=\"oi\">\n <template slot=\"title\">\n <span>{{ lib.title }}</span>\n </template>\n <van-checkbox slot=\"right-icon\" :name=\"lib.hashCode\"></van-checkbox>\n </van-cell>\n </van-cell-group>\n </van-checkbox-group>\n </div>\n <div v-if=\"!isFromOnline\">\n <van-cell-group>\n <van-field\n v-model=\"questionLib\"\n label=\"题库\"\n type=\"textarea\"\n placeholder=\"请输入题库\"\n rows=\"10\"></van-field>\n </van-cell-group>\n </div>\n <div>\n <van-button type=\"info\" size=\"small\" block @click=\"importLib\">导入题库</van-button>\n </div>\n <div class=\"exam-m-top-small\">\n <van-button type=\"primary\" size=\"small\" block @click=\"importFromExist\">获取在线题库</van-button>\n </div>\n </div>\n </van-popup>\n <van-popup v-model=\"isShowOption\" position=\"bottom\">\n <div class=\"\">\n <van-button type=\"primary\" block @click=\"doExam(optionInfo.hashCode)\">重新测试\n </van-button>\n <van-button type=\"info\" block @click=\"doExam(optionInfo.hashCode,true)\">复习错题\n </van-button>\n <van-button type=\"danger\" block @click=\"clearHistory(optionInfo.hashCode)\">清空错题\n </van-button>\n </div>\n </van-popup>\n </div>\n</template>\n\n<script>\nimport Vue from 'vue';\nimport {Grid, GridItem} from 'vant';\nimport {Popup} from 'vant';\nimport {Button} from 'vant';\nimport {Field} from 'vant';\nimport {Cell, CellGroup} from 'vant';\nimport utils from '../../utils';\nimport {questionDao, historyRecordDao, bankDao, configDao} from '../../dao';\nimport {Dialog} from 'vant';\nimport config from \"@/config\";\nimport {Checkbox, CheckboxGroup} from 'vant';\n\nVue.use(Dialog);\nVue.use(Field).use(Cell).use(CellGroup);\nVue.use(Button);\nVue.use(Popup);\nVue.use(Grid).use(GridItem);\nVue.use(Checkbox).use(CheckboxGroup);\n\nconst existsMap = '../lib-json';\nexport default {\n name: \"HomeIndex\",\n data() {\n return {\n isShowImporter: false,\n isShowOption: false,\n isFromOnline: false,\n onlineLibs: [],\n onlineSelects: [],\n questionLib: '',\n examList: [],\n currentCategory: '',\n categories: [],\n optionInfo: {\n canReviewError: true,\n canDoExam: true,\n canClear: true,\n hashCode: ''\n }\n }\n },\n computed: {\n selectedLibs() {\n let res = this.onlineLibs.filter(lib => this.onlineSelects.includes(lib.hashCode)).map(lib => ({...lib}));\n res.forEach(r => {\n delete r.hashCode;\n });\n return res;\n },\n inCategory() {\n return !!this.currentCategory\n }\n },\n methods: {\n doExam(hashCode, isReviewError = false) {\n // let exam = utils.storage.getItem(hashCode);\n bankDao.query('hashCode').equals(hashCode).first()\n .then(exam => {\n return Promise.all([exam, ...exam.questions.map(q => questionDao.query('hashCode').equals(q).first())])\n })\n .then(([exam, ...questions]) => {\n exam.questions = questions;\n if (!exam) {\n Dialog.alert({message: '该题库已失效!'});\n return;\n }\n this.$router.push({\n name: 'DoExamPage',\n params: {\n examConfig: exam,\n isReviewError\n }\n })\n });\n },\n clearHistory(hashCode) {\n bankDao.queryByHashCode(hashCode)\n .then(bankDao => {\n bankDao = bankDao || {};\n return historyRecordDao.delete(bankDao.questions || []);\n }).then(() => {\n console.log('remove the history.');\n this.isShowOption = false;\n this.initExamList();\n }\n );\n },\n showOption(exam) {\n // console.log(exam.hashCode);\n if (exam.hasHistoryError) {\n this.optionInfo.hashCode = exam.hashCode;\n this.isShowOption = true;\n } else {\n this.doExam(exam.hashCode);\n }\n },\n selectLib(lib) {\n this.onlineSelects.includes(lib.hashCode) ? (this.onlineSelects = this.onlineSelects.filter(s => s !== lib.hashCode)) : (this.onlineSelects = [...this.onlineSelects, lib.hashCode])\n this.questionLib = JSON.stringify(this.selectedLibs);\n },\n showImporter() {\n this.isShowImporter = true;\n this.isFromOnline = false;\n },\n importFromExist() {\n this.isFromOnline = true;\n this.fetchOnlineLib().then(res => {\n this.onlineLibs = res.filter(r => r.data).map(r => ({\n ...r.data, hashCode: utils.getHashCode(r.data)\n }));\n }).catch(e => {\n console.log(e)\n alert('获取失败,请尝试自行录入');\n this.isShowImporter = false;\n })\n },\n async fetchOnlineLib() {\n const maps = (await this.$http.get(existsMap + \"/map.json\")).data || []\n const promises = maps.map(exist => this.$http.get(existsMap + \"/\" + exist));\n return Promise.all(promises);\n },\n async importLib() {\n try {\n let lib = JSON.parse(this.questionLib);\n if (lib instanceof Array) {\n await Promise.all(lib.map(async l => {\n await this.importSingleLib(l);\n }))\n } else {\n await this.importSingleLib(lib);\n }\n } catch (e) {\n alert(`题库格式错误:${e.getMessage()}`)\n }\n await this.initExamList();\n this.isShowImporter = false;\n this.questionLib = ''\n },\n async importSingleLib(lib) {\n if (!lib.questions || lib.questions.length === 0) {\n return false;\n }\n lib.questions.forEach(q=>{\n q.hashCode = utils.getHashCode(q)\n })\n const bank = {\n ...lib,\n questions: lib.questions.map(q=>q.hashCode)\n }\n bank.hashCode = utils.getHashCode(bank)\n await questionDao.upsert(lib.questions)\n .then(()=>{\n return bankDao.upsert([bank]);\n })\n return true;\n },\n async intoCategory(category = 'default') {\n this.currentCategory = category\n await bankDao.query('hashCode').notEqual('').toArray().then(banks => {\n const promises = banks.map(bank => {\n return historyRecordDao.query('relatedQuestion').anyOf(bank.questions).sortBy('createDate')\n .then(records => {\n const errorMap = Object.fromEntries(records.map(record => [record.relatedQuestion, {\n ...record, times: record.errorTimes\n }]));\n const hasHistoryError = !!Object.values(errorMap).find(q => q.times > 0);\n return {...bank, errorMap, hasHistoryError}\n });\n });\n return Promise.all(promises);\n }).then(banks => {\n banks = banks.map(b => {\n b.category = b.category || 'default'\n return b\n })\n this.examList = banks.filter(b => b.category === category);\n })\n },\n async initExamList() {\n await bankDao.query('hashCode').notEqual('').toArray().then(banks => {\n banks = banks.map(b => {\n b.category = b.category || 'default'\n return b\n })\n this.categories = banks.reduce((ac, item) => {\n if (!ac.includes(item.category)) {\n ac.push(item.category)\n }\n return ac\n }, [])\n })\n if (this.currentCategory) {\n this.intoCategory(this.currentCategory)\n }\n },\n syncDataToIndexDB() {\n let exams = JSON.parse(JSON.stringify(this.examList))\n .map(e => ({...e, bank: utils.storage.getItem(e.hashCode)}))\n .map(e => ({\n ...e,\n questionSet: e.bank.questions,\n bank: {\n ...e.bank, hashCode: utils.getHashCode(e.bank),\n questions: e.bank.questions.map(q => utils.getHashCode(q))\n },\n historyRecords: Object.entries(e.errorMap)\n .map(([relatedQuestion, {times, rightTimes}]) => ({\n relatedQuestion, rightTimes, errorTimes: times\n }))\n }));\n questionDao.upsert(\n utils.flat(exams.map(e => e.questionSet.map(q => ({\n ...q,\n hashCode: utils.getHashCode(q),\n }))), 2)\n ).then(() => {\n return bankDao.upsert(exams.map(e => e.bank));\n }).then(() => {\n return historyRecordDao.upsert(utils.flat(exams.map(e => e.historyRecords), 2));\n }).then(() => {\n return configDao.upsert({key: 'hasSync', value: true});\n }).then(() => {\n console.log('sync success.');\n }).catch(e => {\n console.log(e);\n });\n // console.log(exams);\n }\n },\n mounted() {\n this.initExamList();\n // configDao.query('key').equals('hasSync').first()\n // .then(hasSync => {\n // hasSync = !!hasSync;\n // if (!hasSync) {\n // this.syncDataToIndexDB();\n // }\n // });\n }\n}\n</script>\n\n<style scoped>\n.exam-import-box {\n width: 20rem;\n padding: 1rem;\n}\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/home-pages/HomeIndex.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.inCategory)?_c('van-grid',[_c('van-grid-item',{attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":_vm.showImporter}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(\"开始答题(导入)\")])]),_vm._v(\" \"),_vm._l((_vm.categories),function(category){return _c('van-grid-item',{key:category,attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":function($event){return _vm.intoCategory(category)}}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(_vm._s(category))])])})],2):_c('van-grid',[_c('van-grid-item',{attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":function($event){_vm.currentCategory = null}}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(\"返回\")])]),_vm._v(\" \"),_vm._l((_vm.examList),function(exam){return _c('van-grid-item',{key:exam.hashCode,attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":function($event){return _vm.showOption(exam)}}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(_vm._s(exam.title))])])})],2),_vm._v(\" \"),_c('van-popup',{model:{value:(_vm.isShowImporter),callback:function ($$v) {_vm.isShowImporter=$$v},expression:\"isShowImporter\"}},[_c('div',{staticClass:\"exam-import-box\"},[(_vm.isFromOnline)?_c('div',{staticStyle:{\"max-height\":\"300px\",\"overflow-y\":\"auto\"}},[_c('van-checkbox-group',{model:{value:(_vm.onlineSelects),callback:function ($$v) {_vm.onlineSelects=$$v},expression:\"onlineSelects\"}},[_c('van-cell-group',_vm._l((_vm.onlineLibs),function(lib,oi){return _c('van-cell',{key:oi,attrs:{\"clickable\":\"\"},on:{\"click\":function($event){return _vm.selectLib(lib)}}},[_c('template',{slot:\"title\"},[_c('span',[_vm._v(_vm._s(lib.title))])]),_vm._v(\" \"),_c('van-checkbox',{attrs:{\"slot\":\"right-icon\",\"name\":lib.hashCode},slot:\"right-icon\"})],2)}),1)],1)],1):_vm._e(),_vm._v(\" \"),(!_vm.isFromOnline)?_c('div',[_c('van-cell-group',[_c('van-field',{attrs:{\"label\":\"题库\",\"type\":\"textarea\",\"placeholder\":\"请输入题库\",\"rows\":\"10\"},model:{value:(_vm.questionLib),callback:function ($$v) {_vm.questionLib=$$v},expression:\"questionLib\"}})],1)],1):_vm._e(),_vm._v(\" \"),_c('div',[_c('van-button',{attrs:{\"type\":\"info\",\"size\":\"small\",\"block\":\"\"},on:{\"click\":_vm.importLib}},[_vm._v(\"导入题库\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"exam-m-top-small\"},[_c('van-button',{attrs:{\"type\":\"primary\",\"size\":\"small\",\"block\":\"\"},on:{\"click\":_vm.importFromExist}},[_vm._v(\"获取在线题库\")])],1)])]),_vm._v(\" \"),_c('van-popup',{attrs:{\"position\":\"bottom\"},model:{value:(_vm.isShowOption),callback:function ($$v) {_vm.isShowOption=$$v},expression:\"isShowOption\"}},[_c('div',{},[_c('van-button',{attrs:{\"type\":\"primary\",\"block\":\"\"},on:{\"click\":function($event){return _vm.doExam(_vm.optionInfo.hashCode)}}},[_vm._v(\"重新测试\\n \")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"info\",\"block\":\"\"},on:{\"click\":function($event){return _vm.doExam(_vm.optionInfo.hashCode,true)}}},[_vm._v(\"复习错题\\n \")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"danger\",\"block\":\"\"},on:{\"click\":function($event){return _vm.clearHistory(_vm.optionInfo.hashCode)}}},[_vm._v(\"清空错题\\n \")])],1)])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-1808ddae\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/home-pages/HomeIndex.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-1808ddae\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HomeIndex.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomeIndex.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomeIndex.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1808ddae\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./HomeIndex.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-1808ddae\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/home-pages/HomeIndex.vue\n// module id = null\n// module chunks = ","<template>\n <div>\n <van-button type=\"default\">默认按钮</van-button>\n <van-button type=\"primary\">主要按钮</van-button>\n <van-button type=\"info\">信息按钮</van-button>\n <van-button type=\"warning\">警告按钮</van-button>\n <van-button type=\"danger\">危险按钮</van-button>\n </div>\n</template>\n\n<script>\n import Vue from 'vue';\n import { Button } from 'vant';\n\n Vue.use(Button);\n\n export default {\n name: 'HelloWorld',\n data() {\n return {\n msg: 'Welcome to Your Vue.js App'\n }\n }\n }\n</script>\n\n\n\n// WEBPACK FOOTER //\n// src/components/HelloWorld.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('van-button',{attrs:{\"type\":\"default\"}},[_vm._v(\"默认按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"primary\"}},[_vm._v(\"主要按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"info\"}},[_vm._v(\"信息按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"warning\"}},[_vm._v(\"警告按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"danger\"}},[_vm._v(\"危险按钮\")])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-a0448bfc\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/HelloWorld.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-a0448bfc\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./HelloWorld.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/HelloWorld.vue\n// module id = null\n// module chunks = ","<template>\n <div>\n <van-nav-bar\n :title=\"activePage.label\"\n fixed\n ></van-nav-bar>\n <div class=\"is-relation\">\n <component :is=\"activePage.api\"></component>\n <p class=\"text-align-center is-absolute\" style=\"color: #efefef;width: 100%\">{{version}}</p>\n </div>\n <van-tabbar v-model=\"activeTabIndex\">\n <van-tabbar-item v-for=\"(page, i) in pages\" :key=\"i\" :icon=\"page.icon\">{{page.label}}</van-tabbar-item>\n </van-tabbar>\n </div>\n</template>\n\n<script>\n import Vue from 'vue';\n import {NavBar} from 'vant';\n import {Tabbar, TabbarItem} from 'vant';\n import HomeIndex from \"@/components/home-pages/HomeIndex\";\n import HelloWorld from \"@/components/HelloWorld\";\n import config from \"@/config\";\n\n Vue.use(NavBar).use(Tabbar).use(TabbarItem);\n\n export default {\n name: \"HomePage\",\n data() {\n return {\n activeTabIndex: 0,\n pages: [\n {title: '主页', label: 'Home', api: HomeIndex, icon: 'home-o'},\n // {title: '搜索', label: '搜索', api: HelloWorld, icon: 'search'},\n // {title: '朋友', label: '朋友', api: HomeIndex, icon: 'friends-o'},\n // {title: '设置', label: '设置', api: HomeIndex, icon: 'setting-o'},\n ],\n }\n },\n computed: {\n activePage() {\n return this.pages[this.activeTabIndex] || {};\n },\n version() {\n return config.version;\n }\n }\n }\n</script>\n\n<style scoped>\n\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/HomePage.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.activePage.label,\"fixed\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"is-relation\"},[_c(_vm.activePage.api,{tag:\"component\"}),_vm._v(\" \"),_c('p',{staticClass:\"text-align-center is-absolute\",staticStyle:{\"color\":\"#efefef\",\"width\":\"100%\"}},[_vm._v(_vm._s(_vm.version))])],1),_vm._v(\" \"),_c('van-tabbar',{model:{value:(_vm.activeTabIndex),callback:function ($$v) {_vm.activeTabIndex=$$v},expression:\"activeTabIndex\"}},_vm._l((_vm.pages),function(page,i){return _c('van-tabbar-item',{key:i,attrs:{\"icon\":page.icon}},[_vm._v(_vm._s(page.label))])}),1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5c9e76e7\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/HomePage.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-5c9e76e7\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HomePage.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomePage.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomePage.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5c9e76e7\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./HomePage.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-5c9e76e7\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/HomePage.vue\n// module id = null\n// module chunks = ","<template>\n <div class=\"exam-root\" v-finger:swipe=\"swipe\">\n <van-nav-bar\n :title=\"examInfo.title\"\n fixed\n left-arrow\n @click-left=\"$router.back()\"\n ></van-nav-bar>\n <div class=\"ac-qn-backdrop\" v-show=\"showAcButtons\" @click.stop=\"showAcButtons = false\">\n <div class=\"exam-p-around-small ac-qn\" @click.stop>\n <van-row>\n <van-col span=\"4\" v-for=\"(question,i) in questionsInfo\" :key=\"i\">\n <div class=\"exam-circle exam-done\" @click=\"turnTo(i)\"\n :class=\"{'exam-right':question.answer.isPass&&(isShowResult||(question.answer.isChecked&&isPractice)),'exam-error':question.answer.isMistake&&(isShowResult||(question.answer.isChecked&&isPractice)),'exam-current': questionNum === i}\">\n {{ i + 1 }}\n </div>\n </van-col>\n </van-row>\n </div>\n </div>\n <div class=\"question-box\" @click.stop=\"showAcButtons = false\"\n :style=\"`width: ${totalNum*100}%;transform:translate(${-questionNum*100/totalNum}%,0)`\">\n <div class=\"question-item\" v-for=\"(question,i) in questionsInfo\" :key=\"question.hashCode\">\n <van-panel :title=\"getQuestionTitle(question)\" :desc=\"getQuestionDesc(question)\">\n <div v-if=\"question.isMulti\">\n <van-checkbox-group v-model=\"question.answer.multi.apis\">\n <van-cell-group>\n <van-cell v-for=\"(option, oi) in question.answerOptions\"\n clickable @click=\"toggleAnswer(i, option.api)\"\n :key=\"oi\">\n <template slot=\"title\">\n <span\n :class=\"{'right-answer':option.isRight&&isShowResult||(option.isRight&&question.answer.isChecked&&isPractice),'error-answer':!option.isRight&&isShowResult||(!option.isRight&&question.answer.isAnswered&&isPractice),'custom-title':true}\">{{\n letterIndex[oi] + '. ' + option.describe\n }}</span>\n </template>\n <van-checkbox slot=\"right-icon\" :name=\"option.api\"\n :checked-color=\"getOptionColor(question,option)\"></van-checkbox>\n </van-cell>\n </van-cell-group>\n </van-checkbox-group>\n </div>\n <div v-if=\"!question.isMulti\">\n <van-radio-group v-model=\"question.answer.single.api\">\n <van-cell-group>\n <van-cell v-for=\"(option, oi) in question.answerOptions\"\n clickable @click=\"setAnswer(i, [option.api])\"\n :key=\"oi\">\n <template slot=\"title\">\n <span\n :class=\"{'right-answer':option.isRight&&isShowResult||(option.isRight&&question.answer.isChecked&&isPractice),'error-answer':!option.isRight&&isShowResult||(!option.isRight&&question.answer.isAnswered&&isPractice),'custom-title':true}\">{{\n letterIndex[oi] + '. ' + option.describe\n }}</span>\n </template>\n <van-radio slot=\"right-icon\" :name=\"option.api\"\n :checked-color=\"getOptionColor(question,option)\"></van-radio>\n </van-cell>\n </van-cell-group>\n </van-radio-group>\n </div>\n </van-panel>\n </div>\n </div>\n <div class=\"text-align-center ac-buttons\">\n <van-button size=\"small\" v-if=\"questionNum>0\" @click=\"turnTo(questionNum-1)\">上一题</van-button>\n <van-button size=\"small\" type=\"info\" v-if=\"questionNum<totalNum-1\" @click=\"turnTo(questionNum+1)\">下一题\n </van-button>\n <van-button size=\"small\" type=\"warning\" v-if=\"isPractice&&!questionsInfo[questionNum].answer.isChecked\"\n @click=\"checkResult(questionNum)\">检查该题答案\n </van-button>\n <van-button size=\"small\" type=\"primary\" v-if=\"!hasSubmit\" @click=\"confirmSubmit\">提交\n </van-button>\n </div>\n\n </div>\n</template>\n\n<script>\nimport Vue from 'vue';\nimport {NavBar} from 'vant';\nimport {Panel} from 'vant';\nimport {Button} from 'vant';\nimport {Cell, CellGroup} from 'vant';\nimport {RadioGroup, Radio} from 'vant';\nimport {Checkbox, CheckboxGroup} from 'vant';\nimport {Dialog} from 'vant';\nimport {Row, Col} from 'vant';\nimport utils from '../../utils';\nimport {historyRecordDao, bankDao} from '../../dao'\n\nVue.use(Row).use(Col);\n// 全局注册\nVue.use(Dialog);\nVue.use(Checkbox).use(CheckboxGroup);\nVue.use(RadioGroup);\nVue.use(Radio);\nVue.use(Cell).use(CellGroup);\n\nconst defaultQuestionInfo = {\n required: true,\n score: 1,\n usingScore: false,\n type: 'option', // text, number\n describe: 'Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?',\n answerOptions: [\n {api: 'A', describe: 'Yes', isRight: true},\n {api: 'B', describe: 'No'}\n ]\n};\n\nconst defaultExamInfo = {\n title: '试题测试',\n questions: [defaultQuestionInfo]\n};\n\nVue.use(NavBar).use(Panel).use(Button);\n\nexport default {\n name: \"DoExamPage\",\n data() {\n return {\n answers: [],\n questionNum: 0,\n isShowResult: false,\n letterIndex: [...'ABCDEFGHIJKLMNOPQRSTUVWXYZ'],\n examInfo: {},\n hasSubmit: false,\n examHashCode: 0,\n historyExams: [],\n showAcButtons: false\n }\n },\n computed: {\n totalNum() {\n return this.questions.length;\n },\n questions() {\n return (this.examInfo.questions || []).filter(\n q => this.isReviewError ? this.historyErrorHashCodes.includes(q.hashCode) : true\n ).map((q, i) => ({...q, active: i === this.questionNum}));\n },\n questionsInfo() {\n return this.questions.map(\n (q, i) => {\n if (!this.answers[i]) {\n this.answers[i] = {results: [{}], single: {}, multi: {apis: []}}\n }\n return {\n ...q,\n answer: this.answers[i],\n orderNum: i + 1,\n isMulti: q.answerOptions.filter(opt => opt.isRight).length > 1\n }\n }\n )\n },\n historyErrorHashCodes() {\n return this.historyExams.filter(exam => exam.errorTimes > 0).map(exam => exam.hashCode);\n }\n },\n methods: {\n getQuestionTitle(question) {\n return [`(${this.questionNum + 1}/${this.totalNum})`, question.describe].join(' ');\n },\n getQuestionDesc(question) {\n let result = '';\n if (!question.required) {\n result += '(可选)'\n }\n if (question.type === 'option') {\n if (question.isMulti) {\n result += '多选题'\n } else {\n result += '单选题'\n }\n }\n let errorExam = this.historyExams.find(exam => exam.hashCode === question.hashCode);\n if (errorExam) {\n if (this.isReviewError) {\n if (errorExam.errorTimes) {\n result += ` (做错次数: ${errorExam.errorTimes})`;\n }\n }\n const totalTimes = errorExam.errorTimes + errorExam.rightTimes;\n if (totalTimes > 0) {\n result += `(历史正确率:${(errorExam.rightTimes / totalTimes * 100).toFixed(0)}%)`;\n }\n }\n return result;\n },\n /**\n * @param i\n * @param api {Array}\n */\n setAnswer(i, api) {\n this.answers = [...this.answers].map((answer, ai) => {\n if (ai === i) {\n answer.results = api.map(a => ({api: a}));\n answer.single.api = api[0];\n answer.multi.apis = api;\n }\n return answer;\n });\n },\n toggleAnswer(i, api) {\n let apis = this.answers[i].multi.apis;\n if (apis.includes(api)) {\n apis = apis.filter(a => a !== api);\n } else {\n apis.push(api);\n apis = [...apis];\n }\n this.setAnswer(i, apis);\n },\n checkResult(i) {\n this.answers = [...this.answers].map((answer, ai) => {\n if (i !== ai && i != null) {\n return answer;\n }\n let question = this.questions[ai];\n let rightAnswers = question.answerOptions.filter(option => option.isRight).map(option => option.api);\n answer.results.forEach(res => {\n res.isMistake = !rightAnswers.includes(res.api);\n });\n answer.isAnswered = answer.results.filter(res => res.api).length > 0;\n if (!answer.isChecked && answer.isAnswered) {\n answer.isMistake = answer.results.length !== rightAnswers.length || !!answer.results.find(res => res.isMistake);\n answer.isPass = answer.isAnswered && !answer.isMistake;\n answer.isChecked = true;\n }\n return answer;\n })\n },\n turnTo(i) {\n this.questionNum = i;\n },\n confirmSubmit() {\n Dialog.confirm({\n title: '提交答案',\n message: '确认提交?'\n }).then(() => {\n this.submit();\n }).catch(e => {\n console.log(e);\n });\n },\n submit() {\n this.checkResult();\n let answeredNum = this.questionsInfo.filter(q => q.answer.isAnswered).length;\n if (answeredNum < this.totalNum && this.requireAllDone) {\n Dialog.alert({message: '题目还没有答完:' + `${answeredNum}/${this.totalNum}`});\n return;\n }\n let rightNum = this.questionsInfo.filter(q => q.answer.isPass).length;\n let rightRate = (rightNum / this.totalNum) * 100 + '%';\n\n // 录入错误信息\n let checkedQuestion = this.questionsInfo.filter(q => q.answer.isChecked);\n checkedQuestion.forEach(question => {\n historyRecordDao.queryByHashCode(question.hashCode).then(\n codeInfo => {\n if (!codeInfo) {\n codeInfo = {relatedQuestion: question.hashCode, errorTimes: 0};\n }\n if (question.answer.isPass) {\n codeInfo.rightTimes++;\n } else {\n codeInfo.errorTimes++;\n }\n historyRecordDao.upsert(codeInfo)\n .then(() => {\n console.log('做题信息已保存');\n });\n }\n );\n });\n\n // 显示答题结果\n this.isShowResult = true;\n Dialog.alert({message: '答题结束,成绩如下:' + `正确:${rightNum}(总共:${this.totalNum})(正确率:${rightRate})`});\n this.hasSubmit = true;\n },\n adaptExamConfig() {\n let examInfo = {...defaultExamInfo, ...this.examConfig};\n examInfo.questions = examInfo.questions.map(q => ({\n ...defaultQuestionInfo, ...q, hashCode: q.hashCode,\n answerOptions: !q.answerOptions ? [] : q.answerOptions.map(a => ({\n ...a,\n api: utils.getHashCode(a) + ''\n }))\n })).filter(q => {\n if (!q.describe || q.answerOptions.length === 0) {\n console.log('错误的题目(无描述或无答案).', q);\n return false;\n }\n // 去掉无正确答案的问题\n const checkNoAnswer = utils.groupArray(q.answerOptions, 'isRight');\n if (checkNoAnswer.length === 1 && !checkNoAnswer[0][0].isRight) {\n console.log('错误的题目(无正确答案).', q);\n return false;\n }\n // 去掉问题中重复的答案\n const checkDuplicate = utils.groupArray(q.answerOptions, 'describe');\n const resultAnswers = checkDuplicate.map(checks => {\n if (checks.length > 1) {\n const result = {...checks[0]};\n if (utils.groupArray(checks, 'isRight').length !== checks.length) {\n result.invalid = true;\n }\n return result;\n }\n return checks[0];\n });\n // 去掉答案中有重复描述且对错不一的问题\n if (resultAnswers.find(r => r.invalid)) {\n console.log('错误的题目(答案中有重复描述且对错不一).', q);\n return false;\n }\n q.answerOptions = utils.randomSort(resultAnswers);\n return true;\n });\n examInfo.questions = utils.randomSort(examInfo.questions);\n\n this.examInfo = examInfo;\n this.examHashCode = this.examConfig.hashCode;\n this.loadHistoryExamInfo();\n },\n getOptionColor(question, option) {\n if (this.isShowResult || (this.isPractice && question.answer.isChecked)) {\n return question.answer.results.map(res => res.api).includes(option.api) && option.isRight ? '#44af11' : '#cd0000'\n }\n return '#1989fa';\n },\n loadHistoryExamInfo() {\n historyRecordDao.queryMany(this.examConfig.questions.map(q => q.hashCode))\n .then(records => {\n // console.log(records.map(r => r.relatedQuestion));\n this.historyExams = records.map(r => ({...r, hashCode: r.relatedQuestion}));\n // console.log(this.historyExams);\n });\n // const errorMapKey = 'errorMap_' + this.examHashCode;\n // let errorMap = utils.storage.getItem(errorMapKey);\n // if (errorMap) {\n // this.historyExams = Object.entries(errorMap).map(([key, value]) => ({hashCode: key, ...value}));\n // }\n },\n swipe: function (evt) {\n switch (evt.direction) {\n case 'Left':\n if (this.questionNum < this.totalNum - 1) {\n this.turnTo(this.questionNum + 1);\n }\n break;\n case 'Right':\n if (this.questionNum > 0) {\n this.turnTo(this.questionNum - 1);\n }\n break;\n case 'Up':\n this.showAcButtons = false\n break;\n case 'Down':\n this.showAcButtons = true\n break\n default:\n }\n }\n },\n props: {\n examConfig: {\n type: Object,\n default() {\n return defaultExamInfo;\n }\n },\n isReviewError: {\n type: Boolean,\n default: false\n },\n isNew: {\n type: Boolean,\n default: false\n },\n requireAllDone: {\n type: Boolean,\n default: false\n },\n isPractice: {\n type: Boolean,\n default: true\n }\n },\n watch: {\n examConfig() {\n this.adaptExamConfig();\n }\n },\n mounted() {\n this.adaptExamConfig();\n console.log('开始答题');\n try {\n plus.device.setWakelock(true);\n console.log('打开屏幕常亮');\n } catch (e) {\n // ignore\n }\n },\n destroyed() {\n console.log('结束答题');\n try {\n plus.device.setWakelock(false);\n console.log('关闭屏幕常亮');\n } catch (e) {\n // ignore\n }\n }\n}\n</script>\n\n<style scoped>\n.exam-root {\n overflow-x: hidden;\n top: 0;\n bottom: 0\n}\n\nspan.error-answer {\n color: #cd0000;\n}\n\nspan.right-answer {\n color: #44af11;\n}\n\nspan.custom-title {\n word-break: break-word;\n}\n\n.exam-circle {\n height: 2rem;\n width: 2rem;\n border: 1px solid #1989fa;\n border-radius: 50%;\n line-height: 2rem;\n text-align: center;\n color: #1989fa;\n cursor: pointer;\n margin-bottom: .5rem;\n}\n\n.exam-circle.exam-error {\n color: #cd0000;\n border-color: #cd0000;\n}\n\n.exam-circle.exam-right {\n color: #44af11;\n border-color: #44af11;\n}\n\n.exam-circle.exam-current {\n background-color: #1989fa;\n color: white;\n}\n\n.exam-circle.exam-error.exam-current {\n background-color: #cd0000;\n color: white;\n}\n\n.exam-circle.exam-right.exam-current {\n background-color: #44af11;\n color: white;\n}\n\n.question-box {\n position: relative;\n width: 100%;\n display: flex;\n transition: transform .35s;\n padding-bottom: 70px;\n padding-top: 46px;\n}\n\n.question-item {\n width: 100%;\n}\n\n.question-enter, .question-leave-to {\n opacity: 0;\n}\n\n.ac-buttons {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 20px;\n box-sizing: border-box;\n background: #fff;\n box-shadow: 0 -1px 5px 0 rgba(0, 0, 0, .1);\n}\n\n.ac-qn {\n z-index: 100;\n background: #fff;\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .1);\n}\n\n.ac-qn-backdrop{\n position: fixed;\n top: 46px;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, .5);\n z-index: 1;\n}\n\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/exam/DoExamPage.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"finger\",rawName:\"v-finger:swipe\",value:(_vm.swipe),expression:\"swipe\",arg:\"swipe\"}],staticClass:\"exam-root\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.examInfo.title,\"fixed\":\"\",\"left-arrow\":\"\"},on:{\"click-left\":function($event){return _vm.$router.back()}}}),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showAcButtons),expression:\"showAcButtons\"}],staticClass:\"ac-qn-backdrop\",on:{\"click\":function($event){$event.stopPropagation();_vm.showAcButtons = false}}},[_c('div',{staticClass:\"exam-p-around-small ac-qn\",on:{\"click\":function($event){$event.stopPropagation();}}},[_c('van-row',_vm._l((_vm.questionsInfo),function(question,i){return _c('van-col',{key:i,attrs:{\"span\":\"4\"}},[_c('div',{staticClass:\"exam-circle exam-done\",class:{'exam-right':question.answer.isPass&&(_vm.isShowResult||(question.answer.isChecked&&_vm.isPractice)),'exam-error':question.answer.isMistake&&(_vm.isShowResult||(question.answer.isChecked&&_vm.isPractice)),'exam-current': _vm.questionNum === i},on:{\"click\":function($event){return _vm.turnTo(i)}}},[_vm._v(\"\\n \"+_vm._s(i + 1)+\"\\n \")])])}),1)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"question-box\",style:((\"width: \" + (_vm.totalNum*100) + \"%;transform:translate(\" + (-_vm.questionNum*100/_vm.totalNum) + \"%,0)\")),on:{\"click\":function($event){$event.stopPropagation();_vm.showAcButtons = false}}},_vm._l((_vm.questionsInfo),function(question,i){return _c('div',{key:question.hashCode,staticClass:\"question-item\"},[_c('van-panel',{attrs:{\"title\":_vm.getQuestionTitle(question),\"desc\":_vm.getQuestionDesc(question)}},[(question.isMulti)?_c('div',[_c('van-checkbox-group',{model:{value:(question.answer.multi.apis),callback:function ($$v) {_vm.$set(question.answer.multi, \"apis\", $$v)},expression:\"question.answer.multi.apis\"}},[_c('van-cell-group',_vm._l((question.answerOptions),function(option,oi){return _c('van-cell',{key:oi,attrs:{\"clickable\":\"\"},on:{\"click\":function($event){return _vm.toggleAnswer(i, option.api)}}},[_c('template',{slot:\"title\"},[_c('span',{class:{'right-answer':option.isRight&&_vm.isShowResult||(option.isRight&&question.answer.isChecked&&_vm.isPractice),'error-answer':!option.isRight&&_vm.isShowResult||(!option.isRight&&question.answer.isAnswered&&_vm.isPractice),'custom-title':true}},[_vm._v(_vm._s(_vm.letterIndex[oi] + '. ' + option.describe))])]),_vm._v(\" \"),_c('van-checkbox',{attrs:{\"slot\":\"right-icon\",\"name\":option.api,\"checked-color\":_vm.getOptionColor(question,option)},slot:\"right-icon\"})],2)}),1)],1)],1):_vm._e(),_vm._v(\" \"),(!question.isMulti)?_c('div',[_c('van-radio-group',{model:{value:(question.answer.single.api),callback:function ($$v) {_vm.$set(question.answer.single, \"api\", $$v)},expression:\"question.answer.single.api\"}},[_c('van-cell-group',_vm._l((question.answerOptions),function(option,oi){return _c('van-cell',{key:oi,attrs:{\"clickable\":\"\"},on:{\"click\":function($event){return _vm.setAnswer(i, [option.api])}}},[_c('template',{slot:\"title\"},[_c('span',{class:{'right-answer':option.isRight&&_vm.isShowResult||(option.isRight&&question.answer.isChecked&&_vm.isPractice),'error-answer':!option.isRight&&_vm.isShowResult||(!option.isRight&&question.answer.isAnswered&&_vm.isPractice),'custom-title':true}},[_vm._v(_vm._s(_vm.letterIndex[oi] + '. ' + option.describe))])]),_vm._v(\" \"),_c('van-radio',{attrs:{\"slot\":\"right-icon\",\"name\":option.api,\"checked-color\":_vm.getOptionColor(question,option)},slot:\"right-icon\"})],2)}),1)],1)],1):_vm._e()])],1)}),0),_vm._v(\" \"),_c('div',{staticClass:\"text-align-center ac-buttons\"},[(_vm.questionNum>0)?_c('van-button',{attrs:{\"size\":\"small\"},on:{\"click\":function($event){return _vm.turnTo(_vm.questionNum-1)}}},[_vm._v(\"上一题\")]):_vm._e(),_vm._v(\" \"),(_vm.questionNum<_vm.totalNum-1)?_c('van-button',{attrs:{\"size\":\"small\",\"type\":\"info\"},on:{\"click\":function($event){return _vm.turnTo(_vm.questionNum+1)}}},[_vm._v(\"下一题\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isPractice&&!_vm.questionsInfo[_vm.questionNum].answer.isChecked)?_c('van-button',{attrs:{\"size\":\"small\",\"type\":\"warning\"},on:{\"click\":function($event){return _vm.checkResult(_vm.questionNum)}}},[_vm._v(\"检查该题答案\\n \")]):_vm._e(),_vm._v(\" \"),(!_vm.hasSubmit)?_c('van-button',{attrs:{\"size\":\"small\",\"type\":\"primary\"},on:{\"click\":_vm.confirmSubmit}},[_vm._v(\"提交\\n \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-38568fde\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/exam/DoExamPage.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-38568fde\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./DoExamPage.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./DoExamPage.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./DoExamPage.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-38568fde\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./DoExamPage.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-38568fde\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/exam/DoExamPage.vue\n// module id = null\n// module chunks = ","import Vue from 'vue'\nimport Router from 'vue-router'\nimport HomePage from \"@/components/HomePage\";\nimport DoExamPage from \"@/components/exam/DoExamPage\";\n\nVue.use(Router);\n\nexport default new Router({\n routes: [\n {\n path: '/',\n name: 'HomePage',\n component: HomePage\n },\n {\n path: '/exam',\n name: 'DoExamPage',\n component: DoExamPage,\n props: true\n }\n ]\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","import Vue from 'vue'\nimport axios from 'axios'\nimport jsonp from 'jsonp'\nimport Utils from '../utils'\nimport AlloyFinger from 'alloyfinger'\nimport AlloyFingerPlugin from 'alloyfinger/vue/alloy_finger_vue'\n\nVue.use(AlloyFingerPlugin,{\n AlloyFinger\n});\n\nVue.prototype.$http = axios;\nVue.prototype.$http.jsonp = jsonp;\n\nif (!Object.fromEntries) {\n Object.fromEntries = Utils.fromEntries;\n}\n\nif (!Array.prototype.flat) {\n try {\n Object.defineProperty(Array.prototype, 'flat', {\n value: function (deep) {\n return Utils.flat(this, deep);\n },\n enumerable: false\n })\n } catch (e) {\n Array.prototype.flat = function (deep) {\n return Utils.flat(this, deep);\n }\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/index.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport router from './router'\nimport './assets/common.css';\nimport './plugins';\n\nVue.config.productionTip = false;\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n components: { App },\n template: '<App/>'\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""}