@palerock/exam-qa 1.0.6-patch2 → 1.0.6-patch4

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){},"3wLQ":function(t,e){},"4rJS":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 i=n("7+uW"),r={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,i=e.path.split("/").length;"/"===t.path?this.direction="slide-right":"/"===e.path?this.direction="slide-left":this.direction=n<i?"slide-right":"slide-left"}}},r,!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),I=n("Tg6C"),A=n.n(I),D=n("GiJQ"),R=n.n(D),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),Q=n("0VlM"),j=n.n(Q),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("nOaS"),n("pIDD")),X=n("IG2y"),tt=n.n(X),et=n("ckt0"),nt=n.n(et);function it(t,e){var n=x()(t);if(b.a){var i=b()(t);e&&(i=i.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,i)}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(nt()(t))||t instanceof Date?"":this.flat(q()(t).map(function(t){var i=C()(t,2),r=i[0],o=i[1];return[r,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(nt()(t))||t instanceof Date?[null!=t?t.toString():""]:this.flat(x()(t).map(function(i){return n.getMessage(t[i],e--)})).filter(function(t){return null!=t&&""!==t})},getStrHashCode:function(t){var e,n,i=0;if(0===t.length)return i;for(e=0,n=t.length;e<n;e++)i=(i<<5)-i+t.charCodeAt(e),i|=0;return i+""},flat:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/0,n=[],i=!1;return t.forEach(function(t){tt()(t)?(i=!0,n.push.apply(n,P()(t))):n.push(t)}),i&&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,i=t.map(function(t){return{hashCode:n.getHashCode(t),item:t}});e instanceof Array||(e=[e]);var r={};return i.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?it(n,!0).forEach(function(e){j()(t,e,n[e])}):d.a?p()(t,d()(n)):it(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}({},t,{checkedHashCode:n.getHashCode(t.checkItem)})}).forEach(function(t){var e=r[t.checkedHashCode];e||(e=[]),e.push(i.find(function(e){return e.hashCode===t.hashCode}).item),r[t.checkedHashCode]=e}),S()(r)},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})}},ot=n("Kr0U"),st=n.n(ot),at=n("EEoX"),ut=n.n(at),ct=n("5WHX"),lt=n.n(ct),ht=n("mnGM"),ft=n.n(ht),pt=n("6DPD"),mt=n.n(pt),dt=n("OdJd"),vt=n.n(dt),gt=new(n("YwQ6").a)("_qa_db");gt.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"}),gt.version(2).stores({bank:"hashCode, title, *questions, category, createDate, modifyDate"});var yt=gt.config,bt=gt.question,wt=gt.bank,xt=gt.historyRecord;function kt(t,e){var n=x()(t);if(b.a){var i=b()(t);e&&(i=i.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,i)}return n}function Ct(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?kt(n,!0).forEach(function(e){j()(t,e,n[e])}):d.a?p()(t,d()(n)):kt(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}var _t=function(){function t(e,n){mt()(this,t),this.db=e,this.defaultEntry=n||{},this.db.hook("creating",function(t,e){e.createDate=ft()(),e.modifyDate=ft()()}),this.db.hook("updating",function(t,e,n){return t.modifiedDate=ft()(),n.createdDate||(t.createdDate=ft()()),console.log(Ct({},t)),t})}return vt()(t,[{key:"upsert",value:function(){var t=R()(A.a.mark(function t(e){var n=this;return A.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 Ct({},n.defaultEntry,{},t)})));case 2:return t.abrupt("return",this.db.put(Ct({},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=R()(A.a.mark(function t(e){return A.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}(),qt=function(t){function e(){return mt()(this,e),st()(this,ut()(e).call(this,yt,{value:null}))}return lt()(e,t),e}(_t),Et=function(t){function e(){return mt()(this,e),st()(this,ut()(e).call(this,bt,{describe:"",type:"picklist"}))}return lt()(e,t),e}(_t),St=function(t){function e(){return mt()(this,e),st()(this,ut()(e).call(this,wt,{title:"",questions:[]}))}return lt()(e,t),e}(_t),It=function(t){function e(){return mt()(this,e),st()(this,ut()(e).call(this,xt,{rightTimes:0,errorTimes:0,maxTime:0,minTime:0,totalTime:0}))}return lt()(e,t),vt()(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}(_t),At=new qt,Dt=new Et,Rt=new St,Ot=new It,Nt="1.0.6-patch1";function Tt(t,e){var n=x()(t);if(b.a){var i=b()(t);e&&(i=i.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,i)}return n}function Ht(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Tt(n,!0).forEach(function(e){j()(t,e,n[e])}):d.a?p()(t,d()(n)):Tt(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}i.a.use(K.a),i.a.use(Y.a),i.a.use(J.a).use(Z.a).use(G.a),i.a.use(V.a),i.a.use(U.a),i.a.use($.a).use(z.a),i.a.use(F.a).use(W.a);var Lt="https://unpkg.com/@palerock/exam-qa@latest/lib-json",Pt={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 Ht({},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 Dt.query("hashCode").equals(t).first()}))))}).then(function(t){var i=H()(t),r=i[0],o=i.slice(1);r.questions=o,r?e.$router.push({name:"DoExamPage",params:{examConfig:r,isReviewError:n}}):Y.a.alert({message:"该题库已失效!"})})},clearHistory:function(t){var e=this;Rt.queryByHashCode(t).then(function(t){return t=t||{},Ot.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 Ht({},t.data,{hashCode:rt.getHashCode(t.data)})})}).catch(function(e){console.log(e),alert("获取失败,请尝试自行录入"),t.isShowImporter=!1})},fetchOnlineLib:function(){var t=R()(A.a.mark(function t(){var e,n,i=this;return A.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.$http.get(Lt+"/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 i.$http.get(Lt+"/"+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=R()(A.a.mark(function t(){var e,n=this;return A.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=R()(A.a.mark(function t(e){return A.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(rt.getMessage(t.t0)));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=R()(A.a.mark(function t(e){var n;return A.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=Ht({},e,{questions:e.questions.map(function(t){return t.hashCode})})).hashCode=rt.getHashCode(n),t.next=7,Dt.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=R()(A.a.mark(function t(){var e,n=this,i=arguments;return A.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=i.length>0&&void 0!==i[0]?i[0]:"default",this.currentCategory=e,this.examList=[],t.next=5,Rt.query("hashCode").notEqual("").toArray().then(function(t){var e=t.map(function(t){return Ot.query("relatedQuestion").anyOf(t.questions).sortBy("createDate").then(function(e){var n=Object.fromEntries(e.map(function(t){return[t.relatedQuestion,Ht({},t,{times:t.errorTimes})]})),i=!!S()(n).find(function(t){return t.times>0});return Ht({},t,{errorMap:n,hasHistoryError:i})})});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 5:case"end":return t.stop()}},t,this)}));return function(){return t.apply(this,arguments)}}(),initExamList:function(){var t=R()(A.a.mark(function t(){var e=this;return A.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 Ht({},t,{bank:rt.storage.getItem(t.hashCode)})}).map(function(t){return Ht({},t,{questionSet:t.bank.questions,bank:Ht({},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],i=e[1],r=i.times;return{relatedQuestion:n,rightTimes:i.rightTimes,errorTimes:r}})})});Dt.upsert(rt.flat(t.map(function(t){return t.questionSet.map(function(t){return Ht({},t,{hashCode:rt.getHashCode(t)})})}),2)).then(function(){return Rt.upsert(t.map(function(t){return t.bank}))}).then(function(){return Ot.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()}},Mt={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"}},[t.onlineLibs&&0!==t.onlineLibs.length?t._e():n("div",{staticStyle:{"text-align":"center",padding:"10px"}},[n("van-loading",{attrs:{type:"spinner"}})],1),t._v(" "),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,i){return n("van-cell",{key:i,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 Bt=n("VU/8")(Pt,Mt,!1,function(t){n("l6x4")},"data-v-5f2e3e18",null).exports;i.a.use(V.a);var Qt={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"}}},Qt,!1,null,null,null).exports;i.a.use(a.a).use(u.a).use(c.a);var jt={name:"HomePage",data:function(){return{activeTabIndex:0,pages:[{title:"主页",label:"Home",api:Bt,icon:"home-o"}]}},computed:{activePage:function(){return this.pages[this.activeTabIndex]||{}},version:function(){return Nt}}},Ft={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,i){return n("van-tabbar-item",{key:i,attrs:{icon:e.icon}},[t._v(t._s(e.label))])}),1)],1)},staticRenderFns:[]};var Wt=n("VU/8")(jt,Ft,!1,function(t){n("zW/T")},"data-v-5c9e76e7",null).exports,$t=(n("I4j4"),n("7fQT")),zt=(n("le1z"),n("hZxG")),Ut=(n("HZGa"),n("pykS")),Vt=(n("ZuV/"),n("37Xn")),Jt=(n("JRZP"),n("LK01"));function Zt(t,e){var n=x()(t);if(b.a){var i=b()(t);e&&(i=i.filter(function(e){return g()(t,e).enumerable})),n.push.apply(n,i)}return n}function Gt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Zt(n,!0).forEach(function(e){j()(t,e,n[e])}):d.a?p()(t,d()(n)):Zt(n).forEach(function(e){h()(t,e,g()(n,e))})}return t}i.a.use(Vt.a).use(Jt.a),i.a.use(Y.a),i.a.use(F.a).use(W.a),i.a.use(Ut.a),i.a.use(zt.a),i.a.use(Z.a).use(G.a);var Yt={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"}]},Kt={title:"试题测试",questions:[Yt]};i.a.use(a.a).use($t.a).use(V.a);var Xt={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 Gt({},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:[]}}),Gt({},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 i=n.errorTimes+n.rightTimes;i>0&&(e+="(历史正确率:".concat((n.rightTimes/i*100).toFixed(0),"%)"))}return e},setAnswer:function(t,e){this.answers=P()(this.answers).map(function(n,i){return i===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,i){if(t!==i&&null!=t)return n;var r=e.questions[i].answerOptions.filter(function(t){return t.isRight}).map(function(t){return t.api});return n.results.forEach(function(t){t.isMistake=!r.includes(t.api)}),n.isAnswered=n.results.filter(function(t){return t.api}).length>0,!n.isChecked&&n.isAnswered&&(n.isMistake=n.results.length!==r.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){Ot.queryByHashCode(t.hashCode).then(function(e){e||(e={relatedQuestion:t.hashCode,errorTimes:0}),t.answer.isPass?e.rightTimes++:e.errorTimes++,Ot.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=Gt({},Kt,{},this.examConfig);t.questions=t.questions.map(function(t){return Gt({},Yt,{},t,{hashCode:t.hashCode,answerOptions:t.answerOptions?t.answerOptions.map(function(t){return Gt({},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=Gt({},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;Ot.queryMany(this.examConfig.questions.map(function(t){return t.hashCode})).then(function(e){t.historyExams=e.map(function(t){return Gt({},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 Kt}},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){}}},te={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":"","right-text":"目录"},on:{"click-left":function(e){return t.$router.back()},"click-right":function(e){t.showAcButtons=!t.showAcButtons}}}),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,i){return n("van-col",{key:i,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===i},on:{click:function(e){return t.turnTo(i)}}},[t._v("\n "+t._s(i+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:{dblclick:function(e){e.stopPropagation(),t.showAcButtons=!0}}},t._l(t.questionsInfo,function(e,i){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",{on:{click:function(t){t.stopPropagation()},dblclick:function(t){t.stopPropagation()}},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(r,o){return n("van-cell",{key:o,attrs:{clickable:""},on:{click:function(e){return t.toggleAnswer(i,r.api)}}},[n("template",{slot:"title"},[n("span",{class:{"right-answer":r.isRight&&t.isShowResult||r.isRight&&e.answer.isChecked&&t.isPractice,"error-answer":!r.isRight&&t.isShowResult||!r.isRight&&e.answer.isAnswered&&t.isPractice,"custom-title":!0}},[t._v(t._s(t.letterIndex[o]+". "+r.describe))])]),t._v(" "),n("van-checkbox",{attrs:{slot:"right-icon",name:r.api,"checked-color":t.getOptionColor(e,r)},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(r,o){return n("van-cell",{key:o,attrs:{clickable:""},on:{click:function(e){return t.setAnswer(i,[r.api])}}},[n("template",{slot:"title"},[n("span",{class:{"right-answer":r.isRight&&t.isShowResult||r.isRight&&e.answer.isChecked&&t.isPractice,"error-answer":!r.isRight&&t.isShowResult||!r.isRight&&e.answer.isAnswered&&t.isPractice,"custom-title":!0}},[t._v(t._s(t.letterIndex[o]+". "+r.describe))])]),t._v(" "),n("van-radio",{attrs:{slot:"right-icon",name:r.api,"checked-color":t.getOptionColor(e,r)},slot:"right-icon"})],2)}),1)],1)],1)])],1)}),0),t._v(" "),t.questionsInfo[t.questionNum]?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):t._e()],1)},staticRenderFns:[]};var ee=n("VU/8")(Xt,te,!1,function(t){n("3wLQ")},"data-v-4b469db2",null).exports;i.a.use(s.a);var ne=new s.a({routes:[{path:"/",name:"HomePage",component:Wt},{path:"/exam",name:"DoExamPage",component:ee,props:!0}]}),ie=(n("ZsCP"),n("mtWM")),re=n.n(ie),oe=n("hU7x"),se=n.n(oe),ae=n("7oBh"),ue=n.n(ae),ce=n("vhKK"),le=n.n(ce);if(i.a.use(le.a,{AlloyFinger:ue.a}),i.a.prototype.$http=re.a,i.a.prototype.$http.jsonp=se.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)}}i.a.config.productionTip=!1,new i.a({el:"#app",router:ne,components:{App:o},template:"<App/>"})},RUOb:function(t,e){},ZsCP:function(t,e){},hW8u:function(t,e){},"hy4/":function(t,e){},juSK:function(t,e){},l6x4: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.53370ddfe5eba6a10565.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?ecde","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?3d1a","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","loading","dialog","cell","cell_group","es_button","popup","grid","grid_item","es_checkbox","checkbox_group","existsMap","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","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","_e","text-align","padding","oi","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","right-text","click-left","back","click-right","stopPropagation","span","class","exam-right","exam-error","exam-current","style","dblclick","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.53370ddfe5eba6a10565.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.6-patch1',\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 <div v-if=\"!onlineLibs || onlineLibs.length === 0\" style=\"text-align: center;padding: 10px\">\n <van-loading type=\"spinner\" />\n </div>\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';\nimport { Loading } from 'vant';\n\nVue.use(Loading);\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 = 'https://unpkg.com/@palerock/exam-qa@latest/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(`题库格式错误:${utils.getMessage(e)}`)\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 this.examList = []\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\"}},[(!_vm.onlineLibs || _vm.onlineLibs.length === 0)?_c('div',{staticStyle:{\"text-align\":\"center\",\"padding\":\"10px\"}},[_c('van-loading',{attrs:{\"type\":\"spinner\"}})],1):_vm._e(),_vm._v(\" \"),_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-5f2e3e18\",\"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-5f2e3e18\\\",\\\"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-5f2e3e18\\\",\\\"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-5f2e3e18\"\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 right-text=\"目录\"\n @click-left=\"$router.back()\"\n @click-right=\"showAcButtons = !showAcButtons\"\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\" @dblclick.stop=\"showAcButtons = true\"\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\" @click.stop @dblclick.stop>\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\" v-if=\"questionsInfo[questionNum]\">\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\":\"\",\"right-text\":\"目录\"},on:{\"click-left\":function($event){return _vm.$router.back()},\"click-right\":function($event){_vm.showAcButtons = !_vm.showAcButtons}}}),_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:{\"dblclick\":function($event){$event.stopPropagation();_vm.showAcButtons = true}}},_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',{on:{\"click\":function($event){$event.stopPropagation();},\"dblclick\":function($event){$event.stopPropagation();}},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(\" \"),(_vm.questionsInfo[_vm.questionNum])?_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):_vm._e()],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-4b469db2\",\"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-4b469db2\\\",\\\"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-4b469db2\\\",\\\"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-4b469db2\"\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":""}