123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483 |
- <template>
- <view :class="{ yejian: if_theme_dark }">
- <!--#ifdef APP-PLUS-->
- <view class="lz-status_bar">
- <view class="lz-top_view"></view>
- </view>
- <!--#endif-->
- <view class="kaoshi-head">
- <view class="kaoshi-head-top">
- <view class="kaoshi-head-left" @tap="$navigateBack">
- <view class="iconfont icon-zuojiantou"></view>
- </view>
- <view class="kaoshi-head-m">
- {{ pages_params.title }}
- </view>
- <view class="kaoshi-head-right"></view>
- </view>
- </view>
- <view scroll-y style="height: 100%;">
- <view style="height: 10px;"></view>
- <view class="questionBankAnswer" v-if="current_timu && current_timu.id">
- <question-type :current_timu="current_timu" :timu_order="timu_order" :total_num="total_num"
- :over_time="over_time" @timeup="timeup"></question-type>
- </view>
- <view class="questionBankAnswer-content" v-if="current_timu && current_timu.answers">
- <question-title :node="current_timu.question_name"></question-title>
- <block v-for="(item, index) in current_timu.answers" :key="index">
- <question-option :show_beiti="false" :ref="'questionOption_' + index" :item="item" :index="index"
- :current_timu="current_timu" :copy_user_answer="copy_user_answer" :timu_index="timu_order - 1"
- :copy_post_status="copy_post_status" @post_answer_req="post_answer_req"
- @set_copy_user_answer="set_copy_user_answer" @set_sub_button_style="set_sub_button_style"
- question_type="exam"></question-option>
- </block>
- <template v-if="current_timu.type == 4">
- <question-tiankong :show_beiti="false" :current_timu="current_timu"
- :is_tiankong_sub="is_tiankong_sub" @set_current_timu="set_current_timu"
- @post_answer_req="post_answer_req" @set_sub_button_style="set_sub_button_style">
- </question-tiankong>
- </template>
- <template v-else-if="current_timu.type == 5">
- <question-jianda :show_beiti="false" :current_timu="current_timu" :is_jianda_sub="is_jianda_sub"
- @set_current_timu="set_current_timu" @post_answer_req="post_answer_req"
- @set_sub_button_style="set_sub_button_style"></question-jianda>
- </template>
- <view v-if="current_timu.answers && current_timu.type == 2">
- <button :class="is_duoxuan_sub ? 'duoxuan_checked' : 'duoxuan'" type="" @tap="post_answer_req">
- {{ is_duoxuan_sub ? "提交成功" : "确认答案" }}
- </button>
- </view>
- <question-pre-next v-if="timu_list.length > 0" :total_num="total_num" :timu_order="timu_order"
- :timu_list="timu_list" @choice_timu_by_id="choice_timu_by_id" @tap_handler="jiaojuan"
- confirmText="交卷" class="questionBankAnswer-contentbtnbox"></question-pre-next>
- </view>
- <view v-if="current_timu.type == 5" class="jdttishi">温馨提示:简答题不记入错题,默认为正确</view>
- <view style="height: 50px;"></view>
- </view>
- <view class="order-pay">
- <view class="questionBankAnswer-bottom-flex" @tap="jiaojuan1">
- <view class="iconfont icon-bianjisekuai"></view>
- <view>交卷</view>
- </view>
- <question-answer-sheet class="questionBankAnswer-bottom-flex"
- @show_choice_timu_list="show_choice_timu_list = true"></question-answer-sheet>
- <view class="questionBankAnswer-bottom-flex" @tap="show_change_moshi = true">
- <view class="iconfont icon-shezhi"></view>
- <view>设置</view>
- </view>
- </view>
- <question-answer-sheet-1 v-if="show_choice_timu_list" question_type="exam"
- @show_choice_timu_list="show_choice_timu_list = false" :timu_order="timu_order" :timu_list="timu_list"
- :total_num="total_num" @choice_timu_by_id="choice_timu_by_id" @jiaojuan1="jiaojuan1">
- </question-answer-sheet-1>
- <question-set :show_change_moshi="show_change_moshi" :if_theme_dark="if_theme_dark"
- @set_if_theme_dark="set_if_theme_dark" @hide_change_moshi="show_change_moshi = false"></question-set>
- <overtimu v-if="show_over_dati" :timuinfo="over_dati_info" @tap_handler="jiaojuan"></overtimu>
- </view>
- </template>
- <script>
- import overtimu from "@/components/overtimu/index";
- import {
- mapState
- } from "vuex";
- export default {
- data() {
- return {
- exam_id: 0, //考试id
- total_num: 0, //试题总数
- // 上次答到第几题
- timu_order: -1,
- //区分多选题是否点击提交按钮
- is_duoxuan_sub: false,
- is_tiankong_sub: false,
- is_jianda_sub: false,
- // 当前题目
- current_timu: {},
- // 用户输入的答案
- copy_user_answer: {},
- copy_right_answer_code: {},
- copy_post_status: {},
- // 是否显示退出答题弹框
- show_over_dati: false,
- over_dati_info: {},
- // 答题开始时间
- start_time: 0,
- end_time: 0,
- // 页面参数
- pages_params: {},
- // 显示答题卡
- show_choice_timu_list: false,
- // 答题卡
- timu_list: [],
- // 字号大小
- show_change_moshi: false,
- if_theme_dark: false // 黑夜模式
- };
- },
- onShow() {},
- onLoad(opts) {
- this.pages_params = opts;
- this.exam_id = this.pages_params.id
- this.end_time = this.pages_params.end_time
- if (this.userinfo.token) {
- this.init()
- }
- },
- onReady() {},
- computed: {
- ...mapState(["subject", "userinfo"]),
- over_time() {
- if (this.end_time > 0) {
- let end = parseInt(new Date().getTime() / 1000);
- let sec = parseInt(this.end_time - end);
- let hour = parseInt(sec / 3600);
- let miu = parseInt((sec - hour * 3600) / 60);
- let s = sec - hour * 3600 - miu * 60;
- return {
- hour: parseInt(hour),
- minute: parseInt(miu),
- second: parseInt(s)
- };
- }
- return {};
- }
- },
- onBackPress() {
- this.over_dati();
- return true;
- },
- components: {
- overtimu,
- },
- methods: {
- async init() {
- const info = await this.$myUserLogin.getExamVipInfo(this.exam_id);
- if(info.is_vip == 0 || info.owned_vip == 1){
- this.get_timu_list();
- }else{
- //需要vip但还不是vip
- uni.showToast({
- title: '暂无权限',
- icon: 'none'
- })
- setTimeout(() => {
- uni.reLaunch({
- url: '/pages/index/index'
- })
- }, 1500)
- }
- },
- set_sub_button_style(type, value) {
- console.log(type, value)
- this[type] = value
- },
- set_current_timu(data) {
- this.current_timu = JSON.parse(JSON.stringify(data))
- let copy_user_answer_this = this.copy_user_answer;
- if (copy_user_answer_this[this.current_timu.id]) {
- copy_user_answer_this[this.current_timu.id] = this.current_timu.my_answer_arr
- }
- },
- set_copy_user_answer(data) {
- this.copy_user_answer = JSON.parse(JSON.stringify(data))
- this.setAnswerStyle(this.current_timu);
- // this.setMyAnswer();
- },
- //单选多选判断,选项正确错误
- setAnswerStyle(timu) {
- this.$nextTick(() => {
- timu.answers.forEach((item, index) => {
- this.$refs['questionOption_' + index][0].setAnswerStyle(this.copy_user_answer);
- })
- })
- },
- timeup() {
- this.jiaojuan();
- },
- // 获取答题卡
- //2020年2月1日——创建一个答题卡数组 is_dati 1已答 0未答
- async get_timu_list() {
- let res = await this.$myHttp.post({
- url: this.$myHttp.urlMap.examCard,
- data: {
- exam_id: this.exam_id // 考试id
- },
- needLogin: true
- });
- if (res.code == 1) {
- this.timu_order = res.data.position
- this.timu_list = res.data.card;
- this.total_num = this.timu_list.length;
- this.isChangeTimu = false
- if (res.data.curr_question != []) {
- this.current_timu = res.data.curr_question;
- this.save_user_answer(this.current_timu);
- }else{
- this.current_timu = null
- }
-
- this.is_duoxuan_sub = false
- this.is_tiankong_sub = false
- this.is_jianda_sub = false
- // this.get_timu_order();
- }
- },
- // 获取用户答到第几题
- // async get_timu_order() {
- // let res = await this.$myHttp.post({
- // url: this.$myHttp.urlMap.examPosition,
- // data: {
- // exam_id: this.exam_id
- // },
- // needLogin: true
- // });
- // if (res.code == 1) {
- // this.timu_order = res.data
- // this.get_timu_info();
- // }
- // },
- async get_timu_info() {
- let res = await this.$myHttp.post({
- url: this.$myHttp.urlMap.exam_timu_details,
- data: {
- exam_id: this.exam_id,
- question_id: this.timu_list[this.timu_order - 1].id
- },
- needLogin: true
- });
- if (res.code == 1) {
- if (res.data != []) {
- this.isChangeTimu = false
- this.current_timu = res.data;
- this.save_user_answer(this.current_timu);
- this.is_duoxuan_sub = false
- this.is_tiankong_sub = false
- this.is_jianda_sub = false
- } else {
- this.current_timu = null;
- }
- } else {
- uni.navigateBack({});
- }
- },
- // 根据答题卡获取题目
- choice_timu_by_id(index) {
- this.timu_order = index + 1
- this.isChangeTimu = true
- // this.current_timu = {}
- uni.pageScrollTo({
- scrollTop: 0,
- duration: 200
- });
- this.get_timu_info()
- },
- // 本地存储用户答案 考试页面
- save_user_answer(timu) {
- if (timu.type <= 3) {
- if (timu && timu.answers) {
- if (!(this.copy_user_answer[timu.id])) {
- this.copy_user_answer = Object.assign({}, this.copy_user_answer, {
- [timu.id]: []
- });
- this.copy_post_status = Object.assign({}, this.copy_post_status, {
- [timu.id]: false
- });
- for (let i = 0, leng = timu.answers.length; i < leng; i++) {
- this.copy_user_answer[timu.id].push({
- answer_code: timu.answers[i].answer_code,
- active: false
- })
- }
- if (timu.my_answer !== '' && timu.my_answer !== null) {
- this.setUserAnswer(timu)
- } else {
- this.setAnswerStyle(timu);
- }
- } else {
- this.setAnswerStyle(timu);
- }
- }
- } else {
- let right_answer_arr = timu.right_answer.split('|');
- this.$set(timu, 'right_answer_arr', right_answer_arr)
- this.$set(timu, 'show_right_answer', false)
- if (!(this.copy_user_answer[timu.id])) {
- //本地没有记录呢,如果my_answer有值,写进去
- this.copy_user_answer = Object.assign({}, this.copy_user_answer, {
- [timu.id]: []
- });
- this.copy_post_status = Object.assign({}, this.copy_post_status, {
- [timu.id]: false
- });
- if (timu.my_answer == '' || timu.my_answer == null) {
- //之前没有答过题
- let arr = [];
- arr.length = right_answer_arr.length;
- this.$set(timu, 'my_answer_arr', arr)
- this.$set(timu, 'my_answer', '')
- this.setAnswerStyle(timu);
- } else {
- //之前答过题了
- this.setUserAnswer(timu)
- }
- } else {
- //本地有答题记录 答过题了
- this.setUserAnswer(timu)
- }
- }
- },
- //获取题目信息后,如果答过题了,设置到本地
- setUserAnswer(timu) {
- this.copy_post_status = Object.assign({}, this.copy_post_status, {
- [timu.id]: true
- });
- let id = this.current_timu.id,
- answer = this.current_timu.my_answer;
- // 如果是判断和单选。执行以下处理
- if (timu.type == 1 || timu.type == 3) {
- for (let i = 0, leng = this.copy_user_answer[id].length; i < leng; i++) {
- if (this.copy_user_answer[id][i].answer_code.toString().toLowerCase().replace(/\s/g, "") ==
- answer.toString().toLowerCase().replace(/\s/g, "")) {
- this.copy_user_answer[id][i].active = true;
- } else {
- this.copy_user_answer[id][i].active = false;
- }
- }
- } else if (timu.type == 2) {
- // 如果是多选。执行以下处理
- for (let i = 0, leng = answer.length; i < leng; i++) {
- for (let j = 0, len = this.copy_user_answer[id].length; j < len; j++) {
- if (this.copy_user_answer[id][j].answer_code.toString().toLowerCase().replace(/\s/g, "") ==
- answer[i].toString().toLowerCase().replace(/\s/g, "")) {
- this.copy_user_answer[id][j].active = true;
- }
- }
- }
- } else {
- // 如果是填空,简答
- this.$set(timu, 'my_answer_arr', timu.my_answer.split('|'))
- this.$set(timu, 'my_answer', timu.my_answer)
- this.$set(timu, 'show_right_answer', true)
- this.copy_user_answer = Object.assign({}, this.copy_user_answer, {
- [timu.id]: []
- });
- this.copy_user_answer[timu.id].push(...timu.my_answer_arr)
- }
- this.setAnswerStyle(timu);
- },
- // 提交答案
- async post_answer_req() {
- this.is_duoxuan_sub = true;
- this.is_tiankong_sub = true
- this.is_jianda_sub = true
- let timu_index = this.timu_order - 1;
- let answer = "";
- if (this.current_timu.type <= 3) {
- let answers = this.copy_user_answer[this.current_timu.id];
- for (let i = 0, leng = answers.length; i < leng; i++) {
- if (answers[i].active) {
- answer += answers[i].answer_code;
- }
- }
- this.copy_post_status = Object.assign({}, this.copy_post_status, {
- [this.current_timu.id]: true
- });
- }
- let res = await this.$myHttp.post({
- url: this.$myHttp.urlMap.exam_answer,
- data: {
- question_id: this.current_timu.id,
- exam_id: this.exam_id,
- answer: this.current_timu.type <= 3 ? answer : this.current_timu.my_answer
- },
- needLogin: true
- });
- if (res.code == 1 && res.msg) {
- this.timu_list[timu_index].state = 1;
- }
- },
- jiaojuan1() {
- uni.showModal({
- title: '提示',
- content: '是否立即交卷',
- showCancel: true,
- cancelText: '继续答题',
- confirmText: '立即交卷',
- success: res => {
- if (res.confirm) {
- this.jiaojuan();
- }
- },
- fail: () => {},
- complete: () => {}
- });
- },
- async jiaojuan() {
- if (this.exam_id) {
- let res = await this.$myHttp.post({
- url: this.$myHttp.urlMap.exam_end,
- data: {
- exam_id: this.exam_id
- },
- needLogin: true
- });
- if (res.code == 1) {
- this.$myCatch.setItem("jiaojuan_info", res.msg);
- this.tap_handler();
- } else {
- uni.navigateBack({
- delta: 1
- });
- }
- } else {
- uni.navigateBack({
- delta: 1
- });
- }
- },
- // 中途退出
- over_dati() {
- let that = this;
- that.$myUtils.$prompt.showModal({
- title: "提示",
- content: "是否交卷",
- confirmText: "交卷",
- success: function(res) {
- if (res.confirm) {
- that.jiaojuan();
- } else if (res.cancel) {
- console.log("用户点击取消");
- }
- }
- });
- },
- // 设置是否黑夜模式
- set_if_theme_dark(data) {
- this.if_theme_dark = data
- },
- tap_handler(type) {
- if (type == 0) {
- this.show_over_dati = false;
- } else {
- this.$redirectTo("/pages/examination/examOver/index");
- }
- },
- }
- };
- </script>
- <style>
- @import "~@/static/css/tiku.css";
- .questionBankAnswer-content-menu .active {
- background: #3c7bfc !important;
- }
- </style>
|