index.tsx 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { defineComponent, onMounted, reactive, watch } from "vue";
  2. import { useRoute } from "vue-router";
  3. // import { verifyMembershipServices } from "../vip-verify";
  4. import { api_lessonTrainingSubmitTraining } from "../../api";
  5. import state, { IDifficulty, handleSetSpeed, hanldeDirectSelection, setSection } from "/src/state";
  6. import { getQuery } from "/src/utils/queryString";
  7. import { evaluatingData } from "/src/view/evaluating";
  8. export default defineComponent({
  9. name: "EvaluatingWork",
  10. props: {
  11. workeData: {
  12. type: Object,
  13. default: () => ({}),
  14. },
  15. },
  16. setup(props, { expose }) {
  17. const query = getQuery();
  18. const evaluatingWorkData = reactive({
  19. difficulty: "" as IDifficulty,
  20. evaluatingRecord: props.workeData?.id,
  21. start: "" as any,
  22. end: "" as any,
  23. evaluateSpeed: 0,
  24. score: 0, // 评测作业及格分数
  25. });
  26. /** 隐藏评测功能 */
  27. const handleHide = () => {
  28. const ids = ["studnetT-0"];
  29. for (let i = 0; i < ids.length; i++) {
  30. const speedBtn = document.getElementById(ids[i]);
  31. if (speedBtn) {
  32. speedBtn.style.pointerEvents = "none";
  33. speedBtn.style.opacity = ".5";
  34. }
  35. }
  36. };
  37. /** 获取作业详情 */
  38. const getWorkData = async () => {
  39. let trainingContent: any = {};
  40. try {
  41. trainingContent = JSON.parse(props.workeData.trainingContent);
  42. } catch (error) {
  43. console.log("🚀 ~ error:", error);
  44. }
  45. if (["BEGINNER", "ADVANCED", "PERFORMER"].includes(trainingContent.evaluateDifficult)) {
  46. evaluatingWorkData.difficulty = trainingContent.evaluateDifficult;
  47. state.setting.evaluationDifficulty = trainingContent.evaluateDifficult;
  48. evaluatingWorkData.evaluateSpeed = trainingContent.evaluateSpeed;
  49. evaluatingWorkData.start = Number(trainingContent.practiceChapterBegin);
  50. evaluatingWorkData.end = Number(trainingContent.practiceChapterEnd);
  51. evaluatingWorkData.score = Number(trainingContent.trainingTimes);
  52. state.userChooseEndIndex = evaluatingWorkData.end
  53. state.isFullEvaluatWork = (evaluatingWorkData.end - evaluatingWorkData.start) + 1 === state.totalMeasureNumber;
  54. // 设置小节
  55. setSection(evaluatingWorkData.start, evaluatingWorkData.end, evaluatingWorkData.evaluateSpeed);
  56. }
  57. };
  58. /** 添加记录 */
  59. const addEvaluatingWorkRecored = async (data: any) => {
  60. try {
  61. const res = await api_lessonTrainingSubmitTraining({
  62. id: evaluatingWorkData.evaluatingRecord,
  63. trainingTimes: data?.score || 0,
  64. recordId: evaluatingData.resultData.recordId
  65. });
  66. } catch (error) {
  67. console.log(error);
  68. }
  69. };
  70. watch(
  71. () => evaluatingData.resultData.recordId,
  72. () => {
  73. // 评测作业,完整评测才调用保存作业接口
  74. if (evaluatingData.resulstMode && evaluatingData.resultData.recordId && evaluatingData.isComplete) {
  75. addEvaluatingWorkRecored(evaluatingData.resultData);
  76. // 完整评测,判断当前的评测分数是否已达标,没有达标,点击返回按钮需要给出弹窗提示
  77. if (!state.isWorkDone) {
  78. state.isWorkDone = Number(evaluatingData.resultData?.score) >= evaluatingWorkData.score;
  79. }
  80. }
  81. }
  82. );
  83. onMounted(() => {
  84. handleHide();
  85. getWorkData();
  86. // verifyMembershipServices();
  87. });
  88. expose({
  89. getWorkData
  90. })
  91. return () => <div></div>;
  92. },
  93. });