useUnit.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. zhangType: '' // 当前章类型 'last' 代表最后一章,最后一章无继续
  24. })
  25. function updateJifen({rightAnswer,wrongAnswer,jifen}) {
  26. data.rightAnswer = rightAnswer;
  27. data.wrongAnswer = wrongAnswer;
  28. data.jifen = jifen;
  29. }
  30. return {
  31. ...toRefs(data),
  32. updateJifen
  33. }
  34. }
  35. export function useExam() {
  36. const { showTishi, handleCloseTishi, handleShowTishi} = useTishiLeftRight()
  37. const {rightAnswer,wrongAnswer,jifen, updateJifen} = useJifen();
  38. const data = reactive({
  39. count: 0, // 已答题数
  40. total: 0, // 总题数
  41. current: 0, // 当前试题序列
  42. list: [], // 试题列表
  43. jieId: null, // 节Id
  44. zhangId: null,
  45. nianji: null,
  46. xueke: null,
  47. })
  48. onLoad((options) => {
  49. const {
  50. jieId,zhangId,nianji,xueke
  51. } = options;
  52. data.jieId = jieId; // 需要路由参数 节Id
  53. data.zhangId = zhangId;// 需要路由参数 章Id
  54. data.nianji = nianji; // 需要年纪Id 来执行返回页面
  55. data.xueke = xueke; // 需要年纪Id 来执行返回页面
  56. // 初始化页面数据
  57. initPage();
  58. })
  59. watch(() => data.list, (val) => {
  60. const list = data.list.filter(item => item.reply!==null);
  61. data.count = list.length;
  62. },{deep: true})
  63. // 初始化页面数据
  64. async function initPage() {
  65. const [err, cdata] = await catchError(httpUnit.getExamData({
  66. jieId: data.jieId
  67. }));
  68. if (err) {
  69. toast("单元测试数据获取异常");
  70. return;
  71. }
  72. refreshExam(cdata);
  73. }
  74. function formatListToUse(list) {
  75. list.forEach((item, index) => {
  76. item.mta_show = false;
  77. item.reply = null;
  78. })
  79. }
  80. // 数据赋值
  81. function refreshExam(list) {
  82. const cList = list;
  83. formatListToUse(cList)
  84. data.list = cList;
  85. data.total = cList.length;
  86. handleShowTishi();
  87. }
  88. // 交卷
  89. async function handleSubmit(dom) {
  90. const result = [];
  91. data.list.forEach(item => {
  92. result.push({reply: item.reply,stId: item.stId})
  93. })
  94. const [error, cdata] =await catchError(httpUnit.getExamSubmit(result));
  95. if (error) {
  96. toast("单元测试数据提交异常");
  97. return ;
  98. }
  99. dom.showPopup({
  100. right:cdata.dui,
  101. wrong:cdata.cuo,
  102. jifen:cdata.jifen
  103. });
  104. }
  105. return {
  106. ...toRefs(data),
  107. rightAnswer,
  108. wrongAnswer,
  109. jifen,
  110. showTishi,
  111. handleSubmit,
  112. initPage,
  113. handleCloseTishi,
  114. handleShowTishi
  115. }
  116. }
  117. // 提示信息显示隐藏
  118. function useTishiLeftRight() {
  119. const showTishi = ref(false);
  120. // 大鹅关闭追加缓存 --- 单独针对当前手机的缓存提示
  121. function handleCloseTishi() {
  122. uni.setStorageSync('isShowTishi','has');
  123. showTishi.value = false;
  124. }
  125. // 大鹅显示追加缓存 --- 单独针对当前手机的缓存提示
  126. function handleShowTishi() {
  127. const isNotShow = Boolean(uni.getStorageSync('isShowTishi'));
  128. showTishi.value = !isNotShow;
  129. }
  130. return {
  131. showTishi,
  132. handleCloseTishi,
  133. handleShowTishi
  134. }
  135. }