index.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import React, { useCallback, useEffect, useState } from "react";
  2. import styles from "./index.module.scss";
  3. import { A2QuestionResType, A2QuestionType } from "@/types";
  4. import { CheckOutlined, CloseOutlined } from "@ant-design/icons";
  5. import classNames from "classnames";
  6. import { A2_APIgoodsSaveAnswer } from "@/store/action/A2Main";
  7. const objC = {
  8. 0: "A",
  9. 1: "B",
  10. 2: "C",
  11. 3: "D",
  12. 4: "E",
  13. };
  14. type Props = {
  15. list: A2QuestionType[];
  16. };
  17. function Left3({ list }: Props) {
  18. const [listRes, setListRes] = useState<A2QuestionResType[]>([]);
  19. useEffect(() => {
  20. const arr = [] as A2QuestionResType[];
  21. list.forEach((v) => {
  22. const temp = JSON.parse(v.answer);
  23. arr.push({
  24. id: v.id,
  25. txt: v.description,
  26. goodsId: v.goodsId,
  27. title: v.question,
  28. ok: temp.correct,
  29. answer: temp.answer,
  30. done: false,
  31. mySelect: "",
  32. });
  33. });
  34. setListRes(arr);
  35. }, [list]);
  36. // 选择答案
  37. const selecttFu = useCallback(
  38. async (item: A2QuestionResType, val: string) => {
  39. if (!item.done) {
  40. const arr = listRes.map((v) => {
  41. return {
  42. ...v,
  43. done: v.id === item.id ? true : v.done,
  44. mySelect: v.id === item.id ? val : v.mySelect,
  45. };
  46. });
  47. setListRes(arr);
  48. // 发送请求
  49. await A2_APIgoodsSaveAnswer(item.id, val === item.ok ? 1 : 0);
  50. }
  51. },
  52. [listRes]
  53. );
  54. return (
  55. <div className={styles.Left3}>
  56. <div className="left3Title">单选题</div>
  57. <div className="left3Main myscroll">
  58. {listRes.map((v1, i1) => (
  59. <div className="left3MainRow" key={v1.id}>
  60. <div className="left3MainRowT">
  61. {i1 + 1}.{v1.title}
  62. </div>
  63. {v1.answer.map((v2, i2) => (
  64. <div
  65. key={v2.val}
  66. className={classNames(
  67. "left3MainRowC",
  68. v1.done ? "left3MainRowCN" : "",
  69. v1.ok === v2.val && v1.done ? "left3MainRowCD" : "",
  70. v1.mySelect === v2.val && v1.done ? "left3MainRowCX" : ""
  71. )}
  72. onClick={() => selecttFu(v1, v2.val)}
  73. >
  74. {Reflect.get(objC, i2)}.{v2.name}
  75. </div>
  76. ))}
  77. {/* 回答情况 */}
  78. <div className="left3Sta" hidden={!v1.done}>
  79. {v1.ok === v1.mySelect ? (
  80. <div className="left3Sta1">
  81. 恭喜你,回答正确&emsp;
  82. <CheckOutlined />
  83. </div>
  84. ) : (
  85. <div className="left3Sta2">
  86. 很遗憾,回答错误&emsp;
  87. <CloseOutlined />
  88. </div>
  89. )}
  90. </div>
  91. {/* 说明 */}
  92. <div className="left3Txt" hidden={!v1.done}>
  93. {/* 正确答案:{v1.ok}
  94. <br /> */}
  95. 题目解析:{v1.txt}
  96. </div>
  97. </div>
  98. ))}
  99. </div>
  100. </div>
  101. );
  102. }
  103. const MemoLeft3 = React.memo(Left3);
  104. export default MemoLeft3;