useUnit.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import {
  2. onLoad,
  3. onReady,
  4. } from "@dcloudio/uni-app"
  5. import {
  6. reactive,
  7. ref,
  8. computed,
  9. toRefs,
  10. onMounted,
  11. } from "vue";
  12. import {
  13. catchError,
  14. toast
  15. } from "@/utils/common.js"
  16. import request from "@/utils/request.js"
  17. // 获取单元测试数据
  18. function httpGetExamData() {
  19. return request({
  20. url: "/common/zhangjie/list",
  21. method: "POST",
  22. data: {
  23. nianji: 1,
  24. xueqi: 1
  25. }
  26. })
  27. }
  28. function useJifen() {
  29. const data = reactive({
  30. rightAnswer: 0, // 答对
  31. wrongAnswer: 0, // 答错
  32. jifen: 0, // 积分
  33. })
  34. function updateJifen({rightAnswer,wrongAnswer,jifen}) {
  35. data.rightAnswer = rightAnswer;
  36. data.wrongAnswer = wrongAnswer;
  37. data.jifen = jifen;
  38. }
  39. return {
  40. ...toRefs(data),
  41. updateJifen
  42. }
  43. }
  44. export function useExam(dom) {
  45. const {rightAnswer,wrongAnswer,jifen, updateJifen} = useJifen();
  46. const data = reactive({
  47. count: 0, // 已答题数
  48. total: 0, // 总题数
  49. current: 0, // 当前试题序列
  50. list: [], // 试题列表
  51. jieId: null, // 节Id
  52. })
  53. // 当前试题
  54. const activeQa = computed(() => data.list.length ? data.list[data.current] : null);
  55. // 第一题
  56. const isFirst = computed(() => {
  57. if (!activeQa.value) return false;
  58. return activeQa.value.id === data.list[0].id;
  59. })
  60. // 最后一题
  61. const isLast = computed(() => {
  62. if (!activeQa.value) return false;
  63. const clength = data.list.length;
  64. return activeQa.value.id === data.list[clength - 1].id;
  65. })
  66. onLoad((options) => {
  67. const {
  68. jieId
  69. } = options;
  70. data.jieId = jieId;
  71. // 初始化页面数据
  72. initPage();
  73. })
  74. // 下一题
  75. function nextQuestion() {
  76. data.current = data.current + 1;
  77. }
  78. // 前一题
  79. function prevQuestion() {
  80. data.current = data.current - 1;
  81. }
  82. // 初始化页面数据
  83. async function initPage() {
  84. const [err, data] = await catchError(httpGetExamData());
  85. if (err) {
  86. toast("单元测试数据获取异常");
  87. return;
  88. }
  89. refreshExam(data);
  90. }
  91. // 数据赋值
  92. function refreshExam(list) {
  93. // FIXME 模拟id 待删除
  94. list.forEach((item, index) => item.id = index)
  95. data.list = list;
  96. data.total = list.length;
  97. }
  98. // 交卷
  99. function handleSubmit() {}
  100. return {
  101. ...toRefs(data),
  102. activeQa,
  103. isFirst,
  104. isLast,
  105. isFirst,
  106. isLast,
  107. rightAnswer,
  108. wrongAnswer,
  109. jifen,
  110. nextQuestion,
  111. prevQuestion,
  112. handleSubmit,
  113. initPage
  114. }
  115. }