ExerciseAnswer.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { useEffect, useState } from "react";
  2. import { Collapse, message } from "antd";
  3. import { get } from "../../request";
  4. import type { IArticleResponse } from "../../api/Article";
  5. import MdView from "../template/MdView";
  6. const { Panel } = Collapse;
  7. interface IWidget {
  8. courseId?: string;
  9. articleId?: string;
  10. exerciseId?: string;
  11. mode?: string;
  12. active?: boolean;
  13. }
  14. const ExerciseAnswerWidget = ({
  15. courseId,
  16. articleId,
  17. exerciseId,
  18. mode,
  19. active = false,
  20. }: IWidget) => {
  21. const [answer, setAnswer] = useState<string>();
  22. useEffect(() => {
  23. const url = `/v2/article/${articleId}?mode=${mode}&course=${courseId}&exercise=${exerciseId}&view=answer`;
  24. get<IArticleResponse>(url).then((json) => {
  25. console.log("article", json);
  26. if (json.ok) {
  27. setAnswer(json.data.html);
  28. } else {
  29. message.error(json.message);
  30. }
  31. });
  32. }, [courseId, articleId, exerciseId, mode]);
  33. return (
  34. <div>
  35. <Collapse defaultActiveKey={active ? ["answer"] : []}>
  36. <Panel header="答案" key="answer">
  37. <MdView html={answer} />
  38. </Panel>
  39. </Collapse>
  40. </div>
  41. );
  42. };
  43. export default ExerciseAnswerWidget;