useUnit.js 3.0 KB

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