| | |
| | | </view> |
| | | <view class="questions"> |
| | | <view class="title"> |
| | | <span>【{{currentQ.questionType == 1?'单选题':currentQ.questionType == 2?'多选题':'判断题'}}】</span> |
| | | <span>【{{currentQ.questionType == 1?'单选题':currentQ.questionType == 2?'多选题':currentQ.questionType == 3?'判断题':'简答题'}}】</span> |
| | | {{currentQ.title}} |
| | | </view> |
| | | <view class="content"> |
| | | <u-checkbox-group |
| | | v-if="currentQ.questionType==2" |
| | | v-if="(type == 1 || type == 2)&& currentQ.questionType==2" |
| | | v-model="currentB" |
| | | placement="column" |
| | | iconPlacement="right" |
| | | @change="checkboxChange" |
| | | :disabled="type==3?true:false" |
| | | class="myRadio" |
| | | > |
| | | <u-checkbox |
| | |
| | | > |
| | | </u-checkbox> |
| | | </u-checkbox-group> |
| | | <u-radio-group v-model="currentA" class="myRadio" iconPlacement="right" placement="column" @change="groupChange" v-if="currentQ.questionType==1||currentQ.questionType==3" :disabled="type==3?true:false"> |
| | | |
| | | <u-checkbox-group |
| | | v-if="type == 3 && currentQ.questionType==2" |
| | | v-model="currentB" |
| | | placement="column" |
| | | iconPlacement="right" |
| | | @change="checkboxChange" |
| | | disabled |
| | | class="myRadio" |
| | | > |
| | | <u-checkbox |
| | | :customStyle="{marginBottom: '15px'}" |
| | | v-for="(item, index) in currentQ.content.items" |
| | | :key="index" |
| | | :label="item.prefix +':'+ item.content" |
| | | :name="item.prefix" |
| | | :class="{'picked': currentQ.answer.includes(item.prefix),'wronged': currentB.includes(item.prefix) && !currentQ.answer.includes(item.prefix)}" |
| | | > |
| | | </u-checkbox> |
| | | </u-checkbox-group> |
| | | |
| | | <u-radio-group v-model="currentA" class="myRadio" iconPlacement="right" placement="column" @change="groupChange" v-if="(type == 1 || type == 2)&&(currentQ.questionType==1||currentQ.questionType==3)"> |
| | | <u-radio |
| | | :customStyle="{marginBottom: '15px'}" |
| | | v-for="(item, index) in currentQ.content.items" |
| | |
| | | </u-radio> |
| | | </u-radio-group> |
| | | |
| | | <u-button style="width: 80%;margin: 30px auto" |
| | | <u-radio-group v-model="currentA" class="myRadio" iconPlacement="right" placement="column" @change="groupChange" v-if="type == 3 && (currentQ.questionType==1||currentQ.questionType==3)" disabled> |
| | | <u-radio |
| | | :customStyle="{marginBottom: '15px'}" |
| | | v-for="(item, index) in currentQ.content.items" |
| | | :key="index" |
| | | shape="square" |
| | | :label="item.prefix +':'+ item.content" |
| | | :name="item.prefix" |
| | | @change="radioChange" |
| | | :class="{'picked': currentQ.answer == item.prefix, 'wronged': currentA == item.prefix && currentA != currentQ.answer}" |
| | | > |
| | | </u-radio> |
| | | </u-radio-group> |
| | | |
| | | <u--textarea v-model="currentA" v-if="(type == 1 || type == 2)&&(currentQ.questionType==4)" style="margin-bottom: 15px" :maxlength="-1" placeholder="请输入答案" autoHeight @focus="openAnswer"></u--textarea> |
| | | <u--textarea v-model="currentA" v-if="type == 3&&(currentQ.questionType==4)" :class="currentQ.answer == currentA?'pickedText':'wrongText'" style="margin-bottom: 15px" :maxlength="-1" placeholder="请输入答案" autoHeight disabled></u--textarea> |
| | | |
| | | <u-button style="width: 80%;margin: 5px auto 15px" |
| | | v-if="currentQ.questionType==2 && currentB.length>0 && type !== 3" |
| | | type="primary" shape="circle" text="确认答案" @click="confirmAnswer"></u-button> |
| | | type="primary" shape="circle" text="确认答案" @click="confirmAnswer(2)"></u-button> |
| | | <view class="answers" v-if="currentA !==''||currentB.length>0"> |
| | | <view>你的答案: |
| | | <span v-if="currentQ.questionType==2" :class="currentQ.answer == currentB.join(',')?'right':'wrong'">{{currentB.join(',')}}</span> |
| | |
| | | > |
| | | </u-empty> |
| | | </view> |
| | | <u-popup :show="showPanel" :round="40" mode="right" @close="close" @open="open"> |
| | | <u-popup :show="showPanel" :round="40" mode="bottom" @close="close" @open="open"> |
| | | <view class="panel"> |
| | | <view :class="item.passed==1?'right-a':item.passed==0?'wrong-a':''" v-for="(item,index) in idList" @click="toQuestion(item,index)"> |
| | | {{index + 1}} |
| | | </view> |
| | | </view> |
| | | </u-popup> |
| | | <u-popup :show="showInput" :round="40" mode="bottom" @close="closeInput" @open="openInput"> |
| | | <view class="panelTwo"> |
| | | <u--textarea v-model="currentA" :maxlength="-1" placeholder="请输入答案"></u--textarea> |
| | | <u-button shape="circle" type="primary" style="width: 80%;margin-top: 20px" text="确认答案" @click="confirmAnswer(1)"></u-button> |
| | | </view> |
| | | </u-popup> |
| | | </view> |
| | |
| | | currentA: '', |
| | | currentB: [], |
| | | type: '', |
| | | showPanel: false |
| | | showPanel: false, |
| | | showInput: false |
| | | } |
| | | }, |
| | | onReady(){ |
| | |
| | | if(res.code == 200){ |
| | | let list = res.data || [] |
| | | if(list.length>0){ |
| | | t.idList = list.sort((a, b) => a.id - b.id) |
| | | // t.idList = list.sort((a, b) => a.id - b.id) |
| | | this.idList = list |
| | | }else{ |
| | | t.idList = [] |
| | | uni.showToast({ |
| | |
| | | uni.$u.toast(res.message) |
| | | } |
| | | }, |
| | | |
| | | openAnswer(){ |
| | | const t = this |
| | | t.showInput = true |
| | | }, |
| | | async toQuestion(item,index){ |
| | | this.curTotalIndex = index |
| | | const curIdList = this.idList.slice(this.curTotalIndex,this.curTotalIndex + 20) |
| | | this.currentId = this.idList[this.curTotalIndex].id |
| | | await this.getQuestionsByIds(curIdList) |
| | | this.currentQ = this.questionList[0] |
| | | this.currentQ = this.questionList.find(i=>i.id == this.currentId) |
| | | this.showAnswer() |
| | | this.showPanel = false |
| | | }, |
| | |
| | | this.showPanel = false |
| | | // console.log('close'); |
| | | }, |
| | | openInput() { |
| | | // console.log('open'); |
| | | }, |
| | | closeInput(){ |
| | | this.showInput = false |
| | | }, |
| | | async getQuestionIds(id){ |
| | | const res = await getQuestionIdList({bankId: id}) |
| | | if(res.code == 200){ |
| | | let list = res.data || [] |
| | | if(list.length>0){ |
| | | this.idList = list.sort((a, b) => a.id - b.id) |
| | | // this.idList = list.sort((a, b) => a.id - b.id) |
| | | this.idList = list |
| | | this.curTotalIndex = this.bank.questionId ? this.idList.findIndex(i=>i.id == this.bank.questionId):0 |
| | | const curIdList = this.idList.slice(this.curTotalIndex,this.curTotalIndex + 20) |
| | | this.currentId = this.idList[this.curTotalIndex].id |
| | | await this.getQuestionsByIds(curIdList) |
| | | this.currentQ = this.questionList[0] |
| | | this.currentQ = this.questionList.find(i=>i.id == this.currentId) |
| | | this.showAnswer() |
| | | }else{ |
| | | this.idList = [] |
| | |
| | | if(res.code == 200){ |
| | | let list = res.data || [] |
| | | if(list.length>0){ |
| | | this.idList = list.sort((a, b) => a - b) |
| | | // this.idList = list.sort((a, b) => a - b) |
| | | this.idList = list |
| | | this.curTotalIndex = 0 |
| | | const curIdList = this.idList.slice(0,20) |
| | | this.currentId = this.idList[0].id |
| | | this.currentId = this.idList[0] |
| | | await this.getQuestionsByIds(curIdList) |
| | | this.currentQ = this.questionList[0] |
| | | this.currentQ = this.questionList.find(i=>i.id == this.currentId) |
| | | this.showAnswer() |
| | | }else{ |
| | | this.idList = [] |
| | |
| | | }, |
| | | groupChange(n) { |
| | | if(this.currentA !== ''){ |
| | | this.confirmAnswer() |
| | | this.confirmAnswer(1) |
| | | } |
| | | }, |
| | | radioChange(n) { |
| | | console.log('radioChange', n); |
| | | }, |
| | | |
| | | confirmAnswer(){ |
| | | confirmAnswer(type){ |
| | | if(type == 1 && this.currentA == ''){ |
| | | uni.$u.toast('答案为空,请先作答') |
| | | return |
| | | } |
| | | const data = { |
| | | answer: this.currentQ.questionType==2?this.currentB.join(','):this.currentA, |
| | | bankId: this.bank.id, |
| | |
| | | if(res.code == 200){ |
| | | this.currentQ.exExerciseAnswer.passed = res.data.passed |
| | | this.currentQ.exExerciseAnswer.answer = res.data.answer |
| | | if(type == 2){ |
| | | this.nextQ() |
| | | } |
| | | if(this.showInput == true){ |
| | | this.showInput = false |
| | | } |
| | | // uni.$u.toast('答案已提交') |
| | | }else{ |
| | | uni.$u.toast(res.message) |
| | |
| | | prevQ(){ |
| | | if(this.curTotalIndex - 1>=0){ |
| | | this.curTotalIndex-- |
| | | if(this.curTotalIndex == 0){ |
| | | this.getQuestionsByIds([this.idList[0]]).then(()=>{ |
| | | // this.currentQ = this.questionList[this.questionList.length-1] |
| | | this.$set(this, 'currentQ', this.questionList[this.questionList.length-1]) |
| | | this.showAnswer() |
| | | }) |
| | | }else{ |
| | | // if(this.curTotalIndex == 0){ |
| | | // this.getQuestionsByIds([this.idList[0]]).then(()=>{ |
| | | // this.currentQ = this.questionList[this.questionList.length-1] |
| | | // // this.$set(this, 'currentQ', this.questionList.find(i=>i.id == this.currentId)) |
| | | // this.showAnswer() |
| | | // }) |
| | | // }else{ |
| | | if(this.type == 3){ |
| | | this.currentId = this.idList[this.curTotalIndex] |
| | | }else{ |
| | |
| | | const curIdList = this.idList.slice(startIndex, this.curTotalIndex+1); |
| | | this.getQuestionsByIds(curIdList).then(()=>{ |
| | | // this.currentQ = this.questionList[this.questionList.length-1] |
| | | this.$set(this, 'currentQ', this.questionList[this.questionList.length-1]) |
| | | this.$set(this, 'currentQ', this.questionList.find(i=>i.id == this.currentId)) |
| | | this.showAnswer() |
| | | }) |
| | | } |
| | | } |
| | | // } |
| | | }else{ |
| | | uni.showToast({ |
| | | title: '已经是第一题了', |
| | |
| | | }else{ |
| | | const curIdList = this.idList.slice(this.curTotalIndex,this.curTotalIndex + 20) |
| | | this.getQuestionsByIds(curIdList).then(()=>{ |
| | | this.$set(this, 'currentQ', this.questionList[0]) |
| | | this.$set(this, 'currentQ', this.questionList.find(i=>i.id == this.currentId)) |
| | | // this.currentQ = this.questionList[0] |
| | | this.showAnswer() |
| | | }) |
| | |
| | | } |
| | | |
| | | .panel{ |
| | | height: 100vh; |
| | | width: 60vw; |
| | | height: 60vh; |
| | | background: #f2f2f2; |
| | | overflow-y: auto; |
| | | padding: 15px; |
| | |
| | | |
| | | &>view{ |
| | | padding: 5px; |
| | | min-width: calc(20% - 12px); |
| | | box-sizing: border-box; |
| | | min-width: 33px; |
| | | border-radius: 4px; |
| | | text-align: center; |
| | | background: rgba(41,121,255,0); |
| | |
| | | color: #333; |
| | | background: #f2f2f2; |
| | | transition: all 100ms cubic-bezier(0.175, 0.885, 0.32, 1.275); |
| | | box-shadow: 0px -6px 10px rgba(255, 255, 255, 1), 0px 4px 15px rgba(0, 0, 0, 0.15); |
| | | box-shadow: 0px -6px 10px rgba(255, 255, 255, 1), 0px 4px 15px rgba(0, 0, 0, 0.1); |
| | | cursor: pointer; |
| | | |
| | | &:active { |
| | |
| | | color: #ed6464; |
| | | } |
| | | } |
| | | |
| | | .panelTwo{ |
| | | height: 60vh; |
| | | background: #f2f2f2; |
| | | padding: 15px; |
| | | box-sizing: border-box; |
| | | |
| | | /deep/ .u-textarea__field{ |
| | | height: calc(60vh - 110px) !important; |
| | | } |
| | | } |
| | | |
| | | .m-p-15{ |
| | | width: 100%; |
| | | padding: 0 15px; |
| | |
| | | border-radius: 4px; |
| | | color: #2979ff; |
| | | background: #f5f7fa; |
| | | border: 1px solid rgba(41,121,255,.4); |
| | | border: 1px solid rgba(41,121,255,.2); |
| | | box-shadow: 0px -6px 10px rgba(255, 255, 255, 1), 0px 4px 15px rgba(0, 0, 0, 0.1); |
| | | transition: box-shadow .25s ease !important; |
| | | } |
| | |
| | | .content{ |
| | | padding-left: 10rpx; |
| | | |
| | | .pickedText{ |
| | | border: 1.5px solid #2979ff !important; |
| | | } |
| | | .wrongText{ |
| | | border: 1.5px solid #ed6464 !important; |
| | | } |
| | | |
| | | /deep/ .u-textarea__field{ |
| | | min-height: 80px; |
| | | } |
| | | |
| | | .answers{ |
| | | background: #ecf5ff; |
| | | padding: 10px; |
| | | |
| | | &>view{ |
| | | margin-bottom: 5px; |
| | | } |
| | | |
| | | span{ |
| | | width: 100%; |
| | | display: block; |
| | | white-space: pre-wrap; |
| | | font-weight: bolder; |
| | | word-break: break-word; |
| | | } |
| | | .right{ |
| | | color: #3c9cff |
| | |
| | | align-items: center; |
| | | justify-content: space-around; |
| | | z-index: 99; |
| | | bottom: 60px; |
| | | bottom: 20px; |
| | | left: 0; |
| | | } |
| | | |
| | |
| | | box-sizing: border-box; |
| | | border-radius: 8px; |
| | | background: #f5f7fa; |
| | | border: 1px solid #fff; |
| | | border: 1.5px solid #fff; |
| | | box-shadow: 0px -6px 10px rgba(255, 255, 255, 1), 0px 4px 15px rgba(0, 0, 0, 0.1); |
| | | transition: box-shadow .25s ease !important; |
| | | transition: box-shadow .25s ease,box-width .25s ease !important; |
| | | } |
| | | |
| | | .myRadio{ |
| | | /deep/ .picked{ |
| | | border: 2px solid #2979ff; |
| | | border: 1.5px solid #2979ff; |
| | | |
| | | .u-radio__icon-wrap,.u-checkbox__icon-wrap{ |
| | | border-color: #fff !important; |
| | |
| | | color: #2979ff |
| | | } |
| | | } |
| | | /deep/ .wronged{ |
| | | border: 1.5px solid #ed6464; |
| | | |
| | | .u-radio__icon-wrap,.u-checkbox__icon-wrap{ |
| | | border-color: #fff !important; |
| | | span{ |
| | | color: #fff !important; |
| | | } |
| | | } |
| | | span{ |
| | | color: #ed6464 |
| | | } |
| | | } |
| | | } |
| | | |
| | | /deep/ .u-checkbox:active { |