useUnit.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import {
  2. onLoad,
  3. onReady,
  4. } from "@dcloudio/uni-app"
  5. import {
  6. reactive,
  7. ref,
  8. computed,
  9. toRefs,
  10. onMounted,
  11. watch
  12. } from "vue";
  13. import {
  14. catchError,
  15. toast
  16. } from "@/utils/common.js"
  17. import * as httpUnit from "@/api/unitTest.js"
  18. function useJifen() {
  19. const data = reactive({
  20. rightAnswer: 0, // 答对
  21. wrongAnswer: 0, // 答错
  22. jifen: 0, // 积分
  23. })
  24. function updateJifen({rightAnswer,wrongAnswer,jifen}) {
  25. data.rightAnswer = rightAnswer;
  26. data.wrongAnswer = wrongAnswer;
  27. data.jifen = jifen;
  28. }
  29. return {
  30. ...toRefs(data),
  31. updateJifen
  32. }
  33. }
  34. export function useExam() {
  35. const {rightAnswer,wrongAnswer,jifen, updateJifen} = useJifen();
  36. const data = reactive({
  37. count: 0, // 已答题数
  38. total: 0, // 总题数
  39. current: 0, // 当前试题序列
  40. list: [], // 试题列表
  41. jieId: null, // 节Id
  42. zhangId: null,
  43. nextZhangId: null,
  44. nianji: null,
  45. xueqi: null,
  46. })
  47. onLoad((options) => {
  48. const {
  49. jieId,zhangId,nextZhangId,nianji,xueqi
  50. } = options;
  51. data.jieId = jieId; // 需要路由参数 节Id
  52. data.zhangId = zhangId;// 需要路由参数 章Id
  53. data.nextZhangId = nextZhangId; // 需要下一张id 来执行返回页面
  54. data.nianji = nianji; // 需要年纪Id 来执行返回页面
  55. data.xueqi = xueqi; // 需要年纪Id 来执行返回页面
  56. // 初始化页面数据
  57. initPage();
  58. })
  59. // 当前试题
  60. const activeQa = computed(() => data.list.length ? data.list[data.current] : null);
  61. // 第一题
  62. const isFirst = computed(() => {
  63. if (!activeQa.value) return false;
  64. return activeQa.value.id === data.list[0].id;
  65. })
  66. // 最后一题
  67. const isLast = computed(() => {
  68. if (!activeQa.value) return false;
  69. const clength = data.list.length;
  70. return activeQa.value.id === data.list[clength - 1].id;
  71. })
  72. watch(() => data.list, (val) => {
  73. const list = data.list.filter(item => item.reply!==null);
  74. data.count = list.length;
  75. },{deep: true})
  76. // 下一题
  77. function nextQuestion() {
  78. data.current = data.current + 1;
  79. }
  80. // 前一题
  81. function prevQuestion() {
  82. data.current = data.current - 1;
  83. }
  84. // 初始化页面数据
  85. async function initPage() {
  86. const [err, cdata] = await catchError(httpUnit.getExamData({
  87. jieId: data.jieId
  88. }));
  89. if (err) {
  90. toast("单元测试数据获取异常");
  91. return;
  92. }
  93. refreshExam(cdata);
  94. }
  95. function formatListToUse(list) {
  96. list.forEach((item, index) => {
  97. item.mta_show = false;
  98. item.reply = null;
  99. })
  100. }
  101. // 数据赋值
  102. function refreshExam(list) {
  103. const cList = list;
  104. formatListToUse(cList)
  105. data.list = cList;
  106. data.total = cList.length;
  107. }
  108. // 交卷
  109. function handleSubmit(dom) {
  110. // const [error, data] =await catchError(httpUnit.getExamSubmit({}));
  111. dom.showPopup({
  112. right:1,
  113. wrong:0,
  114. jifen:20
  115. });
  116. }
  117. return {
  118. ...toRefs(data),
  119. activeQa,
  120. isFirst,
  121. isLast,
  122. rightAnswer,
  123. wrongAnswer,
  124. jifen,
  125. nextQuestion,
  126. prevQuestion,
  127. handleSubmit,
  128. initPage
  129. }
  130. }