problem_result.html 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <!-- +---------------------------------------------------------------------- -->
  2. <!-- | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -->
  3. <!-- +---------------------------------------------------------------------- -->
  4. <!-- | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved. -->
  5. <!-- +---------------------------------------------------------------------- -->
  6. <!-- | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -->
  7. <!-- +---------------------------------------------------------------------- -->
  8. <!-- | Author: CRMEB Team <admin@crmeb.com> -->
  9. <!-- +---------------------------------------------------------------------- -->
  10. {extend name="public/container"}
  11. {block name="title"}练习结果{/block}
  12. {block name="head"}
  13. <style>
  14. body {
  15. padding: .76rem .3rem .46rem;
  16. background-color: #F5F5F5;
  17. }
  18. </style>
  19. {/block}
  20. {block name="content"}
  21. <div v-cloak id="app">
  22. <div class="question-result">
  23. <div class="header">
  24. <div class="avatar"><img src="{$userInfo.avatar}"></div>
  25. <div class="nickname">{$userInfo.nickname}</div>
  26. <vue-circle-progress
  27. ref="circle"
  28. id="circle"
  29. :progress="0"
  30. :size="133"
  31. :reverse="false"
  32. line-cap="round"
  33. :fill="fill"
  34. empty-fill="rgba(213, 224, 236, 0.6)"
  35. :animation-start-value="0.0"
  36. :start-angle="Math.PI / 2"
  37. insert-mode="append"
  38. :thickness="5"
  39. inner-text="正确率"
  40. :show-percent="true"
  41. style="text-align: center;margin-top: .5rem;font-size: 0;"
  42. ><p>正确率</p></vue-circle-progress>
  43. <div class="title">{{ result.title }}</div>
  44. <div class="basic">
  45. <div class="item">
  46. <div>题目数</div>
  47. <div class="value">{{ result.test_paper_question.length }}</div>
  48. </div>
  49. <div class="item">
  50. <div>错题数</div>
  51. <div class="value">{{ result.wrong_question }}</div>
  52. </div>
  53. <div class="item">
  54. <div>未答数</div>
  55. <div class="value">{{ result.not_questions }}</div>
  56. </div>
  57. </div>
  58. </div>
  59. <div class="answer">
  60. <div class="answer-header">
  61. <div>答题情况</div>
  62. <div class="prompt">
  63. <div class="item">正确</div>
  64. <div class="item">错误</div>
  65. <div class="item">未答</div>
  66. </div>
  67. </div>
  68. <div class="answer-body">
  69. <a v-for="(item, index) in result.test_paper_question" :class="{ no: item.is_correct === 1, ok: item.is_correct === 2 }" href="javascript:">{{ index + 1 }}</a>
  70. </div>
  71. <div v-if="!footerHidden" class="answer-footer">
  72. <a :href="'{:url('topic/problem_sheet')}?from=problem_result&test_id=' + test_id + '&record_id=' + result.id">返回答题卡</a>
  73. <!-- <a :href="'{:url('special/question_index')}?id=' + test_id">再考一次</a> -->
  74. </div>
  75. </div>
  76. </div>
  77. <quick-menu></quick-menu>
  78. </div>
  79. <script>
  80. require([
  81. 'vue',
  82. 'helper',
  83. 'store',
  84. 'vue-circle-progress',
  85. 'quick'
  86. ], function (Vue, $h, $http, VueCircle) {
  87. var vm = new Vue({
  88. el: '#app',
  89. components: {
  90. 'vue-circle-progress': VueCircle
  91. },
  92. data: {
  93. test_id: 0,
  94. result: {
  95. title: '--',
  96. score: 0,
  97. grade: '--',
  98. test_paper_question: [],
  99. wrong_question: 0,
  100. duration_time: '00:00:00'
  101. },
  102. fill : { gradient: ["rgba(44, 142, 255, 1)", "rgba(44, 142, 255, 0.05)"] },
  103. footerHidden: false
  104. },
  105. created: function () {
  106. this.test_id = $h.getParmas('test_id');
  107. this.footerHidden = $h.getParmas('from') === 'question_user';
  108. this.getResult();
  109. },
  110. methods: {
  111. getResult: function () {
  112. $h.loadFFF();
  113. $http.baseGet($h.U({
  114. c: 'topic',
  115. a: 'examinationResults',
  116. q: {
  117. test_id: this.test_id,
  118. type: 1
  119. }
  120. }), function (res) {
  121. $h.loadClear();
  122. var result = res.data.data;
  123. var questions = result.test_paper_question;
  124. var duration = result.duration
  125. var hours = Math.floor(duration / 3600000);
  126. var minutes = Math.floor((duration - hours * 3600000) / 60000);
  127. var seconds = Math.floor((duration - hours * 3600000 - minutes * 60000) / 1000);
  128. if (hours < 10) {
  129. hours = '0' + hours;
  130. }
  131. if (minutes < 10) {
  132. minutes = '0' + minutes;
  133. }
  134. if (seconds < 10) {
  135. seconds = '0' + seconds;
  136. }
  137. result.duration_time = hours + ':' + minutes + ':' + seconds;
  138. for (var i = questions.length; i--;) {
  139. if (!Array.isArray(questions[i].userAnswer)) {
  140. Object.assign(questions[i], questions[i].userAnswer);
  141. }
  142. }
  143. vm.$refs.circle.updateProgress(parseInt(result.accuracy));
  144. vm.result = result;
  145. }, function () {
  146. window.location.replace($h.U({
  147. c: 'topic',
  148. a: 'question_user'
  149. }));
  150. });
  151. }
  152. }
  153. });
  154. });
  155. </script>
  156. {/block}